-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
101 lines (83 loc) · 2.1 KB
/
main.go
File metadata and controls
101 lines (83 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Tool msgpack-cli allows to encode MsgPack objects to JSON and decode MsgPack
// object from JSON.
//
//
// Usage examples
//
// $ msgpack-cli encode <<< "Hello, World!" > hello.msgpack
// $ msgpack-cli decode < hello.msgpack
// "Hello, World!"
package main
import (
"encoding/json"
"flag"
"io"
"log"
"os"
"github.com/vmihailenco/msgpack"
)
const usage = `Convert MsgPack objects to JSON objects and vice versa.
Usage: msgpack-cli [-h | --help] [-v | --vesion] <command> [<args>]
msgpack-cli {enc,encode} <input> <output>
msgpack-cli {dec,decode} <input> <output>
msgpack-cli help <input> <output>
Common options
-h, --help show usage
-v, --version show version
Commands
enc,encode encode MsgPack objects from JSON
dec,decode decode MsgPack objects to JSON
help show this message
Visit https://github.com/daskol/msgpack-cli for feedback or source code.
`
var flagVersion bool
func msgpack2json(r io.Reader, w io.Writer) error {
var dec = msgpack.NewDecoder(r)
var enc = json.NewEncoder(w)
var msg interface{}
if err := dec.Decode(&msg); err != nil {
return err
}
if err := enc.Encode(&msg); err != nil {
return err
}
return nil
}
func json2msgpack(r io.Reader, w io.Writer) error {
var dec = json.NewDecoder(r)
var enc = msgpack.NewEncoder(w)
var msg interface{}
if err := dec.Decode(&msg); err != nil {
return err
}
if err := enc.Encode(&msg); err != nil {
return err
}
return nil
}
func init() {
flag.BoolVar(&flagVersion, "v", false, "")
flag.BoolVar(&flagVersion, "version", false, "")
flag.Usage = func() { print(usage) }
flag.Parse()
}
func main() {
if flagVersion {
println("msgpack-cli version 0.0.0")
return
}
switch flag.Arg(0) {
case "enc", "encode":
if err := json2msgpack(os.Stdin, os.Stdout); err != nil {
log.Fatalf("failed to convert msgpack to json: %s", err)
}
case "dec", "decode":
if err := msgpack2json(os.Stdin, os.Stdout); err != nil {
log.Fatalf("failed to convert msgpack to json: %s", err)
}
case "help":
flag.Usage()
default:
flag.Usage()
}
}