github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/docker/link.go (about) 1 package docker 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type Link struct { 9 Service string 10 Host string 11 } 12 13 func ParseLinkString(s string) (*Link, error) { 14 l := Link{} 15 serviceHost := strings.Split(s, ":") 16 17 if len(serviceHost) != 2 { 18 return nil, fmt.Errorf("service:host format error") 19 } 20 21 l.Service = serviceHost[0] 22 l.Host = serviceHost[1] 23 24 return &l, nil 25 } 26 27 func (link Link) String() string { 28 return fmt.Sprintf("%s:%s", link.Service, link.Host) 29 } 30 31 func (link Link) MarshalYAML() (interface{}, error) { 32 return link.String(), nil 33 } 34 35 func (link *Link) UnmarshalYAML(unmarshal func(interface{}) error) error { 36 var v string 37 err := unmarshal(&v) 38 if err == nil { 39 l, err := ParseLinkString(v) 40 if err != nil { 41 return err 42 } 43 *link = *l 44 } 45 return nil 46 }