/
serve.go
65 lines (51 loc) · 1.46 KB
/
serve.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
package cmd
import (
"fmt"
"log"
"time"
"github.com/devopsfaith/api2html/engine"
"github.com/spf13/cobra"
)
var (
cfgFile string
devel bool
port int
serveCmd = &cobra.Command{
Use: "serve",
Short: "Run the api2html server.",
Long: "Run the api2html server.",
RunE: serveWrapper{defaultEngineFactory}.Serve,
Aliases: []string{"run", "server", "start"},
Example: "api2html serve -d -c config.json",
}
errNilEngine = fmt.Errorf("serve cmd aborted: nil engine")
)
func init() {
rootCmd.AddCommand(serveCmd)
serveCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "api2html.conf", "Path to the configuration filename")
serveCmd.PersistentFlags().BoolVarP(&devel, "devel", "d", false, "Enable the devel")
serveCmd.PersistentFlags().IntVarP(&port, "port", "p", 8080, "Listen port")
}
type engineWrapper interface {
Run(...string) error
}
type engineFactory func(cfgPath string, devel bool) (engineWrapper, error)
func defaultEngineFactory(cfgPath string, devel bool) (engineWrapper, error) {
return engine.New(cfgPath, devel)
}
type serveWrapper struct {
eF engineFactory
}
func (s serveWrapper) Serve(_ *cobra.Command, _ []string) error {
eW, err := s.eF(cfgFile, devel)
if err != nil {
log.Println("engine creation aborted:", err.Error())
return err
}
if eW == nil {
log.Println("engine creation aborted:", errNilEngine.Error())
return errNilEngine
}
time.Sleep(time.Second)
return eW.Run(fmt.Sprintf(":%d", port))
}