github.com/cosmos/cosmos-sdk@v0.50.10/x/group/client/cli/util.go (about) 1 package cli 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "os" 7 8 "github.com/cosmos/cosmos-sdk/codec" 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 "github.com/cosmos/cosmos-sdk/x/group" 11 ) 12 13 // parseDecisionPolicy reads and parses the decision policy. 14 func parseDecisionPolicy(cdc codec.Codec, decisionPolicyFile string) (group.DecisionPolicy, error) { 15 if decisionPolicyFile == "" { 16 return nil, fmt.Errorf("decision policy is required") 17 } 18 19 contents, err := os.ReadFile(decisionPolicyFile) 20 if err != nil { 21 return nil, err 22 } 23 24 var policy group.DecisionPolicy 25 if err := cdc.UnmarshalInterfaceJSON(contents, &policy); err != nil { 26 return nil, fmt.Errorf("failed to parse decision policy: %w", err) 27 } 28 29 return policy, nil 30 } 31 32 // parseMembers reads and parses the members. 33 func parseMembers(membersFile string) ([]group.MemberRequest, error) { 34 members := struct { 35 Members []group.MemberRequest `json:"members"` 36 }{} 37 38 if membersFile == "" { 39 return members.Members, nil 40 } 41 42 contents, err := os.ReadFile(membersFile) 43 if err != nil { 44 return nil, err 45 } 46 47 if err := json.Unmarshal(contents, &members); err != nil { 48 return nil, err 49 } 50 51 return members.Members, nil 52 } 53 54 func execFromString(execStr string) group.Exec { 55 exec := group.Exec_EXEC_UNSPECIFIED 56 if execStr == ExecTry { 57 exec = group.Exec_EXEC_TRY 58 } 59 60 return exec 61 } 62 63 // Proposal defines a Msg-based group proposal for CLI purposes. 64 type Proposal struct { 65 GroupPolicyAddress string `json:"group_policy_address"` 66 // Messages defines an array of sdk.Msgs proto-JSON-encoded as Anys. 67 Messages []json.RawMessage `json:"messages,omitempty"` 68 Metadata string `json:"metadata"` 69 Proposers []string `json:"proposers"` 70 Title string `json:"title"` 71 Summary string `json:"summary"` 72 } 73 74 func getCLIProposal(path string) (Proposal, error) { 75 contents, err := os.ReadFile(path) 76 if err != nil { 77 return Proposal{}, err 78 } 79 80 return parseCLIProposal(contents) 81 } 82 83 func parseCLIProposal(contents []byte) (Proposal, error) { 84 var p Proposal 85 if err := json.Unmarshal(contents, &p); err != nil { 86 return Proposal{}, err 87 } 88 89 return p, nil 90 } 91 92 func parseMsgs(cdc codec.Codec, p Proposal) ([]sdk.Msg, error) { 93 msgs := make([]sdk.Msg, len(p.Messages)) 94 for i, anyJSON := range p.Messages { 95 var msg sdk.Msg 96 err := cdc.UnmarshalInterfaceJSON(anyJSON, &msg) 97 if err != nil { 98 return nil, err 99 } 100 101 msgs[i] = msg 102 } 103 104 return msgs, nil 105 }