github.com/loomnetwork/gamechain@v0.0.0-20200406110549-36c47eb97a92/cli/cmd/merge_json_to_init.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/loomnetwork/gamechain/tools/battleground_utility"
     6  	"github.com/loomnetwork/gamechain/types/zb/zb_data"
     7  	"github.com/pkg/errors"
     8  	"github.com/spf13/cobra"
     9  	"os"
    10  )
    11  
    12  var mergeJsonToInitCmdArgs struct {
    13  	initJsonTemplateFile string
    14  
    15  	defaultDecksFile string
    16  	defaultCollectionFile string
    17  	cardLibraryFile string
    18  	overlordsFile string
    19  	aiDecksFile string
    20  	overlordLevelingFile string
    21  
    22  	outputFile string
    23  }
    24  
    25  var mergeJsonToInitCmd = &cobra.Command{
    26  	Use:   "merge_json_to_init",
    27  	Short: "merges init data from separate JSON files into a single one",
    28  	RunE: func(cmd *cobra.Command, args []string) error {
    29  		var err error
    30  		var initData zb_data.InitData
    31  		var defaultDecksData zb_data.DefaultDecksDataContainer
    32  		var defaultCollectionData zb_data.DefaultCollectionDataContainer
    33  		var cardLibraryData zb_data.CardLibraryDataContainer
    34  		var overlordsPrototypesData zb_data.OverlordPrototypesDataContainer
    35  		var aiDecksData zb_data.AIDecksDataContainer
    36  		var overlordLevelingData zb_data.OverlordLevelingDataContainer
    37  
    38  		// Read pieces
    39  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.initJsonTemplateFile, &initData)
    40  		if err != nil {
    41  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.initJsonTemplateFile)
    42  		}
    43  
    44  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.defaultDecksFile, &defaultDecksData)
    45  		if err != nil {
    46  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.defaultDecksFile)
    47  		}
    48  
    49  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.defaultCollectionFile, &defaultCollectionData)
    50  		if err != nil {
    51  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.defaultCollectionFile)
    52  		}
    53  
    54  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.cardLibraryFile, &cardLibraryData)
    55  		if err != nil {
    56  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.cardLibraryFile)
    57  		}
    58  
    59  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.overlordsFile, &overlordsPrototypesData)
    60  		if err != nil {
    61  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.overlordsFile)
    62  		}
    63  
    64  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.aiDecksFile, &aiDecksData)
    65  		if err != nil {
    66  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.aiDecksFile)
    67  		}
    68  
    69  		err = battleground_utility.ReadJsonFileToProtoMessage(mergeJsonToInitCmdArgs.overlordLevelingFile, &overlordLevelingData)
    70  		if err != nil {
    71  			return errors.Wrap(err, "error parsing " + mergeJsonToInitCmdArgs.overlordLevelingFile)
    72  		}
    73  
    74  		// Merge
    75  		initData.DefaultDecks = defaultDecksData.DefaultDecks
    76  		initData.DefaultCollection = defaultCollectionData.DefaultCollection
    77  		initData.Cards = cardLibraryData.Cards
    78  		initData.Overlords = overlordsPrototypesData.Overlords
    79  		initData.AiDecks = aiDecksData.AiDecks
    80  		initData.OverlordLeveling = overlordLevelingData.OverlordLeveling
    81  
    82  		// Write merged file
    83  		mergedFile, err := os.Create(mergeJsonToInitCmdArgs.outputFile)
    84  		if err != nil {
    85  			return errors.Wrap(err, "error creating output file")
    86  		}
    87  
    88  		defer func() {
    89  			if err := mergedFile.Close(); err != nil {
    90  				panic(err)
    91  			}
    92  		}()
    93  
    94  		err = battleground_utility.PrintProtoMessageAsJson(mergedFile, &initData)
    95  		if err != nil {
    96  			return errors.Wrap(err, "error writing output file")
    97  		}
    98  
    99  		fmt.Printf("merged file written to %s\n", mergeJsonToInitCmdArgs.outputFile)
   100  
   101  		return nil
   102  	},
   103  }
   104  
   105  func init() {
   106  	rootCmd.AddCommand(mergeJsonToInitCmd)
   107  
   108  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.initJsonTemplateFile, "initJsonTemplate", "", "init_template.json", "init.json template file without data")
   109  
   110  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.defaultDecksFile, "defaultDecks", "", "default_decks.json", "default decks JSON data file")
   111  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.defaultCollectionFile, "defaultCollection", "", "default_collection.json", "default collection JSON data file")
   112  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.cardLibraryFile, "cardLibrary", "", "card_library.json", "card library JSON data file")
   113  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.overlordsFile, "overlords", "", "overlords.json", "overlord prototypes JSON data file")
   114  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.aiDecksFile, "aiDecks", "", "ai_decks.json", "AI decks JSON data file")
   115  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.overlordLevelingFile, "overlordLeveling", "", "overlord_leveling.json", "Overlord leveling JSON data file")
   116  
   117  	mergeJsonToInitCmd.Flags().StringVarP(&mergeJsonToInitCmdArgs.outputFile, "outputFile", "o", "update_init_merged.json", "path to the merged output file")
   118  }