cosmos-sdk/core/genesis/target.go

45 lines
1.1 KiB
Go

package genesis
import (
"bytes"
"encoding/json"
"io"
"cosmossdk.io/core/appmodule"
)
// RawJSONTarget returns a struct which encapsulates a genesis target that is
// backed by raw JSON messages. Its Target method should be used to retrieve
// an actual genesis target function. When genesis writing is done, the JSON
// method should be called to retrieve the raw message that has been written.
type RawJSONTarget struct {
m map[string]json.RawMessage
}
// Target returns the actual genesis target function.
func (r *RawJSONTarget) Target() appmodule.GenesisTarget {
return func(field string) (io.WriteCloser, error) {
if r.m == nil {
r.m = map[string]json.RawMessage{}
}
return &genesisWriter{Buffer: &bytes.Buffer{}, sink: r, field: field}, nil
}
}
// JSON returns the raw JSON message that has been written.
func (r *RawJSONTarget) JSON() (json.RawMessage, error) {
return json.MarshalIndent(r.m, "", " ")
}
type genesisWriter struct {
*bytes.Buffer
field string
sink *RawJSONTarget
}
func (r genesisWriter) Close() error {
r.sink.m[r.field] = r.Buffer.Bytes()
return nil
}