github.com/pluswing/datasync@v1.1.1-0.20240218052257-9077f6fc4ae3/data/dispatcher.go (about) 1 package data 2 3 import ( 4 "fmt" 5 6 "github.com/mcuadros/go-defaults" 7 "github.com/mitchellh/mapstructure" 8 "github.com/spf13/cobra" 9 ) 10 11 func DispatchTarget(target TargetType, table TargetFuncTable) { 12 switch target.Kind { 13 case "mysql": 14 var conf TargetMysqlType 15 err := mapstructure.Decode(target.Config, &conf) 16 cobra.CheckErr(err) 17 defaults.SetDefaults(&conf) 18 table.Mysql(conf) 19 case "file": 20 var conf TargetFileType 21 err := mapstructure.Decode(target.Config, &conf) 22 cobra.CheckErr(err) 23 defaults.SetDefaults(&conf) 24 table.File(conf) 25 default: 26 panic(fmt.Sprintf("invalid target.kind = %s\n", target.Kind)) 27 } 28 } 29 30 func DispatchStorage(storage StorageType, table StorageFuncTable) { 31 switch storage.Kind { 32 case "gcs": 33 var conf StorageGcsType 34 err := mapstructure.Decode(storage.Config, &conf) 35 cobra.CheckErr(err) 36 defaults.SetDefaults(&conf) 37 table.Gcs(conf) 38 default: 39 panic(fmt.Sprintf("invalid storage.kind = %s\n", storage.Kind)) 40 } 41 }