45 lines
1.1 KiB
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
|
|
}
|