diff --git a/capabilities/access/datamodel/cbor_gen.go b/capabilities/access/cbor_gen.go similarity index 90% rename from capabilities/access/datamodel/cbor_gen.go rename to capabilities/access/cbor_gen.go index 4233a63..644c288 100644 --- a/capabilities/access/datamodel/cbor_gen.go +++ b/capabilities/access/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package access import ( "fmt" @@ -19,7 +21,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *RequestArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *RequestArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -31,7 +33,7 @@ func (t *RequestArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) if len("att") > 8192 { return xerrors.Errorf("Value in field \"att\" was too long") } @@ -75,8 +77,8 @@ func (t *RequestArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RequestArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RequestArgumentsModel{} +func (t *RequestArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = RequestArguments{} cr := cbg.NewCborReader(r) @@ -95,7 +97,7 @@ func (t *RequestArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RequestArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("RequestArguments: map struct too large (%d)", extra) } n := extra @@ -116,7 +118,7 @@ func (t *RequestArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) case "att": maj, extra, err = cr.ReadHeader() @@ -133,7 +135,7 @@ func (t *RequestArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > 0 { - t.Attenuations = make([]CapabilityRequestModel, extra) + t.Attenuations = make([]CapabilityRequest, extra) } for i := 0; i < int(extra); i++ { @@ -176,7 +178,7 @@ func (t *RequestArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *CapabilityRequestModel) MarshalCBOR(w io.Writer) error { +func (t *CapabilityRequest) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -213,8 +215,8 @@ func (t *CapabilityRequestModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *CapabilityRequestModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = CapabilityRequestModel{} +func (t *CapabilityRequest) UnmarshalCBOR(r io.Reader) (err error) { + *t = CapabilityRequest{} cr := cbg.NewCborReader(r) @@ -233,7 +235,7 @@ func (t *CapabilityRequestModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("CapabilityRequestModel: map struct too large (%d)", extra) + return fmt.Errorf("CapabilityRequest: map struct too large (%d)", extra) } n := extra @@ -276,7 +278,7 @@ func (t *CapabilityRequestModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *RequestOKModel) MarshalCBOR(w io.Writer) error { +func (t *RequestOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -344,8 +346,8 @@ func (t *RequestOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RequestOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RequestOKModel{} +func (t *RequestOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = RequestOK{} cr := cbg.NewCborReader(r) @@ -364,7 +366,7 @@ func (t *RequestOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RequestOKModel: map struct too large (%d)", extra) + return fmt.Errorf("RequestOK: map struct too large (%d)", extra) } n := extra @@ -445,7 +447,7 @@ func (t *RequestOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ClaimOKModel) MarshalCBOR(w io.Writer) error { +func (t *ClaimOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -486,8 +488,8 @@ func (t *ClaimOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ClaimOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ClaimOKModel{} +func (t *ClaimOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = ClaimOK{} cr := cbg.NewCborReader(r) @@ -506,7 +508,7 @@ func (t *ClaimOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ClaimOKModel: map struct too large (%d)", extra) + return fmt.Errorf("ClaimOK: map struct too large (%d)", extra) } n := extra @@ -580,7 +582,7 @@ func (t *ClaimOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ConfirmArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ConfirmArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -592,7 +594,7 @@ func (t *ConfirmArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) if len("att") > 8192 { return xerrors.Errorf("Value in field \"att\" was too long") } @@ -669,8 +671,8 @@ func (t *ConfirmArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ConfirmArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ConfirmArgumentsModel{} +func (t *ConfirmArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ConfirmArguments{} cr := cbg.NewCborReader(r) @@ -689,7 +691,7 @@ func (t *ConfirmArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ConfirmArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ConfirmArguments: map struct too large (%d)", extra) } n := extra @@ -710,7 +712,7 @@ func (t *ConfirmArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) case "att": maj, extra, err = cr.ReadHeader() @@ -727,7 +729,7 @@ func (t *ConfirmArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > 0 { - t.Attenuations = make([]CapabilityRequestModel, extra) + t.Attenuations = make([]CapabilityRequest, extra) } for i := 0; i < int(extra); i++ { @@ -793,7 +795,7 @@ func (t *ConfirmArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *DelegateArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *DelegateArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -834,8 +836,8 @@ func (t *DelegateArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *DelegateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = DelegateArgumentsModel{} +func (t *DelegateArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = DelegateArguments{} cr := cbg.NewCborReader(r) @@ -854,7 +856,7 @@ func (t *DelegateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("DelegateArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("DelegateArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/access/claim.go b/capabilities/access/claim.go index a9e0e55..d127045 100644 --- a/capabilities/access/claim.go +++ b/capabilities/access/claim.go @@ -1,18 +1,13 @@ -package access +//go:build !codegen -import ( - adm "github.com/fil-forge/libforge/capabilities/access/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package access -type ( - ClaimArguments = cdm.UnitModel - ClaimOK = adm.ClaimOKModel -) +import "github.com/fil-forge/libforge/capabilities" const ClaimCommand = "/access/claim" +type ClaimArguments = capabilities.Unit + // Claim can be invoked by an agent to claim a set of delegations from the // account. -var Claim, _ = bindcap.New[*ClaimArguments](ClaimCommand) +var Claim = capabilities.MustNew[*ClaimArguments](ClaimCommand) diff --git a/capabilities/access/confirm.go b/capabilities/access/confirm.go index e3f61d3..8d6c464 100644 --- a/capabilities/access/confirm.go +++ b/capabilities/access/confirm.go @@ -1,15 +1,15 @@ +//go:build !codegen + package access import ( - adm "github.com/fil-forge/libforge/capabilities/access/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/errors" - "github.com/fil-forge/ucantone/validator/bindcap" ) -type ( - ConfirmArguments = adm.ConfirmArgumentsModel - ConfirmOK = adm.ConfirmOKModel -) +// ConfirmOK mirrors ClaimOK — confirming an access request grants the same +// shape of delegations bundle as claiming them. +type ConfirmOK = ClaimOK // ConfirmMetaKey is the key in metadata in any delegation created by a // successful access request. The value is a link back to the `/access/confirm` @@ -19,7 +19,7 @@ const ConfirmMetaKey = "accessConfirm" const ConfirmCommand = "/access/confirm" // Confirm can be invoked by an agent to confirm an access request. -var Confirm, _ = bindcap.New[*ConfirmArguments](ConfirmCommand) +var Confirm = capabilities.MustNew[*ConfirmArguments](ConfirmCommand) const ( InvalidAccessConfirmSubjectErrorName = "InvalidAccessConfirmSubject" diff --git a/capabilities/access/datamodel/claim.go b/capabilities/access/datamodel/claim.go deleted file mode 100644 index 83199f6..0000000 --- a/capabilities/access/datamodel/claim.go +++ /dev/null @@ -1,8 +0,0 @@ -package datamodel - -import cid "github.com/ipfs/go-cid" - -type ClaimOKModel struct { - // Delegations is a list of the CIDs of delegations granted for the request. - Delegations []cid.Cid `cborgen:"delegations" dagjsongen:"delegations"` -} diff --git a/capabilities/access/datamodel/confirm.go b/capabilities/access/datamodel/confirm.go deleted file mode 100644 index 9a5bc8e..0000000 --- a/capabilities/access/datamodel/confirm.go +++ /dev/null @@ -1,16 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/did" - cid "github.com/ipfs/go-cid" -) - -type ConfirmArgumentsModel struct { - // Link to the `/access/request` this invocation is confirming. - Cause cid.Cid `cborgen:"cause" dagjsongen:"cause"` - Issuer did.DID `cborgen:"iss" dagjsongen:"iss"` - Audience did.DID `cborgen:"aud" dagjsongen:"aud"` - Attenuations []CapabilityRequestModel `cborgen:"att" dagjsongen:"att"` -} - -type ConfirmOKModel = ClaimOKModel diff --git a/capabilities/access/datamodel/delegate.go b/capabilities/access/datamodel/delegate.go deleted file mode 100644 index ffbb275..0000000 --- a/capabilities/access/datamodel/delegate.go +++ /dev/null @@ -1,8 +0,0 @@ -package datamodel - -import "github.com/ipfs/go-cid" - -type DelegateArgumentsModel struct { - // The delegations to store. - Delegations []cid.Cid `cborgen:"delegations" dagjsongen:"delegations"` -} diff --git a/capabilities/access/datamodel/gen/main.go b/capabilities/access/datamodel/gen/main.go deleted file mode 100644 index a1a7521..0000000 --- a/capabilities/access/datamodel/gen/main.go +++ /dev/null @@ -1,28 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - "github.com/fil-forge/libforge/capabilities/access/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - datamodel.RequestArgumentsModel{}, - datamodel.CapabilityRequestModel{}, - datamodel.RequestOKModel{}, - datamodel.ClaimOKModel{}, - datamodel.ConfirmArgumentsModel{}, - datamodel.DelegateArgumentsModel{}, - } - - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/access/datamodel/request.go b/capabilities/access/datamodel/request.go deleted file mode 100644 index 2604379..0000000 --- a/capabilities/access/datamodel/request.go +++ /dev/null @@ -1,28 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/ucan" - "github.com/fil-forge/ucantone/ucan/promise" - "github.com/ipfs/go-cid" -) - -type RequestArgumentsModel struct { - // DID of the Account authorization is requested from. - Issuer did.DID `cborgen:"iss" dagjsongen:"iss"` - // Capabilities agent wishes to be granted. - Attenuations []CapabilityRequestModel `cborgen:"att" dagjsongen:"att"` -} - -type CapabilityRequestModel struct { - Command ucan.Command `cborgen:"cmd" dagjsongen:"cmd"` -} - -type RequestOKModel struct { - // Request is a link to the access request invocation. - Request cid.Cid `cborgen:"req" dagjsongen:"req"` - // Confirm is the task that will confirm the access request. - Confirm promise.AwaitOK `cborgen:"confirm" dagjsongen:"confirm"` - // Expiration is the time at which the confirmation will expire. - Expiration int64 `cborgen:"exp" dagjsongen:"exp"` -} diff --git a/capabilities/access/delegate.go b/capabilities/access/delegate.go index 41a65ef..82e4745 100644 --- a/capabilities/access/delegate.go +++ b/capabilities/access/delegate.go @@ -1,21 +1,16 @@ +//go:build !codegen + package access -import ( - adm "github.com/fil-forge/libforge/capabilities/access/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) - -type ( - DelegateArguments = adm.DelegateArgumentsModel - DelegateOK = cdm.UnitModel -) +import "github.com/fil-forge/libforge/capabilities" const DelegateCommand = "/access/delegate" +type DelegateOK = capabilities.Unit + // Delegate can be invoked by an agent to delegate a set of capabilities that // may be subsequently claimed by another agent. -var Delegate, _ = bindcap.New[*DelegateArguments](DelegateCommand) +var Delegate = capabilities.MustNew[*DelegateArguments](DelegateCommand) const ( DelegationNotFoundErrorName = "DelegationNotFound" diff --git a/capabilities/access/gen/main.go b/capabilities/access/gen/main.go new file mode 100644 index 0000000..914b147 --- /dev/null +++ b/capabilities/access/gen/main.go @@ -0,0 +1,46 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/access" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + access.RequestArguments{}, + access.CapabilityRequest{}, + access.RequestOK{}, + access.ClaimOK{}, + access.ConfirmArguments{}, + access.DelegateArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "access", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "access", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/access/datamodel/json_gen.go b/capabilities/access/json_gen.go similarity index 83% rename from capabilities/access/datamodel/json_gen.go rename to capabilities/access/json_gen.go index 6b110cc..0215a19 100644 --- a/capabilities/access/datamodel/json_gen.go +++ b/capabilities/access/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package access import ( "errors" @@ -19,7 +21,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *RequestArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *RequestArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -30,7 +32,7 @@ func (t *RequestArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) if len("att") > 8192 { return fmt.Errorf("string in field \"att\" was too long") } @@ -87,8 +89,8 @@ func (t *RequestArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RequestArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RequestArgumentsModel{} +func (t *RequestArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RequestArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -97,31 +99,31 @@ func (t *RequestArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RequestArgumentsModel: %w", err) + return fmt.Errorf("reading object open for RequestArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RequestArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for RequestArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RequestArgumentsModel: %w", err) + return fmt.Errorf("reading object close for RequestArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RequestArgumentsModel: string too large") + return fmt.Errorf("reading string for field RequestArguments: string too large") } - return fmt.Errorf("reading string for field RequestArgumentsModel: %w", err) + return fmt.Errorf("reading string for field RequestArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RequestArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field RequestArguments: %w", err) } switch name { - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) case "att": { @@ -140,7 +142,7 @@ func (t *RequestArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } else { for i := 0; i < 8192; i++ { - item := make([]CapabilityRequestModel, 1) + item := make([]CapabilityRequest, 1) if err := item[0].UnmarshalDagJSON(jr); err != nil { return fmt.Errorf("unmarshaling item[0]: %w", err) @@ -173,26 +175,26 @@ func (t *RequestArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RequestArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for RequestArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RequestArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field RequestArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RequestArgumentsModel") + return fmt.Errorf("map too large for RequestArguments") } } } return nil } -func (t *CapabilityRequestModel) MarshalDagJSON(w io.Writer) error { +func (t *CapabilityRequest) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -223,8 +225,8 @@ func (t *CapabilityRequestModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *CapabilityRequestModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = CapabilityRequestModel{} +func (t *CapabilityRequest) UnmarshalDagJSON(r io.Reader) (err error) { + *t = CapabilityRequest{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -233,27 +235,27 @@ func (t *CapabilityRequestModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for CapabilityRequestModel: %w", err) + return fmt.Errorf("reading object open for CapabilityRequest: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for CapabilityRequestModel: %w", err) + return fmt.Errorf("peeking object close for CapabilityRequest: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for CapabilityRequestModel: %w", err) + return fmt.Errorf("reading object close for CapabilityRequest: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field CapabilityRequestModel: string too large") + return fmt.Errorf("reading string for field CapabilityRequest: string too large") } - return fmt.Errorf("reading string for field CapabilityRequestModel: %w", err) + return fmt.Errorf("reading string for field CapabilityRequest: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field CapabilityRequestModel: %w", err) + return fmt.Errorf("reading object colon for field CapabilityRequest: %w", err) } switch name { @@ -272,26 +274,26 @@ func (t *CapabilityRequestModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for CapabilityRequestModel: %w", name, err) + return fmt.Errorf("ignoring field %s for CapabilityRequest: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field CapabilityRequestModel: %w", err) + return fmt.Errorf("reading object close or comma for field CapabilityRequest: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for CapabilityRequestModel") + return fmt.Errorf("map too large for CapabilityRequest") } } } return nil } -func (t *RequestOKModel) MarshalDagJSON(w io.Writer) error { +func (t *RequestOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -365,8 +367,8 @@ func (t *RequestOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RequestOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RequestOKModel{} +func (t *RequestOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RequestOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -375,27 +377,27 @@ func (t *RequestOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RequestOKModel: %w", err) + return fmt.Errorf("reading object open for RequestOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RequestOKModel: %w", err) + return fmt.Errorf("peeking object close for RequestOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RequestOKModel: %w", err) + return fmt.Errorf("reading object close for RequestOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RequestOKModel: string too large") + return fmt.Errorf("reading string for field RequestOK: string too large") } - return fmt.Errorf("reading string for field RequestOKModel: %w", err) + return fmt.Errorf("reading string for field RequestOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RequestOKModel: %w", err) + return fmt.Errorf("reading object colon for field RequestOK: %w", err) } switch name { @@ -432,26 +434,26 @@ func (t *RequestOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RequestOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for RequestOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RequestOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field RequestOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RequestOKModel") + return fmt.Errorf("map too large for RequestOK") } } } return nil } -func (t *ClaimOKModel) MarshalDagJSON(w io.Writer) error { +func (t *ClaimOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -499,8 +501,8 @@ func (t *ClaimOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ClaimOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ClaimOKModel{} +func (t *ClaimOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ClaimOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -509,27 +511,27 @@ func (t *ClaimOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ClaimOKModel: %w", err) + return fmt.Errorf("reading object open for ClaimOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ClaimOKModel: %w", err) + return fmt.Errorf("peeking object close for ClaimOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ClaimOKModel: %w", err) + return fmt.Errorf("reading object close for ClaimOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ClaimOKModel: string too large") + return fmt.Errorf("reading string for field ClaimOK: string too large") } - return fmt.Errorf("reading string for field ClaimOKModel: %w", err) + return fmt.Errorf("reading string for field ClaimOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ClaimOKModel: %w", err) + return fmt.Errorf("reading object colon for field ClaimOK: %w", err) } switch name { @@ -581,26 +583,26 @@ func (t *ClaimOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ClaimOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ClaimOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ClaimOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field ClaimOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ClaimOKModel") + return fmt.Errorf("map too large for ClaimOK") } } } return nil } -func (t *ConfirmArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ConfirmArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -611,7 +613,7 @@ func (t *ConfirmArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) if len("att") > 8192 { return fmt.Errorf("string in field \"att\" was too long") } @@ -710,8 +712,8 @@ func (t *ConfirmArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ConfirmArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ConfirmArgumentsModel{} +func (t *ConfirmArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ConfirmArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -720,31 +722,31 @@ func (t *ConfirmArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ConfirmArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ConfirmArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ConfirmArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ConfirmArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ConfirmArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ConfirmArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ConfirmArgumentsModel: string too large") + return fmt.Errorf("reading string for field ConfirmArguments: string too large") } - return fmt.Errorf("reading string for field ConfirmArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ConfirmArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ConfirmArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ConfirmArguments: %w", err) } switch name { - // t.Attenuations ([]datamodel.CapabilityRequestModel) (slice) + // t.Attenuations ([]access.CapabilityRequest) (slice) case "att": { @@ -763,7 +765,7 @@ func (t *ConfirmArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } else { for i := 0; i < 8192; i++ { - item := make([]CapabilityRequestModel, 1) + item := make([]CapabilityRequest, 1) if err := item[0].UnmarshalDagJSON(jr); err != nil { return fmt.Errorf("unmarshaling item[0]: %w", err) @@ -815,26 +817,26 @@ func (t *ConfirmArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ConfirmArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ConfirmArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ConfirmArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ConfirmArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ConfirmArgumentsModel") + return fmt.Errorf("map too large for ConfirmArguments") } } } return nil } -func (t *DelegateArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *DelegateArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -882,8 +884,8 @@ func (t *DelegateArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *DelegateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = DelegateArgumentsModel{} +func (t *DelegateArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = DelegateArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -892,27 +894,27 @@ func (t *DelegateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for DelegateArgumentsModel: %w", err) + return fmt.Errorf("reading object open for DelegateArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for DelegateArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for DelegateArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for DelegateArgumentsModel: %w", err) + return fmt.Errorf("reading object close for DelegateArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field DelegateArgumentsModel: string too large") + return fmt.Errorf("reading string for field DelegateArguments: string too large") } - return fmt.Errorf("reading string for field DelegateArgumentsModel: %w", err) + return fmt.Errorf("reading string for field DelegateArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field DelegateArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field DelegateArguments: %w", err) } switch name { @@ -964,19 +966,19 @@ func (t *DelegateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for DelegateArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for DelegateArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field DelegateArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field DelegateArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for DelegateArgumentsModel") + return fmt.Errorf("map too large for DelegateArguments") } } } diff --git a/capabilities/access/request.go b/capabilities/access/request.go index 32b8327..45ddf73 100644 --- a/capabilities/access/request.go +++ b/capabilities/access/request.go @@ -1,15 +1,8 @@ -package access +//go:build !codegen -import ( - adm "github.com/fil-forge/libforge/capabilities/access/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package access -type ( - RequestArguments = adm.RequestArgumentsModel - RequestOK = adm.RequestOKModel - CapabilityRequest = adm.CapabilityRequestModel -) +import "github.com/fil-forge/libforge/capabilities" // RequestFactKey is the key in metadata in any delegation created by a // successful access request. The value is a link back to the `/access/request` @@ -20,7 +13,7 @@ const RequestCommand = "/access/request" // Request can be invoked by an agent to request set of capabilities from the // account. -var Request, _ = bindcap.New[*RequestArguments](RequestCommand) +var Request = capabilities.MustNew[*RequestArguments](RequestCommand) const ( InvalidAuthorizationAccountErrorName = "InvalidAuthorizationAccount" diff --git a/capabilities/access/types.go b/capabilities/access/types.go new file mode 100644 index 0000000..07d0599 --- /dev/null +++ b/capabilities/access/types.go @@ -0,0 +1,45 @@ +package access + +import ( + "github.com/fil-forge/ucantone/did" + "github.com/fil-forge/ucantone/ucan" + "github.com/fil-forge/ucantone/ucan/promise" + "github.com/ipfs/go-cid" +) + +type ClaimOK struct { + // Delegations is a list of the CIDs of delegations granted for the request. + Delegations []cid.Cid `cborgen:"delegations" dagjsongen:"delegations"` +} + +type RequestArguments struct { + // DID of the Account authorization is requested from. + Issuer did.DID `cborgen:"iss" dagjsongen:"iss"` + // Capabilities agent wishes to be granted. + Attenuations []CapabilityRequest `cborgen:"att" dagjsongen:"att"` +} + +type CapabilityRequest struct { + Command ucan.Command `cborgen:"cmd" dagjsongen:"cmd"` +} + +type RequestOK struct { + // Request is a link to the access request invocation. + Request cid.Cid `cborgen:"req" dagjsongen:"req"` + // Confirm is the task that will confirm the access request. + Confirm promise.AwaitOK `cborgen:"confirm" dagjsongen:"confirm"` + // Expiration is the time at which the confirmation will expire. + Expiration int64 `cborgen:"exp" dagjsongen:"exp"` +} + +type ConfirmArguments struct { + Cause cid.Cid `cborgen:"cause" dagjsongen:"cause"` + Issuer did.DID `cborgen:"iss" dagjsongen:"iss"` + Audience did.DID `cborgen:"aud" dagjsongen:"aud"` + Attenuations []CapabilityRequest `cborgen:"att" dagjsongen:"att"` +} + +type DelegateArguments struct { + // The delegations to store. + Delegations []cid.Cid `cborgen:"delegations" dagjsongen:"delegations"` +} diff --git a/capabilities/assert/datamodel/cbor_gen.go b/capabilities/assert/cbor_gen.go similarity index 92% rename from capabilities/assert/datamodel/cbor_gen.go rename to capabilities/assert/cbor_gen.go index bdf298d..1526c1d 100644 --- a/capabilities/assert/datamodel/cbor_gen.go +++ b/capabilities/assert/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package assert import ( "fmt" @@ -19,7 +21,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *IndexArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *IndexArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -50,8 +52,8 @@ func (t *IndexArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *IndexArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = IndexArgumentsModel{} +func (t *IndexArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = IndexArguments{} cr := cbg.NewCborReader(r) @@ -70,7 +72,7 @@ func (t *IndexArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("IndexArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("IndexArguments: map struct too large (%d)", extra) } n := extra @@ -115,7 +117,7 @@ func (t *IndexArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *LocationArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *LocationArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -132,7 +134,7 @@ func (t *LocationArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (assert.Range) (struct) if t.Range != nil { if len("range") > 8192 { @@ -219,8 +221,8 @@ func (t *LocationArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *LocationArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = LocationArgumentsModel{} +func (t *LocationArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = LocationArguments{} cr := cbg.NewCborReader(r) @@ -239,7 +241,7 @@ func (t *LocationArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("LocationArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("LocationArguments: map struct too large (%d)", extra) } n := extra @@ -260,7 +262,7 @@ func (t *LocationArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Range (datamodel.RangeModel) (struct) + // t.Range (assert.Range) (struct) case "range": { @@ -273,7 +275,7 @@ func (t *LocationArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.Range = new(RangeModel) + t.Range = new(Range) if err := t.Range.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.Range pointer: %w", err) } @@ -363,7 +365,7 @@ func (t *LocationArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *RangeModel) MarshalCBOR(w io.Writer) error { +func (t *Range) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -425,8 +427,8 @@ func (t *RangeModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RangeModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RangeModel{} +func (t *Range) UnmarshalCBOR(r io.Reader) (err error) { + *t = Range{} cr := cbg.NewCborReader(r) @@ -445,7 +447,7 @@ func (t *RangeModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RangeModel: map struct too large (%d)", extra) + return fmt.Errorf("Range: map struct too large (%d)", extra) } n := extra @@ -517,7 +519,7 @@ func (t *RangeModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *EqualsArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *EqualsArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -572,8 +574,8 @@ func (t *EqualsArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *EqualsArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = EqualsArgumentsModel{} +func (t *EqualsArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = EqualsArguments{} cr := cbg.NewCborReader(r) @@ -592,7 +594,7 @@ func (t *EqualsArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("EqualsArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("EqualsArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/assert/datamodel/equals.go b/capabilities/assert/datamodel/equals.go deleted file mode 100644 index b4c8654..0000000 --- a/capabilities/assert/datamodel/equals.go +++ /dev/null @@ -1,11 +0,0 @@ -package datamodel - -import ( - "github.com/ipfs/go-cid" - "github.com/multiformats/go-multihash" -) - -type EqualsArgumentsModel struct { - Content multihash.Multihash `cborgen:"content" dagjsongen:"content"` - Equals cid.Cid `cborgen:"equals" dagjsongen:"equals"` -} diff --git a/capabilities/assert/datamodel/gen/main.go b/capabilities/assert/datamodel/gen/main.go deleted file mode 100644 index 41039c5..0000000 --- a/capabilities/assert/datamodel/gen/main.go +++ /dev/null @@ -1,26 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - "github.com/fil-forge/libforge/capabilities/assert/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - datamodel.IndexArgumentsModel{}, - datamodel.LocationArgumentsModel{}, - datamodel.RangeModel{}, - datamodel.EqualsArgumentsModel{}, - } - - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/assert/datamodel/index.go b/capabilities/assert/datamodel/index.go deleted file mode 100644 index fc99a05..0000000 --- a/capabilities/assert/datamodel/index.go +++ /dev/null @@ -1,7 +0,0 @@ -package datamodel - -import "github.com/ipfs/go-cid" - -type IndexArgumentsModel struct { - Index cid.Cid `cborgen:"index" dagjsongen:"index"` -} diff --git a/capabilities/assert/equals.go b/capabilities/assert/equals.go index 524ca3e..a590b47 100644 --- a/capabilities/assert/equals.go +++ b/capabilities/assert/equals.go @@ -1,17 +1,12 @@ -package assert +//go:build !codegen -import ( - adm "github.com/fil-forge/libforge/capabilities/assert/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package assert -type ( - EqualsArguments = adm.EqualsArgumentsModel - EqualsOK = cdm.UnitModel -) +import "github.com/fil-forge/libforge/capabilities" const EqualsCommand = "/assert/equals" +type EqualsOK = capabilities.Unit + // Equals claims data is referred to by another CID e.g CAR CID & Piece CID -var Equals, _ = bindcap.New[*EqualsArguments](EqualsCommand) +var Equals = capabilities.MustNew[*EqualsArguments](EqualsCommand) diff --git a/capabilities/assert/gen/main.go b/capabilities/assert/gen/main.go new file mode 100644 index 0000000..fe831aa --- /dev/null +++ b/capabilities/assert/gen/main.go @@ -0,0 +1,44 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/assert" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + assert.IndexArguments{}, + assert.LocationArguments{}, + assert.Range{}, + assert.EqualsArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "assert", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "assert", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/assert/index.go b/capabilities/assert/index.go index 2ada6d6..6a90acf 100644 --- a/capabilities/assert/index.go +++ b/capabilities/assert/index.go @@ -1,18 +1,13 @@ -package assert +//go:build !codegen -import ( - adm "github.com/fil-forge/libforge/capabilities/assert/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package assert -type ( - IndexArguments = adm.IndexArgumentsModel - IndexOK = cdm.UnitModel -) +import "github.com/fil-forge/libforge/capabilities" const IndexCommand = "/assert/index" +type IndexOK = capabilities.Unit + // Index claims that a content graph can be found in blob(s) that are identified // and indexed in the given index CID. -var Index, _ = bindcap.New[*IndexArguments](IndexCommand) +var Index = capabilities.MustNew[*IndexArguments](IndexCommand) diff --git a/capabilities/assert/datamodel/json_gen.go b/capabilities/assert/json_gen.go similarity index 82% rename from capabilities/assert/datamodel/json_gen.go rename to capabilities/assert/json_gen.go index f8fa946..2dc2cf3 100644 --- a/capabilities/assert/datamodel/json_gen.go +++ b/capabilities/assert/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package assert import ( "errors" @@ -19,7 +21,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *IndexArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *IndexArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -49,8 +51,8 @@ func (t *IndexArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *IndexArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = IndexArgumentsModel{} +func (t *IndexArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = IndexArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -59,27 +61,27 @@ func (t *IndexArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for IndexArgumentsModel: %w", err) + return fmt.Errorf("reading object open for IndexArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for IndexArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for IndexArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for IndexArgumentsModel: %w", err) + return fmt.Errorf("reading object close for IndexArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field IndexArgumentsModel: string too large") + return fmt.Errorf("reading string for field IndexArguments: string too large") } - return fmt.Errorf("reading string for field IndexArgumentsModel: %w", err) + return fmt.Errorf("reading string for field IndexArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field IndexArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field IndexArguments: %w", err) } switch name { @@ -97,26 +99,26 @@ func (t *IndexArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for IndexArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for IndexArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field IndexArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field IndexArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for IndexArgumentsModel") + return fmt.Errorf("map too large for IndexArguments") } } } return nil } -func (t *LocationArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *LocationArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -192,7 +194,7 @@ func (t *LocationArgumentsModel) MarshalDagJSON(w io.Writer) error { } } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (assert.Range) (struct) if t.Range != nil { if len("range") > 8192 { return fmt.Errorf("string in field \"range\" was too long") @@ -233,8 +235,8 @@ func (t *LocationArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *LocationArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = LocationArgumentsModel{} +func (t *LocationArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = LocationArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -243,27 +245,27 @@ func (t *LocationArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for LocationArgumentsModel: %w", err) + return fmt.Errorf("reading object open for LocationArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for LocationArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for LocationArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for LocationArgumentsModel: %w", err) + return fmt.Errorf("reading object close for LocationArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field LocationArgumentsModel: string too large") + return fmt.Errorf("reading string for field LocationArguments: string too large") } - return fmt.Errorf("reading string for field LocationArgumentsModel: %w", err) + return fmt.Errorf("reading string for field LocationArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field LocationArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field LocationArguments: %w", err) } switch name { @@ -325,7 +327,7 @@ func (t *LocationArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (assert.Range) (struct) case "range": { @@ -338,7 +340,7 @@ func (t *LocationArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { return fmt.Errorf("reading null for field t.Range: %w", err) } } else { - t.Range = new(RangeModel) + t.Range = new(Range) if err := t.Range.UnmarshalDagJSON(jr); err != nil { return fmt.Errorf("unmarshaling t.Range pointer: %w", err) } @@ -355,26 +357,26 @@ func (t *LocationArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for LocationArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for LocationArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field LocationArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field LocationArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for LocationArgumentsModel") + return fmt.Errorf("map too large for LocationArguments") } } } return nil } -func (t *RangeModel) MarshalDagJSON(w io.Writer) error { +func (t *Range) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -436,8 +438,8 @@ func (t *RangeModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RangeModel{} +func (t *Range) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Range{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -446,27 +448,27 @@ func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RangeModel: %w", err) + return fmt.Errorf("reading object open for Range: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RangeModel: %w", err) + return fmt.Errorf("peeking object close for Range: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RangeModel: %w", err) + return fmt.Errorf("reading object close for Range: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RangeModel: string too large") + return fmt.Errorf("reading string for field Range: string too large") } - return fmt.Errorf("reading string for field RangeModel: %w", err) + return fmt.Errorf("reading string for field Range: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RangeModel: %w", err) + return fmt.Errorf("reading object colon for field Range: %w", err) } switch name { @@ -499,26 +501,26 @@ func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RangeModel: %w", name, err) + return fmt.Errorf("ignoring field %s for Range: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RangeModel: %w", err) + return fmt.Errorf("reading object close or comma for field Range: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RangeModel") + return fmt.Errorf("map too large for Range") } } } return nil } -func (t *EqualsArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *EqualsArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -575,8 +577,8 @@ func (t *EqualsArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *EqualsArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = EqualsArgumentsModel{} +func (t *EqualsArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = EqualsArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -585,27 +587,27 @@ func (t *EqualsArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for EqualsArgumentsModel: %w", err) + return fmt.Errorf("reading object open for EqualsArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for EqualsArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for EqualsArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for EqualsArgumentsModel: %w", err) + return fmt.Errorf("reading object close for EqualsArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field EqualsArgumentsModel: string too large") + return fmt.Errorf("reading string for field EqualsArguments: string too large") } - return fmt.Errorf("reading string for field EqualsArgumentsModel: %w", err) + return fmt.Errorf("reading string for field EqualsArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field EqualsArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field EqualsArguments: %w", err) } switch name { @@ -639,19 +641,19 @@ func (t *EqualsArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for EqualsArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for EqualsArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field EqualsArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field EqualsArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for EqualsArgumentsModel") + return fmt.Errorf("map too large for EqualsArguments") } } } diff --git a/capabilities/assert/location.go b/capabilities/assert/location.go index 4f27108..ceee71b 100644 --- a/capabilities/assert/location.go +++ b/capabilities/assert/location.go @@ -1,17 +1,11 @@ -package assert +//go:build !codegen -import ( - adm "github.com/fil-forge/libforge/capabilities/assert/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package assert -type ( - LocationArguments = adm.LocationArgumentsModel - LocationOK = cdm.UnitModel - Range = adm.RangeModel -) +import "github.com/fil-forge/libforge/capabilities" const LocationCommand = "/assert/location" -var Location, _ = bindcap.New[*LocationArguments](LocationCommand) +type LocationOK = capabilities.Unit + +var Location = capabilities.MustNew[*LocationArguments](LocationCommand) diff --git a/capabilities/assert/datamodel/location.go b/capabilities/assert/types.go similarity index 55% rename from capabilities/assert/datamodel/location.go rename to capabilities/assert/types.go index c6c13b4..e8fc5d4 100644 --- a/capabilities/assert/datamodel/location.go +++ b/capabilities/assert/types.go @@ -1,19 +1,29 @@ -package datamodel +package assert import ( "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/did" + "github.com/ipfs/go-cid" "github.com/multiformats/go-multihash" ) -type LocationArgumentsModel struct { +type IndexArguments struct { + Index cid.Cid `cborgen:"index" dagjsongen:"index"` +} + +type LocationArguments struct { Space did.DID `cborgen:"space" dagjsongen:"space"` Content multihash.Multihash `cborgen:"content" dagjsongen:"content"` Location []capabilities.CborURL `cborgen:"location" dagjsongen:"location"` - Range *RangeModel `cborgen:"range,omitempty" dagjsongen:"range,omitempty"` + Range *Range `cborgen:"range,omitempty" dagjsongen:"range,omitempty"` } -type RangeModel struct { +type Range struct { Offset uint64 `cborgen:"offset" dagjsongen:"offset"` Length *uint64 `cborgen:"length,omitempty" dagjsongen:"length,omitempty"` } + +type EqualsArguments struct { + Content multihash.Multihash `cborgen:"content" dagjsongen:"content"` + Equals cid.Cid `cborgen:"equals" dagjsongen:"equals"` +} diff --git a/capabilities/bind.go b/capabilities/bind.go new file mode 100644 index 0000000..b347533 --- /dev/null +++ b/capabilities/bind.go @@ -0,0 +1,20 @@ +package capabilities + +import ( + "github.com/fil-forge/ucantone/ucan" + "github.com/fil-forge/ucantone/validator/bindcap" + "github.com/fil-forge/ucantone/validator/capability" +) + +// MustNew is like [bindcap.New] but panics if the capability cannot be +// constructed. It exists for package-level capability declarations where the +// command and options are static — any error indicates a programming bug +// (malformed command string, invalid option) and should fail loudly at init +// rather than be silently dropped with `, _`. +func MustNew[A bindcap.Arguments](cmd ucan.Command, opts ...capability.Option) *bindcap.Capability[A] { + c, err := bindcap.New[A](cmd, opts...) + if err != nil { + panic(err) + } + return c +} diff --git a/capabilities/blob/accept.go b/capabilities/blob/accept.go index 169571e..c347440 100644 --- a/capabilities/blob/accept.go +++ b/capabilities/blob/accept.go @@ -1,15 +1,9 @@ -package blob +//go:build !codegen -import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package blob -type ( - AcceptArguments = bdm.AcceptArgumentsModel - AcceptOK = bdm.AcceptOKModel -) +import "github.com/fil-forge/libforge/capabilities" const AcceptCommand = "/blob/accept" -var Accept, _ = bindcap.New[*AcceptArguments](AcceptCommand) +var Accept = capabilities.MustNew[*AcceptArguments](AcceptCommand) diff --git a/capabilities/blob/add.go b/capabilities/blob/add.go index 0e52f61..2252abb 100644 --- a/capabilities/blob/add.go +++ b/capabilities/blob/add.go @@ -1,21 +1,16 @@ +//go:build !codegen + package blob import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) const AddCommand = "/blob/add" -type ( - AddArguments = bdm.AddArgumentsModel - Blob = bdm.BlobModel - AddOK = bdm.AddOKModel -) - -var Add, _ = bindcap.New[*AddArguments]( +var Add = capabilities.MustNew[*AddArguments]( AddCommand, capability.WithPolicyBuilder( policy.GreaterThan(".blob.size", 0), diff --git a/capabilities/blob/allocate.go b/capabilities/blob/allocate.go index 10ace57..0c36ecc 100644 --- a/capabilities/blob/allocate.go +++ b/capabilities/blob/allocate.go @@ -1,23 +1,18 @@ +//go:build !codegen + package blob import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) const MaxBlobSize = 268_435_456 -type ( - AllocateArguments = bdm.AllocateArgumentsModel - AllocateOK = bdm.AllocateOKModel - BlobAddress = bdm.BlobAddressModel -) - const AllocateCommand = "/blob/allocate" -var Allocate, _ = bindcap.New[*AllocateArguments]( +var Allocate = capabilities.MustNew[*AllocateArguments]( AllocateCommand, capability.WithPolicyBuilder( policy.GreaterThan(".blob.size", 0), diff --git a/capabilities/blob/datamodel/cbor_gen.go b/capabilities/blob/cbor_gen.go similarity index 81% rename from capabilities/blob/datamodel/cbor_gen.go rename to capabilities/blob/cbor_gen.go index 948bdce..940120c 100644 --- a/capabilities/blob/datamodel/cbor_gen.go +++ b/capabilities/blob/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package blob import ( "fmt" @@ -19,7 +21,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AllocateArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -31,7 +33,7 @@ func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -66,8 +68,8 @@ func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AllocateArgumentsModel{} +func (t *AllocateArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AllocateArguments{} cr := cbg.NewCborReader(r) @@ -86,7 +88,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AllocateArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AllocateArguments: map struct too large (%d)", extra) } n := extra @@ -107,7 +109,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": { @@ -141,7 +143,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *BlobModel) MarshalCBOR(w io.Writer) error { +func (t *Blob) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -196,8 +198,8 @@ func (t *BlobModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = BlobModel{} +func (t *Blob) UnmarshalCBOR(r io.Reader) (err error) { + *t = Blob{} cr := cbg.NewCborReader(r) @@ -216,7 +218,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("BlobModel: map struct too large (%d)", extra) + return fmt.Errorf("Blob: map struct too large (%d)", extra) } n := extra @@ -285,7 +287,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AllocateOKModel) MarshalCBOR(w io.Writer) error { +func (t *AllocateOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -318,7 +320,7 @@ func (t *AllocateOKModel) MarshalCBOR(w io.Writer) error { return err } - // t.Address (datamodel.BlobAddressModel) (struct) + // t.Address (blob.BlobAddress) (struct) if t.Address != nil { if len("address") > 8192 { @@ -339,8 +341,8 @@ func (t *AllocateOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AllocateOKModel{} +func (t *AllocateOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = AllocateOK{} cr := cbg.NewCborReader(r) @@ -359,7 +361,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AllocateOKModel: map struct too large (%d)", extra) + return fmt.Errorf("AllocateOK: map struct too large (%d)", extra) } n := extra @@ -395,7 +397,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { t.Size = uint64(extra) } - // t.Address (datamodel.BlobAddressModel) (struct) + // t.Address (blob.BlobAddress) (struct) case "address": { @@ -408,7 +410,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.Address = new(BlobAddressModel) + t.Address = new(BlobAddress) if err := t.Address.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.Address pointer: %w", err) } @@ -426,7 +428,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *BlobAddressModel) MarshalCBOR(w io.Writer) error { +func (t *BlobAddress) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -532,8 +534,8 @@ func (t *BlobAddressModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *BlobAddressModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = BlobAddressModel{} +func (t *BlobAddress) UnmarshalCBOR(r io.Reader) (err error) { + *t = BlobAddress{} cr := cbg.NewCborReader(r) @@ -552,7 +554,7 @@ func (t *BlobAddressModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("BlobAddressModel: map struct too large (%d)", extra) + return fmt.Errorf("BlobAddress: map struct too large (%d)", extra) } n := extra @@ -663,7 +665,7 @@ func (t *BlobAddressModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AcceptArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AcceptArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -691,7 +693,7 @@ func (t *AcceptArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -709,8 +711,8 @@ func (t *AcceptArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AcceptArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AcceptArgumentsModel{} +func (t *AcceptArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AcceptArguments{} cr := cbg.NewCborReader(r) @@ -729,7 +731,7 @@ func (t *AcceptArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AcceptArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AcceptArguments: map struct too large (%d)", extra) } n := extra @@ -760,7 +762,7 @@ func (t *AcceptArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": { @@ -781,7 +783,7 @@ func (t *AcceptArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AcceptOKModel) MarshalCBOR(w io.Writer) error { +func (t *AcceptOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -812,8 +814,8 @@ func (t *AcceptOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AcceptOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AcceptOKModel{} +func (t *AcceptOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = AcceptOK{} cr := cbg.NewCborReader(r) @@ -832,7 +834,7 @@ func (t *AcceptOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AcceptOKModel: map struct too large (%d)", extra) + return fmt.Errorf("AcceptOK: map struct too large (%d)", extra) } n := extra @@ -877,7 +879,7 @@ func (t *AcceptOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AddArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -889,7 +891,7 @@ func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -907,8 +909,8 @@ func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddArguments{} cr := cbg.NewCborReader(r) @@ -927,7 +929,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AddArguments: map struct too large (%d)", extra) } n := extra @@ -948,7 +950,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": { @@ -969,7 +971,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AddOKModel) MarshalCBOR(w io.Writer) error { +func (t *AddOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -999,8 +1001,8 @@ func (t *AddOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddOKModel{} +func (t *AddOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddOK{} cr := cbg.NewCborReader(r) @@ -1019,7 +1021,7 @@ func (t *AddOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddOKModel: map struct too large (%d)", extra) + return fmt.Errorf("AddOK: map struct too large (%d)", extra) } n := extra @@ -1061,7 +1063,7 @@ func (t *AddOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *RemoveArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *RemoveArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -1100,8 +1102,8 @@ func (t *RemoveArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RemoveArgumentsModel{} +func (t *RemoveArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = RemoveArguments{} cr := cbg.NewCborReader(r) @@ -1120,7 +1122,7 @@ func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RemoveArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("RemoveArguments: map struct too large (%d)", extra) } n := extra @@ -1174,7 +1176,7 @@ func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ReplicateArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ReplicateArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -1186,7 +1188,7 @@ func (t *ReplicateArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -1237,8 +1239,8 @@ func (t *ReplicateArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ReplicateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ReplicateArgumentsModel{} +func (t *ReplicateArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ReplicateArguments{} cr := cbg.NewCborReader(r) @@ -1257,7 +1259,7 @@ func (t *ReplicateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ReplicateArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ReplicateArguments: map struct too large (%d)", extra) } n := extra @@ -1278,7 +1280,7 @@ func (t *ReplicateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": { @@ -1327,7 +1329,7 @@ func (t *ReplicateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ReplicateOKModel) MarshalCBOR(w io.Writer) error { +func (t *ReplicateOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -1367,8 +1369,8 @@ func (t *ReplicateOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ReplicateOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ReplicateOKModel{} +func (t *ReplicateOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = ReplicateOK{} cr := cbg.NewCborReader(r) @@ -1387,7 +1389,7 @@ func (t *ReplicateOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ReplicateOKModel: map struct too large (%d)", extra) + return fmt.Errorf("ReplicateOK: map struct too large (%d)", extra) } n := extra @@ -1458,7 +1460,7 @@ func (t *ReplicateOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ListArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -1539,8 +1541,8 @@ func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListArguments{} cr := cbg.NewCborReader(r) @@ -1559,7 +1561,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ListArguments: map struct too large (%d)", extra) } n := extra @@ -1637,7 +1639,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ListOKModel) MarshalCBOR(w io.Writer) error { +func (t *ListOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -1702,7 +1704,7 @@ func (t *ListOKModel) MarshalCBOR(w io.Writer) error { } } - // t.Results ([]datamodel.ListBlobItem) (slice) + // t.Results ([]blob.ListBlobItem) (slice) if len("results") > 8192 { return xerrors.Errorf("Value in field \"results\" was too long") } @@ -1730,8 +1732,8 @@ func (t *ListOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListOK{} cr := cbg.NewCborReader(r) @@ -1750,7 +1752,7 @@ func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListOKModel: map struct too large (%d)", extra) + return fmt.Errorf("ListOK: map struct too large (%d)", extra) } n := extra @@ -1807,7 +1809,7 @@ func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { t.Cursor = (*string)(&sval) } } - // t.Results ([]datamodel.ListBlobItem) (slice) + // t.Results ([]blob.ListBlobItem) (slice) case "results": maj, extra, err = cr.ReadHeader() @@ -1869,7 +1871,7 @@ func (t *ListBlobItem) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -1951,7 +1953,7 @@ func (t *ListBlobItem) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": { @@ -1998,3 +2000,274 @@ func (t *ListBlobItem) UnmarshalCBOR(r io.Reader) (err error) { return nil } +func (t *RetrieveArguments) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{161}); err != nil { + return err + } + + // t.Blob (blob.RetrieveBlob) (struct) + if len("blob") > 8192 { + return xerrors.Errorf("Value in field \"blob\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("blob"))); err != nil { + return err + } + if _, err := cw.WriteString(string("blob")); err != nil { + return err + } + + if err := t.Blob.MarshalCBOR(cw); err != nil { + return err + } + return nil +} + +func (t *RetrieveArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = RetrieveArguments{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("RetrieveArguments: map struct too large (%d)", extra) + } + + n := extra + + nameBuf := make([]byte, 4) + for i := uint64(0); i < n; i++ { + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) + if err != nil { + return err + } + + if !ok { + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { + return err + } + continue + } + + switch string(nameBuf[:nameLen]) { + // t.Blob (blob.RetrieveBlob) (struct) + case "blob": + + { + + if err := t.Blob.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.Blob: %w", err) + } + + } + + default: + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { + return err + } + } + } + + return nil +} +func (t *RetrieveBlob) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{161}); err != nil { + return err + } + + // t.Digest (multihash.Multihash) (slice) + if len("digest") > 8192 { + return xerrors.Errorf("Value in field \"digest\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { + return err + } + if _, err := cw.WriteString(string("digest")); err != nil { + return err + } + + if len(t.Digest) > 2097152 { + return xerrors.Errorf("Byte array in field t.Digest was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(t.Digest))); err != nil { + return err + } + + if _, err := cw.Write(t.Digest); err != nil { + return err + } + + return nil +} + +func (t *RetrieveBlob) UnmarshalCBOR(r io.Reader) (err error) { + *t = RetrieveBlob{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("RetrieveBlob: map struct too large (%d)", extra) + } + + n := extra + + nameBuf := make([]byte, 6) + for i := uint64(0); i < n; i++ { + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) + if err != nil { + return err + } + + if !ok { + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { + return err + } + continue + } + + switch string(nameBuf[:nameLen]) { + // t.Digest (multihash.Multihash) (slice) + case "digest": + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + + if extra > 2097152 { + return fmt.Errorf("t.Digest: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Digest = make([]uint8, extra) + } + + if _, err := io.ReadFull(cr, t.Digest); err != nil { + return err + } + + default: + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { + return err + } + } + } + + return nil +} +func (t *RetrieveOK) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{160}); err != nil { + return err + } + return nil +} + +func (t *RetrieveOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = RetrieveOK{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("RetrieveOK: map struct too large (%d)", extra) + } + + n := extra + + nameBuf := make([]byte, 0) + for i := uint64(0); i < n; i++ { + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) + if err != nil { + return err + } + + if !ok { + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { + return err + } + continue + } + + switch string(nameBuf[:nameLen]) { + + default: + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { + return err + } + } + } + + return nil +} diff --git a/capabilities/blob/datamodel/accept.go b/capabilities/blob/datamodel/accept.go deleted file mode 100644 index f5033aa..0000000 --- a/capabilities/blob/datamodel/accept.go +++ /dev/null @@ -1,15 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/ucan/promise" - cid "github.com/ipfs/go-cid" -) - -type AcceptArgumentsModel struct { - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` - Put promise.AwaitOK `cborgen:"_put" dagjsongen:"_put"` -} - -type AcceptOKModel struct { - Site cid.Cid `cborgen:"site" dagjsongen:"site"` -} diff --git a/capabilities/blob/datamodel/add.go b/capabilities/blob/datamodel/add.go deleted file mode 100644 index 7f34f18..0000000 --- a/capabilities/blob/datamodel/add.go +++ /dev/null @@ -1,21 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/ucan/promise" - "github.com/multiformats/go-multihash" -) - -type BlobModel struct { - Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` - Size uint64 `cborgen:"size" dagjsongen:"size"` -} - -type AddArgumentsModel struct { - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` -} - -type AddOKModel struct { - // Site is a promise of the `/blob/accept` task result, which contains a - // location claim for the blob, describing where it can be retrieved from. - Site promise.AwaitOK `cborgen:"site" dagjsongen:"site"` -} diff --git a/capabilities/blob/datamodel/allocate.go b/capabilities/blob/datamodel/allocate.go deleted file mode 100644 index 4dcaa0a..0000000 --- a/capabilities/blob/datamodel/allocate.go +++ /dev/null @@ -1,22 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/libforge/capabilities" - cid "github.com/ipfs/go-cid" -) - -type AllocateArgumentsModel struct { - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` - Cause cid.Cid `cborgen:"cause" dagjsongen:"cause"` -} - -type AllocateOKModel struct { - Size uint64 `cborgen:"size" dagjsongen:"size"` - Address *BlobAddressModel `cborgen:"address,omitempty" dagjsongen:"address,omitempty"` -} - -type BlobAddressModel struct { - URL capabilities.CborURL `cborgen:"url" dagjsongen:"url"` - Headers map[string]string `cborgen:"headers" dagjsongen:"headers"` - Expires int64 `cborgen:"expires" dagjsongen:"expires"` -} diff --git a/capabilities/blob/datamodel/gen/main.go b/capabilities/blob/datamodel/gen/main.go deleted file mode 100644 index 77c1e13..0000000 --- a/capabilities/blob/datamodel/gen/main.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - bdm.AllocateArgumentsModel{}, - bdm.BlobModel{}, - bdm.AllocateOKModel{}, - bdm.BlobAddressModel{}, - bdm.AcceptArgumentsModel{}, - bdm.AcceptOKModel{}, - bdm.AddArgumentsModel{}, - bdm.AddOKModel{}, - bdm.RemoveArgumentsModel{}, - bdm.ReplicateArgumentsModel{}, - bdm.ReplicateOKModel{}, - bdm.ListArgumentsModel{}, - bdm.ListOKModel{}, - bdm.ListBlobItem{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/blob/datamodel/list.go b/capabilities/blob/datamodel/list.go deleted file mode 100644 index a056837..0000000 --- a/capabilities/blob/datamodel/list.go +++ /dev/null @@ -1,17 +0,0 @@ -package datamodel - -type ListArgumentsModel struct { - Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` - Size *uint64 `cborgen:"size,omitempty" dagjsongen:"size,omitempty"` -} - -type ListOKModel struct { - Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` - Size uint64 `cborgen:"size" dagjsongen:"size"` - Results []ListBlobItem `cborgen:"results" dagjsongen:"results"` -} - -type ListBlobItem struct { - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` - InsertedAt int64 `cborgen:"insertedAt" dagjsongen:"insertedAt"` -} diff --git a/capabilities/blob/datamodel/remove.go b/capabilities/blob/datamodel/remove.go deleted file mode 100644 index 16e22b6..0000000 --- a/capabilities/blob/datamodel/remove.go +++ /dev/null @@ -1,7 +0,0 @@ -package datamodel - -import "github.com/multiformats/go-multihash" - -type RemoveArgumentsModel struct { - Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` -} diff --git a/capabilities/blob/datamodel/replicate.go b/capabilities/blob/datamodel/replicate.go deleted file mode 100644 index 72d1b08..0000000 --- a/capabilities/blob/datamodel/replicate.go +++ /dev/null @@ -1,23 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/ucan/promise" - cid "github.com/ipfs/go-cid" -) - -type ReplicateArgumentsModel struct { - // Blob is the blob that must be replicated. - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` - // Replicas is the number of replicas to ensure. - // e.g. Replicas: 3 will ensure 3 copies of the data exist in a network in total. - Replicas uint64 `cborgen:"replicas" dagjsongen:"replicas"` - // Site is a link to a location commitment indicating where the Blob must be - // fetched from. - Site cid.Cid `cborgen:"site" dagjsongen:"site"` -} - -type ReplicateOKModel struct { - // Site resolves to additional locations for the blob. They are links to - // `/blob/replica/transfer` tasks. - Site []promise.AwaitOK `cborgen:"site" dagjsongen:"site"` -} diff --git a/capabilities/blob/gen/main.go b/capabilities/blob/gen/main.go new file mode 100644 index 0000000..a908bfd --- /dev/null +++ b/capabilities/blob/gen/main.go @@ -0,0 +1,57 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/blob" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + blob.AllocateArguments{}, + blob.Blob{}, + blob.AllocateOK{}, + blob.BlobAddress{}, + blob.AcceptArguments{}, + blob.AcceptOK{}, + blob.AddArguments{}, + blob.AddOK{}, + blob.RemoveArguments{}, + blob.ReplicateArguments{}, + blob.ReplicateOK{}, + blob.ListArguments{}, + blob.ListOK{}, + blob.ListBlobItem{}, + blob.RetrieveArguments{}, + blob.RetrieveBlob{}, + blob.RetrieveOK{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "blob", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "blob", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/blob/datamodel/json_gen.go b/capabilities/blob/json_gen.go similarity index 73% rename from capabilities/blob/datamodel/json_gen.go rename to capabilities/blob/json_gen.go index c2b6062..14acc5d 100644 --- a/capabilities/blob/datamodel/json_gen.go +++ b/capabilities/blob/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package blob import ( "errors" @@ -19,7 +21,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *AllocateArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AllocateArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -30,7 +32,7 @@ func (t *AllocateArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -71,8 +73,8 @@ func (t *AllocateArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AllocateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AllocateArgumentsModel{} +func (t *AllocateArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AllocateArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -81,31 +83,31 @@ func (t *AllocateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AllocateArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AllocateArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AllocateArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AllocateArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AllocateArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AllocateArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AllocateArgumentsModel: string too large") + return fmt.Errorf("reading string for field AllocateArguments: string too large") } - return fmt.Errorf("reading string for field AllocateArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AllocateArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AllocateArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AllocateArguments: %w", err) } switch name { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { @@ -126,26 +128,26 @@ func (t *AllocateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AllocateArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AllocateArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AllocateArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AllocateArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AllocateArgumentsModel") + return fmt.Errorf("map too large for AllocateArguments") } } } return nil } -func (t *BlobModel) MarshalDagJSON(w io.Writer) error { +func (t *Blob) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -202,8 +204,8 @@ func (t *BlobModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = BlobModel{} +func (t *Blob) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Blob{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -212,27 +214,27 @@ func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for BlobModel: %w", err) + return fmt.Errorf("reading object open for Blob: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for BlobModel: %w", err) + return fmt.Errorf("peeking object close for Blob: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for BlobModel: %w", err) + return fmt.Errorf("reading object close for Blob: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field BlobModel: string too large") + return fmt.Errorf("reading string for field Blob: string too large") } - return fmt.Errorf("reading string for field BlobModel: %w", err) + return fmt.Errorf("reading string for field Blob: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field BlobModel: %w", err) + return fmt.Errorf("reading object colon for field Blob: %w", err) } switch name { @@ -266,26 +268,26 @@ func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for BlobModel: %w", name, err) + return fmt.Errorf("ignoring field %s for Blob: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field BlobModel: %w", err) + return fmt.Errorf("reading object close or comma for field Blob: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for BlobModel") + return fmt.Errorf("map too large for Blob") } } } return nil } -func (t *AllocateOKModel) MarshalDagJSON(w io.Writer) error { +func (t *AllocateOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -296,7 +298,7 @@ func (t *AllocateOKModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Address (datamodel.BlobAddressModel) (struct) + // t.Address (blob.BlobAddress) (struct) if t.Address != nil { if len("address") > 8192 { return fmt.Errorf("string in field \"address\" was too long") @@ -339,8 +341,8 @@ func (t *AllocateOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AllocateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AllocateOKModel{} +func (t *AllocateOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AllocateOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -349,31 +351,31 @@ func (t *AllocateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AllocateOKModel: %w", err) + return fmt.Errorf("reading object open for AllocateOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AllocateOKModel: %w", err) + return fmt.Errorf("peeking object close for AllocateOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AllocateOKModel: %w", err) + return fmt.Errorf("reading object close for AllocateOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AllocateOKModel: string too large") + return fmt.Errorf("reading string for field AllocateOK: string too large") } - return fmt.Errorf("reading string for field AllocateOKModel: %w", err) + return fmt.Errorf("reading string for field AllocateOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AllocateOKModel: %w", err) + return fmt.Errorf("reading object colon for field AllocateOK: %w", err) } switch name { - // t.Address (datamodel.BlobAddressModel) (struct) + // t.Address (blob.BlobAddress) (struct) case "address": { @@ -386,7 +388,7 @@ func (t *AllocateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { return fmt.Errorf("reading null for field t.Address: %w", err) } } else { - t.Address = new(BlobAddressModel) + t.Address = new(BlobAddress) if err := t.Address.UnmarshalDagJSON(jr); err != nil { return fmt.Errorf("unmarshaling t.Address pointer: %w", err) } @@ -407,26 +409,26 @@ func (t *AllocateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AllocateOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AllocateOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AllocateOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field AllocateOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AllocateOKModel") + return fmt.Errorf("map too large for AllocateOK") } } } return nil } -func (t *BlobAddressModel) MarshalDagJSON(w io.Writer) error { +func (t *BlobAddress) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -538,8 +540,8 @@ func (t *BlobAddressModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *BlobAddressModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = BlobAddressModel{} +func (t *BlobAddress) UnmarshalDagJSON(r io.Reader) (err error) { + *t = BlobAddress{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -548,27 +550,27 @@ func (t *BlobAddressModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for BlobAddressModel: %w", err) + return fmt.Errorf("reading object open for BlobAddress: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for BlobAddressModel: %w", err) + return fmt.Errorf("peeking object close for BlobAddress: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for BlobAddressModel: %w", err) + return fmt.Errorf("reading object close for BlobAddress: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field BlobAddressModel: string too large") + return fmt.Errorf("reading string for field BlobAddress: string too large") } - return fmt.Errorf("reading string for field BlobAddressModel: %w", err) + return fmt.Errorf("reading string for field BlobAddress: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field BlobAddressModel: %w", err) + return fmt.Errorf("reading object colon for field BlobAddress: %w", err) } switch name { @@ -648,26 +650,26 @@ func (t *BlobAddressModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for BlobAddressModel: %w", name, err) + return fmt.Errorf("ignoring field %s for BlobAddress: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field BlobAddressModel: %w", err) + return fmt.Errorf("reading object close or comma for field BlobAddress: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for BlobAddressModel") + return fmt.Errorf("map too large for BlobAddress") } } } return nil } -func (t *AcceptArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AcceptArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -698,7 +700,7 @@ func (t *AcceptArgumentsModel) MarshalDagJSON(w io.Writer) error { } } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -717,8 +719,8 @@ func (t *AcceptArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AcceptArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AcceptArgumentsModel{} +func (t *AcceptArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AcceptArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -727,27 +729,27 @@ func (t *AcceptArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AcceptArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AcceptArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AcceptArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AcceptArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AcceptArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AcceptArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AcceptArgumentsModel: string too large") + return fmt.Errorf("reading string for field AcceptArguments: string too large") } - return fmt.Errorf("reading string for field AcceptArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AcceptArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AcceptArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AcceptArguments: %w", err) } switch name { @@ -758,7 +760,7 @@ func (t *AcceptArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { return fmt.Errorf("unmarshaling t.Put: %w", err) } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { @@ -768,26 +770,26 @@ func (t *AcceptArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AcceptArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AcceptArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AcceptArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AcceptArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AcceptArgumentsModel") + return fmt.Errorf("map too large for AcceptArguments") } } } return nil } -func (t *AcceptOKModel) MarshalDagJSON(w io.Writer) error { +func (t *AcceptOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -817,8 +819,8 @@ func (t *AcceptOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AcceptOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AcceptOKModel{} +func (t *AcceptOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AcceptOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -827,27 +829,27 @@ func (t *AcceptOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AcceptOKModel: %w", err) + return fmt.Errorf("reading object open for AcceptOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AcceptOKModel: %w", err) + return fmt.Errorf("peeking object close for AcceptOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AcceptOKModel: %w", err) + return fmt.Errorf("reading object close for AcceptOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AcceptOKModel: string too large") + return fmt.Errorf("reading string for field AcceptOK: string too large") } - return fmt.Errorf("reading string for field AcceptOKModel: %w", err) + return fmt.Errorf("reading string for field AcceptOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AcceptOKModel: %w", err) + return fmt.Errorf("reading object colon for field AcceptOK: %w", err) } switch name { @@ -865,26 +867,26 @@ func (t *AcceptOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AcceptOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AcceptOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AcceptOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field AcceptOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AcceptOKModel") + return fmt.Errorf("map too large for AcceptOK") } } } return nil } -func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AddArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -894,7 +896,7 @@ func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -912,8 +914,8 @@ func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -922,31 +924,31 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AddArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AddArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AddArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddArgumentsModel: string too large") + return fmt.Errorf("reading string for field AddArguments: string too large") } - return fmt.Errorf("reading string for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AddArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AddArguments: %w", err) } switch name { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { @@ -956,26 +958,26 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddArgumentsModel") + return fmt.Errorf("map too large for AddArguments") } } } return nil } -func (t *AddOKModel) MarshalDagJSON(w io.Writer) error { +func (t *AddOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1003,8 +1005,8 @@ func (t *AddOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddOKModel{} +func (t *AddOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1013,27 +1015,27 @@ func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddOKModel: %w", err) + return fmt.Errorf("reading object open for AddOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddOKModel: %w", err) + return fmt.Errorf("peeking object close for AddOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddOKModel: %w", err) + return fmt.Errorf("reading object close for AddOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddOKModel: string too large") + return fmt.Errorf("reading string for field AddOK: string too large") } - return fmt.Errorf("reading string for field AddOKModel: %w", err) + return fmt.Errorf("reading string for field AddOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddOKModel: %w", err) + return fmt.Errorf("reading object colon for field AddOK: %w", err) } switch name { @@ -1047,26 +1049,26 @@ func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddOKModel") + return fmt.Errorf("map too large for AddOK") } } } return nil } -func (t *RemoveArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *RemoveArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1099,8 +1101,8 @@ func (t *RemoveArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RemoveArgumentsModel{} +func (t *RemoveArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RemoveArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1109,27 +1111,27 @@ func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object open for RemoveArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RemoveArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for RemoveArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object close for RemoveArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RemoveArgumentsModel: string too large") + return fmt.Errorf("reading string for field RemoveArguments: string too large") } - return fmt.Errorf("reading string for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading string for field RemoveArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field RemoveArguments: %w", err) } switch name { @@ -1152,26 +1154,26 @@ func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RemoveArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for RemoveArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field RemoveArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RemoveArgumentsModel") + return fmt.Errorf("map too large for RemoveArguments") } } } return nil } -func (t *ReplicateArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ReplicateArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1182,7 +1184,7 @@ func (t *ReplicateArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -1245,8 +1247,8 @@ func (t *ReplicateArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ReplicateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ReplicateArgumentsModel{} +func (t *ReplicateArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ReplicateArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1255,31 +1257,31 @@ func (t *ReplicateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ReplicateArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ReplicateArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ReplicateArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ReplicateArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ReplicateArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ReplicateArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ReplicateArgumentsModel: string too large") + return fmt.Errorf("reading string for field ReplicateArguments: string too large") } - return fmt.Errorf("reading string for field ReplicateArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ReplicateArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ReplicateArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ReplicateArguments: %w", err) } switch name { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { @@ -1312,26 +1314,26 @@ func (t *ReplicateArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ReplicateArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ReplicateArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ReplicateArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ReplicateArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ReplicateArgumentsModel") + return fmt.Errorf("map too large for ReplicateArguments") } } } return nil } -func (t *ReplicateOKModel) MarshalDagJSON(w io.Writer) error { +func (t *ReplicateOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1377,8 +1379,8 @@ func (t *ReplicateOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ReplicateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ReplicateOKModel{} +func (t *ReplicateOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ReplicateOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1387,27 +1389,27 @@ func (t *ReplicateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ReplicateOKModel: %w", err) + return fmt.Errorf("reading object open for ReplicateOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ReplicateOKModel: %w", err) + return fmt.Errorf("peeking object close for ReplicateOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ReplicateOKModel: %w", err) + return fmt.Errorf("reading object close for ReplicateOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ReplicateOKModel: string too large") + return fmt.Errorf("reading string for field ReplicateOK: string too large") } - return fmt.Errorf("reading string for field ReplicateOKModel: %w", err) + return fmt.Errorf("reading string for field ReplicateOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ReplicateOKModel: %w", err) + return fmt.Errorf("reading object colon for field ReplicateOK: %w", err) } switch name { @@ -1455,26 +1457,26 @@ func (t *ReplicateOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ReplicateOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ReplicateOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ReplicateOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field ReplicateOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ReplicateOKModel") + return fmt.Errorf("map too large for ReplicateOK") } } } return nil } -func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ListArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1547,8 +1549,8 @@ func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1557,27 +1559,27 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ListArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ListArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ListArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListArgumentsModel: string too large") + return fmt.Errorf("reading string for field ListArguments: string too large") } - return fmt.Errorf("reading string for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ListArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ListArguments: %w", err) } switch name { @@ -1613,26 +1615,26 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListArgumentsModel") + return fmt.Errorf("map too large for ListArguments") } } } return nil } -func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { +func (t *ListOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -1674,7 +1676,7 @@ func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { } } - // t.Results ([]datamodel.ListBlobItem) (slice) + // t.Results ([]blob.ListBlobItem) (slice) if len("results") > 8192 { return fmt.Errorf("string in field \"results\" was too long") } @@ -1733,8 +1735,8 @@ func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -1743,27 +1745,27 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListOKModel: %w", err) + return fmt.Errorf("reading object open for ListOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListOKModel: %w", err) + return fmt.Errorf("peeking object close for ListOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListOKModel: %w", err) + return fmt.Errorf("reading object close for ListOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListOKModel: string too large") + return fmt.Errorf("reading string for field ListOK: string too large") } - return fmt.Errorf("reading string for field ListOKModel: %w", err) + return fmt.Errorf("reading string for field ListOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListOKModel: %w", err) + return fmt.Errorf("reading object colon for field ListOK: %w", err) } switch name { @@ -1782,7 +1784,7 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } } - // t.Results ([]datamodel.ListBlobItem) (slice) + // t.Results ([]blob.ListBlobItem) (slice) case "results": { @@ -1838,19 +1840,19 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListOKModel") + return fmt.Errorf("map too large for ListOK") } } } @@ -1868,7 +1870,7 @@ func (t *ListBlobItem) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -1943,7 +1945,7 @@ func (t *ListBlobItem) UnmarshalDagJSON(r io.Reader) (err error) { } switch name { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (blob.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { @@ -1983,3 +1985,268 @@ func (t *ListBlobItem) UnmarshalDagJSON(r io.Reader) (err error) { return nil } +func (t *RetrieveArguments) MarshalDagJSON(w io.Writer) error { + jw := jsg.NewDagJsonWriter(w) + if t == nil { + err := jw.WriteNull() + return err + } + if err := jw.WriteObjectOpen(); err != nil { + return err + } + + // t.Blob (blob.RetrieveBlob) (struct) + if len("blob") > 8192 { + return fmt.Errorf("string in field \"blob\" was too long") + } + if err := jw.WriteString(string("blob")); err != nil { + return fmt.Errorf("writing string for field \"blob\": %w", err) + } + if err := jw.WriteObjectColon(); err != nil { + return err + } + if err := t.Blob.MarshalDagJSON(jw); err != nil { + return fmt.Errorf("marshaling field t.Blob: %w", err) + } + if err := jw.WriteObjectClose(); err != nil { + return err + } + return nil +} +func (t *RetrieveArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RetrieveArguments{} + + jr := jsg.NewDagJsonReader(r) + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + if err := jr.ReadObjectOpen(); err != nil { + return fmt.Errorf("reading object open for RetrieveArguments: %w", err) + } + close, err := jr.PeekObjectClose() + if err != nil { + return fmt.Errorf("peeking object close for RetrieveArguments: %w", err) + } + if close { + if err := jr.ReadObjectClose(); err != nil { + return fmt.Errorf("reading object close for RetrieveArguments: %w", err) + } + } else { + for i := uint64(0); i < 8192; i++ { + name, err := jr.ReadString(8192) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading string for field RetrieveArguments: string too large") + } + return fmt.Errorf("reading string for field RetrieveArguments: %w", err) + } + if err := jr.ReadObjectColon(); err != nil { + return fmt.Errorf("reading object colon for field RetrieveArguments: %w", err) + } + switch name { + + // t.Blob (blob.RetrieveBlob) (struct) + case "blob": + + if err := t.Blob.UnmarshalDagJSON(jr); err != nil { + return fmt.Errorf("unmarshaling t.Blob: %w", err) + } + + default: + // Field doesn't exist on this type, so ignore it + if err := jr.DiscardType(); err != nil { + return fmt.Errorf("ignoring field %s for RetrieveArguments: %w", name, err) + } + } + + close, err := jr.ReadObjectCloseOrComma() + if err != nil { + return fmt.Errorf("reading object close or comma for field RetrieveArguments: %w", err) + } + if close { + break + } + if i == 8192-1 { + return fmt.Errorf("map too large for RetrieveArguments") + } + } + } + + return nil +} +func (t *RetrieveBlob) MarshalDagJSON(w io.Writer) error { + jw := jsg.NewDagJsonWriter(w) + if t == nil { + err := jw.WriteNull() + return err + } + if err := jw.WriteObjectOpen(); err != nil { + return err + } + + // t.Digest (multihash.Multihash) (slice) + if len("digest") > 8192 { + return fmt.Errorf("string in field \"digest\" was too long") + } + if err := jw.WriteString(string("digest")); err != nil { + return fmt.Errorf("writing string for field \"digest\": %w", err) + } + if err := jw.WriteObjectColon(); err != nil { + return err + } + if len(t.Digest) > 2097152 { + return fmt.Errorf("byte array in field t.Digest was too long") + } + + if err := jw.WriteBytes(t.Digest); err != nil { + return fmt.Errorf("writing bytes for field t.Digest: %w", err) + } + + if err := jw.WriteObjectClose(); err != nil { + return err + } + return nil +} +func (t *RetrieveBlob) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RetrieveBlob{} + + jr := jsg.NewDagJsonReader(r) + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + if err := jr.ReadObjectOpen(); err != nil { + return fmt.Errorf("reading object open for RetrieveBlob: %w", err) + } + close, err := jr.PeekObjectClose() + if err != nil { + return fmt.Errorf("peeking object close for RetrieveBlob: %w", err) + } + if close { + if err := jr.ReadObjectClose(); err != nil { + return fmt.Errorf("reading object close for RetrieveBlob: %w", err) + } + } else { + for i := uint64(0); i < 8192; i++ { + name, err := jr.ReadString(8192) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading string for field RetrieveBlob: string too large") + } + return fmt.Errorf("reading string for field RetrieveBlob: %w", err) + } + if err := jr.ReadObjectColon(); err != nil { + return fmt.Errorf("reading object colon for field RetrieveBlob: %w", err) + } + switch name { + + // t.Digest (multihash.Multihash) (slice) + case "digest": + + { + bval, err := jr.ReadBytes(2097152) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading bytes for field t.Digest: byte array too large") + } + return fmt.Errorf("reading bytes for field t.Digest: %w", err) + } + if len(bval) > 0 { + t.Digest = []uint8(bval) + } + } + + default: + // Field doesn't exist on this type, so ignore it + if err := jr.DiscardType(); err != nil { + return fmt.Errorf("ignoring field %s for RetrieveBlob: %w", name, err) + } + } + + close, err := jr.ReadObjectCloseOrComma() + if err != nil { + return fmt.Errorf("reading object close or comma for field RetrieveBlob: %w", err) + } + if close { + break + } + if i == 8192-1 { + return fmt.Errorf("map too large for RetrieveBlob") + } + } + } + + return nil +} +func (t *RetrieveOK) MarshalDagJSON(w io.Writer) error { + jw := jsg.NewDagJsonWriter(w) + if t == nil { + err := jw.WriteNull() + return err + } + if err := jw.WriteObjectOpen(); err != nil { + return err + } + if err := jw.WriteObjectClose(); err != nil { + return err + } + return nil +} +func (t *RetrieveOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RetrieveOK{} + + jr := jsg.NewDagJsonReader(r) + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + if err := jr.ReadObjectOpen(); err != nil { + return fmt.Errorf("reading object open for RetrieveOK: %w", err) + } + close, err := jr.PeekObjectClose() + if err != nil { + return fmt.Errorf("peeking object close for RetrieveOK: %w", err) + } + if close { + if err := jr.ReadObjectClose(); err != nil { + return fmt.Errorf("reading object close for RetrieveOK: %w", err) + } + } else { + for i := uint64(0); i < 8192; i++ { + name, err := jr.ReadString(8192) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading string for field RetrieveOK: string too large") + } + return fmt.Errorf("reading string for field RetrieveOK: %w", err) + } + if err := jr.ReadObjectColon(); err != nil { + return fmt.Errorf("reading object colon for field RetrieveOK: %w", err) + } + switch name { + default: + // Field doesn't exist on this type, so ignore it + if err := jr.DiscardType(); err != nil { + return fmt.Errorf("ignoring field %s for RetrieveOK: %w", name, err) + } + } + + close, err := jr.ReadObjectCloseOrComma() + if err != nil { + return fmt.Errorf("reading object close or comma for field RetrieveOK: %w", err) + } + if close { + break + } + if i == 8192-1 { + return fmt.Errorf("map too large for RetrieveOK") + } + } + } + + return nil +} diff --git a/capabilities/blob/list.go b/capabilities/blob/list.go index 06e0fb8..8a35dd8 100644 --- a/capabilities/blob/list.go +++ b/capabilities/blob/list.go @@ -1,16 +1,9 @@ +//go:build !codegen + package blob -import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const ListCommand = "/blob/list" -type ( - ListArguments = bdm.ListArgumentsModel - ListOK = bdm.ListOKModel - ListBlobItem = bdm.ListBlobItem -) - -var List, _ = bindcap.New[*ListArguments](ListCommand) +var List = capabilities.MustNew[*ListArguments](ListCommand) diff --git a/capabilities/blob/remove.go b/capabilities/blob/remove.go index 33feb88..1a84061 100644 --- a/capabilities/blob/remove.go +++ b/capabilities/blob/remove.go @@ -1,16 +1,11 @@ +//go:build !codegen + package blob -import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const RemoveCommand = "/blob/remove" -type ( - RemoveArguments = bdm.RemoveArgumentsModel - RemoveOK = cdm.UnitModel -) +type RemoveOK = capabilities.Unit -var Remove, _ = bindcap.New[*RemoveArguments](RemoveCommand) +var Remove = capabilities.MustNew[*RemoveArguments](RemoveCommand) diff --git a/capabilities/blob/replica/allocate.go b/capabilities/blob/replica/allocate.go index 1a0f29b..4952578 100644 --- a/capabilities/blob/replica/allocate.go +++ b/capabilities/blob/replica/allocate.go @@ -1,22 +1,17 @@ +//go:build !codegen + package replica import ( + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/libforge/capabilities/blob" - rdm "github.com/fil-forge/libforge/capabilities/blob/replica/datamodel" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) -type ( - AllocateArguments = rdm.AllocateArgumentsModel - AllocateOK = rdm.AllocateOKModel - Blob = rdm.BlobModel -) - const AllocateCommand = "/blob/replica/allocate" -var Allocate, _ = bindcap.New[*AllocateArguments]( +var Allocate = capabilities.MustNew[*AllocateArguments]( AllocateCommand, capability.WithPolicyBuilder( policy.GreaterThan(".blob.size", 0), diff --git a/capabilities/blob/replica/datamodel/cbor_gen.go b/capabilities/blob/replica/cbor_gen.go similarity index 90% rename from capabilities/blob/replica/datamodel/cbor_gen.go rename to capabilities/blob/replica/cbor_gen.go index c20f77a..7c442c8 100644 --- a/capabilities/blob/replica/datamodel/cbor_gen.go +++ b/capabilities/blob/replica/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package replica import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AllocateArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -30,7 +32,7 @@ func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (replica.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -81,8 +83,8 @@ func (t *AllocateArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AllocateArgumentsModel{} +func (t *AllocateArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AllocateArguments{} cr := cbg.NewCborReader(r) @@ -101,7 +103,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AllocateArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AllocateArguments: map struct too large (%d)", extra) } n := extra @@ -122,7 +124,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (replica.Blob) (struct) case "blob": { @@ -169,7 +171,7 @@ func (t *AllocateArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *BlobModel) MarshalCBOR(w io.Writer) error { +func (t *Blob) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -224,8 +226,8 @@ func (t *BlobModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = BlobModel{} +func (t *Blob) UnmarshalCBOR(r io.Reader) (err error) { + *t = Blob{} cr := cbg.NewCborReader(r) @@ -244,7 +246,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("BlobModel: map struct too large (%d)", extra) + return fmt.Errorf("Blob: map struct too large (%d)", extra) } n := extra @@ -313,7 +315,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AllocateOKModel) MarshalCBOR(w io.Writer) error { +func (t *AllocateOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -343,8 +345,8 @@ func (t *AllocateOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AllocateOKModel{} +func (t *AllocateOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = AllocateOK{} cr := cbg.NewCborReader(r) @@ -363,7 +365,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AllocateOKModel: map struct too large (%d)", extra) + return fmt.Errorf("AllocateOK: map struct too large (%d)", extra) } n := extra @@ -405,7 +407,7 @@ func (t *AllocateOKModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *TransferArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *TransferArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -417,7 +419,7 @@ func (t *TransferArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (replica.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -468,8 +470,8 @@ func (t *TransferArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *TransferArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = TransferArgumentsModel{} +func (t *TransferArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = TransferArguments{} cr := cbg.NewCborReader(r) @@ -488,7 +490,7 @@ func (t *TransferArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("TransferArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("TransferArguments: map struct too large (%d)", extra) } n := extra @@ -509,7 +511,7 @@ func (t *TransferArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (replica.Blob) (struct) case "blob": { @@ -556,7 +558,7 @@ func (t *TransferArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *TransferOKModel) MarshalCBOR(w io.Writer) error { +func (t *TransferOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -603,8 +605,8 @@ func (t *TransferOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *TransferOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = TransferOKModel{} +func (t *TransferOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = TransferOK{} cr := cbg.NewCborReader(r) @@ -623,7 +625,7 @@ func (t *TransferOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("TransferOKModel: map struct too large (%d)", extra) + return fmt.Errorf("TransferOK: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/blob/replica/datamodel/allocate.go b/capabilities/blob/replica/datamodel/allocate.go deleted file mode 100644 index d4ce122..0000000 --- a/capabilities/blob/replica/datamodel/allocate.go +++ /dev/null @@ -1,28 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/ucan/promise" - "github.com/ipfs/go-cid" - "github.com/multiformats/go-multihash" -) - -type BlobModel struct { - Digest multihash.Multihash `cborgen:"digest"` - Size uint64 `cborgen:"size"` -} - -type AllocateArgumentsModel struct { - // Blob is the blob to be allocated. - Blob BlobModel `cborgen:"blob"` - // Site is a link to a location commitment indicating where the Blob must be - // fetched from. - Site cid.Cid `cborgen:"site"` - // Cause is a link to the `/blob/replicate` task that caused this allocation. - Cause cid.Cid `cborgen:"cause"` -} - -type AllocateOKModel struct { - // Site resolves to an additional location for the blob. - // It is a link to a /blob/replica/transfer task. - Site promise.AwaitOK `cborgen:"site"` -} diff --git a/capabilities/blob/replica/datamodel/gen/main.go b/capabilities/blob/replica/datamodel/gen/main.go deleted file mode 100644 index be7e70a..0000000 --- a/capabilities/blob/replica/datamodel/gen/main.go +++ /dev/null @@ -1,20 +0,0 @@ -//go:generate go run . - -package main - -import ( - rdm "github.com/fil-forge/libforge/capabilities/blob/replica/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", - rdm.AllocateArgumentsModel{}, - rdm.BlobModel{}, - rdm.AllocateOKModel{}, - rdm.TransferArgumentsModel{}, - rdm.TransferOKModel{}, - ); err != nil { - panic(err) - } -} diff --git a/capabilities/blob/replica/datamodel/transfer.go b/capabilities/blob/replica/datamodel/transfer.go deleted file mode 100644 index 33c1796..0000000 --- a/capabilities/blob/replica/datamodel/transfer.go +++ /dev/null @@ -1,25 +0,0 @@ -package datamodel - -import ( - "github.com/fil-forge/ucantone/ucan/promise" - "github.com/ipfs/go-cid" -) - -type TransferArgumentsModel struct { - // Blob is the blob to be transferred. - Blob BlobModel `cborgen:"blob"` - // Site is a link to a location commitment indicating where the Blob must be - // fetched from. - Site cid.Cid `cborgen:"site"` - // Cause links to the `/blob/replica/allocate` task that initiated this transfer. - Cause cid.Cid `cborgen:"cause"` -} - -type TransferOKModel struct { - // Site links to the location commitment that indicate where the Blob has been - // transferred to. - Site cid.Cid `cborgen:"site"` - // PDP links to the /pdp/accept task that will resolve when aggregation - // is complete and the piece is accepted. - PDP promise.AwaitOK `cborgen:"pdp"` -} diff --git a/capabilities/blob/replica/gen/main.go b/capabilities/blob/replica/gen/main.go new file mode 100644 index 0000000..d45ea0c --- /dev/null +++ b/capabilities/blob/replica/gen/main.go @@ -0,0 +1,36 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + "github.com/fil-forge/libforge/capabilities/blob/replica" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + const cborFile = "../cbor_gen.go" + if err := cbg.WriteMapEncodersToFile(cborFile, "replica", + replica.AllocateArguments{}, + replica.Blob{}, + replica.AllocateOK{}, + replica.TransferArguments{}, + replica.TransferOK{}, + ); err != nil { + panic(err) + } + tag(cborFile) +} diff --git a/capabilities/blob/replica/transfer.go b/capabilities/blob/replica/transfer.go index cdf6cc3..166494d 100644 --- a/capabilities/blob/replica/transfer.go +++ b/capabilities/blob/replica/transfer.go @@ -1,21 +1,17 @@ +//go:build !codegen + package replica import ( + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/libforge/capabilities/blob" - rdm "github.com/fil-forge/libforge/capabilities/blob/replica/datamodel" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) -type ( - TransferArguments = rdm.TransferArgumentsModel - TransferOK = rdm.TransferOKModel -) - const TransferCommand = "/blob/replica/transfer" -var Transfer, _ = bindcap.New[*TransferArguments]( +var Transfer = capabilities.MustNew[*TransferArguments]( TransferCommand, capability.WithPolicyBuilder( policy.GreaterThan(".blob.size", 0), diff --git a/capabilities/blob/replica/types.go b/capabilities/blob/replica/types.go new file mode 100644 index 0000000..e0bb2d5 --- /dev/null +++ b/capabilities/blob/replica/types.go @@ -0,0 +1,47 @@ +package replica + +import ( + "github.com/fil-forge/ucantone/ucan/promise" + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" +) + +type Blob struct { + Digest multihash.Multihash `cborgen:"digest"` + Size uint64 `cborgen:"size"` +} + +type AllocateArguments struct { + // Blob is the blob to be allocated. + Blob Blob `cborgen:"blob"` + // Site is a link to a location commitment indicating where the Blob must be + // fetched from. + Site cid.Cid `cborgen:"site"` + // Cause is a link to the `/blob/replicate` task that caused this allocation. + Cause cid.Cid `cborgen:"cause"` +} + +type AllocateOK struct { + // Site resolves to an additional location for the blob. + // It is a link to a /blob/replica/transfer task. + Site promise.AwaitOK `cborgen:"site"` +} + +type TransferArguments struct { + // Blob is the blob to be transferred. + Blob Blob `cborgen:"blob"` + // Site is a link to a location commitment indicating where the Blob must be + // fetched from. + Site cid.Cid `cborgen:"site"` + // Cause links to the `/blob/replica/allocate` task that initiated this transfer. + Cause cid.Cid `cborgen:"cause"` +} + +type TransferOK struct { + // Site links to the location commitment that indicate where the Blob has been + // transferred to. + Site cid.Cid `cborgen:"site"` + // PDP links to the /pdp/accept task that will resolve when aggregation + // is complete and the piece is accepted. + PDP promise.AwaitOK `cborgen:"pdp"` +} diff --git a/capabilities/blob/replicate.go b/capabilities/blob/replicate.go index cf8ad80..0c9960d 100644 --- a/capabilities/blob/replicate.go +++ b/capabilities/blob/replicate.go @@ -1,17 +1,13 @@ +//go:build !codegen + package blob import ( - bdm "github.com/fil-forge/libforge/capabilities/blob/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) -type ( - ReplicateArguments = bdm.ReplicateArgumentsModel - ReplicateOK = bdm.ReplicateOKModel -) - const ReplicateCommand = "/blob/replicate" // Replicate is a capability that allows an agent to replicate a Blob into a @@ -28,7 +24,7 @@ const ReplicateCommand = "/blob/replicate" // transferred and stored the blob. The number of `/blob/replica/allocate` and // `/blob/replica/transfer` tasks corresponds directly to number of replicas // requested. -var Replicate, _ = bindcap.New[*ReplicateArguments]( +var Replicate = capabilities.MustNew[*ReplicateArguments]( ReplicateCommand, capability.WithPolicyBuilder( policy.GreaterThan(".blob.size", 0), diff --git a/capabilities/blob/retrieve.go b/capabilities/blob/retrieve.go new file mode 100644 index 0000000..5c376bc --- /dev/null +++ b/capabilities/blob/retrieve.go @@ -0,0 +1,17 @@ +//go:build !codegen + +package blob + +import "github.com/fil-forge/libforge/capabilities" + +const RetrieveCommand = "/blob/retrieve" + +// Retrieve is the service-level retrieval capability (e.g. used by the +// indexer to fetch content claims from a Piri node). It is NOT space-scoped: +// any holder of a valid delegation for `/blob/retrieve` may fetch the blob +// by digest, regardless of which space it was originally stored under. +// +// For user-facing retrieval that requires an allocation in a specific space +// see `libforge/capabilities/content.Retrieve` (the `/content/retrieve` +// capability). +var Retrieve = capabilities.MustNew[*RetrieveArguments](RetrieveCommand) diff --git a/capabilities/blob/types.go b/capabilities/blob/types.go new file mode 100644 index 0000000..bc41d59 --- /dev/null +++ b/capabilities/blob/types.go @@ -0,0 +1,106 @@ +package blob + +import ( + "github.com/fil-forge/libforge/capabilities" + "github.com/fil-forge/ucantone/ucan/promise" + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" +) + +type Blob struct { + Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` + Size uint64 `cborgen:"size" dagjsongen:"size"` +} + +type AddArguments struct { + Blob Blob `cborgen:"blob" dagjsongen:"blob"` +} + +type AddOK struct { + // Site is a promise of the `/blob/accept` task result, which contains a + // location claim for the blob, describing where it can be retrieved from. + Site promise.AwaitOK `cborgen:"site" dagjsongen:"site"` +} + +type AcceptArguments struct { + Blob Blob `cborgen:"blob" dagjsongen:"blob"` + Put promise.AwaitOK `cborgen:"_put" dagjsongen:"_put"` +} + +type AcceptOK struct { + Site cid.Cid `cborgen:"site" dagjsongen:"site"` +} + +type AllocateArguments struct { + Blob Blob `cborgen:"blob" dagjsongen:"blob"` + Cause cid.Cid `cborgen:"cause" dagjsongen:"cause"` +} + +type AllocateOK struct { + Size uint64 `cborgen:"size" dagjsongen:"size"` + Address *BlobAddress `cborgen:"address,omitempty" dagjsongen:"address,omitempty"` +} + +type BlobAddress struct { + URL capabilities.CborURL `cborgen:"url" dagjsongen:"url"` + Headers map[string]string `cborgen:"headers" dagjsongen:"headers"` + Expires int64 `cborgen:"expires" dagjsongen:"expires"` +} + +type ListArguments struct { + Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` + Size *uint64 `cborgen:"size,omitempty" dagjsongen:"size,omitempty"` +} + +type ListOK struct { + Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` + Size uint64 `cborgen:"size" dagjsongen:"size"` + Results []ListBlobItem `cborgen:"results" dagjsongen:"results"` +} + +type ListBlobItem struct { + Blob Blob `cborgen:"blob" dagjsongen:"blob"` + InsertedAt int64 `cborgen:"insertedAt" dagjsongen:"insertedAt"` +} + +type RemoveArguments struct { + Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` +} + +type ReplicateArguments struct { + // Blob is the blob that must be replicated. + Blob Blob `cborgen:"blob" dagjsongen:"blob"` + // Replicas is the number of replicas to ensure. + // e.g. Replicas: 3 will ensure 3 copies of the data exist in a network in total. + Replicas uint64 `cborgen:"replicas" dagjsongen:"replicas"` + // Site is a link to a location commitment indicating where the Blob must be + // fetched from. + Site cid.Cid `cborgen:"site" dagjsongen:"site"` +} + +type ReplicateOK struct { + // Site resolves to additional locations for the blob. They are links to + // `/blob/replica/transfer` tasks. + Site []promise.AwaitOK `cborgen:"site" dagjsongen:"site"` +} + +// RetrieveBlob identifies a blob solely by its content multihash. Used by the +// service-level `/blob/retrieve` capability where the caller is fetching data +// by hash without prior knowledge of the byte size. +type RetrieveBlob struct { + Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` +} + +// RetrieveArguments is the argument shape of the `/blob/retrieve` capability — +// a service-level (not space-scoped) retrieval handle. Compare to +// `content.RetrieveArguments` which is space-scoped and carries a byte Range; +// the `/blob/retrieve` flow is consumed by service principals (e.g. the +// indexer) fetching content claims that aren't bound to any space. +type RetrieveArguments struct { + Blob RetrieveBlob `cborgen:"blob" dagjsongen:"blob"` +} + +// RetrieveOK is the success return for `/blob/retrieve`. The blob bytes +// themselves are streamed back through the response container's body (the +// libforge HTTPHeader retrieval transport); the typed OK record is empty. +type RetrieveOK struct{} diff --git a/capabilities/datamodel/cbor_gen.go b/capabilities/cbor_gen.go similarity index 85% rename from capabilities/datamodel/cbor_gen.go rename to capabilities/cbor_gen.go index ed215ea..df26246 100644 --- a/capabilities/datamodel/cbor_gen.go +++ b/capabilities/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package capabilities import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *UnitModel) MarshalCBOR(w io.Writer) error { +func (t *Unit) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -32,8 +34,8 @@ func (t *UnitModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *UnitModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = UnitModel{} +func (t *Unit) UnmarshalCBOR(r io.Reader) (err error) { + *t = Unit{} cr := cbg.NewCborReader(r) @@ -52,7 +54,7 @@ func (t *UnitModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("UnitModel: map struct too large (%d)", extra) + return fmt.Errorf("Unit: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/claim/cache.go b/capabilities/claim/cache.go index 8bcff8f..0dc4f9e 100644 --- a/capabilities/claim/cache.go +++ b/capabilities/claim/cache.go @@ -1,17 +1,11 @@ -package claim +//go:build !codegen -import ( - "github.com/fil-forge/libforge/capabilities/claim/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package claim -type ( - CacheArguments = datamodel.CacheArgumentsModel - CacheOK = cdm.UnitModel - Provider = datamodel.ProviderModel -) +import "github.com/fil-forge/libforge/capabilities" const CacheCommand = "/claim/cache" -var Cache, _ = bindcap.New[*CacheArguments](CacheCommand) +type CacheOK = capabilities.Unit + +var Cache = capabilities.MustNew[*CacheArguments](CacheCommand) diff --git a/capabilities/claim/datamodel/cbor_gen.go b/capabilities/claim/cbor_gen.go similarity index 90% rename from capabilities/claim/datamodel/cbor_gen.go rename to capabilities/claim/cbor_gen.go index f5768df..1be4306 100644 --- a/capabilities/claim/datamodel/cbor_gen.go +++ b/capabilities/claim/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package claim import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *CacheArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *CacheArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -46,7 +48,7 @@ func (t *CacheArgumentsModel) MarshalCBOR(w io.Writer) error { return xerrors.Errorf("failed to write cid field t.Claim: %w", err) } - // t.Provider (datamodel.ProviderModel) (struct) + // t.Provider (claim.Provider) (struct) if len("provider") > 8192 { return xerrors.Errorf("Value in field \"provider\" was too long") } @@ -64,8 +66,8 @@ func (t *CacheArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *CacheArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = CacheArgumentsModel{} +func (t *CacheArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = CacheArguments{} cr := cbg.NewCborReader(r) @@ -84,7 +86,7 @@ func (t *CacheArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("CacheArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("CacheArguments: map struct too large (%d)", extra) } n := extra @@ -118,7 +120,7 @@ func (t *CacheArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { t.Claim = c } - // t.Provider (datamodel.ProviderModel) (struct) + // t.Provider (claim.Provider) (struct) case "provider": { @@ -139,7 +141,7 @@ func (t *CacheArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ProviderModel) MarshalCBOR(w io.Writer) error { +func (t *Provider) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -187,8 +189,8 @@ func (t *ProviderModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ProviderModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ProviderModel{} +func (t *Provider) UnmarshalCBOR(r io.Reader) (err error) { + *t = Provider{} cr := cbg.NewCborReader(r) @@ -207,7 +209,7 @@ func (t *ProviderModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ProviderModel: map struct too large (%d)", extra) + return fmt.Errorf("Provider: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/claim/datamodel/cache.go b/capabilities/claim/datamodel/cache.go deleted file mode 100644 index 0f5b3d3..0000000 --- a/capabilities/claim/datamodel/cache.go +++ /dev/null @@ -1,14 +0,0 @@ -package datamodel - -import ( - "github.com/ipfs/go-cid" -) - -type CacheArgumentsModel struct { - Claim cid.Cid `cborgen:"claim" dagjsongen:"claim"` - Provider ProviderModel `cborgen:"provider" dagjsongen:"provider"` -} - -type ProviderModel struct { - Addresses [][]byte `cborgen:"addresses" dagjsongen:"addresses"` -} diff --git a/capabilities/claim/datamodel/gen/main.go b/capabilities/claim/datamodel/gen/main.go deleted file mode 100644 index 251ee63..0000000 --- a/capabilities/claim/datamodel/gen/main.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/claim/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.CacheArgumentsModel{}, - dm.ProviderModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/claim/gen/main.go b/capabilities/claim/gen/main.go new file mode 100644 index 0000000..5d0f208 --- /dev/null +++ b/capabilities/claim/gen/main.go @@ -0,0 +1,42 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/claim" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + claim.CacheArguments{}, + claim.Provider{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "claim", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "claim", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/claim/datamodel/json_gen.go b/capabilities/claim/json_gen.go similarity index 79% rename from capabilities/claim/datamodel/json_gen.go rename to capabilities/claim/json_gen.go index 4ae0ce4..b1b06da 100644 --- a/capabilities/claim/datamodel/json_gen.go +++ b/capabilities/claim/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package claim import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *CacheArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *CacheArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -51,7 +53,7 @@ func (t *CacheArgumentsModel) MarshalDagJSON(w io.Writer) error { } } - // t.Provider (datamodel.ProviderModel) (struct) + // t.Provider (claim.Provider) (struct) if len("provider") > 8192 { return fmt.Errorf("string in field \"provider\" was too long") } @@ -70,8 +72,8 @@ func (t *CacheArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *CacheArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = CacheArgumentsModel{} +func (t *CacheArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = CacheArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -80,27 +82,27 @@ func (t *CacheArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for CacheArgumentsModel: %w", err) + return fmt.Errorf("reading object open for CacheArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for CacheArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for CacheArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for CacheArgumentsModel: %w", err) + return fmt.Errorf("reading object close for CacheArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field CacheArgumentsModel: string too large") + return fmt.Errorf("reading string for field CacheArguments: string too large") } - return fmt.Errorf("reading string for field CacheArgumentsModel: %w", err) + return fmt.Errorf("reading string for field CacheArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field CacheArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field CacheArguments: %w", err) } switch name { @@ -116,7 +118,7 @@ func (t *CacheArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } - // t.Provider (datamodel.ProviderModel) (struct) + // t.Provider (claim.Provider) (struct) case "provider": if err := t.Provider.UnmarshalDagJSON(jr); err != nil { @@ -126,26 +128,26 @@ func (t *CacheArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for CacheArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for CacheArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field CacheArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field CacheArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for CacheArgumentsModel") + return fmt.Errorf("map too large for CacheArguments") } } } return nil } -func (t *ProviderModel) MarshalDagJSON(w io.Writer) error { +func (t *Provider) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -196,8 +198,8 @@ func (t *ProviderModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ProviderModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ProviderModel{} +func (t *Provider) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Provider{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -206,27 +208,27 @@ func (t *ProviderModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ProviderModel: %w", err) + return fmt.Errorf("reading object open for Provider: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ProviderModel: %w", err) + return fmt.Errorf("peeking object close for Provider: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ProviderModel: %w", err) + return fmt.Errorf("reading object close for Provider: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ProviderModel: string too large") + return fmt.Errorf("reading string for field Provider: string too large") } - return fmt.Errorf("reading string for field ProviderModel: %w", err) + return fmt.Errorf("reading string for field Provider: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ProviderModel: %w", err) + return fmt.Errorf("reading object colon for field Provider: %w", err) } switch name { @@ -283,19 +285,19 @@ func (t *ProviderModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ProviderModel: %w", name, err) + return fmt.Errorf("ignoring field %s for Provider: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ProviderModel: %w", err) + return fmt.Errorf("reading object close or comma for field Provider: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ProviderModel") + return fmt.Errorf("map too large for Provider") } } } diff --git a/capabilities/claim/types.go b/capabilities/claim/types.go new file mode 100644 index 0000000..b01a116 --- /dev/null +++ b/capabilities/claim/types.go @@ -0,0 +1,12 @@ +package claim + +import "github.com/ipfs/go-cid" + +type CacheArguments struct { + Claim cid.Cid `cborgen:"claim" dagjsongen:"claim"` + Provider Provider `cborgen:"provider" dagjsongen:"provider"` +} + +type Provider struct { + Addresses [][]byte `cborgen:"addresses" dagjsongen:"addresses"` +} diff --git a/capabilities/content/datamodel/cbor_gen.maps.go b/capabilities/content/cbor_gen.maps.go similarity index 87% rename from capabilities/content/datamodel/cbor_gen.maps.go rename to capabilities/content/cbor_gen.maps.go index 6185e8b..2411d21 100644 --- a/capabilities/content/datamodel/cbor_gen.maps.go +++ b/capabilities/content/cbor_gen.maps.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package content import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *BlobModel) MarshalCBOR(w io.Writer) error { +func (t *Blob) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -57,8 +59,8 @@ func (t *BlobModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = BlobModel{} +func (t *Blob) UnmarshalCBOR(r io.Reader) (err error) { + *t = Blob{} cr := cbg.NewCborReader(r) @@ -77,7 +79,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("BlobModel: map struct too large (%d)", extra) + return fmt.Errorf("Blob: map struct too large (%d)", extra) } n := extra @@ -131,7 +133,7 @@ func (t *BlobModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *RetrieveArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *RetrieveArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -143,7 +145,7 @@ func (t *RetrieveArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (content.Blob) (struct) if len("blob") > 8192 { return xerrors.Errorf("Value in field \"blob\" was too long") } @@ -159,7 +161,7 @@ func (t *RetrieveArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (content.Range) (struct) if len("range") > 8192 { return xerrors.Errorf("Value in field \"range\" was too long") } @@ -177,8 +179,8 @@ func (t *RetrieveArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RetrieveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RetrieveArgumentsModel{} +func (t *RetrieveArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = RetrieveArguments{} cr := cbg.NewCborReader(r) @@ -197,7 +199,7 @@ func (t *RetrieveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RetrieveArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("RetrieveArguments: map struct too large (%d)", extra) } n := extra @@ -218,7 +220,7 @@ func (t *RetrieveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (content.Blob) (struct) case "blob": { @@ -228,7 +230,7 @@ func (t *RetrieveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (content.Range) (struct) case "range": { diff --git a/capabilities/content/datamodel/cbor_gen.tuples.go b/capabilities/content/cbor_gen.tuples.go similarity index 85% rename from capabilities/content/datamodel/cbor_gen.tuples.go rename to capabilities/content/cbor_gen.tuples.go index 7ae6afd..5453bde 100644 --- a/capabilities/content/datamodel/cbor_gen.tuples.go +++ b/capabilities/content/cbor_gen.tuples.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package content import ( "fmt" @@ -18,9 +20,9 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -var lengthBufRangeModel = []byte{130} +var lengthBufRange = []byte{130} -func (t *RangeModel) MarshalCBOR(w io.Writer) error { +func (t *Range) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -28,7 +30,7 @@ func (t *RangeModel) MarshalCBOR(w io.Writer) error { cw := cbg.NewCborWriter(w) - if _, err := cw.Write(lengthBufRangeModel); err != nil { + if _, err := cw.Write(lengthBufRange); err != nil { return err } @@ -47,8 +49,8 @@ func (t *RangeModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RangeModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RangeModel{} +func (t *Range) UnmarshalCBOR(r io.Reader) (err error) { + *t = Range{} cr := cbg.NewCborReader(r) diff --git a/capabilities/content/datamodel/gen/main.go b/capabilities/content/datamodel/gen/main.go deleted file mode 100644 index 492e04c..0000000 --- a/capabilities/content/datamodel/gen/main.go +++ /dev/null @@ -1,35 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/content/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - mapModels := []any{ - dm.BlobModel{}, - dm.RetrieveArgumentsModel{}, - } - tupleModels := []any{ - dm.RangeModel{}, - } - - if err := cbg.WriteTupleEncodersToFile("../cbor_gen.tuples.go", "datamodel", tupleModels...); err != nil { - panic(err) - } - - if err := cbg.WriteMapEncodersToFile("../cbor_gen.maps.go", "datamodel", mapModels...); err != nil { - panic(err) - } - - if err := jsg.WriteTupleEncodersToFile("../json_gen.tuples.go", "datamodel", tupleModels...); err != nil { - panic(err) - } - - if err := jsg.WriteMapEncodersToFile("../json_gen.maps.go", "datamodel", mapModels...); err != nil { - panic(err) - } -} diff --git a/capabilities/content/datamodel/retrieve.go b/capabilities/content/datamodel/retrieve.go deleted file mode 100644 index 1568c10..0000000 --- a/capabilities/content/datamodel/retrieve.go +++ /dev/null @@ -1,21 +0,0 @@ -package datamodel - -import ( - "github.com/multiformats/go-multihash" -) - -type BlobModel struct { - Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` -} - -type RangeModel struct { - Start uint64 `cborgen:"start" dagjsongen:"start"` - End uint64 `cborgen:"end" dagjsongen:"end"` -} - -type RetrieveArgumentsModel struct { - Blob BlobModel `cborgen:"blob" dagjsongen:"blob"` - Range RangeModel `cborgen:"range" dagjsongen:"range"` -} - -type RetrieveOKModel struct{} diff --git a/capabilities/content/gen/main.go b/capabilities/content/gen/main.go new file mode 100644 index 0000000..c098cac --- /dev/null +++ b/capabilities/content/gen/main.go @@ -0,0 +1,55 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/content" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + mapModels := []any{ + content.Blob{}, + content.RetrieveArguments{}, + } + tupleModels := []any{ + content.Range{}, + } + const ( + cborTuples = "../cbor_gen.tuples.go" + cborMaps = "../cbor_gen.maps.go" + jsonTuples = "../json_gen.tuples.go" + jsonMaps = "../json_gen.maps.go" + ) + if err := cbg.WriteTupleEncodersToFile(cborTuples, "content", tupleModels...); err != nil { + panic(err) + } + if err := cbg.WriteMapEncodersToFile(cborMaps, "content", mapModels...); err != nil { + panic(err) + } + if err := jsg.WriteTupleEncodersToFile(jsonTuples, "content", tupleModels...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonMaps, "content", mapModels...); err != nil { + panic(err) + } + tag(cborTuples) + tag(cborMaps) + tag(jsonTuples) + tag(jsonMaps) +} diff --git a/capabilities/content/datamodel/json_gen.maps.go b/capabilities/content/json_gen.maps.go similarity index 76% rename from capabilities/content/datamodel/json_gen.maps.go rename to capabilities/content/json_gen.maps.go index 428d277..4220fd6 100644 --- a/capabilities/content/datamodel/json_gen.maps.go +++ b/capabilities/content/json_gen.maps.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package content import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *BlobModel) MarshalDagJSON(w io.Writer) error { +func (t *Blob) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -51,8 +53,8 @@ func (t *BlobModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = BlobModel{} +func (t *Blob) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Blob{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -61,27 +63,27 @@ func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for BlobModel: %w", err) + return fmt.Errorf("reading object open for Blob: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for BlobModel: %w", err) + return fmt.Errorf("peeking object close for Blob: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for BlobModel: %w", err) + return fmt.Errorf("reading object close for Blob: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field BlobModel: string too large") + return fmt.Errorf("reading string for field Blob: string too large") } - return fmt.Errorf("reading string for field BlobModel: %w", err) + return fmt.Errorf("reading string for field Blob: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field BlobModel: %w", err) + return fmt.Errorf("reading object colon for field Blob: %w", err) } switch name { @@ -104,26 +106,26 @@ func (t *BlobModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for BlobModel: %w", name, err) + return fmt.Errorf("ignoring field %s for Blob: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field BlobModel: %w", err) + return fmt.Errorf("reading object close or comma for field Blob: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for BlobModel") + return fmt.Errorf("map too large for Blob") } } } return nil } -func (t *RetrieveArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *RetrieveArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -134,7 +136,7 @@ func (t *RetrieveArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (content.Blob) (struct) if len("blob") > 8192 { return fmt.Errorf("string in field \"blob\" was too long") } @@ -154,7 +156,7 @@ func (t *RetrieveArgumentsModel) MarshalDagJSON(w io.Writer) error { } } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (content.Range) (struct) if len("range") > 8192 { return fmt.Errorf("string in field \"range\" was too long") } @@ -173,8 +175,8 @@ func (t *RetrieveArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RetrieveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RetrieveArgumentsModel{} +func (t *RetrieveArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RetrieveArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -183,38 +185,38 @@ func (t *RetrieveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RetrieveArgumentsModel: %w", err) + return fmt.Errorf("reading object open for RetrieveArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RetrieveArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for RetrieveArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RetrieveArgumentsModel: %w", err) + return fmt.Errorf("reading object close for RetrieveArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RetrieveArgumentsModel: string too large") + return fmt.Errorf("reading string for field RetrieveArguments: string too large") } - return fmt.Errorf("reading string for field RetrieveArgumentsModel: %w", err) + return fmt.Errorf("reading string for field RetrieveArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RetrieveArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field RetrieveArguments: %w", err) } switch name { - // t.Blob (datamodel.BlobModel) (struct) + // t.Blob (content.Blob) (struct) case "blob": if err := t.Blob.UnmarshalDagJSON(jr); err != nil { return fmt.Errorf("unmarshaling t.Blob: %w", err) } - // t.Range (datamodel.RangeModel) (struct) + // t.Range (content.Range) (struct) case "range": if err := t.Range.UnmarshalDagJSON(jr); err != nil { @@ -224,19 +226,19 @@ func (t *RetrieveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RetrieveArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for RetrieveArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RetrieveArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field RetrieveArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RetrieveArgumentsModel") + return fmt.Errorf("map too large for RetrieveArguments") } } } diff --git a/capabilities/content/datamodel/json_gen.tuples.go b/capabilities/content/json_gen.tuples.go similarity index 74% rename from capabilities/content/datamodel/json_gen.tuples.go rename to capabilities/content/json_gen.tuples.go index 2cc1857..45d9d38 100644 --- a/capabilities/content/datamodel/json_gen.tuples.go +++ b/capabilities/content/json_gen.tuples.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package content import ( "errors" @@ -18,14 +20,14 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *RangeModel) MarshalDagJSON(w io.Writer) error { +func (t *Range) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() return err } if err := jw.WriteArrayOpen(); err != nil { - return fmt.Errorf("writing array open for field RangeModel: %w", err) + return fmt.Errorf("writing array open for field Range: %w", err) } // t.Start (uint64) (uint64) @@ -45,13 +47,13 @@ func (t *RangeModel) MarshalDagJSON(w io.Writer) error { } if err := jw.WriteArrayClose(); err != nil { - return fmt.Errorf("writing array close for field RangeModel: %w", err) + return fmt.Errorf("writing array close for field Range: %w", err) } return nil } -func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RangeModel{} +func (t *Range) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Range{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -60,15 +62,15 @@ func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadArrayOpen(); err != nil { - return fmt.Errorf("reading array open for field RangeModel: %w", err) + return fmt.Errorf("reading array open for field Range: %w", err) } close, err := jr.PeekArrayClose() if err != nil { - return fmt.Errorf("peeking array close for field RangeModel: %w", err) + return fmt.Errorf("peeking array close for field Range: %w", err) } if close { if err := jr.ReadArrayClose(); err != nil { - return fmt.Errorf("reading array close for field RangeModel: %w", err) + return fmt.Errorf("reading array close for field Range: %w", err) } } else { @@ -86,7 +88,7 @@ func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { { close, err := jr.ReadArrayCloseOrComma() if err != nil { - return fmt.Errorf("reading array close or comma for field RangeModel: %w", err) + return fmt.Errorf("reading array close or comma for field Range: %w", err) } if close { return fmt.Errorf("json input has too few fields 1 < 2") @@ -105,7 +107,7 @@ func (t *RangeModel) UnmarshalDagJSON(r io.Reader) (err error) { } if err := jr.ReadArrayClose(); err != nil { - return fmt.Errorf("reading array close for field RangeModel: %w", err) + return fmt.Errorf("reading array close for field Range: %w", err) } } return nil diff --git a/capabilities/content/retrieve.go b/capabilities/content/retrieve.go index f070294..a4f5c7e 100644 --- a/capabilities/content/retrieve.go +++ b/capabilities/content/retrieve.go @@ -1,18 +1,11 @@ +//go:build !codegen + package content -import ( - dm "github.com/fil-forge/libforge/capabilities/content/datamodel" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const RetrieveCommand = "/content/retrieve" -type ( - RetrieveArguments = dm.RetrieveArgumentsModel - Blob = dm.BlobModel - Range = dm.RangeModel - RetrieveOK = cdm.UnitModel -) +type RetrieveOK = capabilities.Unit -var Retrieve, _ = bindcap.New[*RetrieveArguments](RetrieveCommand) +var Retrieve = capabilities.MustNew[*RetrieveArguments](RetrieveCommand) diff --git a/capabilities/content/types.go b/capabilities/content/types.go new file mode 100644 index 0000000..cb310ca --- /dev/null +++ b/capabilities/content/types.go @@ -0,0 +1,17 @@ +package content + +import "github.com/multiformats/go-multihash" + +type Blob struct { + Digest multihash.Multihash `cborgen:"digest" dagjsongen:"digest"` +} + +type Range struct { + Start uint64 `cborgen:"start" dagjsongen:"start"` + End uint64 `cborgen:"end" dagjsongen:"end"` +} + +type RetrieveArguments struct { + Blob Blob `cborgen:"blob" dagjsongen:"blob"` + Range Range `cborgen:"range" dagjsongen:"range"` +} diff --git a/capabilities/datamodel/gen/main.go b/capabilities/datamodel/gen/main.go deleted file mode 100644 index 331e13c..0000000 --- a/capabilities/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - cdm.UnitModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/datamodel/unit.go b/capabilities/datamodel/unit.go deleted file mode 100644 index d8df4a4..0000000 --- a/capabilities/datamodel/unit.go +++ /dev/null @@ -1,3 +0,0 @@ -package datamodel - -type UnitModel struct{} diff --git a/capabilities/debug/datamodel/cbor_gen.go b/capabilities/debug/cbor_gen.go similarity index 89% rename from capabilities/debug/datamodel/cbor_gen.go rename to capabilities/debug/cbor_gen.go index 82e5f34..9bdcda2 100644 --- a/capabilities/debug/datamodel/cbor_gen.go +++ b/capabilities/debug/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package debug import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *EchoArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *EchoArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -55,8 +57,8 @@ func (t *EchoArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *EchoArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = EchoArgumentsModel{} +func (t *EchoArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = EchoArguments{} cr := cbg.NewCborReader(r) @@ -75,7 +77,7 @@ func (t *EchoArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("EchoArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("EchoArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/debug/datamodel/gen/main.go b/capabilities/debug/datamodel/gen/main.go deleted file mode 100644 index 2e254e0..0000000 --- a/capabilities/debug/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - ddm "github.com/fil-forge/libforge/capabilities/debug/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - ddm.EchoArgumentsModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/debug/echo.go b/capabilities/debug/echo.go index c86d344..8e5628c 100644 --- a/capabilities/debug/echo.go +++ b/capabilities/debug/echo.go @@ -1,20 +1,18 @@ +//go:build !codegen + package debug import ( - ddm "github.com/fil-forge/libforge/capabilities/debug/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/ucan/delegation/policy" - "github.com/fil-forge/ucantone/validator/bindcap" "github.com/fil-forge/ucantone/validator/capability" ) const EchoCommand = "/debug/echo" -type ( - EchoArguments = ddm.EchoArgumentsModel - EchoOK = EchoArguments -) +type EchoOK = EchoArguments -var Echo, _ = bindcap.New[*EchoArguments]( +var Echo = capabilities.MustNew[*EchoArguments]( EchoCommand, capability.WithPolicyBuilder(policy.NotEqual(".message", "")), ) diff --git a/capabilities/debug/gen/main.go b/capabilities/debug/gen/main.go new file mode 100644 index 0000000..3df1dcd --- /dev/null +++ b/capabilities/debug/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/debug" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + debug.EchoArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "debug", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "debug", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/debug/datamodel/json_gen.go b/capabilities/debug/json_gen.go similarity index 74% rename from capabilities/debug/datamodel/json_gen.go rename to capabilities/debug/json_gen.go index 4bdb05e..a0c787a 100644 --- a/capabilities/debug/datamodel/json_gen.go +++ b/capabilities/debug/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package debug import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *EchoArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *EchoArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -49,8 +51,8 @@ func (t *EchoArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *EchoArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = EchoArgumentsModel{} +func (t *EchoArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = EchoArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -59,27 +61,27 @@ func (t *EchoArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for EchoArgumentsModel: %w", err) + return fmt.Errorf("reading object open for EchoArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for EchoArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for EchoArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for EchoArgumentsModel: %w", err) + return fmt.Errorf("reading object close for EchoArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field EchoArgumentsModel: string too large") + return fmt.Errorf("reading string for field EchoArguments: string too large") } - return fmt.Errorf("reading string for field EchoArgumentsModel: %w", err) + return fmt.Errorf("reading string for field EchoArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field EchoArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field EchoArguments: %w", err) } switch name { @@ -98,19 +100,19 @@ func (t *EchoArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for EchoArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for EchoArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field EchoArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field EchoArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for EchoArgumentsModel") + return fmt.Errorf("map too large for EchoArguments") } } } diff --git a/capabilities/debug/datamodel/echo.go b/capabilities/debug/types.go similarity index 54% rename from capabilities/debug/datamodel/echo.go rename to capabilities/debug/types.go index b5219ce..5788fd0 100644 --- a/capabilities/debug/datamodel/echo.go +++ b/capabilities/debug/types.go @@ -1,5 +1,5 @@ -package datamodel +package debug -type EchoArgumentsModel struct { +type EchoArguments struct { Message string `cborgen:"message" dagjsongen:"message"` } diff --git a/capabilities/gen/main.go b/capabilities/gen/main.go new file mode 100644 index 0000000..7692183 --- /dev/null +++ b/capabilities/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + capabilities.Unit{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "capabilities", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "capabilities", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/http/datamodel/cbor_gen.go b/capabilities/http/cbor_gen.go similarity index 87% rename from capabilities/http/datamodel/cbor_gen.go rename to capabilities/http/cbor_gen.go index 17d0dd9..da88658 100644 --- a/capabilities/http/datamodel/cbor_gen.go +++ b/capabilities/http/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package http import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *PutArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *PutArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -30,7 +32,7 @@ func (t *PutArgumentsModel) MarshalCBOR(w io.Writer) error { return err } - // t.Body (datamodel.BlobModel) (struct) + // t.Body (blob.Blob) (struct) if len("body") > 8192 { return xerrors.Errorf("Value in field \"body\" was too long") } @@ -64,8 +66,8 @@ func (t *PutArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *PutArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = PutArgumentsModel{} +func (t *PutArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = PutArguments{} cr := cbg.NewCborReader(r) @@ -84,7 +86,7 @@ func (t *PutArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("PutArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("PutArguments: map struct too large (%d)", extra) } n := extra @@ -105,7 +107,7 @@ func (t *PutArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } switch string(nameBuf[:nameLen]) { - // t.Body (datamodel.BlobModel) (struct) + // t.Body (blob.Blob) (struct) case "body": { diff --git a/capabilities/http/datamodel/gen/main.go b/capabilities/http/datamodel/gen/main.go deleted file mode 100644 index 0719630..0000000 --- a/capabilities/http/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - hdm "github.com/fil-forge/libforge/capabilities/http/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - hdm.PutArgumentsModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/http/gen/main.go b/capabilities/http/gen/main.go new file mode 100644 index 0000000..076badb --- /dev/null +++ b/capabilities/http/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/http" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + http.PutArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "http", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "http", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/http/datamodel/json_gen.go b/capabilities/http/json_gen.go similarity index 76% rename from capabilities/http/datamodel/json_gen.go rename to capabilities/http/json_gen.go index 5a00143..d3dd5d1 100644 --- a/capabilities/http/datamodel/json_gen.go +++ b/capabilities/http/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package http import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *PutArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *PutArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -29,7 +31,7 @@ func (t *PutArgumentsModel) MarshalDagJSON(w io.Writer) error { } written := 0 - // t.Body (datamodel.BlobModel) (struct) + // t.Body (blob.Blob) (struct) if len("body") > 8192 { return fmt.Errorf("string in field \"body\" was too long") } @@ -68,8 +70,8 @@ func (t *PutArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *PutArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = PutArgumentsModel{} +func (t *PutArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = PutArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -78,31 +80,31 @@ func (t *PutArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for PutArgumentsModel: %w", err) + return fmt.Errorf("reading object open for PutArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for PutArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for PutArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for PutArgumentsModel: %w", err) + return fmt.Errorf("reading object close for PutArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field PutArgumentsModel: string too large") + return fmt.Errorf("reading string for field PutArguments: string too large") } - return fmt.Errorf("reading string for field PutArgumentsModel: %w", err) + return fmt.Errorf("reading string for field PutArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field PutArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field PutArguments: %w", err) } switch name { - // t.Body (datamodel.BlobModel) (struct) + // t.Body (blob.Blob) (struct) case "body": if err := t.Body.UnmarshalDagJSON(jr); err != nil { @@ -119,19 +121,19 @@ func (t *PutArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for PutArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for PutArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field PutArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field PutArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for PutArgumentsModel") + return fmt.Errorf("map too large for PutArguments") } } } diff --git a/capabilities/http/put.go b/capabilities/http/put.go index 2a5d32e..b29bbd8 100644 --- a/capabilities/http/put.go +++ b/capabilities/http/put.go @@ -1,16 +1,11 @@ +//go:build !codegen + package http -import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - hdm "github.com/fil-forge/libforge/capabilities/http/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const PutCommand = "/http/put" -type ( - PutArguments = hdm.PutArgumentsModel - PutOK = cdm.UnitModel -) +type PutOK = capabilities.Unit -var Put, _ = bindcap.New[*PutArguments](PutCommand) +var Put = capabilities.MustNew[*PutArguments](PutCommand) diff --git a/capabilities/http/datamodel/put.go b/capabilities/http/types.go similarity index 88% rename from capabilities/http/datamodel/put.go rename to capabilities/http/types.go index 34cd1bf..700700b 100644 --- a/capabilities/http/datamodel/put.go +++ b/capabilities/http/types.go @@ -1,11 +1,11 @@ -package datamodel +package http import ( "github.com/fil-forge/libforge/capabilities/blob" "github.com/fil-forge/ucantone/ucan/promise" ) -type PutArgumentsModel struct { +type PutArguments struct { Body blob.Blob `cborgen:"body" dagjsongen:"body"` // Destination is the promise that resolves to the upload destination // where the blob should be PUT to. It is the result of a /blob/allocate task. diff --git a/capabilities/index/add.go b/capabilities/index/add.go index 9d093d9..c685ad9 100644 --- a/capabilities/index/add.go +++ b/capabilities/index/add.go @@ -1,20 +1,17 @@ +//go:build !codegen + package index import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - dm "github.com/fil-forge/libforge/capabilities/index/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/errors" - "github.com/fil-forge/ucantone/validator/bindcap" ) const AddCommand = "/index/add" -type ( - AddArguments = dm.AddArgumentsModel - AddOK = cdm.UnitModel -) +type AddOK = capabilities.Unit -var Add, _ = bindcap.New[*AddArguments](AddCommand) +var Add = capabilities.MustNew[*AddArguments](AddCommand) const IndexNotFoundErrorName = "IndexNotFound" diff --git a/capabilities/index/datamodel/cbor_gen.go b/capabilities/index/cbor_gen.go similarity index 88% rename from capabilities/index/datamodel/cbor_gen.go rename to capabilities/index/cbor_gen.go index 7c79d9b..4591686 100644 --- a/capabilities/index/datamodel/cbor_gen.go +++ b/capabilities/index/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package index import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AddArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -49,8 +51,8 @@ func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddArguments{} cr := cbg.NewCborReader(r) @@ -69,7 +71,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AddArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/index/datamodel/gen/main.go b/capabilities/index/datamodel/gen/main.go deleted file mode 100644 index 2ffc8fc..0000000 --- a/capabilities/index/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/index/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.AddArgumentsModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/index/gen/main.go b/capabilities/index/gen/main.go new file mode 100644 index 0000000..d1e7985 --- /dev/null +++ b/capabilities/index/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/index" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + index.AddArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "index", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "index", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/index/datamodel/json_gen.go b/capabilities/index/json_gen.go similarity index 72% rename from capabilities/index/datamodel/json_gen.go rename to capabilities/index/json_gen.go index 65aff53..1a6ba28 100644 --- a/capabilities/index/datamodel/json_gen.go +++ b/capabilities/index/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package index import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AddArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -48,8 +50,8 @@ func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -58,27 +60,27 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AddArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AddArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AddArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddArgumentsModel: string too large") + return fmt.Errorf("reading string for field AddArguments: string too large") } - return fmt.Errorf("reading string for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AddArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AddArguments: %w", err) } switch name { @@ -96,19 +98,19 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddArgumentsModel") + return fmt.Errorf("map too large for AddArguments") } } } diff --git a/capabilities/index/datamodel/add.go b/capabilities/index/types.go similarity index 76% rename from capabilities/index/datamodel/add.go rename to capabilities/index/types.go index e629b31..32e950b 100644 --- a/capabilities/index/datamodel/add.go +++ b/capabilities/index/types.go @@ -1,8 +1,8 @@ -package datamodel +package index import "github.com/ipfs/go-cid" -type AddArgumentsModel struct { +type AddArguments struct { // Index is a link to the Content Archive (CAR) containing the index. Index cid.Cid `cborgen:"index" dagjsongen:"index"` } diff --git a/capabilities/datamodel/json_gen.go b/capabilities/json_gen.go similarity index 64% rename from capabilities/datamodel/json_gen.go rename to capabilities/json_gen.go index ffbaf2f..71a7946 100644 --- a/capabilities/datamodel/json_gen.go +++ b/capabilities/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package capabilities import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *UnitModel) MarshalDagJSON(w io.Writer) error { +func (t *Unit) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -32,8 +34,8 @@ func (t *UnitModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *UnitModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = UnitModel{} +func (t *Unit) UnmarshalDagJSON(r io.Reader) (err error) { + *t = Unit{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -42,45 +44,45 @@ func (t *UnitModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for UnitModel: %w", err) + return fmt.Errorf("reading object open for Unit: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for UnitModel: %w", err) + return fmt.Errorf("peeking object close for Unit: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for UnitModel: %w", err) + return fmt.Errorf("reading object close for Unit: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field UnitModel: string too large") + return fmt.Errorf("reading string for field Unit: string too large") } - return fmt.Errorf("reading string for field UnitModel: %w", err) + return fmt.Errorf("reading string for field Unit: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field UnitModel: %w", err) + return fmt.Errorf("reading object colon for field Unit: %w", err) } switch name { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for UnitModel: %w", name, err) + return fmt.Errorf("ignoring field %s for Unit: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field UnitModel: %w", err) + return fmt.Errorf("reading object close or comma for field Unit: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for UnitModel") + return fmt.Errorf("map too large for Unit") } } } diff --git a/capabilities/provider/add.go b/capabilities/provider/add.go index 36e8a67..8924761 100644 --- a/capabilities/provider/add.go +++ b/capabilities/provider/add.go @@ -1,19 +1,15 @@ +//go:build !codegen + package provider import ( - dm "github.com/fil-forge/libforge/capabilities/provider/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/errors" - "github.com/fil-forge/ucantone/validator/bindcap" ) const AddCommand = "/provider/add" -type ( - AddArguments = dm.AddArgumentsModel - AddOK = dm.AddOKModel -) - -var Add, _ = bindcap.New[*AddArguments](AddCommand) +var Add = capabilities.MustNew[*AddArguments](AddCommand) const ( InvalidAccountErrorName = "InvalidAccount" diff --git a/capabilities/provider/datamodel/cbor_gen.go b/capabilities/provider/cbor_gen.go similarity index 90% rename from capabilities/provider/datamodel/cbor_gen.go rename to capabilities/provider/cbor_gen.go index d912711..c8de3bc 100644 --- a/capabilities/provider/datamodel/cbor_gen.go +++ b/capabilities/provider/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package provider import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AddArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -64,8 +66,8 @@ func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddArguments{} cr := cbg.NewCborReader(r) @@ -84,7 +86,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AddArguments: map struct too large (%d)", extra) } n := extra @@ -136,7 +138,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *AddOKModel) MarshalCBOR(w io.Writer) error { +func (t *AddOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -173,8 +175,8 @@ func (t *AddOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddOKModel{} +func (t *AddOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddOK{} cr := cbg.NewCborReader(r) @@ -193,7 +195,7 @@ func (t *AddOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddOKModel: map struct too large (%d)", extra) + return fmt.Errorf("AddOK: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/provider/datamodel/gen/main.go b/capabilities/provider/datamodel/gen/main.go deleted file mode 100644 index aacfd96..0000000 --- a/capabilities/provider/datamodel/gen/main.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/provider/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.AddArgumentsModel{}, - dm.AddOKModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/provider/gen/main.go b/capabilities/provider/gen/main.go new file mode 100644 index 0000000..f528ab8 --- /dev/null +++ b/capabilities/provider/gen/main.go @@ -0,0 +1,42 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/provider" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + provider.AddArguments{}, + provider.AddOK{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "provider", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "provider", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/provider/datamodel/json_gen.go b/capabilities/provider/json_gen.go similarity index 76% rename from capabilities/provider/datamodel/json_gen.go rename to capabilities/provider/json_gen.go index 35210f0..91b5f19 100644 --- a/capabilities/provider/datamodel/json_gen.go +++ b/capabilities/provider/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package provider import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AddArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -68,8 +70,8 @@ func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -78,27 +80,27 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AddArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AddArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AddArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddArgumentsModel: string too large") + return fmt.Errorf("reading string for field AddArguments: string too large") } - return fmt.Errorf("reading string for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AddArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AddArguments: %w", err) } switch name { @@ -119,26 +121,26 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddArgumentsModel") + return fmt.Errorf("map too large for AddArguments") } } } return nil } -func (t *AddOKModel) MarshalDagJSON(w io.Writer) error { +func (t *AddOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -169,8 +171,8 @@ func (t *AddOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddOKModel{} +func (t *AddOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -179,27 +181,27 @@ func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddOKModel: %w", err) + return fmt.Errorf("reading object open for AddOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddOKModel: %w", err) + return fmt.Errorf("peeking object close for AddOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddOKModel: %w", err) + return fmt.Errorf("reading object close for AddOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddOKModel: string too large") + return fmt.Errorf("reading string for field AddOK: string too large") } - return fmt.Errorf("reading string for field AddOKModel: %w", err) + return fmt.Errorf("reading string for field AddOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddOKModel: %w", err) + return fmt.Errorf("reading object colon for field AddOK: %w", err) } switch name { @@ -218,19 +220,19 @@ func (t *AddOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddOKModel") + return fmt.Errorf("map too large for AddOK") } } } diff --git a/capabilities/provider/datamodel/add.go b/capabilities/provider/types.go similarity index 58% rename from capabilities/provider/datamodel/add.go rename to capabilities/provider/types.go index 2fefd03..f34744a 100644 --- a/capabilities/provider/datamodel/add.go +++ b/capabilities/provider/types.go @@ -1,14 +1,12 @@ -package datamodel +package provider -import ( - "github.com/fil-forge/ucantone/did" -) +import "github.com/fil-forge/ucantone/did" -type AddArgumentsModel struct { +type AddArguments struct { Provider did.DID `cborgen:"provider" dagjsongen:"provider"` Consumer did.DID `cborgen:"consumer" dagjsongen:"consumer"` } -type AddOKModel struct { +type AddOK struct { ID string `cborgen:"id" dagjsongen:"id"` } diff --git a/capabilities/space/datamodel/cbor_gen.go b/capabilities/space/cbor_gen.go similarity index 92% rename from capabilities/space/datamodel/cbor_gen.go rename to capabilities/space/cbor_gen.go index cae0f83..c1793a2 100644 --- a/capabilities/space/datamodel/cbor_gen.go +++ b/capabilities/space/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package space import ( "fmt" @@ -19,7 +21,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *InfoOKModel) MarshalCBOR(w io.Writer) error { +func (t *InfoOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -59,8 +61,8 @@ func (t *InfoOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *InfoOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = InfoOKModel{} +func (t *InfoOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = InfoOK{} cr := cbg.NewCborReader(r) @@ -79,7 +81,7 @@ func (t *InfoOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("InfoOKModel: map struct too large (%d)", extra) + return fmt.Errorf("InfoOK: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/space/datamodel/gen/main.go b/capabilities/space/datamodel/gen/main.go deleted file mode 100644 index 5ff9852..0000000 --- a/capabilities/space/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/space/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.InfoOKModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/space/egress/cbor_gen.go b/capabilities/space/egress/cbor_gen.go new file mode 100644 index 0000000..c18e3a3 --- /dev/null +++ b/capabilities/space/egress/cbor_gen.go @@ -0,0 +1,210 @@ +//go:build !codegen + +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package egress + +import ( + "fmt" + "io" + "math" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +func (t *TrackArguments) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{162}); err != nil { + return err + } + + // t.Endpoint (capabilities.CborURL) (struct) + if len("endpoint") > 8192 { + return xerrors.Errorf("Value in field \"endpoint\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("endpoint"))); err != nil { + return err + } + if _, err := cw.WriteString(string("endpoint")); err != nil { + return err + } + + if err := t.Endpoint.MarshalCBOR(cw); err != nil { + return err + } + + // t.Receipts (cid.Cid) (struct) + if len("receipts") > 8192 { + return xerrors.Errorf("Value in field \"receipts\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("receipts"))); err != nil { + return err + } + if _, err := cw.WriteString(string("receipts")); err != nil { + return err + } + + if err := cbg.WriteCid(cw, t.Receipts); err != nil { + return xerrors.Errorf("failed to write cid field t.Receipts: %w", err) + } + + return nil +} + +func (t *TrackArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = TrackArguments{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("TrackArguments: map struct too large (%d)", extra) + } + + n := extra + + nameBuf := make([]byte, 8) + for i := uint64(0); i < n; i++ { + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) + if err != nil { + return err + } + + if !ok { + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { + return err + } + continue + } + + switch string(nameBuf[:nameLen]) { + // t.Endpoint (capabilities.CborURL) (struct) + case "endpoint": + + { + + if err := t.Endpoint.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.Endpoint: %w", err) + } + + } + // t.Receipts (cid.Cid) (struct) + case "receipts": + + { + + c, err := cbg.ReadCid(cr) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Receipts: %w", err) + } + + t.Receipts = c + + } + + default: + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { + return err + } + } + } + + return nil +} +func (t *TrackOK) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{160}); err != nil { + return err + } + return nil +} + +func (t *TrackOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = TrackOK{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("TrackOK: map struct too large (%d)", extra) + } + + n := extra + + nameBuf := make([]byte, 0) + for i := uint64(0); i < n; i++ { + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) + if err != nil { + return err + } + + if !ok { + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { + return err + } + continue + } + + switch string(nameBuf[:nameLen]) { + + default: + // Field doesn't exist on this type, so ignore it + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { + return err + } + } + } + + return nil +} diff --git a/capabilities/space/egress/gen/main.go b/capabilities/space/egress/gen/main.go new file mode 100644 index 0000000..8fd7916 --- /dev/null +++ b/capabilities/space/egress/gen/main.go @@ -0,0 +1,42 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/space/egress" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + egress.TrackArguments{}, + egress.TrackOK{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "egress", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "egress", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/space/egress/json_gen.go b/capabilities/space/egress/json_gen.go new file mode 100644 index 0000000..4c682e3 --- /dev/null +++ b/capabilities/space/egress/json_gen.go @@ -0,0 +1,217 @@ +//go:build !codegen + +// Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. + +package egress + +import ( + "errors" + "fmt" + "io" + "math" + "sort" + + jsg "github.com/alanshaw/dag-json-gen" + cid "github.com/ipfs/go-cid" +) + +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort +var _ = errors.Is + +func (t *TrackArguments) MarshalDagJSON(w io.Writer) error { + jw := jsg.NewDagJsonWriter(w) + if t == nil { + err := jw.WriteNull() + return err + } + if err := jw.WriteObjectOpen(); err != nil { + return err + } + written := 0 + + // t.Endpoint (capabilities.CborURL) (struct) + if len("endpoint") > 8192 { + return fmt.Errorf("string in field \"endpoint\" was too long") + } + if err := jw.WriteString(string("endpoint")); err != nil { + return fmt.Errorf("writing string for field \"endpoint\": %w", err) + } + if err := jw.WriteObjectColon(); err != nil { + return err + } + if err := t.Endpoint.MarshalDagJSON(jw); err != nil { + return fmt.Errorf("marshaling field t.Endpoint: %w", err) + } + written++ + if written > 0 { + if err := jw.WriteComma(); err != nil { + return err + } + } + + // t.Receipts (cid.Cid) (struct) + if len("receipts") > 8192 { + return fmt.Errorf("string in field \"receipts\" was too long") + } + if err := jw.WriteString(string("receipts")); err != nil { + return fmt.Errorf("writing string for field \"receipts\": %w", err) + } + if err := jw.WriteObjectColon(); err != nil { + return err + } + + if err := jw.WriteCid(t.Receipts); err != nil { + return fmt.Errorf("writing CID for field t.Receipts: %w", err) + } + + written++ + if err := jw.WriteObjectClose(); err != nil { + return err + } + return nil +} +func (t *TrackArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = TrackArguments{} + + jr := jsg.NewDagJsonReader(r) + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + if err := jr.ReadObjectOpen(); err != nil { + return fmt.Errorf("reading object open for TrackArguments: %w", err) + } + close, err := jr.PeekObjectClose() + if err != nil { + return fmt.Errorf("peeking object close for TrackArguments: %w", err) + } + if close { + if err := jr.ReadObjectClose(); err != nil { + return fmt.Errorf("reading object close for TrackArguments: %w", err) + } + } else { + for i := uint64(0); i < 8192; i++ { + name, err := jr.ReadString(8192) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading string for field TrackArguments: string too large") + } + return fmt.Errorf("reading string for field TrackArguments: %w", err) + } + if err := jr.ReadObjectColon(); err != nil { + return fmt.Errorf("reading object colon for field TrackArguments: %w", err) + } + switch name { + + // t.Endpoint (capabilities.CborURL) (struct) + case "endpoint": + + if err := t.Endpoint.UnmarshalDagJSON(jr); err != nil { + return fmt.Errorf("unmarshaling t.Endpoint: %w", err) + } + + // t.Receipts (cid.Cid) (struct) + case "receipts": + { + + c, err := jr.ReadCid() + if err != nil { + return fmt.Errorf("reading CID for field t.Receipts: %w", err) + } + t.Receipts = c + + } + default: + // Field doesn't exist on this type, so ignore it + if err := jr.DiscardType(); err != nil { + return fmt.Errorf("ignoring field %s for TrackArguments: %w", name, err) + } + } + + close, err := jr.ReadObjectCloseOrComma() + if err != nil { + return fmt.Errorf("reading object close or comma for field TrackArguments: %w", err) + } + if close { + break + } + if i == 8192-1 { + return fmt.Errorf("map too large for TrackArguments") + } + } + } + + return nil +} +func (t *TrackOK) MarshalDagJSON(w io.Writer) error { + jw := jsg.NewDagJsonWriter(w) + if t == nil { + err := jw.WriteNull() + return err + } + if err := jw.WriteObjectOpen(); err != nil { + return err + } + if err := jw.WriteObjectClose(); err != nil { + return err + } + return nil +} +func (t *TrackOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = TrackOK{} + + jr := jsg.NewDagJsonReader(r) + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + if err := jr.ReadObjectOpen(); err != nil { + return fmt.Errorf("reading object open for TrackOK: %w", err) + } + close, err := jr.PeekObjectClose() + if err != nil { + return fmt.Errorf("peeking object close for TrackOK: %w", err) + } + if close { + if err := jr.ReadObjectClose(); err != nil { + return fmt.Errorf("reading object close for TrackOK: %w", err) + } + } else { + for i := uint64(0); i < 8192; i++ { + name, err := jr.ReadString(8192) + if err != nil { + if errors.Is(err, jsg.ErrLimitExceeded) { + return fmt.Errorf("reading string for field TrackOK: string too large") + } + return fmt.Errorf("reading string for field TrackOK: %w", err) + } + if err := jr.ReadObjectColon(); err != nil { + return fmt.Errorf("reading object colon for field TrackOK: %w", err) + } + switch name { + default: + // Field doesn't exist on this type, so ignore it + if err := jr.DiscardType(); err != nil { + return fmt.Errorf("ignoring field %s for TrackOK: %w", name, err) + } + } + + close, err := jr.ReadObjectCloseOrComma() + if err != nil { + return fmt.Errorf("reading object close or comma for field TrackOK: %w", err) + } + if close { + break + } + if i == 8192-1 { + return fmt.Errorf("map too large for TrackOK") + } + } + } + + return nil +} diff --git a/capabilities/space/egress/track.go b/capabilities/space/egress/track.go new file mode 100644 index 0000000..416f3f2 --- /dev/null +++ b/capabilities/space/egress/track.go @@ -0,0 +1,14 @@ +//go:build !codegen + +package egress + +import "github.com/fil-forge/libforge/capabilities" + +const TrackCommand = "/space/egress/track" + +// Track is the capability a storage node invokes to ask the egress +// tracking service to record egress accounted for in a batch of +// `/content/retrieve` receipts. The tracking service responds by forking +// a `/space/egress/consolidate` sub-invocation onto the receipt's +// effects; the typed OK return is empty. +var Track = capabilities.MustNew[*TrackArguments](TrackCommand) diff --git a/capabilities/space/egress/types.go b/capabilities/space/egress/types.go new file mode 100644 index 0000000..626f7e9 --- /dev/null +++ b/capabilities/space/egress/types.go @@ -0,0 +1,23 @@ +package egress + +import ( + "github.com/fil-forge/libforge/capabilities" + "github.com/ipfs/go-cid" +) + +// TrackArguments is the argument shape of `/space/egress/track`. A storage +// node invokes this capability to ask the egress tracking service to record +// the egress accounted for in a batch of `/content/retrieve` receipts. +// Receipts is the CID of the receipts batch (root of the dag-cbor archive +// the storage node has staged); Endpoint is the URL the tracking service +// should fetch that archive from. +type TrackArguments struct { + Receipts cid.Cid `cborgen:"receipts" dagjsongen:"receipts"` + Endpoint capabilities.CborURL `cborgen:"endpoint" dagjsongen:"endpoint"` +} + +// TrackOK is the success return for `/space/egress/track`. The tracking +// service's consolidation response is delivered out-of-band as a forked +// sub-invocation (a `/space/egress/consolidate`) attached to the receipt's +// effects; the typed OK record itself is empty. +type TrackOK struct{} diff --git a/capabilities/space/gen/main.go b/capabilities/space/gen/main.go new file mode 100644 index 0000000..9945ab0 --- /dev/null +++ b/capabilities/space/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/space" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + space.InfoOK{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "space", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "space", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/space/info.go b/capabilities/space/info.go index 4f508a7..907e016 100644 --- a/capabilities/space/info.go +++ b/capabilities/space/info.go @@ -1,18 +1,13 @@ +//go:build !codegen + package space -import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - dm "github.com/fil-forge/libforge/capabilities/space/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const InfoCommand = "/space/info" -type ( - InfoArguments = cdm.UnitModel - InfoOK = dm.InfoOKModel -) +type InfoArguments = capabilities.Unit -var Info, _ = bindcap.New[*InfoArguments](InfoCommand) +var Info = capabilities.MustNew[*InfoArguments](InfoCommand) const UnknownSpaceErrorName = "UnknownSpace" diff --git a/capabilities/space/datamodel/json_gen.go b/capabilities/space/json_gen.go similarity index 82% rename from capabilities/space/datamodel/json_gen.go rename to capabilities/space/json_gen.go index 074f9f8..7d68a87 100644 --- a/capabilities/space/datamodel/json_gen.go +++ b/capabilities/space/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package space import ( "errors" @@ -19,7 +21,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *InfoOKModel) MarshalDagJSON(w io.Writer) error { +func (t *InfoOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -65,8 +67,8 @@ func (t *InfoOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *InfoOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = InfoOKModel{} +func (t *InfoOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = InfoOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -75,27 +77,27 @@ func (t *InfoOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for InfoOKModel: %w", err) + return fmt.Errorf("reading object open for InfoOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for InfoOKModel: %w", err) + return fmt.Errorf("peeking object close for InfoOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for InfoOKModel: %w", err) + return fmt.Errorf("reading object close for InfoOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field InfoOKModel: string too large") + return fmt.Errorf("reading string for field InfoOK: string too large") } - return fmt.Errorf("reading string for field InfoOKModel: %w", err) + return fmt.Errorf("reading string for field InfoOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field InfoOKModel: %w", err) + return fmt.Errorf("reading object colon for field InfoOK: %w", err) } switch name { @@ -143,19 +145,19 @@ func (t *InfoOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for InfoOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for InfoOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field InfoOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field InfoOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for InfoOKModel") + return fmt.Errorf("map too large for InfoOK") } } } diff --git a/capabilities/space/datamodel/info.go b/capabilities/space/types.go similarity index 71% rename from capabilities/space/datamodel/info.go rename to capabilities/space/types.go index ffc017c..a6e6028 100644 --- a/capabilities/space/datamodel/info.go +++ b/capabilities/space/types.go @@ -1,7 +1,7 @@ -package datamodel +package space import "github.com/fil-forge/ucantone/did" -type InfoOKModel struct { +type InfoOK struct { Providers []did.DID `cborgen:"providers" dagjsongen:"providers"` } diff --git a/capabilities/types.go b/capabilities/types.go new file mode 100644 index 0000000..f2b0b15 --- /dev/null +++ b/capabilities/types.go @@ -0,0 +1,9 @@ +// Package capabilities defines UCAN capabilities used across the forge +// stack. Each operation lives in a subpackage (e.g. blob, upload, pdp); +// this top-level package holds shared wire types and helpers. +package capabilities + +// Unit is the empty wire type returned by any capability whose receipt +// carries no payload (e.g. /upload/remove, /claim/cache). It encodes as +// an empty CBOR map / dag-json object. +type Unit struct{} diff --git a/capabilities/ucan/attest/datamodel/cbor_gen.go b/capabilities/ucan/attest/cbor_gen.go similarity index 88% rename from capabilities/ucan/attest/datamodel/cbor_gen.go rename to capabilities/ucan/attest/cbor_gen.go index 5f10f9e..ca98219 100644 --- a/capabilities/ucan/attest/datamodel/cbor_gen.go +++ b/capabilities/ucan/attest/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package attest import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *ProofArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ProofArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -49,8 +51,8 @@ func (t *ProofArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ProofArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ProofArgumentsModel{} +func (t *ProofArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ProofArguments{} cr := cbg.NewCborReader(r) @@ -69,7 +71,7 @@ func (t *ProofArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ProofArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ProofArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/ucan/attest/datamodel/gen/main.go b/capabilities/ucan/attest/datamodel/gen/main.go deleted file mode 100644 index 601b2ed..0000000 --- a/capabilities/ucan/attest/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - adm "github.com/fil-forge/libforge/capabilities/ucan/attest/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - adm.ProofArgumentsModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/ucan/attest/gen/main.go b/capabilities/ucan/attest/gen/main.go new file mode 100644 index 0000000..a318354 --- /dev/null +++ b/capabilities/ucan/attest/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/ucan/attest" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + attest.ProofArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "attest", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "attest", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/ucan/attest/datamodel/json_gen.go b/capabilities/ucan/attest/json_gen.go similarity index 72% rename from capabilities/ucan/attest/datamodel/json_gen.go rename to capabilities/ucan/attest/json_gen.go index 3cba623..87ba7c7 100644 --- a/capabilities/ucan/attest/datamodel/json_gen.go +++ b/capabilities/ucan/attest/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package attest import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *ProofArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ProofArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -48,8 +50,8 @@ func (t *ProofArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ProofArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ProofArgumentsModel{} +func (t *ProofArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ProofArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -58,27 +60,27 @@ func (t *ProofArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ProofArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ProofArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ProofArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ProofArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ProofArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ProofArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ProofArgumentsModel: string too large") + return fmt.Errorf("reading string for field ProofArguments: string too large") } - return fmt.Errorf("reading string for field ProofArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ProofArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ProofArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ProofArguments: %w", err) } switch name { @@ -96,19 +98,19 @@ func (t *ProofArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ProofArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ProofArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ProofArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ProofArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ProofArgumentsModel") + return fmt.Errorf("map too large for ProofArguments") } } } diff --git a/capabilities/ucan/attest/proof.go b/capabilities/ucan/attest/proof.go index a7b1ef8..ef22143 100644 --- a/capabilities/ucan/attest/proof.go +++ b/capabilities/ucan/attest/proof.go @@ -1,18 +1,13 @@ -package attest +//go:build !codegen -import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - adm "github.com/fil-forge/libforge/capabilities/ucan/attest/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +package attest -type ( - ProofArguments = adm.ProofArgumentsModel - ProofOK = cdm.UnitModel -) +import "github.com/fil-forge/libforge/capabilities" const ProofCommand = "/ucan/attest/proof" +type ProofOK = capabilities.Unit + // Issued by a trusted authority (usually the one handling invocation) that // attests a specific UCAN delegation has been considered authentic. -var Proof, _ = bindcap.New[*ProofArguments](ProofCommand) +var Proof = capabilities.MustNew[*ProofArguments](ProofCommand) diff --git a/capabilities/ucan/attest/datamodel/proof.go b/capabilities/ucan/attest/types.go similarity index 62% rename from capabilities/ucan/attest/datamodel/proof.go rename to capabilities/ucan/attest/types.go index 59e3568..bf2f640 100644 --- a/capabilities/ucan/attest/datamodel/proof.go +++ b/capabilities/ucan/attest/types.go @@ -1,7 +1,7 @@ -package datamodel +package attest import "github.com/ipfs/go-cid" -type ProofArgumentsModel struct { +type ProofArguments struct { Proof cid.Cid `cborgen:"proof" dagjsongen:"proof"` } diff --git a/capabilities/ucan/datamodel/cbor_gen.go b/capabilities/ucan/cbor_gen.go similarity index 88% rename from capabilities/ucan/datamodel/cbor_gen.go rename to capabilities/ucan/cbor_gen.go index 350eed6..a504ad0 100644 --- a/capabilities/ucan/datamodel/cbor_gen.go +++ b/capabilities/ucan/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package ucan import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *ConcludeArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ConcludeArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -49,8 +51,8 @@ func (t *ConcludeArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ConcludeArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ConcludeArgumentsModel{} +func (t *ConcludeArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ConcludeArguments{} cr := cbg.NewCborReader(r) @@ -69,7 +71,7 @@ func (t *ConcludeArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ConcludeArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ConcludeArguments: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/ucan/conclude.go b/capabilities/ucan/conclude.go index 2b9d7e7..918556d 100644 --- a/capabilities/ucan/conclude.go +++ b/capabilities/ucan/conclude.go @@ -1,20 +1,17 @@ +//go:build !codegen + package ucan import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - udm "github.com/fil-forge/libforge/capabilities/ucan/datamodel" + "github.com/fil-forge/libforge/capabilities" "github.com/fil-forge/ucantone/errors" - "github.com/fil-forge/ucantone/validator/bindcap" -) - -type ( - ConcludeArguments = udm.ConcludeArgumentsModel - ConcludeOK = cdm.UnitModel ) const ConcludeCommand = "/ucan/conclude" -var Conclude, _ = bindcap.New[*ConcludeArguments](ConcludeCommand) +type ConcludeOK = capabilities.Unit + +var Conclude = capabilities.MustNew[*ConcludeArguments](ConcludeCommand) const ConclusionReceiptNotFoundErrorName = "ConclusionReceiptNotFound" diff --git a/capabilities/ucan/datamodel/gen/main.go b/capabilities/ucan/datamodel/gen/main.go deleted file mode 100644 index 5a995e4..0000000 --- a/capabilities/ucan/datamodel/gen/main.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - udm "github.com/fil-forge/libforge/capabilities/ucan/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - udm.ConcludeArgumentsModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/ucan/gen/main.go b/capabilities/ucan/gen/main.go new file mode 100644 index 0000000..68cd6f0 --- /dev/null +++ b/capabilities/ucan/gen/main.go @@ -0,0 +1,41 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/ucan" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + ucan.ConcludeArguments{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "ucan", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "ucan", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/ucan/datamodel/json_gen.go b/capabilities/ucan/json_gen.go similarity index 78% rename from capabilities/ucan/datamodel/json_gen.go rename to capabilities/ucan/json_gen.go index c1e100d..1930154 100644 --- a/capabilities/ucan/datamodel/json_gen.go +++ b/capabilities/ucan/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package ucan import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *ConcludeArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ConcludeArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -48,8 +50,8 @@ func (t *ConcludeArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ConcludeArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ConcludeArgumentsModel{} +func (t *ConcludeArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ConcludeArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -58,27 +60,27 @@ func (t *ConcludeArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ConcludeArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ConcludeArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ConcludeArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ConcludeArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ConcludeArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ConcludeArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ConcludeArgumentsModel: string too large") + return fmt.Errorf("reading string for field ConcludeArguments: string too large") } - return fmt.Errorf("reading string for field ConcludeArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ConcludeArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ConcludeArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ConcludeArguments: %w", err) } switch name { @@ -96,19 +98,19 @@ func (t *ConcludeArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ConcludeArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ConcludeArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ConcludeArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ConcludeArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ConcludeArgumentsModel") + return fmt.Errorf("map too large for ConcludeArguments") } } } diff --git a/capabilities/ucan/datamodel/conclude.go b/capabilities/ucan/types.go similarity index 63% rename from capabilities/ucan/datamodel/conclude.go rename to capabilities/ucan/types.go index 5595df1..21bfd30 100644 --- a/capabilities/ucan/datamodel/conclude.go +++ b/capabilities/ucan/types.go @@ -1,7 +1,7 @@ -package datamodel +package ucan import "github.com/ipfs/go-cid" -type ConcludeArgumentsModel struct { +type ConcludeArguments struct { Receipt cid.Cid `cborgen:"receipt" dagjsongen:"receipt"` } diff --git a/capabilities/unit.go b/capabilities/unit.go deleted file mode 100644 index 524f259..0000000 --- a/capabilities/unit.go +++ /dev/null @@ -1,5 +0,0 @@ -package capabilities - -import "github.com/fil-forge/libforge/capabilities/datamodel" - -type Unit = datamodel.UnitModel diff --git a/capabilities/upload/add.go b/capabilities/upload/add.go index 47be3a1..7a91813 100644 --- a/capabilities/upload/add.go +++ b/capabilities/upload/add.go @@ -1,16 +1,11 @@ +//go:build !codegen + package upload -import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - udm "github.com/fil-forge/libforge/capabilities/upload/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const AddCommand = "/upload/add" -type ( - AddArguments = udm.AddArgumentsModel - AddOK = cdm.UnitModel -) +type AddOK = capabilities.Unit -var Add, _ = bindcap.New[*AddArguments](AddCommand) +var Add = capabilities.MustNew[*AddArguments](AddCommand) diff --git a/capabilities/upload/datamodel/cbor_gen.go b/capabilities/upload/cbor_gen.go similarity index 94% rename from capabilities/upload/datamodel/cbor_gen.go rename to capabilities/upload/cbor_gen.go index f2b1817..0593bd1 100644 --- a/capabilities/upload/datamodel/cbor_gen.go +++ b/capabilities/upload/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package upload import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *AddArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -106,8 +108,8 @@ func (t *AddArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = AddArguments{} cr := cbg.NewCborReader(r) @@ -126,7 +128,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("AddArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("AddArguments: map struct too large (%d)", extra) } n := extra @@ -236,7 +238,7 @@ func (t *AddArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *RemoveArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *RemoveArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -267,8 +269,8 @@ func (t *RemoveArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = RemoveArgumentsModel{} +func (t *RemoveArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = RemoveArguments{} cr := cbg.NewCborReader(r) @@ -287,7 +289,7 @@ func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("RemoveArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("RemoveArguments: map struct too large (%d)", extra) } n := extra @@ -332,7 +334,7 @@ func (t *RemoveArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ListArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -413,8 +415,8 @@ func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListArguments{} cr := cbg.NewCborReader(r) @@ -433,7 +435,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ListArguments: map struct too large (%d)", extra) } n := extra @@ -511,7 +513,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ListOKModel) MarshalCBOR(w io.Writer) error { +func (t *ListOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -576,7 +578,7 @@ func (t *ListOKModel) MarshalCBOR(w io.Writer) error { } } - // t.Results ([]datamodel.ListUploadItem) (slice) + // t.Results ([]upload.ListUploadItem) (slice) if len("results") > 8192 { return xerrors.Errorf("Value in field \"results\" was too long") } @@ -604,8 +606,8 @@ func (t *ListOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListOK{} cr := cbg.NewCborReader(r) @@ -624,7 +626,7 @@ func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListOKModel: map struct too large (%d)", extra) + return fmt.Errorf("ListOK: map struct too large (%d)", extra) } n := extra @@ -681,7 +683,7 @@ func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { t.Cursor = (*string)(&sval) } } - // t.Results ([]datamodel.ListUploadItem) (slice) + // t.Results ([]upload.ListUploadItem) (slice) case "results": maj, extra, err = cr.ReadHeader() diff --git a/capabilities/upload/datamodel/add.go b/capabilities/upload/datamodel/add.go deleted file mode 100644 index 6e4a983..0000000 --- a/capabilities/upload/datamodel/add.go +++ /dev/null @@ -1,11 +0,0 @@ -package datamodel - -import ( - "github.com/ipfs/go-cid" -) - -type AddArgumentsModel struct { - Root cid.Cid `cborgen:"root" dagjsongen:"root"` - Shards []cid.Cid `cborgen:"shards" dagjsongen:"shards"` - Index *cid.Cid `cborgen:"index,omitempty" dagjsongen:"index,omitempty"` -} diff --git a/capabilities/upload/datamodel/gen/main.go b/capabilities/upload/datamodel/gen/main.go deleted file mode 100644 index cd83181..0000000 --- a/capabilities/upload/datamodel/gen/main.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/upload/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.AddArgumentsModel{}, - dm.RemoveArgumentsModel{}, - dm.ListArgumentsModel{}, - dm.ListOKModel{}, - dm.ListUploadItem{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/upload/datamodel/remove.go b/capabilities/upload/datamodel/remove.go deleted file mode 100644 index e53f8af..0000000 --- a/capabilities/upload/datamodel/remove.go +++ /dev/null @@ -1,11 +0,0 @@ -package datamodel - -import ( - "github.com/ipfs/go-cid" -) - -type RemoveArgumentsModel struct { - Root cid.Cid `cborgen:"root" dagjsongen:"root"` -} - -type RemoveOKModel struct{} diff --git a/capabilities/upload/gen/main.go b/capabilities/upload/gen/main.go new file mode 100644 index 0000000..1539992 --- /dev/null +++ b/capabilities/upload/gen/main.go @@ -0,0 +1,45 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/upload" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + upload.AddArguments{}, + upload.RemoveArguments{}, + upload.ListArguments{}, + upload.ListOK{}, + upload.ListUploadItem{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "upload", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "upload", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/upload/datamodel/json_gen.go b/capabilities/upload/json_gen.go similarity index 86% rename from capabilities/upload/datamodel/json_gen.go rename to capabilities/upload/json_gen.go index abded2c..fa19d3a 100644 --- a/capabilities/upload/datamodel/json_gen.go +++ b/capabilities/upload/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package upload import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *AddArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -120,8 +122,8 @@ func (t *AddArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = AddArgumentsModel{} +func (t *AddArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = AddArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -130,27 +132,27 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object open for AddArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for AddArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for AddArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close for AddArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field AddArgumentsModel: string too large") + return fmt.Errorf("reading string for field AddArguments: string too large") } - return fmt.Errorf("reading string for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading string for field AddArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field AddArguments: %w", err) } switch name { @@ -226,26 +228,26 @@ func (t *AddArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for AddArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for AddArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field AddArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field AddArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for AddArgumentsModel") + return fmt.Errorf("map too large for AddArguments") } } } return nil } -func (t *RemoveArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *RemoveArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -275,8 +277,8 @@ func (t *RemoveArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = RemoveArgumentsModel{} +func (t *RemoveArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = RemoveArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -285,27 +287,27 @@ func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object open for RemoveArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for RemoveArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for RemoveArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object close for RemoveArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field RemoveArgumentsModel: string too large") + return fmt.Errorf("reading string for field RemoveArguments: string too large") } - return fmt.Errorf("reading string for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading string for field RemoveArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field RemoveArguments: %w", err) } switch name { @@ -323,26 +325,26 @@ func (t *RemoveArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for RemoveArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for RemoveArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field RemoveArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field RemoveArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for RemoveArgumentsModel") + return fmt.Errorf("map too large for RemoveArguments") } } } return nil } -func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ListArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -415,8 +417,8 @@ func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -425,27 +427,27 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ListArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ListArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ListArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListArgumentsModel: string too large") + return fmt.Errorf("reading string for field ListArguments: string too large") } - return fmt.Errorf("reading string for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ListArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ListArguments: %w", err) } switch name { @@ -481,26 +483,26 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListArgumentsModel") + return fmt.Errorf("map too large for ListArguments") } } } return nil } -func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { +func (t *ListOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -542,7 +544,7 @@ func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { } } - // t.Results ([]datamodel.ListUploadItem) (slice) + // t.Results ([]upload.ListUploadItem) (slice) if len("results") > 8192 { return fmt.Errorf("string in field \"results\" was too long") } @@ -601,8 +603,8 @@ func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -611,27 +613,27 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListOKModel: %w", err) + return fmt.Errorf("reading object open for ListOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListOKModel: %w", err) + return fmt.Errorf("peeking object close for ListOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListOKModel: %w", err) + return fmt.Errorf("reading object close for ListOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListOKModel: string too large") + return fmt.Errorf("reading string for field ListOK: string too large") } - return fmt.Errorf("reading string for field ListOKModel: %w", err) + return fmt.Errorf("reading string for field ListOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListOKModel: %w", err) + return fmt.Errorf("reading object colon for field ListOK: %w", err) } switch name { @@ -650,7 +652,7 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } } - // t.Results ([]datamodel.ListUploadItem) (slice) + // t.Results ([]upload.ListUploadItem) (slice) case "results": { @@ -706,19 +708,19 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListOKModel") + return fmt.Errorf("map too large for ListOK") } } } diff --git a/capabilities/upload/list.go b/capabilities/upload/list.go index 1949d1e..ef093f9 100644 --- a/capabilities/upload/list.go +++ b/capabilities/upload/list.go @@ -1,16 +1,9 @@ +//go:build !codegen + package upload -import ( - dm "github.com/fil-forge/libforge/capabilities/upload/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const ListCommand = "/upload/list" -type ( - ListArguments = dm.ListArgumentsModel - ListOK = dm.ListOKModel - ListUploadItem = dm.ListUploadItem -) - -var List, _ = bindcap.New[*ListArguments](ListCommand) +var List = capabilities.MustNew[*ListArguments](ListCommand) diff --git a/capabilities/upload/remove.go b/capabilities/upload/remove.go index 88195b4..d56089a 100644 --- a/capabilities/upload/remove.go +++ b/capabilities/upload/remove.go @@ -1,16 +1,11 @@ +//go:build !codegen + package upload -import ( - cdm "github.com/fil-forge/libforge/capabilities/datamodel" - udm "github.com/fil-forge/libforge/capabilities/upload/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const RemoveCommand = "/upload/remove" -type ( - RemoveArguments = udm.RemoveArgumentsModel - RemoveOK = cdm.UnitModel -) +type RemoveOK = capabilities.Unit -var Remove, _ = bindcap.New[*RemoveArguments](RemoveCommand) +var Remove = capabilities.MustNew[*RemoveArguments](RemoveCommand) diff --git a/capabilities/upload/shard/datamodel/cbor_gen.go b/capabilities/upload/shard/cbor_gen.go similarity index 94% rename from capabilities/upload/shard/datamodel/cbor_gen.go rename to capabilities/upload/shard/cbor_gen.go index b4abdc7..4fd50e9 100644 --- a/capabilities/upload/shard/datamodel/cbor_gen.go +++ b/capabilities/upload/shard/cbor_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. -package datamodel +package shard import ( "fmt" @@ -18,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { +func (t *ListArguments) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -115,8 +117,8 @@ func (t *ListArgumentsModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListArguments{} cr := cbg.NewCborReader(r) @@ -135,7 +137,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListArgumentsModel: map struct too large (%d)", extra) + return fmt.Errorf("ListArguments: map struct too large (%d)", extra) } n := extra @@ -226,7 +228,7 @@ func (t *ListArgumentsModel) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *ListOKModel) MarshalCBOR(w io.Writer) error { +func (t *ListOK) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -320,8 +322,8 @@ func (t *ListOKModel) MarshalCBOR(w io.Writer) error { return nil } -func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalCBOR(r io.Reader) (err error) { + *t = ListOK{} cr := cbg.NewCborReader(r) @@ -340,7 +342,7 @@ func (t *ListOKModel) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("ListOKModel: map struct too large (%d)", extra) + return fmt.Errorf("ListOK: map struct too large (%d)", extra) } n := extra diff --git a/capabilities/upload/shard/datamodel/gen/main.go b/capabilities/upload/shard/datamodel/gen/main.go deleted file mode 100644 index 08f5db1..0000000 --- a/capabilities/upload/shard/datamodel/gen/main.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:generate go run . - -package main - -import ( - jsg "github.com/alanshaw/dag-json-gen" - dm "github.com/fil-forge/libforge/capabilities/upload/shard/datamodel" - cbg "github.com/whyrusleeping/cbor-gen" -) - -func main() { - models := []any{ - dm.ListArgumentsModel{}, - dm.ListOKModel{}, - } - if err := cbg.WriteMapEncodersToFile("../cbor_gen.go", "datamodel", models...); err != nil { - panic(err) - } - if err := jsg.WriteMapEncodersToFile("../json_gen.go", "datamodel", models...); err != nil { - panic(err) - } -} diff --git a/capabilities/upload/shard/gen/main.go b/capabilities/upload/shard/gen/main.go new file mode 100644 index 0000000..767eccc --- /dev/null +++ b/capabilities/upload/shard/gen/main.go @@ -0,0 +1,42 @@ +//go:generate go run -tags codegen . + +package main + +import ( + "os" + + jsg "github.com/alanshaw/dag-json-gen" + "github.com/fil-forge/libforge/capabilities/upload/shard" + cbg "github.com/whyrusleeping/cbor-gen" +) + +const buildTag = "//go:build !codegen\n\n" + +func tag(path string) { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + if err := os.WriteFile(path, append([]byte(buildTag), data...), 0644); err != nil { + panic(err) + } +} + +func main() { + models := []any{ + shard.ListArguments{}, + shard.ListOK{}, + } + const ( + cborFile = "../cbor_gen.go" + jsonFile = "../json_gen.go" + ) + if err := cbg.WriteMapEncodersToFile(cborFile, "shard", models...); err != nil { + panic(err) + } + if err := jsg.WriteMapEncodersToFile(jsonFile, "shard", models...); err != nil { + panic(err) + } + tag(cborFile) + tag(jsonFile) +} diff --git a/capabilities/upload/shard/datamodel/json_gen.go b/capabilities/upload/shard/json_gen.go similarity index 86% rename from capabilities/upload/shard/datamodel/json_gen.go rename to capabilities/upload/shard/json_gen.go index a24f1db..f17a139 100644 --- a/capabilities/upload/shard/datamodel/json_gen.go +++ b/capabilities/upload/shard/json_gen.go @@ -1,6 +1,8 @@ +//go:build !codegen + // Code generated by github.com/alanshaw/dag-json-gen. DO NOT EDIT. -package datamodel +package shard import ( "errors" @@ -18,7 +20,7 @@ var _ = math.E var _ = sort.Sort var _ = errors.Is -func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { +func (t *ListArguments) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -113,8 +115,8 @@ func (t *ListArgumentsModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListArgumentsModel{} +func (t *ListArguments) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListArguments{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -123,27 +125,27 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object open for ListArguments: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListArgumentsModel: %w", err) + return fmt.Errorf("peeking object close for ListArguments: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close for ListArguments: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListArgumentsModel: string too large") + return fmt.Errorf("reading string for field ListArguments: string too large") } - return fmt.Errorf("reading string for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading string for field ListArguments: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object colon for field ListArguments: %w", err) } switch name { @@ -191,26 +193,26 @@ func (t *ListArgumentsModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListArgumentsModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListArguments: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListArgumentsModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListArguments: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListArgumentsModel") + return fmt.Errorf("map too large for ListArguments") } } } return nil } -func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { +func (t *ListOK) MarshalDagJSON(w io.Writer) error { jw := jsg.NewDagJsonWriter(w) if t == nil { err := jw.WriteNull() @@ -313,8 +315,8 @@ func (t *ListOKModel) MarshalDagJSON(w io.Writer) error { } return nil } -func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { - *t = ListOKModel{} +func (t *ListOK) UnmarshalDagJSON(r io.Reader) (err error) { + *t = ListOK{} jr := jsg.NewDagJsonReader(r) defer func() { @@ -323,27 +325,27 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { } }() if err := jr.ReadObjectOpen(); err != nil { - return fmt.Errorf("reading object open for ListOKModel: %w", err) + return fmt.Errorf("reading object open for ListOK: %w", err) } close, err := jr.PeekObjectClose() if err != nil { - return fmt.Errorf("peeking object close for ListOKModel: %w", err) + return fmt.Errorf("peeking object close for ListOK: %w", err) } if close { if err := jr.ReadObjectClose(); err != nil { - return fmt.Errorf("reading object close for ListOKModel: %w", err) + return fmt.Errorf("reading object close for ListOK: %w", err) } } else { for i := uint64(0); i < 8192; i++ { name, err := jr.ReadString(8192) if err != nil { if errors.Is(err, jsg.ErrLimitExceeded) { - return fmt.Errorf("reading string for field ListOKModel: string too large") + return fmt.Errorf("reading string for field ListOK: string too large") } - return fmt.Errorf("reading string for field ListOKModel: %w", err) + return fmt.Errorf("reading string for field ListOK: %w", err) } if err := jr.ReadObjectColon(); err != nil { - return fmt.Errorf("reading object colon for field ListOKModel: %w", err) + return fmt.Errorf("reading object colon for field ListOK: %w", err) } switch name { @@ -422,19 +424,19 @@ func (t *ListOKModel) UnmarshalDagJSON(r io.Reader) (err error) { default: // Field doesn't exist on this type, so ignore it if err := jr.DiscardType(); err != nil { - return fmt.Errorf("ignoring field %s for ListOKModel: %w", name, err) + return fmt.Errorf("ignoring field %s for ListOK: %w", name, err) } } close, err := jr.ReadObjectCloseOrComma() if err != nil { - return fmt.Errorf("reading object close or comma for field ListOKModel: %w", err) + return fmt.Errorf("reading object close or comma for field ListOK: %w", err) } if close { break } if i == 8192-1 { - return fmt.Errorf("map too large for ListOKModel") + return fmt.Errorf("map too large for ListOK") } } } diff --git a/capabilities/upload/shard/list.go b/capabilities/upload/shard/list.go index 06481c8..5f759fd 100644 --- a/capabilities/upload/shard/list.go +++ b/capabilities/upload/shard/list.go @@ -1,15 +1,9 @@ +//go:build !codegen + package shard -import ( - dm "github.com/fil-forge/libforge/capabilities/upload/shard/datamodel" - "github.com/fil-forge/ucantone/validator/bindcap" -) +import "github.com/fil-forge/libforge/capabilities" const ListCommand = "/upload/shard/list" -type ( - ListArguments = dm.ListArgumentsModel - ListOK = dm.ListOKModel -) - -var List, _ = bindcap.New[*ListArguments](ListCommand) +var List = capabilities.MustNew[*ListArguments](ListCommand) diff --git a/capabilities/upload/shard/datamodel/list.go b/capabilities/upload/shard/types.go similarity index 84% rename from capabilities/upload/shard/datamodel/list.go rename to capabilities/upload/shard/types.go index 3b37b44..a7a1999 100644 --- a/capabilities/upload/shard/datamodel/list.go +++ b/capabilities/upload/shard/types.go @@ -1,14 +1,14 @@ -package datamodel +package shard import "github.com/ipfs/go-cid" -type ListArgumentsModel struct { +type ListArguments struct { Root cid.Cid `cborgen:"root" dagjsongen:"root"` Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` Size *uint64 `cborgen:"size,omitempty" dagjsongen:"size,omitempty"` } -type ListOKModel struct { +type ListOK struct { Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` Size uint64 `cborgen:"size" dagjsongen:"size"` Results []cid.Cid `cborgen:"results" dagjsongen:"results"` diff --git a/capabilities/upload/datamodel/list.go b/capabilities/upload/types.go similarity index 60% rename from capabilities/upload/datamodel/list.go rename to capabilities/upload/types.go index 56296f4..bc6582d 100644 --- a/capabilities/upload/datamodel/list.go +++ b/capabilities/upload/types.go @@ -1,13 +1,23 @@ -package datamodel +package upload import "github.com/ipfs/go-cid" -type ListArgumentsModel struct { +type AddArguments struct { + Root cid.Cid `cborgen:"root" dagjsongen:"root"` + Shards []cid.Cid `cborgen:"shards" dagjsongen:"shards"` + Index *cid.Cid `cborgen:"index,omitempty" dagjsongen:"index,omitempty"` +} + +type RemoveArguments struct { + Root cid.Cid `cborgen:"root" dagjsongen:"root"` +} + +type ListArguments struct { Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` Size *uint64 `cborgen:"size,omitempty" dagjsongen:"size,omitempty"` } -type ListOKModel struct { +type ListOK struct { Cursor *string `cborgen:"cursor,omitempty" dagjsongen:"cursor,omitempty"` Size uint64 `cborgen:"size" dagjsongen:"size"` Results []ListUploadItem `cborgen:"results" dagjsongen:"results"`