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 }