go-dht/config/config.go
config/config.goRaw
1package config
2
3import (
4 "go-dht/kademlia"
5
6 "github.com/spf13/viper"
7 "github.com/urfave/cli"
8)
9
10type Config struct {
11 ID string
12 Addr string
13 Port string
14 KnownNodesStr []KnownNodeStr `mapstructure:"knownnodes"`
15 KnownNodes []kademlia.ListedNode `mapstructure:"-"`
16}
17
18type KnownNodeStr struct {
19 ID string
20 Addr string
21 Port string
22}
23
24var C Config
25
26func MustRead(c *cli.Context) error {
27 viper.SetConfigType("yaml")
28 viper.SetConfigName("config")
29 viper.AddConfigPath(".")
30
31 if c.GlobalString("config") != "" {
32 viper.SetConfigFile(c.GlobalString("config"))
33 }
34
35 if err := viper.ReadInConfig(); err != nil {
36 return err
37 }
38 if err := viper.Unmarshal(&C); err != nil {
39 return err
40 }
41
42 for _, v := range C.KnownNodesStr {
43 id, err := kademlia.IDFromString(v.ID)
44 if err != nil {
45 return err
46 }
47 kn := kademlia.ListedNode{
48 ID: id,
49 Addr: v.Addr,
50 Port: v.Port,
51 }
52 C.KnownNodes = append(C.KnownNodes, kn)
53 }
54 C.KnownNodesStr = []KnownNodeStr{}
55 return nil
56}