package config import ( "go-dht/kademlia" "github.com/spf13/viper" "github.com/urfave/cli" ) type Config struct { ID string Addr string Port string AdminPort string KnownNodesStr []KnownNodeStr `mapstructure:"knownnodes"` KnownNodes []kademlia.ListedNode `mapstructure:"-"` Storage string } type KnownNodeStr struct { ID string Addr string Port string } var C Config func MustRead(c *cli.Context) error { viper.SetConfigType("yaml") viper.SetConfigName("config") viper.AddConfigPath(".") if c.GlobalString("config") != "" { viper.SetConfigFile(c.GlobalString("config")) } if err := viper.ReadInConfig(); err != nil { return err } if err := viper.Unmarshal(&C); err != nil { return err } for _, v := range C.KnownNodesStr { id, err := kademlia.IDFromString(v.ID) if err != nil { return err } kn := kademlia.ListedNode{ ID: id, Addr: v.Addr, Port: v.Port, } C.KnownNodes = append(C.KnownNodes, kn) } C.KnownNodesStr = []KnownNodeStr{} return nil }