func UnbindURI()

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
}