You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

56 lines
1020 B

package config
import (
"go-dht/kademlia"
"github.com/spf13/viper"
"github.com/urfave/cli"
)
type Config struct {
ID string
Addr string
Port string
KnownNodesStr []KnownNodeStr `mapstructure:"knownnodes"`
KnownNodes []kademlia.ListedNode `mapstructure:"-"`
}
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
}