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  }