syntax = "proto3"; package einride.example.freight.v1; import "einride/example/freight/v1/shipment.proto"; import "einride/example/freight/v1/shipper.proto"; import "einride/example/freight/v1/site.proto"; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/protobuf/field_mask.proto"; // This API represents a simple freight service. // // It defines the following resource model: // // - The API has a collection of [Shipper][einride.example.freight.v1.Shipper] // resources, named `shippers/*` // // - Each Shipper has a collection of [Site][einride.example.freight.v1.Site] // resources, named `shippers/*/sites/*` // // - Each Shipper has a collection of [Shipment][einride.example.freight.v1.Shipment] // resources, named `shippers/*/shipments/*` service FreightService { option (google.api.default_host) = "freight-example.einride.tech"; // Get a shipper. // See: https://google.aip.dev/131 (Standard methods: Get). rpc GetShipper(GetShipperRequest) returns (Shipper) { option (google.api.http) = {get: "/v1/{name=shippers/*}"}; option (google.api.method_signature) = "name"; } // List shippers. // See: https://google.aip.dev/132 (Standard methods: List). rpc ListShippers(ListShippersRequest) returns (ListShippersResponse) { option (google.api.http) = {get: "/v1/shippers"}; } // Create a shipper. // See: https://google.aip.dev/133 (Standard methods: Create). rpc CreateShipper(CreateShipperRequest) returns (Shipper) { option (google.api.http) = { post: "/v1/shippers" body: "shipper" }; option (google.api.method_signature) = "shipper"; } // Update a shipper. // See: https://google.aip.dev/134 (Standard methods: Update). rpc UpdateShipper(UpdateShipperRequest) returns (Shipper) { option (google.api.http) = { patch: "/v1/{shipper.name=shippers/*}" body: "shipper" }; option (google.api.method_signature) = "shipper,update_mask"; } // Delete a shipper. // See: https://google.aip.dev/135 (Standard methods: Delete). // See: https://google.aip.dev/164 (Soft delete). rpc DeleteShipper(DeleteShipperRequest) returns (Shipper) { option (google.api.http) = {delete: "/v1/{name=shippers/*}"}; option (google.api.method_signature) = "name"; } // Get a site. // See: https://google.aip.dev/131 (Standard methods: Get). rpc GetSite(GetSiteRequest) returns (Site) { option (google.api.http) = {get: "/v1/{name=shippers/*/sites/*}"}; option (google.api.method_signature) = "name"; } // List sites for a shipper. // See: https://google.aip.dev/132 (Standard methods: List). rpc ListSites(ListSitesRequest) returns (ListSitesResponse) { option (google.api.http) = {get: "/v1/{parent=shippers/*}/sites"}; option (google.api.method_signature) = "parent"; } // Create a site. // See: https://google.aip.dev/133 (Standard methods: Create). rpc CreateSite(CreateSiteRequest) returns (Site) { option (google.api.http) = { post: "/v1/{parent=shippers/*}/sites" body: "site" }; option (google.api.method_signature) = "parent,site"; } // Update a site. // See: https://google.aip.dev/134 (Standard methods: Update). rpc UpdateSite(UpdateSiteRequest) returns (Site) { option (google.api.http) = { patch: "/v1/{site.name=shippers/*/sites/*}" body: "site" }; option (google.api.method_signature) = "site,update_mask"; } // Delete a site. // See: https://google.aip.dev/135 (Standard methods: Delete). // See: https://google.aip.dev/164 (Soft delete). rpc DeleteSite(DeleteSiteRequest) returns (Site) { option (google.api.http) = {delete: "/v1/{name=shippers/*/sites/*}"}; option (google.api.method_signature) = "name"; } // Get a shipment. // See: https://google.aip.dev/131 (Standard methods: Get). rpc GetShipment(GetShipmentRequest) returns (Shipment) { option (google.api.http) = {get: "/v1/{name=shippers/*/shipments/*}"}; option (google.api.method_signature) = "name"; } // List shipments for a shipper. // See: https://google.aip.dev/132 (Standard methods: List). rpc ListShipments(ListShipmentsRequest) returns (ListShipmentsResponse) { option (google.api.http) = {get: "/v1/{parent=shippers/*}/shipments"}; option (google.api.method_signature) = "parent"; } // Create a shipment. // See: https://google.aip.dev/133 (Standard methods: Create). rpc CreateShipment(CreateShipmentRequest) returns (Shipment) { option (google.api.http) = { post: "/v1/{parent=shippers/*}/shipments" body: "shipment" }; option (google.api.method_signature) = "parent,shipment"; } // Update a shipment. // See: https://google.aip.dev/134 (Standard methods: Update). rpc UpdateShipment(UpdateShipmentRequest) returns (Shipment) { option (google.api.http) = { patch: "/v1/{shipment.name=shippers/*/shipments/*}" body: "shipment" }; option (google.api.method_signature) = "shipment,update_mask"; } // Delete a shipment. // See: https://google.aip.dev/135 (Standard methods: Delete). // See: https://google.aip.dev/164 (Soft delete). rpc DeleteShipment(DeleteShipmentRequest) returns (Shipment) { option (google.api.http) = {delete: "/v1/{name=shippers/*/shipments/*}"}; option (google.api.method_signature) = "name"; } } // Request message for FreightService.GetShipper. message GetShipperRequest { // The resource name of the shipper to retrieve. // Format: shippers/{shipper} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Shipper" ]; } // Request message for FreightService.ListShippers. message ListShippersRequest { // Requested page size. Server may return fewer shippers than requested. // If unspecified, server will pick an appropriate default. int32 page_size = 1; // A token identifying a page of results the server should return. // Typically, this is the value of // [ListShippersResponse.next_page_token][einride.example.freight.v1.ListShippersResponse.next_page_token] // returned from the previous call to `ListShippers` method. string page_token = 2; } // Response message for FreightService.ListShippers. message ListShippersResponse { // The list of shippers. repeated Shipper shippers = 1; // A token to retrieve next page of results. Pass this value in the // [ListShippersRequest.page_token][einride.example.freight.v1.ListShippersRequest.page_token] // field in the subsequent call to `ListShippers` method to retrieve the next // page of results. string next_page_token = 2; } // Request message for FreightService.CreateShipper. message CreateShipperRequest { // The shipper to create. Shipper shipper = 1 [(google.api.field_behavior) = REQUIRED]; } // Request message for FreightService.UpdateShipper. message UpdateShipperRequest { // The shipper to update with. The name must match or be empty. // The shipper's `name` field is used to identify the shipper to be updated. // Format: shippers/{shipper} Shipper shipper = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. google.protobuf.FieldMask update_mask = 2; } // Request message for FreightService.DeleteShipper. message DeleteShipperRequest { // The resource name of the shipper to delete. // Format: shippers/{shipper} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Shipper" ]; } // Request message for FreightService.GetSite. message GetSiteRequest { // The resource name of the site to retrieve. // Format: shippers/{shipper}/sites/{site} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Site" ]; } // Request message for FreightService.ListSites. message ListSitesRequest { // The resource name of the parent, which owns this collection of sites. // Format: shippers/{shipper} string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "freight-example.einride.tech/Shipper" child_type: "freight-example.einride.tech/Site" } ]; // Requested page size. Server may return fewer sites than requested. // If unspecified, server will pick an appropriate default. int32 page_size = 2; // A token identifying a page of results the server should return. // Typically, this is the value of // [ListSitesResponse.next_page_token][einride.example.freight.v1.ListSitesResponse.next_page_token] // returned from the previous call to `ListSites` method. string page_token = 3; } // Response message for FreightService.ListSites. message ListSitesResponse { // The list of sites. repeated Site sites = 1; // A token to retrieve next page of results. Pass this value in the // [ListSitesRequest.page_token][einride.example.freight.v1.ListSitesRequest.page_token] // field in the subsequent call to `ListSites` method to retrieve the next // page of results. string next_page_token = 2; } // Request message for FreightService.CreateSite. message CreateSiteRequest { // The resource name of the parent shipper for which this site will be created. // Format: shippers/{shipper} string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = {child_type: "freight-example.einride.tech/Shipper"} ]; // The site to create. Site site = 2 [(google.api.field_behavior) = REQUIRED]; } // Request message for FreightService.UpdateSite. message UpdateSiteRequest { // The site to update with. The name must match or be empty. // The site's `name` field is used to identify the site to be updated. // Format: shippers/{shipper}/sites/{site} Site site = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. google.protobuf.FieldMask update_mask = 2; } // Request message for FreightService.DeleteSite. message DeleteSiteRequest { // The resource name of the site to delete. // Format: shippers/{shipper}/sites/{site} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Site" ]; } // Request message for FreightService.GetShipment. message GetShipmentRequest { // The resource name of the shipment to retrieve. // Format: shippers/{shipper}/shipments/{shipment} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Shipment" ]; } // Request message for FreightService.ListShipments. message ListShipmentsRequest { // The resource name of the parent, which owns this collection of shipments. // Format: shippers/{shipper} string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "freight-example.einride.tech/Shipper" child_type: "freight-example.einride.tech/Shipment" } ]; // Requested page size. Server may return fewer shipments than requested. // If unspecified, server will pick an appropriate default. int32 page_size = 2; // A token identifying a page of results the server should return. // Typically, this is the value of // [ListShipmentsResponse.next_page_token][einride.example.freight.v1.ListShipmentsResponse.next_page_token] // returned from the previous call to `ListShipments` method. string page_token = 3; } // Response message for FreightService.ListShipments. message ListShipmentsResponse { // The list of shipments. repeated Shipment shipments = 1; // A token to retrieve next page of results. Pass this value in the // [ListShipmentsRequest.page_token][einride.example.freight.v1.ListShipmentsRequest.page_token] // field in the subsequent call to `ListShipments` method to retrieve the next // page of results. string next_page_token = 2; } // Request message for FreightService.CreateShipment. message CreateShipmentRequest { // The resource name of the parent shipper for which this shipment will be created. // Format: shippers/{shipper} string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = {child_type: "freight-example.einride.tech/Shipper"} ]; // The shipment to create. Shipment shipment = 2 [(google.api.field_behavior) = REQUIRED]; } // Request message for FreightService.UpdateShipment. message UpdateShipmentRequest { // The shipment to update with. The name must match or be empty. // The shipment's `name` field is used to identify the shipment to be updated. // Format: shippers/{shipper}/shipments/{shipment} Shipment shipment = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. google.protobuf.FieldMask update_mask = 2; } // Request message for FreightService.DeleteShipment. message DeleteShipmentRequest { // The resource name of the shipment to delete. // Format: shippers/{shipper}/shipments/{shipment} string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference).type = "freight-example.einride.tech/Shipment" ]; }