diff --git a/abi/cbor_gen.go b/abi/cbor_gen.go index 55563644..97a5a4a5 100644 --- a/abi/cbor_gen.go +++ b/abi/cbor_gen.go @@ -251,3 +251,78 @@ func (t *AddrPairKey) UnmarshalCBOR(r io.Reader) (err error) { } return nil } + +func (t *DealIDList) MarshalCBOR(w io.Writer) error { + cw := cbg.NewCborWriter(w) + + // (*t) (abi.DealIDList) (slice) + if len((*t)) > 8192 { + return xerrors.Errorf("Slice value in field (*t) was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len((*t)))); err != nil { + return err + } + for _, v := range *t { + + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(v)); err != nil { + return err + } + + } + return nil +} + +func (t *DealIDList) UnmarshalCBOR(r io.Reader) (err error) { + *t = DealIDList{} + + cr := cbg.NewCborReader(r) + var maj byte + var extra uint64 + _ = maj + _ = extra + // (*t) (abi.DealIDList) (slice) + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + + if extra > 8192 { + return fmt.Errorf("(*t): array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + (*t) = make([]DealID, extra) + } + + for i := 0; i < int(extra); i++ { + { + var maj byte + var extra uint64 + var err error + _ = maj + _ = extra + _ = err + + { + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + (*t)[i] = DealID(extra) + + } + + } + } + return nil +} diff --git a/abi/deal.go b/abi/deal.go index 2208ab37..e1d7d62f 100644 --- a/abi/deal.go +++ b/abi/deal.go @@ -4,6 +4,8 @@ import "github.com/filecoin-project/go-state-types/big" type DealID uint64 +type DealIDList []DealID + // BigInt types are aliases rather than new types because the latter introduce incredible amounts of noise // converting to and from types in order to manipulate values. // We give up some type safety for ergonomics. diff --git a/gen/gen.go b/gen/gen.go index ee7c740c..efac9b5f 100644 --- a/gen/gen.go +++ b/gen/gen.go @@ -13,6 +13,7 @@ func main() { abi.PieceInfo{}, abi.SectorID{}, abi.AddrPairKey{}, + abi.DealIDList{}, ); err != nil { panic(err) }