File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed
Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1515package debug
1616
1717import (
18+ "reflect"
19+ "sort"
20+
1821 "github.com/sanity-io/litter"
1922
2023 "github.com/gohugoio/hugo/deps"
@@ -38,3 +41,43 @@ type Namespace struct {
3841func (ns * Namespace ) Dump (val interface {}) string {
3942 return litter .Sdump (val )
4043}
44+
45+ // List returns the fields and methods of the struct/pointer or keys of the map.
46+ func (ns * Namespace ) List (val interface {}) []string {
47+ values := make ([]string , 0 )
48+
49+ v := reflect .ValueOf (val )
50+
51+ // If the type is struct
52+ if v .Kind () == reflect .Struct {
53+ for i := 0 ; i < v .NumField (); i ++ {
54+ values = append (values , v .Type ().Field (i ).Name )
55+ }
56+
57+ for i := 0 ; i < v .NumMethod (); i ++ {
58+ values = append (values , v .Type ().Method (i ).Name )
59+ }
60+ }
61+
62+ // If the type is pointer
63+ if v .Kind () == reflect .Ptr {
64+ for i := 0 ; i < reflect .Indirect (v ).NumField (); i ++ {
65+ values = append (values , v .Elem ().Type ().Field (i ).Name )
66+ }
67+
68+ for i := 0 ; i < v .NumMethod (); i ++ {
69+ values = append (values , v .Type ().Method (i ).Name )
70+ }
71+ }
72+
73+ // If the type is map
74+ if v .Kind () == reflect .Map {
75+ iter := v .MapRange ()
76+ for iter .Next () {
77+ values = append (values , iter .Key ().String ())
78+ }
79+ }
80+
81+ sort .Strings (values )
82+ return values
83+ }
You can’t perform that action at this time.
0 commit comments