package cpe //go:generate stringer -linecomment -type=AvStringType import ( "fmt" ) // type of avstring. type AvStringType byte const ( AnyString AvStringType = iota // any NaString // na ValString // val ) // String value (NISTIR 7695, CPE 2.3 spec, Figure 6-3) type AvString struct { Type AvStringType // value type Val string // value } // token type to avstring type map var avTypes = map[tokenType]AvStringType { anyToken: AnyString, naToken: NaString, valToken: ValString, } // create new AvString from token. func newAvString(t token) (AvString, error) { if at, ok := avTypes[t.Type]; ok { return AvString { at, t.Val }, nil } else { err := fmt.Errorf("invalid token type: 0x%02x", byte(t.Type)) return AvString { 0, "" }, err } } // Serialize as string. func (s AvString) String() string { switch s.Type { case AnyString: return "*" case NaString: return "-" case ValString: return s.Val default: // not sure what to return here return "" } }