diff --git a/CHANGELOG.md b/CHANGELOG.md index d45dc7b..e506822 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.4.0] - 2026-03-06 + +### Added + +- `datasets`: Added `WithCollections(...)` and `WithCollectionIDs(...)` query options for datapoint queries. + +### Changed + +- `datasets`: Updated `client.Datapoints.GetInto`, `client.Datapoints.Query`, and `client.Datapoints.QueryInto` to take a `datasetID` as the primary identifier, with collection filtering now configured via query options. + ## [0.3.2] - 2026-02-26 ### Added @@ -67,7 +77,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added support for Tilebox Observability, including logging and tracing helpers. - Added examples for using the library. -[Unreleased]: https://github.com/tilebox/tilebox-go/compare/v0.3.2...HEAD +[Unreleased]: https://github.com/tilebox/tilebox-go/compare/v0.4.0...HEAD +[0.4.0]: https://github.com/tilebox/tilebox-go/compare/v0.3.2...v0.4.0 [0.3.2]: https://github.com/tilebox/tilebox-go/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/tilebox/tilebox-go/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/tilebox/tilebox-go/compare/v0.2.0...v0.3.0 diff --git a/datasets/v1/datapoints.go b/datasets/v1/datapoints.go index 5f6b475..043eb8c 100644 --- a/datasets/v1/datapoints.go +++ b/datasets/v1/datapoints.go @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" "github.com/paulmach/orb" + "github.com/samber/lo" datasetsv1 "github.com/tilebox/tilebox-go/protogen/datasets/v1" tileboxv1 "github.com/tilebox/tilebox-go/protogen/tilebox/v1" "github.com/tilebox/tilebox-go/query" @@ -24,12 +25,13 @@ type DatapointClient interface { // Example usage: // // var datapoint v1.Sentinel1Sar - // err = client.Datapoints.GetInto(ctx, collectionIDs, datapointID, &datapoint) - GetInto(ctx context.Context, collectionIDs []uuid.UUID, datapointID uuid.UUID, datapoint proto.Message, options ...QueryOption) error + // err = client.Datapoints.GetInto(ctx, datasetID, datapointID, &datapoint) + GetInto(ctx context.Context, datasetID uuid.UUID, datapointID uuid.UUID, datapoint proto.Message, options ...QueryOption) error // Query datapoints from one or more collections of the same dataset. // // Options: + // - WithCollections / WithCollectionIDs: specifies the collections to query. If no collections are specified, all collections of the dataset will be queried. (Optional) // - WithTemporalExtent: specifies the time or data point interval for which data should be loaded. (Required) // - WithSpatialExtent: specifies the spatial extent for which data should be loaded. (Optional) // - WithSkipData: can be used to skip the actual data when loading datapoints, only returning required datapoint fields. (Optional) @@ -39,7 +41,7 @@ type DatapointClient interface { // // Example usage: // - // for datapointBytes, err := range client.Datapoints.Query(ctx, collectionIDs, WithTemporalExtent(timeInterval), WithSpatialExtent(geometry)) { + // for datapointBytes, err := range client.Datapoints.Query(ctx, datasetID, WithCollectionIDs(collectionID), WithTemporalExtent(timeInterval), WithSpatialExtent(geometry)) { // if err != nil { // // handle error // } @@ -51,8 +53,8 @@ type DatapointClient interface { // // do something with the datapoint // } // - // Documentation: https://docs.tilebox.com/datasets/query - Query(ctx context.Context, collectionIDs []uuid.UUID, options ...QueryOption) iter.Seq2[[]byte, error] + // Documentation: https://docs.tilebox.com/datasets/query/querying-data + Query(ctx context.Context, datasetID uuid.UUID, options ...QueryOption) iter.Seq2[[]byte, error] // QueryInto queries datapoints from one or more collections of the same dataset into a slice of datapoints of a // compatible proto.Message type. @@ -62,8 +64,8 @@ type DatapointClient interface { // Example usage: // // var datapoints []*v1.Sentinel1Sar - // err := client.Datapoints.QueryInto(ctx, collectionIDs, &datapoints, WithTemporalExtent(timeInterval)) - QueryInto(ctx context.Context, collectionIDs []uuid.UUID, datapoints any, options ...QueryOption) error + // err := client.Datapoints.QueryInto(ctx, datasetID, &datapoints, WithTemporalExtent(timeInterval)) + QueryInto(ctx context.Context, datasetID uuid.UUID, datapoints any, options ...QueryOption) error // Ingest datapoints into a collection. // @@ -100,6 +102,7 @@ type queryOptions struct { temporalExtent query.TemporalExtent spatialExtent query.SpatialExtent skipData bool + collectionIDs []uuid.UUID } // QueryOption is an interface for configuring a Query request. @@ -128,6 +131,20 @@ func WithSpatialExtentFilter(spatialExtent query.SpatialExtent) QueryOption { } } +// WithCollections specifies the collections to query. If no collections are specified, all collections of the dataset will be queried. +func WithCollections(collections ...*Collection) QueryOption { + return WithCollectionIDs(lo.Map(collections, func(c *Collection, _ int) uuid.UUID { + return c.ID + })...) +} + +// WithCollectionIDs specifies the collection IDs to query. If no collections are specified, all collections of the dataset will be queried. +func WithCollectionIDs(collectionIDs ...uuid.UUID) QueryOption { + return func(cfg *queryOptions) { + cfg.collectionIDs = append(cfg.collectionIDs, collectionIDs...) + } +} + // WithSkipData skips the data when querying datapoints. // It is an optional flag for omitting the actual datapoint data from the response. // If set, only the required datapoint fields will be returned. @@ -139,7 +156,7 @@ func WithSkipData() QueryOption { } } -func (d datapointClient) GetInto(ctx context.Context, collectionIDs []uuid.UUID, datapointID uuid.UUID, datapoint proto.Message, options ...QueryOption) error { +func (d datapointClient) GetInto(ctx context.Context, datasetID uuid.UUID, datapointID uuid.UUID, datapoint proto.Message, options ...QueryOption) error { cfg := &queryOptions{ skipData: false, } @@ -147,7 +164,7 @@ func (d datapointClient) GetInto(ctx context.Context, collectionIDs []uuid.UUID, option(cfg) } - rawDatapoint, err := d.dataAccessService.QueryByID(ctx, collectionIDs, datapointID, cfg.skipData) + rawDatapoint, err := d.dataAccessService.QueryByID(ctx, datasetID, cfg.collectionIDs, datapointID, cfg.skipData) if err != nil { return err } @@ -160,7 +177,7 @@ func (d datapointClient) GetInto(ctx context.Context, collectionIDs []uuid.UUID, return nil } -func (d datapointClient) Query(ctx context.Context, collectionIDs []uuid.UUID, options ...QueryOption) iter.Seq2[[]byte, error] { +func (d datapointClient) Query(ctx context.Context, datasetID uuid.UUID, options ...QueryOption) iter.Seq2[[]byte, error] { cfg := &queryOptions{ skipData: false, } @@ -202,7 +219,7 @@ func (d datapointClient) Query(ctx context.Context, collectionIDs []uuid.UUID, o } for { - datapointsMessage, err := d.dataAccessService.Query(ctx, collectionIDs, filters, page, cfg.skipData) + datapointsMessage, err := d.dataAccessService.Query(ctx, datasetID, cfg.collectionIDs, filters, page, cfg.skipData) if err != nil { yield(nil, err) return @@ -222,7 +239,7 @@ func (d datapointClient) Query(ctx context.Context, collectionIDs []uuid.UUID, o } } -func (d datapointClient) QueryInto(ctx context.Context, collectionIDs []uuid.UUID, datapoints any, options ...QueryOption) error { +func (d datapointClient) QueryInto(ctx context.Context, datasetID uuid.UUID, datapoints any, options ...QueryOption) error { err := validateDatapoints(datapoints) if err != nil { return err // already a nice validation error @@ -231,7 +248,7 @@ func (d datapointClient) QueryInto(ctx context.Context, collectionIDs []uuid.UUI slice := reflect.Indirect(reflect.ValueOf(datapoints)) datapointType := slice.Type().Elem().Elem() - rawDatapoints, err := Collect(d.Query(ctx, collectionIDs, options...)) + rawDatapoints, err := Collect(d.Query(ctx, datasetID, options...)) if err != nil { return err } diff --git a/datasets/v1/datapoints_test.go b/datasets/v1/datapoints_test.go index 876332c..ae3e0a3 100644 --- a/datasets/v1/datapoints_test.go +++ b/datasets/v1/datapoints_test.go @@ -40,7 +40,7 @@ type mockDataAccessService struct { n int } -func (m mockDataAccessService) Query(_ context.Context, _ []uuid.UUID, _ *datasetsv1.QueryFilters, _ *tileboxv1.Pagination, _ bool) (*datasetsv1.QueryResultPage, error) { +func (m mockDataAccessService) Query(_ context.Context, _ uuid.UUID, _ []uuid.UUID, _ *datasetsv1.QueryFilters, _ *tileboxv1.Pagination, _ bool) (*datasetsv1.QueryResultPage, error) { data := make([][]byte, m.n) for i := range m.n { datapoint := examplesv1.Sentinel2Msi_builder{ @@ -68,6 +68,8 @@ func (m mockDataAccessService) Query(_ context.Context, _ []uuid.UUID, _ *datase func Test_QueryOptions(t *testing.T) { now := time.Now() + collectionID1 := uuid.New() + collectionID2 := uuid.New() colorado := orb.Polygon{ {{-109.05, 37.09}, {-102.06, 37.09}, {-102.06, 41.59}, {-109.05, 41.59}, {-109.05, 37.09}}, } @@ -92,6 +94,27 @@ func Test_QueryOptions(t *testing.T) { ), }, }, + { + name: "with collection ids", + options: []QueryOption{ + WithCollectionIDs(collectionID1, collectionID2), + }, + want: queryOptions{ + collectionIDs: []uuid.UUID{collectionID1, collectionID2}, + }, + }, + { + name: "with collections", + options: []QueryOption{ + WithCollections( + &Collection{ID: collectionID1}, + &Collection{ID: collectionID2}, + ), + }, + want: queryOptions{ + collectionIDs: []uuid.UUID{collectionID1, collectionID2}, + }, + }, { name: "with spatial extent", options: []QueryOption{ @@ -145,7 +168,7 @@ func Test_datapointClient_GetInto(t *testing.T) { t.Run("GetInto", func(t *testing.T) { var datapoint examplesv1.Sentinel2Msi - err := client.Datapoints.GetInto(ctx, []uuid.UUID{collection.ID}, datapointID, &datapoint) + err := client.Datapoints.GetInto(ctx, dataset.ID, datapointID, &datapoint, WithCollectionIDs(collection.ID)) require.NoError(t, err) assert.Equal(t, "01941f29-c650-202f-6495-c71dd2118fb1", uuid.Must(uuid.FromBytes(datapoint.GetId().GetUuid())).String()) @@ -155,7 +178,7 @@ func Test_datapointClient_GetInto(t *testing.T) { t.Run("GetInto WithSkipData", func(t *testing.T) { var datapoint examplesv1.Sentinel2Msi - err := client.Datapoints.GetInto(ctx, []uuid.UUID{collection.ID}, datapointID, &datapoint, WithSkipData()) + err := client.Datapoints.GetInto(ctx, dataset.ID, datapointID, &datapoint, WithCollectionIDs(collection.ID), WithSkipData()) require.NoError(t, err) assert.Equal(t, "01941f29-c650-202f-6495-c71dd2118fb1", uuid.Must(uuid.FromBytes(datapoint.GetId().GetUuid())).String()) @@ -167,6 +190,7 @@ func Test_datapointClient_QueryInto(t *testing.T) { ctx := context.Background() client := NewDatapointClient(10) + datasetID := uuid.New() collectionID := uuid.New() timeInterval := query.NewTimeInterval(time.Now(), time.Now()) @@ -220,7 +244,7 @@ func Test_datapointClient_QueryInto(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := client.QueryInto(ctx, []uuid.UUID{tt.args.collectionID}, tt.args.datapoints, WithTemporalExtent(tt.args.interval)) + err := client.QueryInto(ctx, datasetID, tt.args.datapoints, WithCollectionIDs(tt.args.collectionID), WithTemporalExtent(tt.args.interval)) if tt.wantErr != "" { // we wanted an error, let's check if we got one require.Error(t, err, "expected an error, got none") @@ -246,22 +270,53 @@ func Benchmark_QueryInto(b *testing.B) { ctx := context.Background() client := NewDatapointClient(1000) + datasetID := uuid.New() collectionID := uuid.New() timeInterval := query.NewTimeInterval(time.Now(), time.Now()) var datapoints []*examplesv1.Sentinel2Msi b.Run("CollectAs", func(b *testing.B) { for range b.N { - err := client.QueryInto(ctx, []uuid.UUID{collectionID}, &datapoints, WithTemporalExtent(timeInterval)) + err := client.QueryInto(ctx, datasetID, &datapoints, WithCollectionIDs(collectionID), WithTemporalExtent(timeInterval)) require.NoError(b, err) } }) resultQueryInto = datapoints } -func Test_datapointClient_Query(t *testing.T) { +func Test_datapointClient_QueryDataset(t *testing.T) { + ctx := context.Background() + client := NewReplayClient(t, "query") + + dataset, err := client.Datasets.Get(ctx, "open_data.copernicus.sentinel2_msi") + require.NoError(t, err) + + jan2025 := time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC) + timeInterval := query.NewTimeInterval(jan2025, jan2025.Add(1*time.Hour)) + + t.Run("CollectAs", func(t *testing.T) { + datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, dataset.ID, WithTemporalExtent(timeInterval))) + require.NoError(t, err) + + assert.Len(t, datapoints, 1459) + assert.Equal(t, "01941f29-c650-202f-6495-c71dd2118fb1", uuid.Must(uuid.FromBytes(datapoints[0].GetId().GetUuid())).String()) + assert.Equal(t, "2025-01-01 00:00:19.024 +0000 UTC", datapoints[0].GetTime().AsTime().String()) + assert.Equal(t, "S2B_MSIL1C_20250101T000019_N0511_R073_T57QWV_20250101T010340.SAFE", datapoints[0].GetGranuleName()) + }) + + t.Run("CollectAs WithSkipData", func(t *testing.T) { + datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, dataset.ID, WithTemporalExtent(timeInterval), WithSkipData())) + require.NoError(t, err) + + assert.Len(t, datapoints, 1459) + assert.Equal(t, "01941f29-c650-202f-6495-c71dd2118fb1", uuid.Must(uuid.FromBytes(datapoints[0].GetId().GetUuid())).String()) + assert.Empty(t, datapoints[0].GetGranuleName()) + }) +} + +func Test_datapointClient_QueryCollections(t *testing.T) { ctx := context.Background() - client := NewReplayClient(t, "load") + client := NewReplayClient(t, "query_collections") dataset, err := client.Datasets.Get(ctx, "open_data.copernicus.sentinel2_msi") require.NoError(t, err) @@ -274,7 +329,7 @@ func Test_datapointClient_Query(t *testing.T) { timeInterval := query.NewTimeInterval(jan2025, jan2025.Add(1*time.Hour)) t.Run("CollectAs", func(t *testing.T) { - datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, []uuid.UUID{collection.ID}, WithTemporalExtent(timeInterval))) + datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, dataset.ID, WithCollectionIDs(collection.ID), WithTemporalExtent(timeInterval))) require.NoError(t, err) assert.Len(t, datapoints, 437) @@ -284,7 +339,7 @@ func Test_datapointClient_Query(t *testing.T) { }) t.Run("CollectAs WithSkipData", func(t *testing.T) { - datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, []uuid.UUID{collection.ID}, WithTemporalExtent(timeInterval), WithSkipData())) + datapoints, err := CollectAs[*examplesv1.Sentinel2Msi](client.Datapoints.Query(ctx, dataset.ID, WithCollectionIDs(collection.ID), WithTemporalExtent(timeInterval), WithSkipData())) require.NoError(t, err) assert.Len(t, datapoints, 437) @@ -323,7 +378,7 @@ func NewMockDatapointClient(tb testing.TB, n int) DatapointClient { } } -func (s *mockService) Query(_ context.Context, _ []uuid.UUID, _ ...QueryOption) iter.Seq2[[]byte, error] { +func (s *mockService) Query(_ context.Context, _ uuid.UUID, _ ...QueryOption) iter.Seq2[[]byte, error] { return func(yield func([]byte, error) bool) { for _, data := range s.data { if !yield(data, nil) { @@ -340,6 +395,7 @@ var result []*examplesv1.Sentinel2Msi // It is used to benchmark the cost of reflection and proto.Marshal inside CollectAs func BenchmarkCollectAs(b *testing.B) { ctx := context.Background() + datasetID := uuid.New() // dummy dataset ID collectionID := uuid.New() // dummy collection ID queryInterval := query.NewEmptyTimeInterval() // dummy time interval @@ -349,7 +405,7 @@ func BenchmarkCollectAs(b *testing.B) { var r []*examplesv1.Sentinel2Msi // used to avoid the compiler optimizing the output b.Run("CollectAs", func(b *testing.B) { for range b.N { - data := client.Datapoints.Query(ctx, []uuid.UUID{collectionID}, WithTemporalExtent(queryInterval)) + data := client.Datapoints.Query(ctx, datasetID, WithCollectionIDs(collectionID), WithTemporalExtent(queryInterval)) r, _ = CollectAs[*examplesv1.Sentinel2Msi](data) } }) @@ -357,7 +413,7 @@ func BenchmarkCollectAs(b *testing.B) { b.Run("Marshal and no reflection", func(b *testing.B) { for range b.N { - data := client.Datapoints.Query(ctx, []uuid.UUID{collectionID}, WithTemporalExtent(queryInterval)) + data := client.Datapoints.Query(ctx, datasetID, WithCollectionIDs(collectionID), WithTemporalExtent(queryInterval)) datapoints := make([]*examplesv1.Sentinel2Msi, 0, 1000) for datapoint, err := range data { if err != nil { @@ -376,7 +432,7 @@ func BenchmarkCollectAs(b *testing.B) { b.Run("No marshal and no reflection", func(b *testing.B) { for range b.N { - data := client.Datapoints.Query(ctx, []uuid.UUID{collectionID}, WithTemporalExtent(queryInterval)) + data := client.Datapoints.Query(ctx, datasetID, WithCollectionIDs(collectionID), WithTemporalExtent(queryInterval)) datapoints := make([][]byte, 0, 1000) for datapoint, err := range data { if err != nil { diff --git a/datasets/v1/service.go b/datasets/v1/service.go index 3669965..c1c355e 100644 --- a/datasets/v1/service.go +++ b/datasets/v1/service.go @@ -209,8 +209,8 @@ func (s *collectionService) ListCollections(ctx context.Context, datasetID uuid. } type DataAccessService interface { - Query(ctx context.Context, collectionIDs []uuid.UUID, filters *datasetsv1.QueryFilters, page *tileboxv1.Pagination, skipData bool) (*datasetsv1.QueryResultPage, error) - QueryByID(ctx context.Context, collectionIDs []uuid.UUID, datapointID uuid.UUID, skipData bool) (*datasetsv1.Any, error) + Query(ctx context.Context, datasetID uuid.UUID, collectionIDs []uuid.UUID, filters *datasetsv1.QueryFilters, page *tileboxv1.Pagination, skipData bool) (*datasetsv1.QueryResultPage, error) + QueryByID(ctx context.Context, datasetID uuid.UUID, collectionIDs []uuid.UUID, datapointID uuid.UUID, skipData bool) (*datasetsv1.Any, error) } var _ DataAccessService = &dataAccessService{} @@ -227,10 +227,11 @@ func newDataAccessService(dataAccessClient datasetsv1connect.DataAccessServiceCl } } -func (s *dataAccessService) Query(ctx context.Context, collectionIDs []uuid.UUID, filters *datasetsv1.QueryFilters, page *tileboxv1.Pagination, skipData bool) (*datasetsv1.QueryResultPage, error) { +func (s *dataAccessService) Query(ctx context.Context, datasetID uuid.UUID, collectionIDs []uuid.UUID, filters *datasetsv1.QueryFilters, page *tileboxv1.Pagination, skipData bool) (*datasetsv1.QueryResultPage, error) { return observability.WithSpanResult(ctx, s.tracer, "datasets/datapoints/query", func(ctx context.Context) (*datasetsv1.QueryResultPage, error) { res, err := s.dataAccessClient.Query(ctx, connect.NewRequest( datasetsv1.QueryRequest_builder{ + DatasetId: tileboxv1.NewUUID(datasetID), CollectionIds: tileboxv1.NewUUIDSlice(collectionIDs), Filters: filters, Page: page, @@ -245,10 +246,11 @@ func (s *dataAccessService) Query(ctx context.Context, collectionIDs []uuid.UUID }) } -func (s *dataAccessService) QueryByID(ctx context.Context, collectionIDs []uuid.UUID, datapointID uuid.UUID, skipData bool) (*datasetsv1.Any, error) { +func (s *dataAccessService) QueryByID(ctx context.Context, datasetID uuid.UUID, collectionIDs []uuid.UUID, datapointID uuid.UUID, skipData bool) (*datasetsv1.Any, error) { return observability.WithSpanResult(ctx, s.tracer, "datasets/datapoints/get", func(ctx context.Context) (*datasetsv1.Any, error) { res, err := s.dataAccessClient.QueryByID(ctx, connect.NewRequest( datasetsv1.QueryByIDRequest_builder{ + DatasetId: tileboxv1.NewUUID(datasetID), CollectionIds: tileboxv1.NewUUIDSlice(collectionIDs), Id: tileboxv1.NewUUID(datapointID), SkipData: skipData, diff --git a/datasets/v1/testdata/recordings/datapoint_getinto.rpcs.bin b/datasets/v1/testdata/recordings/datapoint_getinto.rpcs.bin index 87cb451..c5d43fa 100644 Binary files a/datasets/v1/testdata/recordings/datapoint_getinto.rpcs.bin and b/datasets/v1/testdata/recordings/datapoint_getinto.rpcs.bin differ diff --git a/datasets/v1/testdata/recordings/query.rpcs.bin b/datasets/v1/testdata/recordings/query.rpcs.bin new file mode 100644 index 0000000..0ead145 Binary files /dev/null and b/datasets/v1/testdata/recordings/query.rpcs.bin differ diff --git a/datasets/v1/testdata/recordings/load.rpcs.bin b/datasets/v1/testdata/recordings/query_collections.rpcs.bin similarity index 99% rename from datasets/v1/testdata/recordings/load.rpcs.bin rename to datasets/v1/testdata/recordings/query_collections.rpcs.bin index 00980c9..e6c6b41 100644 Binary files a/datasets/v1/testdata/recordings/load.rpcs.bin and b/datasets/v1/testdata/recordings/query_collections.rpcs.bin differ diff --git a/examples/datasets/query/main.go b/examples/datasets/query/main.go index 795b544..91b2e46 100644 --- a/examples/datasets/query/main.go +++ b/examples/datasets/query/main.go @@ -5,7 +5,6 @@ import ( "log/slog" "time" - "github.com/google/uuid" "github.com/paulmach/orb" "github.com/paulmach/orb/encoding/wkt" "github.com/tilebox/tilebox-go/datasets/v1" @@ -46,8 +45,9 @@ func main() { // Sentinel2Msi type is generated using tilebox-generate var foundDatapoints []*examplesv1.Sentinel2Msi err = client.Datapoints.QueryInto(ctx, - []uuid.UUID{collection.ID}, + dataset.ID, &foundDatapoints, + datasets.WithCollections(collection), datasets.WithTemporalExtent(query.NewTimeInterval(startDate, endDate)), datasets.WithSpatialExtent(area), ) diff --git a/go.mod b/go.mod index 4345c0f..fb9d054 100644 --- a/go.mod +++ b/go.mod @@ -12,18 +12,18 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.8 github.com/lmittmann/tint v1.1.3 github.com/paulmach/orb v0.12.0 - github.com/samber/lo v1.52.0 + github.com/samber/lo v1.53.0 github.com/samber/slog-multi v1.7.1 github.com/stretchr/testify v1.11.1 - go.opentelemetry.io/contrib/bridges/otelslog v0.15.0 - go.opentelemetry.io/otel v1.40.0 - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 - go.opentelemetry.io/otel/metric v1.40.0 - go.opentelemetry.io/otel/sdk v1.40.0 - go.opentelemetry.io/otel/sdk/log v0.16.0 - go.opentelemetry.io/otel/trace v1.40.0 - google.golang.org/grpc v1.79.1 + go.opentelemetry.io/contrib/bridges/otelslog v0.16.0 + go.opentelemetry.io/otel v1.41.0 + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.17.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0 + go.opentelemetry.io/otel/metric v1.41.0 + go.opentelemetry.io/otel/sdk v1.41.0 + go.opentelemetry.io/otel/sdk/log v0.17.0 + go.opentelemetry.io/otel/trace v1.41.0 + google.golang.org/grpc v1.79.2 google.golang.org/protobuf v1.36.11 pgregory.net/rapid v1.2.0 ) @@ -40,13 +40,13 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/samber/slog-common v0.20.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/log v0.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect + go.opentelemetry.io/otel/log v0.17.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect golang.org/x/net v0.51.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260223185530-2f722ef697dc // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260223185530-2f722ef697dc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 07e04c6..3b6302a 100644 --- a/go.sum +++ b/go.sum @@ -64,8 +64,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw= -github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= github.com/samber/slog-common v0.20.0 h1:WaLnm/aCvBJSk5nR5aXZTFBaV0B47A+AEaEOiZDeUnc= github.com/samber/slog-common v0.20.0/go.mod h1:+Ozat1jgnnE59UAlmNX1IF3IByHsODnnwf9jUcBZ+m8= github.com/samber/slog-multi v1.7.1 h1:aCLXHRxgU+2v0PVlEOh7phynzM7CRo89ZgFtOwaqVEE= @@ -84,30 +84,30 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/bridges/otelslog v0.15.0 h1:yOYhGNPZseueTTvWp5iBD3/CthrmvayUXYEX862dDi4= -go.opentelemetry.io/contrib/bridges/otelslog v0.15.0/go.mod h1:CvaNVqIfcybc+7xqZNubbE+26K6P7AKZF/l0lE2kdCk= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 h1:djrxvDxAe44mJUrKataUbOhCKhR3F8QCyWucO16hTQs= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0/go.mod h1:dt3nxpQEiSoKvfTVxp3TUg5fHPLhKtbcnN3Z1I1ePD0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= -go.opentelemetry.io/otel/log v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4= -go.opentelemetry.io/otel/log v0.16.0/go.mod h1:rWsmqNVTLIA8UnwYVOItjyEZDbKIkMxdQunsIhpUMes= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/log v0.16.0 h1:e/b4bdlQwC5fnGtG3dlXUrNOnP7c8YLVSpSfEBIkTnI= -go.opentelemetry.io/otel/sdk/log v0.16.0/go.mod h1:JKfP3T6ycy7QEuv3Hj8oKDy7KItrEkus8XJE6EoSzw4= -go.opentelemetry.io/otel/sdk/log/logtest v0.16.0 h1:/XVkpZ41rVRTP4DfMgYv1nEtNmf65XPPyAdqV90TMy4= -go.opentelemetry.io/otel/sdk/log/logtest v0.16.0/go.mod h1:iOOPgQr5MY9oac/F5W86mXdeyWZGleIx3uXO98X2R6Y= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/contrib/bridges/otelslog v0.16.0 h1:ZtVk8SzgioZhBJmJoezi6Jl5uuXoNVLnZxcJCDTqSbM= +go.opentelemetry.io/contrib/bridges/otelslog v0.16.0/go.mod h1:p0C45DA3hvvo+5hwDilrMIp43ddVBGmwWEHZft4pY6c= +go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= +go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.17.0 h1:GcSx2UgcMuQEu0vHq823xR5LCN3WqEx5yKhqDkv1pwY= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.17.0/go.mod h1:ctNT8t8Vzx9sb1oWAozighT3guWorr8xdCboBvkT5yg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0 h1:inYW9ZhgqiDqh6BioM7DVHHzEGVq76Db5897WLGZ5Go= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0/go.mod h1:Izur+Wt8gClgMJqO/cZ8wdeeMryJ/xxiOVgFSSfpDTY= +go.opentelemetry.io/otel/log v0.17.0 h1:blZWM4y7n+KSa9OywwGWyBMPpeVoCl/NCw+jMps8afM= +go.opentelemetry.io/otel/log v0.17.0/go.mod h1:VXhjKYep6/laSgf/tjdh2SMAt18Z9XotBFBO0jxSE24= +go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= +go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= +go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= +go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= +go.opentelemetry.io/otel/sdk/log v0.17.0 h1:stWOgJB8bWieSlX4VO+gD7BrRZ/Dh1H/u7115amleGE= +go.opentelemetry.io/otel/sdk/log v0.17.0/go.mod h1:LQKPUyHraLka2sRvNQ5+W456+sElomqR7VWpOnOefZg= +go.opentelemetry.io/otel/sdk/log/logtest v0.17.0 h1:Z4S9W5piCH88itCkWDtX5ppRgO0UTkLXVK/6tPOMM2w= +go.opentelemetry.io/otel/sdk/log/logtest v0.17.0/go.mod h1:d9iIX/BwLfu1BTPxO0wi4ucyCenCckfuf9LC0aJDjqM= +go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= +go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= +go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= +go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -154,12 +154,12 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/api v0.0.0-20260223185530-2f722ef697dc h1:ULD+ToGXUIU6Pkzr1ARxdyvwfHbelw+agoFDRbLg4TU= -google.golang.org/genproto/googleapis/api v0.0.0-20260223185530-2f722ef697dc/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260223185530-2f722ef697dc h1:51Wupg8spF+5FC6D+iMKbOddFjMckETnNnEiZ+HX37s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260223185530-2f722ef697dc/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= -google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4= +google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= +google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/protogen/datasets/v1/collections.pb.go b/protogen/datasets/v1/collections.pb.go index 7f98c24..3ca823d 100644 --- a/protogen/datasets/v1/collections.pb.go +++ b/protogen/datasets/v1/collections.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing collections. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/collections_grpc.pb.go b/protogen/datasets/v1/collections_grpc.pb.go index 3fcf6ed..75c7a0e 100644 --- a/protogen/datasets/v1/collections_grpc.pb.go +++ b/protogen/datasets/v1/collections_grpc.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing collections. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/datasets/v1/core.pb.go b/protogen/datasets/v1/core.pb.go index 5d7137c..3566a5f 100644 --- a/protogen/datasets/v1/core.pb.go +++ b/protogen/datasets/v1/core.pb.go @@ -1,3 +1,16 @@ +// +//Core message type definitions for the Tilebox datasets API. +// +//Conventions: +//- A dataset is a set of data points of the same type. +//- A single data point (entry) is referred to in all messages as datapoint. +//- Data points for a single dataset are grouped into collections. +// +//- All time fields use the google.protobuf.Timestamp message type. +// +//- When a wrapper message is needed to return a list of a given message type, use the pluralized message name +//- e.g. message Collections contains a list of Collection messages. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/data_access.pb.go b/protogen/datasets/v1/data_access.pb.go index be2d6c6..344151e 100644 --- a/protogen/datasets/v1/data_access.pb.go +++ b/protogen/datasets/v1/data_access.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to querying data. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 @@ -383,6 +385,7 @@ func (b0 GetDatapointByIdRequest_builder) Build() *GetDatapointByIdRequest { // QueryByIDRequest contains the request parameters for retrieving a single data point by its id. type QueryByIDRequest struct { state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_DatasetId *v1.ID `protobuf:"bytes,4,opt,name=dataset_id,json=datasetId"` xxx_hidden_CollectionIds *[]*v1.ID `protobuf:"bytes,1,rep,name=collection_ids,json=collectionIds"` xxx_hidden_Id *v1.ID `protobuf:"bytes,2,opt,name=id"` xxx_hidden_SkipData bool `protobuf:"varint,3,opt,name=skip_data,json=skipData"` @@ -415,6 +418,13 @@ func (x *QueryByIDRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } +func (x *QueryByIDRequest) GetDatasetId() *v1.ID { + if x != nil { + return x.xxx_hidden_DatasetId + } + return nil +} + func (x *QueryByIDRequest) GetCollectionIds() []*v1.ID { if x != nil { if x.xxx_hidden_CollectionIds != nil { @@ -438,6 +448,10 @@ func (x *QueryByIDRequest) GetSkipData() bool { return false } +func (x *QueryByIDRequest) SetDatasetId(v *v1.ID) { + x.xxx_hidden_DatasetId = v +} + func (x *QueryByIDRequest) SetCollectionIds(v []*v1.ID) { x.xxx_hidden_CollectionIds = &v } @@ -450,6 +464,13 @@ func (x *QueryByIDRequest) SetSkipData(v bool) { x.xxx_hidden_SkipData = v } +func (x *QueryByIDRequest) HasDatasetId() bool { + if x == nil { + return false + } + return x.xxx_hidden_DatasetId != nil +} + func (x *QueryByIDRequest) HasId() bool { if x == nil { return false @@ -457,6 +478,10 @@ func (x *QueryByIDRequest) HasId() bool { return x.xxx_hidden_Id != nil } +func (x *QueryByIDRequest) ClearDatasetId() { + x.xxx_hidden_DatasetId = nil +} + func (x *QueryByIDRequest) ClearId() { x.xxx_hidden_Id = nil } @@ -464,6 +489,8 @@ func (x *QueryByIDRequest) ClearId() { type QueryByIDRequest_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + // The dataset id to query. If not set, the dataset is derived from the collection ids, in which case there must be at least one collection id set. + DatasetId *v1.ID // collection ids to query. CollectionIds []*v1.ID // The id of the requested data point. @@ -476,6 +503,7 @@ func (b0 QueryByIDRequest_builder) Build() *QueryByIDRequest { m0 := &QueryByIDRequest{} b, x := &b0, m0 _, _ = b, x + x.xxx_hidden_DatasetId = b.DatasetId x.xxx_hidden_CollectionIds = &b.CollectionIds x.xxx_hidden_Id = b.Id x.xxx_hidden_SkipData = b.SkipData @@ -704,6 +732,7 @@ func (b0 SpatialFilter_builder) Build() *SpatialFilter { // QueryRequest contains the request parameters for retrieving data from a Tilebox dataset. type QueryRequest struct { state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_DatasetId *v1.ID `protobuf:"bytes,5,opt,name=dataset_id,json=datasetId"` xxx_hidden_CollectionIds *[]*v1.ID `protobuf:"bytes,1,rep,name=collection_ids,json=collectionIds"` xxx_hidden_Filters *QueryFilters `protobuf:"bytes,2,opt,name=filters"` xxx_hidden_Page *v1.Pagination `protobuf:"bytes,3,opt,name=page"` @@ -737,6 +766,13 @@ func (x *QueryRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } +func (x *QueryRequest) GetDatasetId() *v1.ID { + if x != nil { + return x.xxx_hidden_DatasetId + } + return nil +} + func (x *QueryRequest) GetCollectionIds() []*v1.ID { if x != nil { if x.xxx_hidden_CollectionIds != nil { @@ -767,6 +803,10 @@ func (x *QueryRequest) GetSkipData() bool { return false } +func (x *QueryRequest) SetDatasetId(v *v1.ID) { + x.xxx_hidden_DatasetId = v +} + func (x *QueryRequest) SetCollectionIds(v []*v1.ID) { x.xxx_hidden_CollectionIds = &v } @@ -783,6 +823,13 @@ func (x *QueryRequest) SetSkipData(v bool) { x.xxx_hidden_SkipData = v } +func (x *QueryRequest) HasDatasetId() bool { + if x == nil { + return false + } + return x.xxx_hidden_DatasetId != nil +} + func (x *QueryRequest) HasFilters() bool { if x == nil { return false @@ -797,6 +844,10 @@ func (x *QueryRequest) HasPage() bool { return x.xxx_hidden_Page != nil } +func (x *QueryRequest) ClearDatasetId() { + x.xxx_hidden_DatasetId = nil +} + func (x *QueryRequest) ClearFilters() { x.xxx_hidden_Filters = nil } @@ -808,7 +859,9 @@ func (x *QueryRequest) ClearPage() { type QueryRequest_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. - // collection ids to query. + // The dataset id to query. If not set, the dataset is derived from the collection ids, in which case there must be at least one collection id set. + DatasetId *v1.ID + // collection ids to query. If empty, all collections of the dataset are queried. CollectionIds []*v1.ID // Filters to apply to the query. Filters *QueryFilters @@ -822,6 +875,7 @@ func (b0 QueryRequest_builder) Build() *QueryRequest { m0 := &QueryRequest{} b, x := &b0, m0 _, _ = b, x + x.xxx_hidden_DatasetId = b.DatasetId x.xxx_hidden_CollectionIds = &b.CollectionIds x.xxx_hidden_Filters = b.Filters x.xxx_hidden_Page = b.Page @@ -940,10 +994,12 @@ const file_datasets_v1_data_access_proto_rawDesc = "" + "\x17GetDatapointByIdRequest\x12#\n" + "\rcollection_id\x18\x01 \x01(\tR\fcollectionId\x12\x0e\n" + "\x02id\x18\x02 \x01(\tR\x02id\x12\x1b\n" + - "\tskip_data\x18\x03 \x01(\bR\bskipData\"\x9a\x01\n" + - "\x10QueryByIDRequest\x12A\n" + + "\tskip_data\x18\x03 \x01(\bR\bskipData\"\xc9\x01\n" + + "\x10QueryByIDRequest\x12-\n" + + "\n" + + "dataset_id\x18\x04 \x01(\v2\x0e.tilebox.v1.IDR\tdatasetId\x12A\n" + "\x0ecollection_ids\x18\x01 \x03(\v2\x0e.tilebox.v1.IDB\n" + - "\xbaH\a\x92\x01\x04\b\x01\x10dR\rcollectionIds\x12&\n" + + "\xbaH\a\x92\x01\x04\b\x00\x10dR\rcollectionIds\x12&\n" + "\x02id\x18\x02 \x01(\v2\x0e.tilebox.v1.IDB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x1b\n" + "\tskip_data\x18\x03 \x01(\bR\bskipData\"\x83\x02\n" + "\fQueryFilters\x12=\n" + @@ -955,10 +1011,12 @@ const file_datasets_v1_data_access_proto_rawDesc = "" + "\rSpatialFilter\x129\n" + "\bgeometry\x18\x01 \x01(\v2\x15.datasets.v1.GeometryB\x06\xbaH\x03\xc8\x01\x01R\bgeometry\x12<\n" + "\x04mode\x18\x02 \x01(\x0e2\x1e.datasets.v1.SpatialFilterModeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04mode\x12[\n" + - "\x11coordinate_system\x18\x03 \x01(\x0e2$.datasets.v1.SpatialCoordinateSystemB\b\xbaH\x05\x82\x01\x02\x10\x01R\x10coordinateSystem\"\xd6\x01\n" + - "\fQueryRequest\x12A\n" + + "\x11coordinate_system\x18\x03 \x01(\x0e2$.datasets.v1.SpatialCoordinateSystemB\b\xbaH\x05\x82\x01\x02\x10\x01R\x10coordinateSystem\"\x85\x02\n" + + "\fQueryRequest\x12-\n" + + "\n" + + "dataset_id\x18\x05 \x01(\v2\x0e.tilebox.v1.IDR\tdatasetId\x12A\n" + "\x0ecollection_ids\x18\x01 \x03(\v2\x0e.tilebox.v1.IDB\n" + - "\xbaH\a\x92\x01\x04\b\x01\x10dR\rcollectionIds\x123\n" + + "\xbaH\a\x92\x01\x04\b\x00\x10dR\rcollectionIds\x123\n" + "\afilters\x18\x02 \x01(\v2\x19.datasets.v1.QueryFiltersR\afilters\x121\n" + "\x04page\x18\x03 \x01(\v2\x16.tilebox.v1.PaginationB\x05\xaa\x01\x02\b\x01R\x04page\x12\x1b\n" + "\tskip_data\x18\x04 \x01(\bR\bskipData\"{\n" + @@ -1007,32 +1065,34 @@ var file_datasets_v1_data_access_proto_depIdxs = []int32{ 9, // 0: datasets.v1.GetDatasetForIntervalRequest.time_interval:type_name -> tilebox.v1.TimeInterval 10, // 1: datasets.v1.GetDatasetForIntervalRequest.datapoint_interval:type_name -> tilebox.v1.IDInterval 11, // 2: datasets.v1.GetDatasetForIntervalRequest.page:type_name -> datasets.v1.LegacyPagination - 12, // 3: datasets.v1.QueryByIDRequest.collection_ids:type_name -> tilebox.v1.ID - 12, // 4: datasets.v1.QueryByIDRequest.id:type_name -> tilebox.v1.ID - 9, // 5: datasets.v1.QueryFilters.time_interval:type_name -> tilebox.v1.TimeInterval - 10, // 6: datasets.v1.QueryFilters.datapoint_interval:type_name -> tilebox.v1.IDInterval - 6, // 7: datasets.v1.QueryFilters.spatial_extent:type_name -> datasets.v1.SpatialFilter - 13, // 8: datasets.v1.SpatialFilter.geometry:type_name -> datasets.v1.Geometry - 0, // 9: datasets.v1.SpatialFilter.mode:type_name -> datasets.v1.SpatialFilterMode - 1, // 10: datasets.v1.SpatialFilter.coordinate_system:type_name -> datasets.v1.SpatialCoordinateSystem - 12, // 11: datasets.v1.QueryRequest.collection_ids:type_name -> tilebox.v1.ID - 5, // 12: datasets.v1.QueryRequest.filters:type_name -> datasets.v1.QueryFilters - 14, // 13: datasets.v1.QueryRequest.page:type_name -> tilebox.v1.Pagination - 15, // 14: datasets.v1.QueryResultPage.data:type_name -> datasets.v1.RepeatedAny - 14, // 15: datasets.v1.QueryResultPage.next_page:type_name -> tilebox.v1.Pagination - 2, // 16: datasets.v1.DataAccessService.GetDatasetForInterval:input_type -> datasets.v1.GetDatasetForIntervalRequest - 3, // 17: datasets.v1.DataAccessService.GetDatapointByID:input_type -> datasets.v1.GetDatapointByIdRequest - 4, // 18: datasets.v1.DataAccessService.QueryByID:input_type -> datasets.v1.QueryByIDRequest - 7, // 19: datasets.v1.DataAccessService.Query:input_type -> datasets.v1.QueryRequest - 16, // 20: datasets.v1.DataAccessService.GetDatasetForInterval:output_type -> datasets.v1.DatapointPage - 17, // 21: datasets.v1.DataAccessService.GetDatapointByID:output_type -> datasets.v1.Datapoint - 18, // 22: datasets.v1.DataAccessService.QueryByID:output_type -> datasets.v1.Any - 8, // 23: datasets.v1.DataAccessService.Query:output_type -> datasets.v1.QueryResultPage - 20, // [20:24] is the sub-list for method output_type - 16, // [16:20] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 12, // 3: datasets.v1.QueryByIDRequest.dataset_id:type_name -> tilebox.v1.ID + 12, // 4: datasets.v1.QueryByIDRequest.collection_ids:type_name -> tilebox.v1.ID + 12, // 5: datasets.v1.QueryByIDRequest.id:type_name -> tilebox.v1.ID + 9, // 6: datasets.v1.QueryFilters.time_interval:type_name -> tilebox.v1.TimeInterval + 10, // 7: datasets.v1.QueryFilters.datapoint_interval:type_name -> tilebox.v1.IDInterval + 6, // 8: datasets.v1.QueryFilters.spatial_extent:type_name -> datasets.v1.SpatialFilter + 13, // 9: datasets.v1.SpatialFilter.geometry:type_name -> datasets.v1.Geometry + 0, // 10: datasets.v1.SpatialFilter.mode:type_name -> datasets.v1.SpatialFilterMode + 1, // 11: datasets.v1.SpatialFilter.coordinate_system:type_name -> datasets.v1.SpatialCoordinateSystem + 12, // 12: datasets.v1.QueryRequest.dataset_id:type_name -> tilebox.v1.ID + 12, // 13: datasets.v1.QueryRequest.collection_ids:type_name -> tilebox.v1.ID + 5, // 14: datasets.v1.QueryRequest.filters:type_name -> datasets.v1.QueryFilters + 14, // 15: datasets.v1.QueryRequest.page:type_name -> tilebox.v1.Pagination + 15, // 16: datasets.v1.QueryResultPage.data:type_name -> datasets.v1.RepeatedAny + 14, // 17: datasets.v1.QueryResultPage.next_page:type_name -> tilebox.v1.Pagination + 2, // 18: datasets.v1.DataAccessService.GetDatasetForInterval:input_type -> datasets.v1.GetDatasetForIntervalRequest + 3, // 19: datasets.v1.DataAccessService.GetDatapointByID:input_type -> datasets.v1.GetDatapointByIdRequest + 4, // 20: datasets.v1.DataAccessService.QueryByID:input_type -> datasets.v1.QueryByIDRequest + 7, // 21: datasets.v1.DataAccessService.Query:input_type -> datasets.v1.QueryRequest + 16, // 22: datasets.v1.DataAccessService.GetDatasetForInterval:output_type -> datasets.v1.DatapointPage + 17, // 23: datasets.v1.DataAccessService.GetDatapointByID:output_type -> datasets.v1.Datapoint + 18, // 24: datasets.v1.DataAccessService.QueryByID:output_type -> datasets.v1.Any + 8, // 25: datasets.v1.DataAccessService.Query:output_type -> datasets.v1.QueryResultPage + 22, // [22:26] is the sub-list for method output_type + 18, // [18:22] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_datasets_v1_data_access_proto_init() } diff --git a/protogen/datasets/v1/data_access_grpc.pb.go b/protogen/datasets/v1/data_access_grpc.pb.go index 1fcc8d6..b92764d 100644 --- a/protogen/datasets/v1/data_access_grpc.pb.go +++ b/protogen/datasets/v1/data_access_grpc.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to querying data. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/datasets/v1/data_ingestion.pb.go b/protogen/datasets/v1/data_ingestion.pb.go index a245e13..d5bfa3a 100644 --- a/protogen/datasets/v1/data_ingestion.pb.go +++ b/protogen/datasets/v1/data_ingestion.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to ingesting and deleting datapoints. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/data_ingestion_grpc.pb.go b/protogen/datasets/v1/data_ingestion_grpc.pb.go index 846d28e..a4f65a4 100644 --- a/protogen/datasets/v1/data_ingestion_grpc.pb.go +++ b/protogen/datasets/v1/data_ingestion_grpc.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to ingesting and deleting datapoints. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/datasets/v1/dataset_type.pb.go b/protogen/datasets/v1/dataset_type.pb.go index 017c77d..0771c5a 100644 --- a/protogen/datasets/v1/dataset_type.pb.go +++ b/protogen/datasets/v1/dataset_type.pb.go @@ -1,3 +1,6 @@ +// This file contains the proto messages describing a dataset type. A dataset type is akin to a protobuf message type, +// and can be converted to it. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/datasets.pb.go b/protogen/datasets/v1/datasets.pb.go index cfaebc0..702722b 100644 --- a/protogen/datasets/v1/datasets.pb.go +++ b/protogen/datasets/v1/datasets.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing datasets. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/datasets_grpc.pb.go b/protogen/datasets/v1/datasets_grpc.pb.go index 9f41c47..94db713 100644 --- a/protogen/datasets/v1/datasets_grpc.pb.go +++ b/protogen/datasets/v1/datasets_grpc.pb.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing datasets. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/datasets/v1/datasetsv1connect/collections.connect.go b/protogen/datasets/v1/datasetsv1connect/collections.connect.go index 1c4e8a4..0b21f63 100644 --- a/protogen/datasets/v1/datasetsv1connect/collections.connect.go +++ b/protogen/datasets/v1/datasetsv1connect/collections.connect.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing collections. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: datasets/v1/collections.proto diff --git a/protogen/datasets/v1/datasetsv1connect/data_access.connect.go b/protogen/datasets/v1/datasetsv1connect/data_access.connect.go index 9cadc73..5eb5964 100644 --- a/protogen/datasets/v1/datasetsv1connect/data_access.connect.go +++ b/protogen/datasets/v1/datasetsv1connect/data_access.connect.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to querying data. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: datasets/v1/data_access.proto diff --git a/protogen/datasets/v1/datasetsv1connect/data_ingestion.connect.go b/protogen/datasets/v1/datasetsv1connect/data_ingestion.connect.go index 59a9bb3..d0988d3 100644 --- a/protogen/datasets/v1/datasetsv1connect/data_ingestion.connect.go +++ b/protogen/datasets/v1/datasetsv1connect/data_ingestion.connect.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to ingesting and deleting datapoints. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: datasets/v1/data_ingestion.proto diff --git a/protogen/datasets/v1/datasetsv1connect/datasets.connect.go b/protogen/datasets/v1/datasetsv1connect/datasets.connect.go index 23f44bd..6656d52 100644 --- a/protogen/datasets/v1/datasetsv1connect/datasets.connect.go +++ b/protogen/datasets/v1/datasetsv1connect/datasets.connect.go @@ -1,3 +1,5 @@ +// Proto messages and service definition for the APIs related to creating and managing datasets. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: datasets/v1/datasets.proto diff --git a/protogen/datasets/v1/timeseries.pb.go b/protogen/datasets/v1/timeseries.pb.go index d54841a..df3d6d5 100644 --- a/protogen/datasets/v1/timeseries.pb.go +++ b/protogen/datasets/v1/timeseries.pb.go @@ -1,3 +1,5 @@ +// Timeseries types for workflows + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/datasets/v1/well_known_types.pb.go b/protogen/datasets/v1/well_known_types.pb.go index a079e1d..f6f0767 100644 --- a/protogen/datasets/v1/well_known_types.pb.go +++ b/protogen/datasets/v1/well_known_types.pb.go @@ -1,3 +1,6 @@ +// This file contains some well-known types that are available to use for all dataset protobuf messages. +// They are specially handled in our client libraries and converted to the corresponding representations. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/examples/v1/workflow.pb.go b/protogen/examples/v1/workflow.pb.go index 00bd1ec..70c3d84 100644 --- a/protogen/examples/v1/workflow.pb.go +++ b/protogen/examples/v1/workflow.pb.go @@ -1,3 +1,5 @@ +// A sample tree workflow. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/tilebox/v1/id_tilebox.pb.go b/protogen/tilebox/v1/id_tilebox.pb.go index 83885f5..150a441 100644 --- a/protogen/tilebox/v1/id_tilebox.pb.go +++ b/protogen/tilebox/v1/id_tilebox.pb.go @@ -17,6 +17,9 @@ func NewUUID(id uuid.UUID) *ID { } func NewUUIDSlice(ids []uuid.UUID) []*ID { + if len(ids) == 0 { + return nil + } pbIDs := make([]*ID, 0, len(ids)) for _, id := range ids { pbIDs = append(pbIDs, NewUUID(id)) diff --git a/protogen/workflows/v1/automation.pb.go b/protogen/workflows/v1/automation.pb.go index 16bbf56..b38e88e 100644 --- a/protogen/workflows/v1/automation.pb.go +++ b/protogen/workflows/v1/automation.pb.go @@ -1,3 +1,5 @@ +// The external API for managing automations in the Workflows service. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/automation_grpc.pb.go b/protogen/workflows/v1/automation_grpc.pb.go index bc5ff09..b85c6d2 100644 --- a/protogen/workflows/v1/automation_grpc.pb.go +++ b/protogen/workflows/v1/automation_grpc.pb.go @@ -1,3 +1,5 @@ +// The external API for managing automations in the Workflows service. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/workflows/v1/core.pb.go b/protogen/workflows/v1/core.pb.go index 97d607f..a00be94 100644 --- a/protogen/workflows/v1/core.pb.go +++ b/protogen/workflows/v1/core.pb.go @@ -1,3 +1,5 @@ +// Core types for workflows. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/diagram.pb.go b/protogen/workflows/v1/diagram.pb.go index cfbf4e7..a36b196 100644 --- a/protogen/workflows/v1/diagram.pb.go +++ b/protogen/workflows/v1/diagram.pb.go @@ -1,3 +1,5 @@ +// Diagram service for rendering diagrams + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/diagram_grpc.pb.go b/protogen/workflows/v1/diagram_grpc.pb.go index e94d2b7..58b424b 100644 --- a/protogen/workflows/v1/diagram_grpc.pb.go +++ b/protogen/workflows/v1/diagram_grpc.pb.go @@ -1,3 +1,5 @@ +// Diagram service for rendering diagrams + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/workflows/v1/job.pb.go b/protogen/workflows/v1/job.pb.go index 9c5e4d6..4017a73 100644 --- a/protogen/workflows/v1/job.pb.go +++ b/protogen/workflows/v1/job.pb.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with jobs. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/job_grpc.pb.go b/protogen/workflows/v1/job_grpc.pb.go index 185ab61..e79d7d3 100644 --- a/protogen/workflows/v1/job_grpc.pb.go +++ b/protogen/workflows/v1/job_grpc.pb.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with jobs. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/workflows/v1/task.pb.go b/protogen/workflows/v1/task.pb.go index c10e206..7e0f7d2 100644 --- a/protogen/workflows/v1/task.pb.go +++ b/protogen/workflows/v1/task.pb.go @@ -1,3 +1,5 @@ +// The internal API a task runner uses to communicate with a workflows-service. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/task_grpc.pb.go b/protogen/workflows/v1/task_grpc.pb.go index 4e86f5c..1d9a425 100644 --- a/protogen/workflows/v1/task_grpc.pb.go +++ b/protogen/workflows/v1/task_grpc.pb.go @@ -1,3 +1,5 @@ +// The internal API a task runner uses to communicate with a workflows-service. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/workflows/v1/workflows.pb.go b/protogen/workflows/v1/workflows.pb.go index dc59faf..7b4252d 100644 --- a/protogen/workflows/v1/workflows.pb.go +++ b/protogen/workflows/v1/workflows.pb.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with workflows. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 diff --git a/protogen/workflows/v1/workflows_grpc.pb.go b/protogen/workflows/v1/workflows_grpc.pb.go index 80ece51..25ae4a7 100644 --- a/protogen/workflows/v1/workflows_grpc.pb.go +++ b/protogen/workflows/v1/workflows_grpc.pb.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with workflows. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 diff --git a/protogen/workflows/v1/workflowsv1connect/automation.connect.go b/protogen/workflows/v1/workflowsv1connect/automation.connect.go index 81a4465..6945a1f 100644 --- a/protogen/workflows/v1/workflowsv1connect/automation.connect.go +++ b/protogen/workflows/v1/workflowsv1connect/automation.connect.go @@ -1,3 +1,5 @@ +// The external API for managing automations in the Workflows service. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: workflows/v1/automation.proto diff --git a/protogen/workflows/v1/workflowsv1connect/diagram.connect.go b/protogen/workflows/v1/workflowsv1connect/diagram.connect.go index 29ce7bf..19b4dfd 100644 --- a/protogen/workflows/v1/workflowsv1connect/diagram.connect.go +++ b/protogen/workflows/v1/workflowsv1connect/diagram.connect.go @@ -1,3 +1,5 @@ +// Diagram service for rendering diagrams + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: workflows/v1/diagram.proto diff --git a/protogen/workflows/v1/workflowsv1connect/job.connect.go b/protogen/workflows/v1/workflowsv1connect/job.connect.go index 1aff024..21b3dc3 100644 --- a/protogen/workflows/v1/workflowsv1connect/job.connect.go +++ b/protogen/workflows/v1/workflowsv1connect/job.connect.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with jobs. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: workflows/v1/job.proto diff --git a/protogen/workflows/v1/workflowsv1connect/task.connect.go b/protogen/workflows/v1/workflowsv1connect/task.connect.go index 38b9bfd..951ed3c 100644 --- a/protogen/workflows/v1/workflowsv1connect/task.connect.go +++ b/protogen/workflows/v1/workflowsv1connect/task.connect.go @@ -1,3 +1,5 @@ +// The internal API a task runner uses to communicate with a workflows-service. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: workflows/v1/task.proto diff --git a/protogen/workflows/v1/workflowsv1connect/workflows.connect.go b/protogen/workflows/v1/workflowsv1connect/workflows.connect.go index 656a785..53687a8 100644 --- a/protogen/workflows/v1/workflowsv1connect/workflows.connect.go +++ b/protogen/workflows/v1/workflowsv1connect/workflows.connect.go @@ -1,3 +1,5 @@ +// The externally facing API allowing users to interact with workflows. + // Code generated by protoc-gen-connect-go. DO NOT EDIT. // // Source: workflows/v1/workflows.proto