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  }