package files import ( "encoding/json" "os" "github.com/pkg/errors" wire "github.com/tendermint/go-wire" "github.com/tendermint/tendermint/lite" liteErr "github.com/tendermint/tendermint/lite/errors" ) const ( // MaxFullCommitSize is the maximum number of bytes we will // read in for a full commit to avoid excessive allocations // in the deserializer MaxFullCommitSize = 1024 * 1024 ) // SaveFullCommit exports the seed in binary / go-wire style func SaveFullCommit(fc lite.FullCommit, path string) error { f, err := os.Create(path) if err != nil { return errors.WithStack(err) } defer f.Close() var n int wire.WriteBinary(fc, f, &n, &err) return errors.WithStack(err) } // SaveFullCommitJSON exports the seed in a json format func SaveFullCommitJSON(fc lite.FullCommit, path string) error { f, err := os.Create(path) if err != nil { return errors.WithStack(err) } defer f.Close() stream := json.NewEncoder(f) err = stream.Encode(fc) return errors.WithStack(err) } // LoadFullCommit loads the full commit from the file system. func LoadFullCommit(path string) (lite.FullCommit, error) { var fc lite.FullCommit f, err := os.Open(path) if err != nil { if os.IsNotExist(err) { return fc, liteErr.ErrCommitNotFound() } return fc, errors.WithStack(err) } defer f.Close() var n int wire.ReadBinaryPtr(&fc, f, MaxFullCommitSize, &n, &err) return fc, errors.WithStack(err) } // LoadFullCommitJSON loads the commit from the file system in JSON format. func LoadFullCommitJSON(path string) (lite.FullCommit, error) { var fc lite.FullCommit f, err := os.Open(path) if err != nil { if os.IsNotExist(err) { return fc, liteErr.ErrCommitNotFound() } return fc, errors.WithStack(err) } defer f.Close() stream := json.NewDecoder(f) err = stream.Decode(&fc) return fc, errors.WithStack(err) }