package cryptparse import ( `fmt` `net/url` `reflect` `r00t2.io/goutils/structutils` ) /* reflectFlatUri is the reflection used for a TlsFlat when converting to a TlsUri. */ func reflectFlatUri(s *TlsFlat, tagName string) (tu *TlsUri, err error) { var uri *url.URL var field reflect.StructField var fieldVal reflect.Value var params url.Values = make(url.Values) var sVal reflect.Value = reflect.ValueOf(s) var sType reflect.Type = sVal.Type() var kind reflect.Kind = sType.Kind() var parsedTagOpts map[string]bool if s == nil { return } if uri, err = url.Parse(fmt.Sprintf("tls://%s", s.Host)); err != nil { return } if s.Port != nil { uri.Host = fmt.Sprintf("%s:%d", uri.Host, *s.Port) } for i := 0; i < sType.NumField(); i++ { field = sType.Field(i) fieldVal = sVal.Field(i) if !fieldVal.CanSet() { continue } parsedTagOpts = structutils.TagToBoolMap(field, "tlsUri") if parsedTagOpts["-"] { continue } } // TODO if len(params) != 0 { if uri.Path == "" { uri.Path = "/" } if uri, err = url.Parse(fmt.Sprintf("%s%s", uri.String(), params.Encode())); err != nil { return } } tu = &TlsUri{ URL: uri, } return }