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 }