Skip to content
Snippets Groups Projects
large_community.go 867 B
Newer Older
  • Learn to ignore specific revisions
  • package packet
    
    import (
    	"fmt"
    	"strconv"
    	"strings"
    )
    
    type LargeCommunity struct {
    	GlobalAdministrator uint32
    	DataPart1           uint32
    	DataPart2           uint32
    }
    
    func (c LargeCommunity) String() string {
    	return fmt.Sprintf("(%d,%d,%d)", c.GlobalAdministrator, c.DataPart1, c.DataPart2)
    }
    
    func ParseCommunityString(s string) (com LargeCommunity, err error) {
    	s = strings.Trim(s, "()")
    	t := strings.Split(s, ",")
    
    	if len(t) != 3 {
    		return com, fmt.Errorf("can not parse large community %s", s)
    	}
    
    	v, err := strconv.ParseUint(t[0], 10, 32)
    	if err != nil {
    		return com, err
    	}
    	com.GlobalAdministrator = uint32(v)
    
    	v, err = strconv.ParseUint(t[1], 10, 32)
    	if err != nil {
    		return com, err
    	}
    	com.DataPart1 = uint32(v)
    
    	v, err = strconv.ParseUint(t[2], 10, 32)
    	if err != nil {
    		return com, err
    	}
    	com.DataPart2 = uint32(v)
    
    	return com, err
    }