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