github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/docker/image.go (about) 1 package docker 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type Image struct { 9 Name string 10 Version string 11 } 12 13 func (image Image) IsZero() bool { 14 return image.Name == "" 15 } 16 17 func ParseImageString(s string) (*Image, error) { 18 i := Image{} 19 nameAndVersion := strings.Split(s, ":") 20 21 if len(nameAndVersion) == 2 { 22 i.Version = nameAndVersion[1] 23 } 24 25 i.Name = nameAndVersion[0] 26 return &i, nil 27 } 28 29 func (i Image) String() string { 30 if i.Version != "" { 31 return fmt.Sprintf(`%s:%s`, i.Name, i.Version) 32 } 33 return i.Name 34 } 35 36 func (i Image) MarshalYAML() (interface{}, error) { 37 return i.String(), nil 38 } 39 40 func (i *Image) UnmarshalYAML(unmarshal func(interface{}) error) error { 41 var v string 42 err := unmarshal(&v) 43 if err == nil { 44 image, err := ParseImageString(v) 45 if err != nil { 46 return err 47 } 48 *i = *image 49 } 50 return nil 51 }