package client import ( "fmt" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) type ImageSaveOption interface { Apply(*imageSaveOpts) error } type imageSaveOptionFunc func(opt *imageSaveOpts) error func (f imageSaveOptionFunc) Apply(o *imageSaveOpts) error { return f(o) } // ImageSaveWithPlatforms sets the platforms to be saved from the image. It // produces an error if platforms are already set. This option only has an // effect if the input image is a multi-platform image. func ImageSaveWithPlatforms(platforms ...ocispec.Platform) ImageSaveOption { // TODO(thaJeztah): verify the GoDoc; do we produce an error for a single-platform image without the given platform? return imageSaveOptionFunc(func(opt *imageSaveOpts) error { if opt.apiOptions.Platforms != nil { return fmt.Errorf("platforms already set to %v", opt.apiOptions.Platforms) } opt.apiOptions.Platforms = platforms return nil }) } type imageSaveOpts struct { apiOptions imageSaveOptions } type imageSaveOptions struct { // Platforms selects the platforms to save if the image is a // multi-platform image and has multiple variants. Platforms []ocispec.Platform }