github.com/Finschia/finschia-sdk@v0.48.1/x/gov/client/cli/parse.go (about) 1 package cli 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "os" 7 8 "github.com/spf13/pflag" 9 10 govutils "github.com/Finschia/finschia-sdk/x/gov/client/utils" 11 ) 12 13 func (p proposal) validate() error { 14 if p.Type == "" { 15 return fmt.Errorf("proposal type is required") 16 } 17 18 if p.Title == "" { 19 return fmt.Errorf("proposal title is required") 20 } 21 22 if p.Description == "" { 23 return fmt.Errorf("proposal description is required") 24 } 25 return nil 26 } 27 28 func parseSubmitProposalFlags(fs *pflag.FlagSet) (*proposal, error) { 29 proposal := &proposal{} 30 proposalFile, _ := fs.GetString(FlagProposal) 31 32 if proposalFile == "" { 33 proposalType, _ := fs.GetString(FlagProposalType) 34 title, _ := fs.GetString(FlagTitle) 35 description, _ := fs.GetString(FlagDescription) 36 if proposalType == "" && title == "" && description == "" { 37 return nil, fmt.Errorf("one of the --proposal or (--title, --description and --type) flags are required") 38 } 39 40 proposal.Title, _ = fs.GetString(FlagTitle) 41 proposal.Description, _ = fs.GetString(FlagDescription) 42 proposal.Type = govutils.NormalizeProposalType(proposalType) 43 proposal.Deposit, _ = fs.GetString(FlagDeposit) 44 if err := proposal.validate(); err != nil { 45 return nil, err 46 } 47 48 return proposal, nil 49 } 50 51 for _, flag := range ProposalFlags { 52 if v, _ := fs.GetString(flag); v != "" { 53 return nil, fmt.Errorf("--%s flag provided alongside --proposal, which is a noop", flag) 54 } 55 } 56 57 contents, err := os.ReadFile(proposalFile) 58 if err != nil { 59 return nil, err 60 } 61 62 err = json.Unmarshal(contents, proposal) 63 if err != nil { 64 return nil, err 65 } 66 67 return proposal, nil 68 }