in wfn/uri.go [64:114]
func UnbindURI(s string) (*Attributes, error) {
if !strings.HasPrefix(s, uriPrefix) {
return nil, fmt.Errorf("unbind uri: bad prefix in URI %q", s)
}
s = strings.ToLower(s[len(uriPrefix):]) // reject schema prefix + normalize
attr := Attributes{}
var err error
for i, partN := 0, 0; i < len(s); i, partN = i+1, partN+1 {
switch partN {
case 0:
attr.Part, i, err = unbindValueURIAtTill(s, i, ':')
case 1:
attr.Vendor, i, err = unbindValueURIAtTill(s, i, ':')
case 2:
attr.Product, i, err = unbindValueURIAtTill(s, i, ':')
case 3:
attr.Version, i, err = unbindValueURIAtTill(s, i, ':')
case 4:
attr.Update, i, err = unbindValueURIAtTill(s, i, ':')
case 5:
if s[i] != '~' {
attr.Edition, i, err = unbindValueURIAtTill(s, i, ':')
break
}
i++
edition23:
for subpartN := 0; i < len(s); i, subpartN = i+1, subpartN+1 {
switch subpartN {
case 0:
attr.Edition, i, err = unbindValueURIAtTill(s, i, '~')
case 1:
attr.SWEdition, i, err = unbindValueURIAtTill(s, i, '~')
case 2:
attr.TargetSW, i, err = unbindValueURIAtTill(s, i, '~')
case 3:
attr.TargetHW, i, err = unbindValueURIAtTill(s, i, '~')
case 4:
attr.Other, i, err = unbindValueURIAtTill(s, i, ':')
default:
break edition23
}
}
case 6:
attr.Language, i, err = unbindValueURIAtTill(s, i, ':')
}
if err != nil {
return nil, fmt.Errorf("unbind uri: %v", err)
}
}
return &attr, nil
}