reflection work so far...
This commit is contained in:
65
funcs_reflectflat.go
Normal file
65
funcs_reflectflat.go
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user