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  }