package files import ( "io/ioutil" "os" "github.com/pkg/errors" "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-amino style func SaveFullCommit(fc lite.FullCommit, path string) error { f, err := os.Create(path) if err != nil { return errors.WithStack(err) } defer f.Close() _, err = cdc.MarshalBinaryWriter(f, fc) if err != nil { return errors.WithStack(err) } return nil } // 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() bz, err := cdc.MarshalJSON(fc) if err != nil { return errors.WithStack(err) } _, err = f.Write(bz) if err != nil { return errors.WithStack(err) } return nil } // 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() _, err = cdc.UnmarshalBinaryReader(f, &fc, 0) if err != nil { return fc, errors.WithStack(err) } return fc, nil } // 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() bz, err := ioutil.ReadAll(f) if err != nil { return fc, errors.WithStack(err) } err = cdc.UnmarshalJSON(bz, &fc) if err != nil { return fc, errors.WithStack(err) } return fc, nil }