package caps import ( "context" "encoding/json" abiv1 "git.dev.alexdunmow.com/block/pluginsdk/abi/v1" "git.dev.alexdunmow.com/block/pluginsdk/datasources" "github.com/google/uuid" ) // datasourcesStub implements datasources.Datasources over datasources.* // capability calls. Items ([]any) and Meta (map[string]any) cross as JSON. type datasourcesStub struct{ base } var _ datasources.Datasources = (*datasourcesStub)(nil) func (s *datasourcesStub) ResolveBucket(ctx context.Context, bucketID uuid.UUID) (*datasources.Result, error) { resp := &abiv1.DatasourcesResolveBucketResponse{} req := &abiv1.DatasourcesResolveBucketRequest{BucketId: bucketID.String()} if err := s.invoke(ctx, "resolve_bucket", req, resp); err != nil { return nil, err } return datasourceResultFromProto(resp.GetResult()), nil } func (s *datasourcesStub) ResolveBucketByKey(ctx context.Context, bucketKey string) (*datasources.Result, error) { resp := &abiv1.DatasourcesResolveBucketByKeyResponse{} req := &abiv1.DatasourcesResolveBucketByKeyRequest{BucketKey: bucketKey} if err := s.invoke(ctx, "resolve_bucket_by_key", req, resp); err != nil { return nil, err } return datasourceResultFromProto(resp.GetResult()), nil } func datasourceResultFromProto(r *abiv1.DatasourceResult) *datasources.Result { if r == nil { return nil } out := &datasources.Result{Total: int(r.GetTotal())} if items := r.GetItemsJson(); len(items) > 0 { _ = json.Unmarshal(items, &out.Items) } out.Meta = unmarshalMap(r.GetMetaJson()) return out }