@@ -31,7 +31,55 @@ func init() {
3131 }
3232}
3333
34- func RegisterStruct (val interface {}) error {
34+ func RegisterTopLevelStruct (name string , val interface {}) error {
35+ v := reflect .ValueOf (val )
36+ if v .Kind () == reflect .Ptr {
37+ v = v .Elem ()
38+ }
39+
40+ m := makeEntryMapMap (v )
41+ name = strings .ToLower (name )
42+ err := RegisterExpander (name , makeExpanderFuncFromMap (m ))
43+ if err != nil {
44+ return locale .WrapError (
45+ err , "project_expand_register_expander_map" ,
46+ "Cannot register expander (map)" ,
47+ )
48+ }
49+
50+ return nil
51+ }
52+
53+ func RegisterTopLevelFunc (name string , val interface {}) error {
54+ v := reflect .ValueOf (val )
55+ if v .Kind () == reflect .Ptr {
56+ v = v .Elem ()
57+ }
58+
59+ name = strings .ToLower (name )
60+ err := RegisterExpander (name , makeExpanderFuncFromFunc (v ))
61+ if err != nil {
62+ return locale .WrapError (
63+ err , "project_expand_register_expander_func" ,
64+ "Cannot register expander (func)" ,
65+ )
66+ }
67+
68+ return nil
69+ }
70+
71+ func RegisterTopLevelStringer (name string , val interface {}) error {
72+ v := reflect .ValueOf (val )
73+ if v .Kind () == reflect .Ptr {
74+ v = v .Elem ()
75+ }
76+
77+ topLevelLookup [strings .ToLower (name )] = fmt .Sprintf ("%v" , v .Interface ())
78+
79+ return nil
80+ }
81+
82+ /*func RegisterStruct(val interface{}) error {
3583 v := reflect.ValueOf(val)
3684 // deref if needed
3785 if v.Kind() == reflect.Ptr {
@@ -85,7 +133,7 @@ func RegisterStruct(val interface{}) error {
85133 }
86134
87135 return nil
88- }
136+ }*/
89137
90138// RegisterExpander registers an Expander Func for some given handler value. The handler value
91139// must not effectively be a blank string and the Func must be defined. It is definitely possible
0 commit comments