1
0
go_cryptparse/funcs_reflectflat.go
2025-01-25 16:11:19 -05:00

66 lines
1.2 KiB
Go

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
}