This repository has been archived by the owner on Jul 20, 2022. It is now read-only.
/
main.go
112 lines (97 loc) · 2.4 KB
/
main.go
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
102
103
104
105
106
107
108
109
110
111
112
/**
* Copyright 2017 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ------------------------------------------------------------------------------
*/
package main
import (
"fmt"
"github.com/hyperledger/sawtooth-sdk-go/logging"
"github.com/jessevdk/go-flags"
"os"
)
var logger *logging.Logger = logging.Get()
// All subcommands implement this interface
type Command interface {
Register(*flags.Command) error
Name() string
Run(*Config) error
}
// Opts to the main command
type MainOpts struct {
Verbose []bool `short:"v" long:"verbose" description:"Set the log level"`
}
func main() {
var opts MainOpts
// Create top-level parser
parser := flags.NewParser(&opts, flags.Default)
parser.Command.Name = "seth"
// Add sub-commands
commands := []Command{
&Account{},
&Contract{},
&Show{},
&Init{},
&Permissions{},
}
for _, cmd := range commands {
err := cmd.Register(parser.Command)
if err != nil {
logger.Errorf("Couldn't register command %v: %v", cmd.Name(), err)
os.Exit(1)
}
}
// Parse the args
remaining, err := parser.Parse()
if e, ok := err.(*flags.Error); ok {
if e.Type == flags.ErrHelp {
return
} else {
os.Exit(1)
}
}
if len(remaining) > 0 {
fmt.Printf("Error: Unrecognized arguments passed: %v\n", remaining)
os.Exit(2)
}
switch len(opts.Verbose) {
case 2:
logger.SetLevel(logging.DEBUG)
case 1:
logger.SetLevel(logging.INFO)
default:
logger.SetLevel(logging.WARN)
}
// If a sub-command was passed, run it
if parser.Command.Active == nil {
os.Exit(2)
}
config, err := LoadConfig()
if err != nil {
fmt.Println("Error: Failed to load config: %v", err)
return
}
name := parser.Command.Active.Name
for _, cmd := range commands {
if cmd.Name() == name {
err := cmd.Run(config)
if err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
return
}
}
fmt.Println("Error: Command not found: %v", name)
}