github.com/Finschia/finschia-sdk@v0.48.1/x/params/client/utils/utils.go (about)

     1  package utils
     2  
     3  import (
     4  	"encoding/json"
     5  	"os"
     6  
     7  	"github.com/Finschia/finschia-sdk/codec"
     8  	"github.com/Finschia/finschia-sdk/x/params/types/proposal"
     9  )
    10  
    11  type (
    12  	// ParamChangesJSON defines a slice of ParamChangeJSON objects which can be
    13  	// converted to a slice of ParamChange objects.
    14  	ParamChangesJSON []ParamChangeJSON
    15  
    16  	// ParamChangeJSON defines a parameter change used in JSON input. This
    17  	// allows values to be specified in raw JSON instead of being string encoded.
    18  	ParamChangeJSON struct {
    19  		Subspace string          `json:"subspace" yaml:"subspace"`
    20  		Key      string          `json:"key" yaml:"key"`
    21  		Value    json.RawMessage `json:"value" yaml:"value"`
    22  	}
    23  
    24  	// ParamChangeProposalJSON defines a ParameterChangeProposal with a deposit used
    25  	// to parse parameter change proposals from a JSON file.
    26  	ParamChangeProposalJSON struct {
    27  		Title       string           `json:"title" yaml:"title"`
    28  		Description string           `json:"description" yaml:"description"`
    29  		Changes     ParamChangesJSON `json:"changes" yaml:"changes"`
    30  		Deposit     string           `json:"deposit" yaml:"deposit"`
    31  	}
    32  )
    33  
    34  func NewParamChangeJSON(subspace, key string, value json.RawMessage) ParamChangeJSON {
    35  	return ParamChangeJSON{subspace, key, value}
    36  }
    37  
    38  // ToParamChange converts a ParamChangeJSON object to ParamChange.
    39  func (pcj ParamChangeJSON) ToParamChange() proposal.ParamChange {
    40  	return proposal.NewParamChange(pcj.Subspace, pcj.Key, string(pcj.Value))
    41  }
    42  
    43  // ToParamChanges converts a slice of ParamChangeJSON objects to a slice of
    44  // ParamChange.
    45  func (pcj ParamChangesJSON) ToParamChanges() []proposal.ParamChange {
    46  	res := make([]proposal.ParamChange, len(pcj))
    47  	for i, pc := range pcj {
    48  		res[i] = pc.ToParamChange()
    49  	}
    50  	return res
    51  }
    52  
    53  // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from
    54  // file.
    55  func ParseParamChangeProposalJSON(cdc *codec.LegacyAmino, proposalFile string) (ParamChangeProposalJSON, error) {
    56  	proposal := ParamChangeProposalJSON{}
    57  
    58  	contents, err := os.ReadFile(proposalFile)
    59  	if err != nil {
    60  		return proposal, err
    61  	}
    62  
    63  	if err := cdc.UnmarshalJSON(contents, &proposal); err != nil {
    64  		return proposal, err
    65  	}
    66  
    67  	return proposal, nil
    68  }