43 lines
		
	
	
		
			803 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			803 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package mailgun
 | |
| 
 | |
| import "fmt"
 | |
| import "strings"
 | |
| 
 | |
| type Recipient struct {
 | |
| 	Name  string `json:"-"`
 | |
| 	Email string `json:"-"`
 | |
| }
 | |
| 
 | |
| func (r Recipient) String() string {
 | |
| 	if r.Name != "" {
 | |
| 		return fmt.Sprintf("%s <%s>", r.Name, r.Email)
 | |
| 	}
 | |
| 	return r.Email
 | |
| }
 | |
| 
 | |
| // MarshalText satisfies TextMarshaler
 | |
| func (r Recipient) MarshalText() ([]byte, error) {
 | |
| 	return []byte(r.String()), nil
 | |
| }
 | |
| 
 | |
| // UnmarshalText satisfies TextUnmarshaler
 | |
| func (r *Recipient) UnmarshalText(text []byte) error {
 | |
| 	s := string(text)
 | |
| 	if s[len(s)-1:] != ">" {
 | |
| 		*r = Recipient{Email: s}
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	i := strings.Index(s, "<")
 | |
| 	// at least 1 char followed by a space
 | |
| 	if i < 2 {
 | |
| 		return fmt.Errorf("malformed recipient string '%s'", s)
 | |
| 	}
 | |
| 	*r = Recipient{
 | |
| 		Name:  strings.TrimSpace(s[:i]),
 | |
| 		Email: s[i+1 : len(s)-1],
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 |