package main import ( "fmt" "local/args" "local/storage" "local/storage/resolve" "log" ) type Config struct { DBs [2]storage.DB Dry bool } func (config Config) String() string { return fmt.Sprintf("{1:%T 2:%T Dry:%v}", config.DBs[0], config.DBs[1], config.Dry) } func main() { c := config() resolve.DefaultNamespace = "" keys, err := c.DBs[0].List(nil) if err != nil { panic(err) } log.Println(c) for _, key := range keys { v, err := c.DBs[0].Get(key) if err != nil { panic(err) } if c.Dry { log.Printf("c.DBs[1].Set(%s, %s)", key, v) } else if err := c.DBs[1].Set(key, v); err != nil { panic(err) } } } func config() Config { as := args.NewArgSet() for i := range [2]int{} { s := fmt.Sprint(i + 1) as.Append(args.STRING, s+"usr", s+"'s user", "") as.Append(args.STRING, s+"pwd", s+"'s password", "") as.Append(args.STRING, s+"addr", s+"'s addr", "") as.Append(args.STRING, s+"type", s+"'s type", "") } as.Append(args.BOOL, "dry", "dry run", false) if err := as.Parse(); err != nil { panic(err) } stores := [2]storage.DB{} for i := range stores { var err error stores[i], err = storage.New( storage.TypeFromString(as.GetString(fmt.Sprint(i+1)+"type")), as.GetString(fmt.Sprint(i+1)+"addr"), as.GetString(fmt.Sprint(i+1)+"usr"), as.GetString(fmt.Sprint(i+1)+"pwd"), ) if err != nil { panic(err) } } return Config{ DBs: stores, Dry: as.GetBool("dry"), } }