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 AdminPort string
15 KnownNodesStr []KnownNodeStr `mapstructure:"knownnodes"`
16 KnownNodes []kademlia.ListedNode `mapstructure:"-"`
17 Storage string
18}
19
20type KnownNodeStr struct {
21 ID string
22 Addr string
23 Port string
24}
25
26var C Config
27
28func MustRead(c *cli.Context) error {
29 viper.SetConfigType("yaml")
30 viper.SetConfigName("config")
31 viper.AddConfigPath(".")
32
33 if c.GlobalString("config") != "" {
34 viper.SetConfigFile(c.GlobalString("config"))
35 }
36
37 if err := viper.ReadInConfig(); err != nil {
38 return err
39 }
40 if err := viper.Unmarshal(&C); err != nil {
41 return err
42 }
43
44 for _, v := range C.KnownNodesStr {
45 id, err := kademlia.IDFromString(v.ID)
46 if err != nil {
47 return err
48 }
49 kn := kademlia.ListedNode{
50 ID: id,
51 Addr: v.Addr,
52 Port: v.Port,
53 }
54 C.KnownNodes = append(C.KnownNodes, kn)
55 }
56 C.KnownNodesStr = []KnownNodeStr{}
57 return nil
58}