Skip to content

Commit 9e3ed13

Browse files
committed
- [+] add cmd:x2j wireframe
1 parent 147a6a4 commit 9e3ed13

File tree

5 files changed

+157
-15
lines changed

5 files changed

+157
-15
lines changed

cmd_x2j.go

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
////////////////////////////////////////////////////////////////////////////
2+
// Program: jsonfiddle
3+
// Purpose: JSON Fiddling
4+
// Authors: Tong Sun (c) 2019, All rights reserved
5+
////////////////////////////////////////////////////////////////////////////
6+
7+
package main
8+
9+
import (
10+
"fmt"
11+
"os"
12+
13+
"github.com/mkideal/cli"
14+
"github.com/mkideal/cli/clis"
15+
)
16+
17+
////////////////////////////////////////////////////////////////////////////
18+
// x2j
19+
20+
func x2jCLI(ctx *cli.Context) error {
21+
rootArgv = ctx.RootArgv().(*rootT)
22+
argv := ctx.Argv().(*x2jT)
23+
clis.Setup(progname, rootArgv.Verbose.Value())
24+
clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
25+
Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose =
26+
rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose.Value()
27+
// argv.Filei, argv.Fileo,
28+
//return nil
29+
return DoX2j()
30+
}
31+
32+
//
33+
// DoX2j implements the business logic of command `x2j`
34+
func DoX2j() error {
35+
fmt.Fprintf(os.Stderr, "%s v%s. x2j - XML to JSON\n", progname, version)
36+
// fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
37+
return nil
38+
}

jsonfiddle_cli.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# program name, name for the executable
22
ProgramName: jsonfiddle
3+
Authors: Tong Sun
34

45
PackageName: main
56

@@ -138,3 +139,20 @@ Command:
138139
# Type: bool
139140
# Flag: forcefloats
140141
# Usage: [experimental] force float64 type for integral values
142+
143+
- Name: x2j
144+
Desc: "XML to JSON"
145+
NumOption: cli.AtLeast(1)
146+
147+
Options:
148+
149+
- Name: Filei
150+
Type: '*clix.Reader'
151+
Flag: '*i,input'
152+
Usage: the source of the input JSON (mandatory)
153+
154+
- Name: Fileo
155+
Type: '*clix.Writer'
156+
Flag: o,output
157+
Usage: 'the output (default: stdout)'
158+

jsonfiddle_cliDef.go

+95-11
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
////////////////////////////////////////////////////////////////////////////
22
// Program: jsonfiddle
33
// Purpose: JSON Fiddling
4-
// Authors: Tong Sun (c) 2017, All rights reserved
4+
// Authors: Tong Sun (c) 2019, All rights reserved
55
////////////////////////////////////////////////////////////////////////////
66

77
package main
88

99
import (
10+
// "fmt"
11+
// "os"
12+
1013
"github.com/mkideal/cli"
14+
// "github.com/mkideal/cli/clis"
1115
clix "github.com/mkideal/cli/ext"
1216
)
1317

@@ -27,8 +31,9 @@ type rootT struct {
2731
}
2832

2933
var root = &cli.Command{
30-
Name: "jsonfiddle",
31-
Desc: "JSON Fiddling\nVersion " + version + " built on " + date,
34+
Name: "jsonfiddle",
35+
Desc: "JSON Fiddling\nVersion " + version + " built on " + date +
36+
"\nCopyright (C) 2019, Tong Sun",
3237
Text: "Tool to fiddle with json strings",
3338
Global: true,
3439
Argv: func() interface{} { return new(rootT) },
@@ -57,7 +62,7 @@ var root = &cli.Command{
5762
// var (
5863
// progname = "jsonfiddle"
5964
// version = "0.1.0"
60-
// date = "2017-09-09"
65+
// date = "2019-05-30"
6166

6267
// rootArgv *rootT
6368
// // Opts store all the configurable options
@@ -69,22 +74,24 @@ var root = &cli.Command{
6974

7075
// Function main
7176
// func main() {
72-
// cli.SetUsageStyle(cli.ManualStyle) // up-down, for left-right, use NormalStyle
77+
// cli.SetUsageStyle(cli.DenseNormalStyle) // left-right, for up-down, use ManualStyle
7378
// //NOTE: You can set any writer implements io.Writer
7479
// // default writer is os.Stdout
7580
// if err := cli.Root(root,
7681
// cli.Tree(escDef),
7782
// cli.Tree(fmtDef),
7883
// cli.Tree(sortDef),
79-
// cli.Tree(j2sDef)).Run(os.Args[1:]); err != nil {
84+
// cli.Tree(j2sDef),
85+
// cli.Tree(x2jDef)).Run(os.Args[1:]); err != nil {
8086
// fmt.Fprintln(os.Stderr, err)
87+
// os.Exit(1)
8188
// }
8289
// fmt.Println("")
8390
// }
8491

8592
// Template for main dispatcher starts here
8693
//==========================================================================
87-
// Main dispatcher
94+
// Dumb root handler
8895

8996
// func jsonfiddle(ctx *cli.Context) error {
9097
// ctx.JSON(ctx.RootArgv())
@@ -102,9 +109,19 @@ var root = &cli.Command{
102109
// func escCLI(ctx *cli.Context) error {
103110
// rootArgv = ctx.RootArgv().(*rootT)
104111
// argv := ctx.Argv().(*escT)
105-
// fmt.Printf("[esc]:\n %+v\n %+v\n %v\n", rootArgv, argv, ctx.Args())
112+
// clis.Setup(progname, rootArgv.Verbose.Value())
113+
// clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
106114
// Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose, Opts.Verbose =
107115
// rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose, rootArgv.Verbose.Value()
116+
// // argv.Filei, argv.Fileo,
117+
// //return nil
118+
// return DoEsc()
119+
// }
120+
//
121+
// DoEsc implements the business logic of command `esc`
122+
// func DoEsc() error {
123+
// fmt.Fprintf(os.Stderr, "%s v%s. esc - Escape json string\n", progname, version)
124+
// // fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
108125
// return nil
109126
// }
110127

@@ -129,9 +146,19 @@ var escDef = &cli.Command{
129146
// func fmtCLI(ctx *cli.Context) error {
130147
// rootArgv = ctx.RootArgv().(*rootT)
131148
// argv := ctx.Argv().(*fmtT)
132-
// fmt.Printf("[fmt]:\n %+v\n %+v\n %v\n", rootArgv, argv, ctx.Args())
149+
// clis.Setup(progname, rootArgv.Verbose.Value())
150+
// clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
133151
// Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose, Opts.Verbose =
134152
// rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose, rootArgv.Verbose.Value()
153+
// // argv.Filei, argv.Fileo,
154+
// //return nil
155+
// return DoFmt()
156+
// }
157+
//
158+
// DoFmt implements the business logic of command `fmt`
159+
// func DoFmt() error {
160+
// fmt.Fprintf(os.Stderr, "%s v%s. fmt - Format json string\n", progname, version)
161+
// // fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
135162
// return nil
136163
// }
137164

@@ -156,9 +183,19 @@ var fmtDef = &cli.Command{
156183
// func sortCLI(ctx *cli.Context) error {
157184
// rootArgv = ctx.RootArgv().(*rootT)
158185
// argv := ctx.Argv().(*sortT)
159-
// fmt.Printf("[sort]:\n %+v\n %+v\n %v\n", rootArgv, argv, ctx.Args())
186+
// clis.Setup(progname, rootArgv.Verbose.Value())
187+
// clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
160188
// Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose, Opts.Verbose =
161189
// rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose, rootArgv.Verbose.Value()
190+
// // argv.Filei, argv.Fileo,
191+
// //return nil
192+
// return DoSort()
193+
// }
194+
//
195+
// DoSort implements the business logic of command `sort`
196+
// func DoSort() error {
197+
// fmt.Fprintf(os.Stderr, "%s v%s. sort - Sort json fields recursively\n", progname, version)
198+
// // fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
162199
// return nil
163200
// }
164201

@@ -183,9 +220,19 @@ var sortDef = &cli.Command{
183220
// func j2sCLI(ctx *cli.Context) error {
184221
// rootArgv = ctx.RootArgv().(*rootT)
185222
// argv := ctx.Argv().(*j2sT)
186-
// fmt.Printf("[j2s]:\n %+v\n %+v\n %v\n", rootArgv, argv, ctx.Args())
223+
// clis.Setup(progname, rootArgv.Verbose.Value())
224+
// clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
187225
// Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose, Opts.Verbose =
188226
// rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose, rootArgv.Verbose.Value()
227+
// // argv.FmtType, argv.Filei, argv.Fileo, argv.Name, argv.Pkg, argv.SubStruct,
228+
// //return nil
229+
// return DoJ2s()
230+
// }
231+
//
232+
// DoJ2s implements the business logic of command `j2s`
233+
// func DoJ2s() error {
234+
// fmt.Fprintf(os.Stderr, "%s v%s. j2s - JSON to struct\n", progname, version)
235+
// // fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
189236
// return nil
190237
// }
191238

@@ -207,3 +254,40 @@ var j2sDef = &cli.Command{
207254

208255
NumOption: cli.AtLeast(1),
209256
}
257+
258+
////////////////////////////////////////////////////////////////////////////
259+
// x2j
260+
261+
// func x2jCLI(ctx *cli.Context) error {
262+
// rootArgv = ctx.RootArgv().(*rootT)
263+
// argv := ctx.Argv().(*x2jT)
264+
// clis.Setup(progname, rootArgv.Verbose.Value())
265+
// clis.Verbose(2, "<%s> -\n %+v\n %+v\n %v\n", ctx.Path(), rootArgv, argv, ctx.Args())
266+
// Opts.Compact, Opts.Prefix, Opts.Indent, Opts.Protect, Opts.Verbose, Opts.Verbose =
267+
// rootArgv.Compact, rootArgv.Prefix, rootArgv.Indent, rootArgv.Protect, rootArgv.Verbose, rootArgv.Verbose.Value()
268+
// // argv.Filei, argv.Fileo,
269+
// //return nil
270+
// return DoX2j()
271+
// }
272+
//
273+
// DoX2j implements the business logic of command `x2j`
274+
// func DoX2j() error {
275+
// fmt.Fprintf(os.Stderr, "%s v%s. x2j - XML to JSON\n", progname, version)
276+
// // fmt.Fprintf(os.Stderr, "Copyright (C) 2019, Tong Sun\n\n")
277+
// return nil
278+
// }
279+
280+
type x2jT struct {
281+
Filei *clix.Reader `cli:"*i,input" usage:"the source of the input JSON (mandatory)"`
282+
Fileo *clix.Writer `cli:"o,output" usage:"the output (default: stdout)"`
283+
}
284+
285+
var x2jDef = &cli.Command{
286+
Name: "x2j",
287+
Desc: "XML to JSON",
288+
289+
Argv: func() interface{} { return new(x2jT) },
290+
Fn: x2jCLI,
291+
292+
NumOption: cli.AtLeast(1),
293+
}

jsonfiddle_cliGen.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
easygen -tf ../../suntong/cli/cli-tx jsonfiddle_cli | gofmt > jsonfiddle_cliDef.go
1+
easygen ../../go-easygen/wireframe/cli-ext jsonfiddle_cli | gofmt > jsonfiddle_cliDef.go

jsonfiddle_main.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ type OptsT struct {
3737
var (
3838
progname = "jsonfiddle"
3939
// version tracks the release version.
40-
version = "v0.4.0"
41-
date = "2017-09-09"
40+
version = "v0.5.0"
41+
date = "2019-05-30"
4242
)
4343

4444
var (
@@ -58,8 +58,10 @@ func main() {
5858
cli.Tree(escDef),
5959
cli.Tree(fmtDef),
6060
cli.Tree(sortDef),
61-
cli.Tree(j2sDef)).Run(os.Args[1:]); err != nil {
61+
cli.Tree(j2sDef),
62+
cli.Tree(x2jDef)).Run(os.Args[1:]); err != nil {
6263
fmt.Fprintln(os.Stderr, err)
64+
os.Exit(1)
6365
}
6466
fmt.Println("")
6567
}

0 commit comments

Comments
 (0)