Skip to content

Commit 09269dd

Browse files
committed
Trial direct registration of top level expanders
1 parent 685a93e commit 09269dd

2 files changed

Lines changed: 53 additions & 3 deletions

File tree

pkg/project/registry.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

pkg/projget/projget.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ func newProject(out output.Outputer, auth *authentication.Auth, shell string, pj
4444
projVars := vars.New(auth, vars.NewProject(pj), shell)
4545
conditional := constraints.NewPrimeConditional(projVars)
4646
project.RegisterConditional(conditional)
47-
_ = project.RegisterStruct(projVars)
47+
_ = project.RegisterTopLevelStruct("project", projVars.Project)
48+
_ = project.RegisterTopLevelFunc("mixin", projVars.Mixin)
49+
_ = project.RegisterTopLevelStringer("shell", projVars.Shell)
4850
}
4951

5052
pj.SetUpdateCallback(registerProjectVars)

0 commit comments

Comments
 (0)