github.com/panekj/cli@v0.0.0-20230304125325-467dd2f3797e/cli/command/cli_options.go (about)

     1  package command
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"strconv"
     7  
     8  	"github.com/docker/cli/cli/streams"
     9  	"github.com/docker/docker/client"
    10  	"github.com/moby/term"
    11  )
    12  
    13  // DockerCliOption applies a modification on a DockerCli.
    14  type DockerCliOption func(cli *DockerCli) error
    15  
    16  // WithStandardStreams sets a cli in, out and err streams with the standard streams.
    17  func WithStandardStreams() DockerCliOption {
    18  	return func(cli *DockerCli) error {
    19  		// Set terminal emulation based on platform as required.
    20  		stdin, stdout, stderr := term.StdStreams()
    21  		cli.in = streams.NewIn(stdin)
    22  		cli.out = streams.NewOut(stdout)
    23  		cli.err = stderr
    24  		return nil
    25  	}
    26  }
    27  
    28  // WithCombinedStreams uses the same stream for the output and error streams.
    29  func WithCombinedStreams(combined io.Writer) DockerCliOption {
    30  	return func(cli *DockerCli) error {
    31  		cli.out = streams.NewOut(combined)
    32  		cli.err = combined
    33  		return nil
    34  	}
    35  }
    36  
    37  // WithInputStream sets a cli input stream.
    38  func WithInputStream(in io.ReadCloser) DockerCliOption {
    39  	return func(cli *DockerCli) error {
    40  		cli.in = streams.NewIn(in)
    41  		return nil
    42  	}
    43  }
    44  
    45  // WithOutputStream sets a cli output stream.
    46  func WithOutputStream(out io.Writer) DockerCliOption {
    47  	return func(cli *DockerCli) error {
    48  		cli.out = streams.NewOut(out)
    49  		return nil
    50  	}
    51  }
    52  
    53  // WithErrorStream sets a cli error stream.
    54  func WithErrorStream(err io.Writer) DockerCliOption {
    55  	return func(cli *DockerCli) error {
    56  		cli.err = err
    57  		return nil
    58  	}
    59  }
    60  
    61  // WithContentTrustFromEnv enables content trust on a cli from environment variable DOCKER_CONTENT_TRUST value.
    62  func WithContentTrustFromEnv() DockerCliOption {
    63  	return func(cli *DockerCli) error {
    64  		cli.contentTrust = false
    65  		if e := os.Getenv("DOCKER_CONTENT_TRUST"); e != "" {
    66  			if t, err := strconv.ParseBool(e); t || err != nil {
    67  				// treat any other value as true
    68  				cli.contentTrust = true
    69  			}
    70  		}
    71  		return nil
    72  	}
    73  }
    74  
    75  // WithContentTrust enables content trust on a cli.
    76  func WithContentTrust(enabled bool) DockerCliOption {
    77  	return func(cli *DockerCli) error {
    78  		cli.contentTrust = enabled
    79  		return nil
    80  	}
    81  }
    82  
    83  // WithDefaultContextStoreConfig configures the cli to use the default context store configuration.
    84  func WithDefaultContextStoreConfig() DockerCliOption {
    85  	return func(cli *DockerCli) error {
    86  		cli.contextStoreConfig = DefaultContextStoreConfig()
    87  		return nil
    88  	}
    89  }
    90  
    91  // WithAPIClient configures the cli to use the given API client.
    92  func WithAPIClient(c client.APIClient) DockerCliOption {
    93  	return func(cli *DockerCli) error {
    94  		cli.client = c
    95  		return nil
    96  	}
    97  }