Implement reflection and list facets

This commit is contained in:
2024-11-26 10:54:55 -05:00
parent cba9c76a83
commit b97b24d394
9 changed files with 195 additions and 82 deletions

View File

@ -51,7 +51,14 @@ type Facet struct {
func NewFacets(facets ...*Facet) *eiaapi.Facets {
newFacets := make(map[string]interface{}, len(facets))
for _, f := range facets {
newFacets[fmt.Sprintf("facets[%s][]", f.Name)] = f.Data
for i := 0; ; i++ {
if _, set := newFacets[fmt.Sprintf("facets[%s][%d]", f.Name, i)]; set {
continue
}
newFacets[fmt.Sprintf("facets[%s][%d]", f.Name, i)] = f.Data
break
}
}
return &newFacets
}

25
pkg/eia/eia_reflection.go Normal file
View File

@ -0,0 +1,25 @@
package eia
import (
"reflect"
"slices"
"strings"
eiaapi "gitea.libretechconsulting.com/50W/eia-api-go/api"
)
func GetRoutes() []string {
eiaClientInterface := new(eiaapi.ClientInterface)
t := reflect.TypeOf(eiaClientInterface).Elem()
routes := make([]string, 0, t.NumMethod())
for i := 0; i < t.NumMethod(); i++ {
method := t.Method(i)
if strings.HasSuffix(method.Name, "Facet") {
routes = append(routes, method.Name)
}
}
return slices.Clip(routes)
}