diff --git a/cmd/input.go b/cmd/input.go index cd122cd..753ba4e 100644 --- a/cmd/input.go +++ b/cmd/input.go @@ -3,6 +3,7 @@ package input import "fmt" func Input() (string, string) { + fmt.Print("struct name, path to file (including struct): ") var structName, path string fmt.Scan(&structName, &path) return structName, path diff --git a/example_structs/post.go b/example_structs/post.go index 06104ca..50c0a7f 100644 --- a/example_structs/post.go +++ b/example_structs/post.go @@ -1,5 +1,5 @@ package structs type Post struct { - title string `json sex` + title string `ui:",hidden,asd"` } \ No newline at end of file diff --git a/go.mod b/go.mod index 0332167..aa38dbb 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module nto_cli go 1.23.4 + +require github.com/fatih/structtag v1.2.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e2c02dc --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= diff --git a/main b/main index 8611b66..e94ca6f 100755 Binary files a/main and b/main differ diff --git a/main.go b/main.go index 7c753ce..f196b40 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ import ( func main() { - fmt.Print("struct name, path to file (including struct): ") structName, path := input.Input() file, err := os.Open(path) if err != nil { diff --git a/types/field.go b/types/field.go index 1385791..d300bce 100644 --- a/types/field.go +++ b/types/field.go @@ -3,5 +3,10 @@ package types type Field struct { Name string Type string - Medatada []string + Medatada []Medatada } + +type Medatada struct { + Name string + Values []string +} \ No newline at end of file diff --git a/utils/split_struct_field.go b/utils/split_struct_field.go index fdb9fd9..14f6c94 100644 --- a/utils/split_struct_field.go +++ b/utils/split_struct_field.go @@ -1,8 +1,11 @@ package utils import ( + "fmt" "nto_cli/types" "strings" + + "github.com/fatih/structtag" ) func SplitStructField(field string) *types.Field { @@ -11,13 +14,28 @@ func SplitStructField(field string) *types.Field { } startBacktip := strings.Index(field, "`") - var metadata []string + endBacktip := -1 + var metadata []types.Medatada if startBacktip > -1 { - metadata = []string{field[startBacktip:]} + endBacktip = strings.Index(field[startBacktip + 1:], "`") + if endBacktip > -1 { + endBacktip += startBacktip + 1 + meta := field[startBacktip + 1 : endBacktip] + tags, err := structtag.Parse(meta) + if err != nil { + panic(err) + } + uiTags, err := tags.Get("ui") + if err != nil { + panic(err) + } + fmt.Printf("%+v\n", uiTags.Options) + } } else { startBacktip = len(field) } + field = strings.TrimSpace(field[:startBacktip]) data := strings.Split(field, " ")