From 77b4e3a64282fe536a373eeb609e458e28d2c033 Mon Sep 17 00:00:00 2001 From: ericwenn Date: Sun, 8 Aug 2021 22:26:42 +0200 Subject: [PATCH] feat: generate simple Create test cases --- go.mod | 2 + go.sum | 7 + internal/plugin/generate.go | 27 +- internal/plugin/helper.go | 34 + internal/plugin/method.go | 36 + internal/plugin/resource.go | 131 ++- internal/plugin/service.go | 6 +- internal/plugin/testcase.go | 29 + internal/plugin/testcase_create.go | 139 +++ .../example/freight/v1/freight_service.pb.go | 1037 ++++------------- .../freight/v1/freight_service_grpc.pb.go | 202 ---- .../einride/example/freight/v1/shipment.pb.go | 441 ------- .../freight/v1/testing/freight_service.go | 161 ++- .../example/freight/v1/freight_service.proto | 130 +-- .../einride/example/freight/v1/shipment.proto | 83 -- 15 files changed, 795 insertions(+), 1670 deletions(-) create mode 100644 internal/plugin/helper.go create mode 100644 internal/plugin/method.go create mode 100644 internal/plugin/testcase.go create mode 100644 internal/plugin/testcase_create.go delete mode 100644 proto/gen/einride/example/freight/v1/shipment.pb.go delete mode 100644 proto/src/einride/example/freight/v1/shipment.proto diff --git a/go.mod b/go.mod index a7e0059..52c8600 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/einride/protoc-gen-go-aiptest go 1.15 require ( + github.com/stoewer/go-strcase v1.2.0 go.einride.tech/aip v0.44.0 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect @@ -10,4 +11,5 @@ require ( google.golang.org/grpc v1.39.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 google.golang.org/protobuf v1.27.1 + gotest.tools/v3 v3.0.3 ) diff --git a/go.sum b/go.sum index 1fa0382..7348cbb 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -43,11 +44,15 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.einride.tech/aip v0.44.0 h1:/3TMSgnMlYTIk8a5BifwsbJevfWkqOOSdQKAZgty9YU= @@ -145,8 +150,10 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= diff --git a/internal/plugin/generate.go b/internal/plugin/generate.go index 00cd0eb..a0fde97 100644 --- a/internal/plugin/generate.go +++ b/internal/plugin/generate.go @@ -39,7 +39,7 @@ func Generate(plugin *protogen.Plugin) error { if len(resources) == 0 { continue } - messages, err := findResourceMessages(protoRegistry, resources) + messages, err := findResourceMessages(plugin, resources) if err != nil { return err } @@ -105,16 +105,27 @@ func findServiceResources( } func findResourceMessages( - registry *protoregistry.Files, + plugin *protogen.Plugin, resources []*aipreflect.ResourceDescriptor, -) ([]protoreflect.MessageDescriptor, error) { - msgs := make([]protoreflect.MessageDescriptor, 0, len(resources)) +) ([]*protogen.Message, error) { + allMessages := allPluginMessages(plugin) + msgs := make([]*protogen.Message, 0, len(resources)) for _, resource := range resources { - msg, err := registry.FindDescriptorByName(resource.Message) - if err != nil { - return nil, fmt.Errorf("find descriptor for resource '%s': %w", resource.Type.Type(), err) + msg, ok := allMessages[resource.Message] + if !ok { + return nil, fmt.Errorf("found no message descriptor for resource '%s'", resource.Type.Type()) } - msgs = append(msgs, msg.(protoreflect.MessageDescriptor)) + msgs = append(msgs, msg) } return msgs, nil } + +func allPluginMessages(plugin *protogen.Plugin) map[protoreflect.FullName]*protogen.Message { + msgs := make(map[protoreflect.FullName]*protogen.Message) + for _, file := range plugin.Files { + for _, message := range file.Messages { + msgs[message.Desc.FullName()] = message + } + } + return msgs +} diff --git a/internal/plugin/helper.go b/internal/plugin/helper.go new file mode 100644 index 0000000..2ac058f --- /dev/null +++ b/internal/plugin/helper.go @@ -0,0 +1,34 @@ +package plugin + +import ( + "github.com/stoewer/go-strcase" + "go.einride.tech/aip/reflect/aipreflect" + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func hasParent(resource *aipreflect.ResourceDescriptor) bool { + if len(resource.Names) == 0 { + return false + } + return len(resource.Names[0].Ancestors) > 0 +} + +func findMethod(service *protogen.Service, methodName protoreflect.Name) (*protogen.Method, bool) { + for _, method := range service.Methods { + if method.Desc.Name() == methodName { + return method, true + } + } + return nil, false +} + +func hasUserSettableID(resource *aipreflect.ResourceDescriptor, method protoreflect.MethodDescriptor) bool { + idField := strcase.LowerCamelCase(resource.Singular.UpperCamelCase()) + "_id" + return hasField(method.Input(), protoreflect.Name(idField)) +} + +func hasField(message protoreflect.MessageDescriptor, field protoreflect.Name) bool { + f := message.Fields().ByName(field) + return f != nil +} diff --git a/internal/plugin/method.go b/internal/plugin/method.go new file mode 100644 index 0000000..d1eedac --- /dev/null +++ b/internal/plugin/method.go @@ -0,0 +1,36 @@ +package plugin + +import ( + "go.einride.tech/aip/reflect/aipreflect" + "google.golang.org/protobuf/compiler/protogen" +) + +type methodCreate struct { + resource *aipreflect.ResourceDescriptor + method *protogen.Method + + parent string + message string + userSettableID string +} + +func (m *methodCreate) Generate(f *protogen.GeneratedFile, response string, err string, assign string) { + f.P(response, ", ", err, " ", assign, " fx.service.", m.method.GoName, "(fx.ctx, &", m.method.Input.GoIdent, "{") + if hasParent(m.resource) { + f.P("Parent: ", m.parent, ",") + } + + switch { + case m.message != "": + f.P(m.resource.Singular.UpperCamelCase(), ": ", m.message, ",") + case !hasParent(m.resource): + f.P(m.resource.Singular.UpperCamelCase(), ": fx.Create(),") + default: + f.P(m.resource.Singular.UpperCamelCase(), ": fx.Create(", m.parent, "),") + } + + if hasUserSettableID(m.resource, m.method.Desc) && m.userSettableID != "" { + f.P(m.resource.Singular.UpperCamelCase(), "Id: ", m.userSettableID, ",") + } + f.P("})") +} diff --git a/internal/plugin/resource.go b/internal/plugin/resource.go index 7c5c1de..923e6c8 100644 --- a/internal/plugin/resource.go +++ b/internal/plugin/resource.go @@ -1,34 +1,153 @@ package plugin import ( + "strconv" + "go.einride.tech/aip/reflect/aipreflect" "google.golang.org/protobuf/compiler/protogen" - "google.golang.org/protobuf/reflect/protoreflect" ) type resourceGenerator struct { + service *protogen.Service resource *aipreflect.ResourceDescriptor - message protoreflect.MessageDescriptor + message *protogen.Message } func (r *resourceGenerator) Generate(f *protogen.GeneratedFile) error { r.generateFixture(f) - r.generateTestMethod(f) + testCases := r.collectTestCases() + r.generateTestMethod(f, testCases) + r.generateTestCases(f, testCases) + r.generateParentMethods(f) + r.generateSkip(f) return nil } func (r *resourceGenerator) generateFixture(f *protogen.GeneratedFile) { + context := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "Context", + GoImportPath: "context", + }) + service := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: r.service.GoName + "Server", + GoImportPath: r.service.Methods[0].Input.GoIdent.GoImportPath, + }) + f.P("type ", r.resource.Type.Type(), " struct {") + f.P("ctx ", context) + f.P("service ", service) + f.P("currParent int") + f.P() + + if hasParent(r.resource) { + f.P("// The parents to use when creating resources.") + f.P("// At least one parent needs to be set. Depending on methods available on the resource,") + f.P("// more may be required. If insufficient number of parents are") + f.P("// provided the test will fail.") + f.P("Parents []string") + } + _, hasCreate := r.resource.Methods[aipreflect.MethodTypeCreate] + if hasCreate { + f.P("// Create should return a resource which is valid to create, ie.") + f.P("// all required fields set.") + if hasParent(r.resource) { + f.P("Create func(parent string) *", r.message.GoIdent) + } else { + f.P("Create func() *", r.message.GoIdent) + } + } + + f.P("// Patterns of tests to skip.") + f.P("// For example if a service has a Get method:") + f.P("// Skip: [\"Get\"] will skip all tests for Get.") + f.P("// Skip: [\"Get/persisted\"] will only skip the subtest called \"persisted\" of Get.") + f.P("Skip []string") f.P("}") f.P() } -func (r *resourceGenerator) generateTestMethod(f *protogen.GeneratedFile) { - testing := f.QualifiedGoIdent(protogen.GoIdent{ +func (r *resourceGenerator) generateTestMethod(f *protogen.GeneratedFile, testCases []testCase) { + testingT := f.QualifiedGoIdent(protogen.GoIdent{ GoName: "T", GoImportPath: "testing", }) - f.P("func (fx *", r.resource.Type.Type(), ") test(t *", testing, ") {") + f.P("func (fx *", r.resource.Type.Type(), ") test(t *", testingT, ") {") + for _, tc := range testCases { + if !tc.enabled { + continue + } + f.P("t.Run(", strconv.Quote(tc.Name()), ", fx.", tc.FuncName(), ")") + } f.P("}") + f.P() +} + +func (r *resourceGenerator) generateTestCases(f *protogen.GeneratedFile, testCases []testCase) { + testingT := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "T", + GoImportPath: "testing", + }) + for _, tc := range testCases { + if !tc.enabled { + continue + } + f.P("func (fx *", r.resource.Type.Type(), ")", tc.FuncName(), "(t *", testingT, ") {") + tc.fn(f) + f.P("}") + f.P() + } +} + +func (r *resourceGenerator) generateSkip(f *protogen.GeneratedFile) { + testingT := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "T", + GoImportPath: "testing", + }) + stringsContains := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "Contains", + GoImportPath: "strings", + }) + f.P("func (fx *", r.resource.Type.Type(), ") maybeSkip(t *", testingT, ") {") + f.P("for _, skip := range fx.Skip {") + f.P("if ", stringsContains, "(t.Name(), skip) {") + f.P("t.Skip(\"skipped because of .Skip\")") + f.P("}") + f.P("}") + f.P("}") + f.P() +} + +func (r *resourceGenerator) generateParentMethods(f *protogen.GeneratedFile) { + if !hasParent(r.resource) { + return + } + testingT := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "T", + GoImportPath: "testing", + }) + f.P("func (fx *", r.resource.Type.Type(), ") nextParent(t *", testingT, ", pristine bool) string {") + f.P("if pristine {") + f.P("fx.currParent++") + f.P("}") + f.P("if fx.currParent >= len(fx.Parents) {") + f.P("t.Fatal(\"need at least\", fx.currParent + 1, \"parents\")") + f.P("}") + f.P("return fx.Parents[fx.currParent]") + f.P("}") + f.P() + f.P("func (fx *", r.resource.Type.Type(), ") peekNextParent(t *", testingT, ") string {") + f.P("next := fx.currParent + 1") + f.P("if next >= len(fx.Parents) {") + f.P("t.Fatal(\"need at least\", next +1, \"parents\")") + f.P("}") + f.P("return fx.Parents[next]") + f.P("}") + f.P() +} + +func (r *resourceGenerator) collectTestCases() []testCase { + return []testCase{ + r.createTestCase(), + } } diff --git a/internal/plugin/service.go b/internal/plugin/service.go index 05416f5..0582fa9 100644 --- a/internal/plugin/service.go +++ b/internal/plugin/service.go @@ -3,13 +3,12 @@ package plugin import ( "go.einride.tech/aip/reflect/aipreflect" "google.golang.org/protobuf/compiler/protogen" - "google.golang.org/protobuf/reflect/protoreflect" ) type serviceGenerator struct { service *protogen.Service resources []*aipreflect.ResourceDescriptor - messages []protoreflect.MessageDescriptor + messages []*protogen.Message } func (s *serviceGenerator) Generate(f *protogen.GeneratedFile) error { @@ -18,6 +17,7 @@ func (s *serviceGenerator) Generate(f *protogen.GeneratedFile) error { for i, resource := range s.resources { message := s.messages[i] generator := resourceGenerator{ + service: s.service, resource: resource, message: message, } @@ -62,6 +62,8 @@ func (s *serviceGenerator) generateTestMethods(f *protogen.GeneratedFile) { for _, resource := range s.resources { resourceFx := resource.Type.Type() f.P("func (fx *", serviceFx, ") Test", resourceFx, "(t *", testing, ", options ", resourceFx, ") {") + f.P("options.ctx = fx.Context") + f.P("options.service = fx.Service") f.P("options.test(t)") f.P("}") f.P() diff --git a/internal/plugin/testcase.go b/internal/plugin/testcase.go new file mode 100644 index 0000000..b1806ae --- /dev/null +++ b/internal/plugin/testcase.go @@ -0,0 +1,29 @@ +package plugin + +import "google.golang.org/protobuf/compiler/protogen" + +type testCase struct { + enabled bool + name string + fn func(file *protogen.GeneratedFile) +} + +func disabledTestCase() testCase { + return testCase{} +} + +func newTestCase(name string, fn func(f *protogen.GeneratedFile)) testCase { + return testCase{ + enabled: true, + name: name, + fn: fn, + } +} + +func (t testCase) Name() string { + return t.name +} + +func (t testCase) FuncName() string { + return "test" + t.name +} diff --git a/internal/plugin/testcase_create.go b/internal/plugin/testcase_create.go new file mode 100644 index 0000000..715f3a0 --- /dev/null +++ b/internal/plugin/testcase_create.go @@ -0,0 +1,139 @@ +package plugin + +import ( + "strconv" + + "go.einride.tech/aip/reflect/aipreflect" + "google.golang.org/protobuf/compiler/protogen" +) + +func (r *resourceGenerator) createTestCase() testCase { + createMethodName, err := r.resource.InferMethodName(aipreflect.MethodTypeCreate) + if err != nil { + return disabledTestCase() + } + createMethod, ok := findMethod(r.service, createMethodName) + if !ok { + return disabledTestCase() + } + + return newTestCase("Create", func(f *protogen.GeneratedFile) { + testingT := f.QualifiedGoIdent(protogen.GoIdent{GoName: "T", GoImportPath: "testing"}) + timeSecond := f.QualifiedGoIdent(protogen.GoIdent{GoName: "Second", GoImportPath: "time"}) + timeSince := f.QualifiedGoIdent(protogen.GoIdent{GoName: "Since", GoImportPath: "time"}) + stringsHasSuffix := f.QualifiedGoIdent(protogen.GoIdent{GoName: "HasSuffix", GoImportPath: "strings"}) + assertCheck := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "Check", + GoImportPath: "gotest.tools/v3/assert", + }) + assertEqual := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "Equal", + GoImportPath: "gotest.tools/v3/assert", + }) + assertNilError := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "NilError", + GoImportPath: "gotest.tools/v3/assert", + }) + statusCode := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "Code", + GoImportPath: "google.golang.org/grpc/status", + }) + codesInvalidArgument := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "InvalidArgument", + GoImportPath: "google.golang.org/grpc/codes", + }) + codesAlreadyExists := f.QualifiedGoIdent(protogen.GoIdent{ + GoName: "AlreadyExists", + GoImportPath: "google.golang.org/grpc/codes", + }) + + f.P("// Standard methods: Create") + f.P("// https://google.aip.dev/133") + + if hasParent(r.resource) { + f.P() + f.P("parent := fx.nextParent(t, false)") + } + + if hasParent(r.resource) { + f.P() + f.P("// Method should fail with InvalidArgument if no parent is provided.") + f.P("t.Run(\"missing parent\", func(t *", testingT, ") {") + f.P("fx.maybeSkip(t)") + m := methodCreate{ + resource: r.resource, + method: createMethod, + parent: strconv.Quote(""), + } + m.Generate(f, "_", "err", ":=") + f.P(assertEqual, "(t, ", codesInvalidArgument, ",", statusCode, "(err), err)") + f.P("})") + } + + if hasParent(r.resource) { + f.P() + f.P("// Method should fail with InvalidArgument is provided parent is not valid.") + f.P("t.Run(\"invalid parent\", func(t *", testingT, ") {") + f.P("fx.maybeSkip(t)") + m := methodCreate{ + resource: r.resource, + method: createMethod, + parent: strconv.Quote("invalid resource name"), + } + m.Generate(f, "_", "err", ":=") + f.P(assertEqual, "(t, ", codesInvalidArgument, ",", statusCode, "(err), err)") + f.P("})") + } + + f.P() + f.P("// Field create_time should be populated when the resource is created.") + f.P("t.Run(\"create time\", func(t *", testingT, ") {") + f.P("fx.maybeSkip(t)") + m := methodCreate{ + resource: r.resource, + method: createMethod, + parent: "parent", + } + m.Generate(f, "msg", "err", ":=") + f.P(assertNilError, "(t, err)") + f.P(assertCheck, "(t, ", timeSince, "(msg.CreateTime.AsTime()) < ", timeSecond, ")") + f.P("})") + + if hasUserSettableID(r.resource, createMethod.Desc) { + f.P() + f.P("// If method support user settable IDs, when set the resource should") + f.P("// returned with the provided ID.") + f.P("t.Run(\"user settable id\", func(t *", testingT, ") {") + f.P("fx.maybeSkip(t)") + m := methodCreate{ + resource: r.resource, + method: createMethod, + parent: "parent", + userSettableID: strconv.Quote("usersetid"), + } + m.Generate(f, "msg", "err", ":=") + f.P(assertNilError, "(t, err)") + f.P(assertCheck, "(t, ", stringsHasSuffix, "(msg.GetName(), ", strconv.Quote("usersetid"), "))") + f.P("})") + } + + if hasUserSettableID(r.resource, createMethod.Desc) { + f.P() + f.P("// If method support user settable IDs and the same ID is reused") + f.P("// the method should return AlreadyExists.") + f.P("t.Run(\"already exists\", func(t *", testingT, ") {") + f.P("fx.maybeSkip(t)") + m := methodCreate{ + resource: r.resource, + method: createMethod, + parent: "parent", + userSettableID: strconv.Quote("alreadyexists"), + } + m.Generate(f, "_", "err", ":=") + f.P(assertNilError, "(t, err)") + m.Generate(f, "_", "err", "=") + f.P(assertEqual, "(t, ", codesAlreadyExists, ",", statusCode, "(err), err)") + f.P("})") + } + }) +} diff --git a/proto/gen/einride/example/freight/v1/freight_service.pb.go b/proto/gen/einride/example/freight/v1/freight_service.pb.go index 8e5823c..eca69d6 100644 --- a/proto/gen/einride/example/freight/v1/freight_service.pb.go +++ b/proto/gen/einride/example/freight/v1/freight_service.pb.go @@ -203,7 +203,8 @@ type CreateShipperRequest struct { unknownFields protoimpl.UnknownFields // The shipper to create. - Shipper *Shipper `protobuf:"bytes,1,opt,name=shipper,proto3" json:"shipper,omitempty"` + Shipper *Shipper `protobuf:"bytes,1,opt,name=shipper,proto3" json:"shipper,omitempty"` + ShipperId string `protobuf:"bytes,2,opt,name=shipper_id,json=shipperId,proto3" json:"shipper_id,omitempty"` } func (x *CreateShipperRequest) Reset() { @@ -245,6 +246,13 @@ func (x *CreateShipperRequest) GetShipper() *Shipper { return nil } +func (x *CreateShipperRequest) GetShipperId() string { + if x != nil { + return x.ShipperId + } + return "" +} + // Request message for FreightService.UpdateShipper. type UpdateShipperRequest struct { state protoimpl.MessageState @@ -707,358 +715,6 @@ func (x *DeleteSiteRequest) GetName() string { return "" } -// Request message for FreightService.GetShipment. -type GetShipmentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name of the shipment to retrieve. - // Format: shippers/{shipper}/shipments/{shipment} - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetShipmentRequest) Reset() { - *x = GetShipmentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetShipmentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetShipmentRequest) ProtoMessage() {} - -func (x *GetShipmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetShipmentRequest.ProtoReflect.Descriptor instead. -func (*GetShipmentRequest) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{12} -} - -func (x *GetShipmentRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for FreightService.ListShipments. -type ListShipmentsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name of the parent, which owns this collection of shipments. - // Format: shippers/{shipper} - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Requested page size. Server may return fewer shipments than requested. - // If unspecified, server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // 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. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListShipmentsRequest) Reset() { - *x = ListShipmentsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListShipmentsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListShipmentsRequest) ProtoMessage() {} - -func (x *ListShipmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListShipmentsRequest.ProtoReflect.Descriptor instead. -func (*ListShipmentsRequest) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{13} -} - -func (x *ListShipmentsRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListShipmentsRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListShipmentsRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// Response message for FreightService.ListShipments. -type ListShipmentsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of shipments. - Shipments []*Shipment `protobuf:"bytes,1,rep,name=shipments,proto3" json:"shipments,omitempty"` - // 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. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` -} - -func (x *ListShipmentsResponse) Reset() { - *x = ListShipmentsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListShipmentsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListShipmentsResponse) ProtoMessage() {} - -func (x *ListShipmentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListShipmentsResponse.ProtoReflect.Descriptor instead. -func (*ListShipmentsResponse) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{14} -} - -func (x *ListShipmentsResponse) GetShipments() []*Shipment { - if x != nil { - return x.Shipments - } - return nil -} - -func (x *ListShipmentsResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -// Request message for FreightService.CreateShipment. -type CreateShipmentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name of the parent shipper for which this shipment will be created. - // Format: shippers/{shipper} - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // The shipment to create. - Shipment *Shipment `protobuf:"bytes,2,opt,name=shipment,proto3" json:"shipment,omitempty"` -} - -func (x *CreateShipmentRequest) Reset() { - *x = CreateShipmentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateShipmentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateShipmentRequest) ProtoMessage() {} - -func (x *CreateShipmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateShipmentRequest.ProtoReflect.Descriptor instead. -func (*CreateShipmentRequest) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{15} -} - -func (x *CreateShipmentRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateShipmentRequest) GetShipment() *Shipment { - if x != nil { - return x.Shipment - } - return nil -} - -// Request message for FreightService.UpdateShipment. -type UpdateShipmentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 `protobuf:"bytes,1,opt,name=shipment,proto3" json:"shipment,omitempty"` - // The list of fields to be updated. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` -} - -func (x *UpdateShipmentRequest) Reset() { - *x = UpdateShipmentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateShipmentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateShipmentRequest) ProtoMessage() {} - -func (x *UpdateShipmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateShipmentRequest.ProtoReflect.Descriptor instead. -func (*UpdateShipmentRequest) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{16} -} - -func (x *UpdateShipmentRequest) GetShipment() *Shipment { - if x != nil { - return x.Shipment - } - return nil -} - -func (x *UpdateShipmentRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -// Request message for FreightService.DeleteShipment. -type DeleteShipmentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name of the shipment to delete. - // Format: shippers/{shipper}/shipments/{shipment} - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *DeleteShipmentRequest) Reset() { - *x = DeleteShipmentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteShipmentRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteShipmentRequest) ProtoMessage() {} - -func (x *DeleteShipmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_freight_service_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteShipmentRequest.ProtoReflect.Descriptor instead. -func (*DeleteShipmentRequest) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_freight_service_proto_rawDescGZIP(), []int{17} -} - -func (x *DeleteShipmentRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - var File_einride_example_freight_v1_freight_service_proto protoreflect.FileDescriptor var file_einride_example_freight_v1_freight_service_proto_rawDesc = []byte{ @@ -1066,327 +722,220 @@ var file_einride_example_freight_v1_freight_service_proto_rawDesc = []byte{ 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x29, + 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x28, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x69, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x56, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x66, 0x72, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, - 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, - 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7f, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x08, 0x73, 0x68, 0x69, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, - 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5b, 0x0a, 0x14, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x98, 0x01, 0x0a, 0x14, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x07, - 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, - 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, - 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x50, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x50, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x49, 0x0a, - 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x21, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, - 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x73, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0x96, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, - 0x12, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, - 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3a, - 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, - 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, - 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x11, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3a, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x53, 0x0a, 0x11, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0xe2, 0x41, - 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, - 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x58, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x2e, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, - 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x6c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x54, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x4d, 0x0a, 0x24, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, - 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, - 0x12, 0x25, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, - 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x83, 0x01, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, - 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, + 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, + 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, + 0x26, 0x0a, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, + 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x7f, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, + 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, + 0x08, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x70, + 0x6e, 0x22, 0x7a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x68, 0x69, + 0x70, 0x70, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, + 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x42, + 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x49, 0x64, 0x22, 0x98, 0x01, + 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, + 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x42, 0x04, 0xe2, 0x41, + 0x01, 0x02, 0x52, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, + 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, + 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, + 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x50, 0xe2, 0x41, 0x01, 0x02, + 0xfa, 0x41, 0x49, 0x0a, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, + 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x21, 0x66, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, + 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x73, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x52, 0x05, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x96, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, 0x12, 0x24, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x08, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x08, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x5b, 0x0a, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x2e, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xda, 0x12, 0x0a, 0x0e, 0x46, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x24, 0xda, 0x41, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, - 0x2a, 0x7d, 0x12, 0x87, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x8f, 0x01, 0x0a, - 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x30, - 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x27, 0xda, 0x41, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, - 0x70, 0x70, 0x65, 0x72, 0x73, 0x3a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0xac, - 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, - 0x12, 0x30, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, + 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x22, 0x8c, + 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x44, 0xda, 0x41, 0x13, 0x73, 0x68, 0x69, 0x70, - 0x70, 0x65, 0x72, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x32, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x73, 0x68, 0x69, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, - 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x8c, 0x01, - 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, - 0x30, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x24, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x85, 0x01, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, + 0x53, 0x69, 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, + 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x53, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, + 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x32, 0x85, 0x0c, 0x0a, 0x0e, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, + 0x70, 0x70, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, 0x2c, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x69, 0x74, 0x65, - 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, - 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0x24, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x87, + 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, + 0x2f, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2e, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x73, 0x68, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, - 0x98, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, + 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x65, 0x69, 0x6e, + 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, + 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, + 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, + 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, + 0x72, 0x22, 0x27, 0xda, 0x41, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x17, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, + 0x73, 0x3a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0xac, 0x01, 0x0a, 0x0d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x65, + 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, + 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, + 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x70, 0x65, 0x72, 0x22, 0x44, 0xda, 0x41, 0x13, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x2c, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x32, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x3a, 0x07, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x65, 0x69, + 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, - 0x39, 0xda, 0x41, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x73, 0x69, 0x74, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x73, - 0x69, 0x74, 0x65, 0x73, 0x3a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, - 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, 0x43, 0xda, 0x41, 0x10, 0x73, - 0x69, 0x74, 0x65, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x32, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x73, 0x69, 0x74, 0x65, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, - 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, - 0x8b, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, + 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x70, + 0x65, 0x72, 0x22, 0x24, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x17, 0x2a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, + 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, + 0x53, 0x69, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x74, 0x65, 0x22, 0x2c, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, + 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, + 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, - 0x2c, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x95, 0x01, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x2e, - 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0x30, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x23, 0x12, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, - 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x69, 0x6e, 0x72, - 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0xda, 0x41, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, - 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x45, 0xda, 0x41, - 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, - 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x08, 0x73, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0xbe, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, - 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, - 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x53, 0xda, 0x41, 0x14, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x32, 0x2a, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x68, - 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x08, 0x73, 0x68, 0x69, 0x70, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, - 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x69, 0x6e, + 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, + 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, + 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0xda, 0x41, 0x06, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x22, 0x30, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, - 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x2a, 0x7d, 0x1a, 0x1f, 0xca, 0x41, 0x1c, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, - 0x65, 0x63, 0x68, 0x42, 0x98, 0x01, 0x0a, 0x1f, 0x74, 0x65, 0x63, 0x68, 0x2e, 0x65, 0x69, 0x6e, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, + 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, 0x39, 0xda, 0x41, 0x0b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x73, 0x69, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x25, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x73, + 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, + 0x3a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, 0x43, 0xda, 0x41, 0x10, 0x73, 0x69, 0x74, 0x65, 0x2c, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x32, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x73, 0x69, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x73, 0x69, 0x74, + 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, - 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, - 0x2d, 0x61, 0x69, 0x70, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x69, 0x6e, 0x72, + 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x74, 0x65, 0x22, 0x2c, 0xda, 0x41, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x2a, + 0x2f, 0x73, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x1a, 0x1f, 0xca, 0x41, 0x1c, 0x66, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, + 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x42, 0x98, 0x01, 0x0a, 0x1f, 0x74, + 0x65, 0x63, 0x68, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x13, + 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x61, 0x69, 0x70, 0x74, 0x65, 0x73, 0x74, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, + 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x66, 0x72, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1401,7 +950,7 @@ func file_einride_example_freight_v1_freight_service_proto_rawDescGZIP() []byte return file_einride_example_freight_v1_freight_service_proto_rawDescData } -var file_einride_example_freight_v1_freight_service_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_einride_example_freight_v1_freight_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_einride_example_freight_v1_freight_service_proto_goTypes = []interface{}{ (*GetShipperRequest)(nil), // 0: einride.example.freight.v1.GetShipperRequest (*ListShippersRequest)(nil), // 1: einride.example.freight.v1.ListShippersRequest @@ -1415,65 +964,44 @@ var file_einride_example_freight_v1_freight_service_proto_goTypes = []interface{ (*CreateSiteRequest)(nil), // 9: einride.example.freight.v1.CreateSiteRequest (*UpdateSiteRequest)(nil), // 10: einride.example.freight.v1.UpdateSiteRequest (*DeleteSiteRequest)(nil), // 11: einride.example.freight.v1.DeleteSiteRequest - (*GetShipmentRequest)(nil), // 12: einride.example.freight.v1.GetShipmentRequest - (*ListShipmentsRequest)(nil), // 13: einride.example.freight.v1.ListShipmentsRequest - (*ListShipmentsResponse)(nil), // 14: einride.example.freight.v1.ListShipmentsResponse - (*CreateShipmentRequest)(nil), // 15: einride.example.freight.v1.CreateShipmentRequest - (*UpdateShipmentRequest)(nil), // 16: einride.example.freight.v1.UpdateShipmentRequest - (*DeleteShipmentRequest)(nil), // 17: einride.example.freight.v1.DeleteShipmentRequest - (*Shipper)(nil), // 18: einride.example.freight.v1.Shipper - (*fieldmaskpb.FieldMask)(nil), // 19: google.protobuf.FieldMask - (*Site)(nil), // 20: einride.example.freight.v1.Site - (*Shipment)(nil), // 21: einride.example.freight.v1.Shipment + (*Shipper)(nil), // 12: einride.example.freight.v1.Shipper + (*fieldmaskpb.FieldMask)(nil), // 13: google.protobuf.FieldMask + (*Site)(nil), // 14: einride.example.freight.v1.Site } var file_einride_example_freight_v1_freight_service_proto_depIdxs = []int32{ - 18, // 0: einride.example.freight.v1.ListShippersResponse.shippers:type_name -> einride.example.freight.v1.Shipper - 18, // 1: einride.example.freight.v1.CreateShipperRequest.shipper:type_name -> einride.example.freight.v1.Shipper - 18, // 2: einride.example.freight.v1.UpdateShipperRequest.shipper:type_name -> einride.example.freight.v1.Shipper - 19, // 3: einride.example.freight.v1.UpdateShipperRequest.update_mask:type_name -> google.protobuf.FieldMask - 20, // 4: einride.example.freight.v1.ListSitesResponse.sites:type_name -> einride.example.freight.v1.Site - 20, // 5: einride.example.freight.v1.CreateSiteRequest.site:type_name -> einride.example.freight.v1.Site - 20, // 6: einride.example.freight.v1.UpdateSiteRequest.site:type_name -> einride.example.freight.v1.Site - 19, // 7: einride.example.freight.v1.UpdateSiteRequest.update_mask:type_name -> google.protobuf.FieldMask - 21, // 8: einride.example.freight.v1.ListShipmentsResponse.shipments:type_name -> einride.example.freight.v1.Shipment - 21, // 9: einride.example.freight.v1.CreateShipmentRequest.shipment:type_name -> einride.example.freight.v1.Shipment - 21, // 10: einride.example.freight.v1.UpdateShipmentRequest.shipment:type_name -> einride.example.freight.v1.Shipment - 19, // 11: einride.example.freight.v1.UpdateShipmentRequest.update_mask:type_name -> google.protobuf.FieldMask - 0, // 12: einride.example.freight.v1.FreightService.GetShipper:input_type -> einride.example.freight.v1.GetShipperRequest - 1, // 13: einride.example.freight.v1.FreightService.ListShippers:input_type -> einride.example.freight.v1.ListShippersRequest - 3, // 14: einride.example.freight.v1.FreightService.CreateShipper:input_type -> einride.example.freight.v1.CreateShipperRequest - 4, // 15: einride.example.freight.v1.FreightService.UpdateShipper:input_type -> einride.example.freight.v1.UpdateShipperRequest - 5, // 16: einride.example.freight.v1.FreightService.DeleteShipper:input_type -> einride.example.freight.v1.DeleteShipperRequest - 6, // 17: einride.example.freight.v1.FreightService.GetSite:input_type -> einride.example.freight.v1.GetSiteRequest - 7, // 18: einride.example.freight.v1.FreightService.ListSites:input_type -> einride.example.freight.v1.ListSitesRequest - 9, // 19: einride.example.freight.v1.FreightService.CreateSite:input_type -> einride.example.freight.v1.CreateSiteRequest - 10, // 20: einride.example.freight.v1.FreightService.UpdateSite:input_type -> einride.example.freight.v1.UpdateSiteRequest - 11, // 21: einride.example.freight.v1.FreightService.DeleteSite:input_type -> einride.example.freight.v1.DeleteSiteRequest - 12, // 22: einride.example.freight.v1.FreightService.GetShipment:input_type -> einride.example.freight.v1.GetShipmentRequest - 13, // 23: einride.example.freight.v1.FreightService.ListShipments:input_type -> einride.example.freight.v1.ListShipmentsRequest - 15, // 24: einride.example.freight.v1.FreightService.CreateShipment:input_type -> einride.example.freight.v1.CreateShipmentRequest - 16, // 25: einride.example.freight.v1.FreightService.UpdateShipment:input_type -> einride.example.freight.v1.UpdateShipmentRequest - 17, // 26: einride.example.freight.v1.FreightService.DeleteShipment:input_type -> einride.example.freight.v1.DeleteShipmentRequest - 18, // 27: einride.example.freight.v1.FreightService.GetShipper:output_type -> einride.example.freight.v1.Shipper - 2, // 28: einride.example.freight.v1.FreightService.ListShippers:output_type -> einride.example.freight.v1.ListShippersResponse - 18, // 29: einride.example.freight.v1.FreightService.CreateShipper:output_type -> einride.example.freight.v1.Shipper - 18, // 30: einride.example.freight.v1.FreightService.UpdateShipper:output_type -> einride.example.freight.v1.Shipper - 18, // 31: einride.example.freight.v1.FreightService.DeleteShipper:output_type -> einride.example.freight.v1.Shipper - 20, // 32: einride.example.freight.v1.FreightService.GetSite:output_type -> einride.example.freight.v1.Site - 8, // 33: einride.example.freight.v1.FreightService.ListSites:output_type -> einride.example.freight.v1.ListSitesResponse - 20, // 34: einride.example.freight.v1.FreightService.CreateSite:output_type -> einride.example.freight.v1.Site - 20, // 35: einride.example.freight.v1.FreightService.UpdateSite:output_type -> einride.example.freight.v1.Site - 20, // 36: einride.example.freight.v1.FreightService.DeleteSite:output_type -> einride.example.freight.v1.Site - 21, // 37: einride.example.freight.v1.FreightService.GetShipment:output_type -> einride.example.freight.v1.Shipment - 14, // 38: einride.example.freight.v1.FreightService.ListShipments:output_type -> einride.example.freight.v1.ListShipmentsResponse - 21, // 39: einride.example.freight.v1.FreightService.CreateShipment:output_type -> einride.example.freight.v1.Shipment - 21, // 40: einride.example.freight.v1.FreightService.UpdateShipment:output_type -> einride.example.freight.v1.Shipment - 21, // 41: einride.example.freight.v1.FreightService.DeleteShipment:output_type -> einride.example.freight.v1.Shipment - 27, // [27:42] is the sub-list for method output_type - 12, // [12:27] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 12, // 0: einride.example.freight.v1.ListShippersResponse.shippers:type_name -> einride.example.freight.v1.Shipper + 12, // 1: einride.example.freight.v1.CreateShipperRequest.shipper:type_name -> einride.example.freight.v1.Shipper + 12, // 2: einride.example.freight.v1.UpdateShipperRequest.shipper:type_name -> einride.example.freight.v1.Shipper + 13, // 3: einride.example.freight.v1.UpdateShipperRequest.update_mask:type_name -> google.protobuf.FieldMask + 14, // 4: einride.example.freight.v1.ListSitesResponse.sites:type_name -> einride.example.freight.v1.Site + 14, // 5: einride.example.freight.v1.CreateSiteRequest.site:type_name -> einride.example.freight.v1.Site + 14, // 6: einride.example.freight.v1.UpdateSiteRequest.site:type_name -> einride.example.freight.v1.Site + 13, // 7: einride.example.freight.v1.UpdateSiteRequest.update_mask:type_name -> google.protobuf.FieldMask + 0, // 8: einride.example.freight.v1.FreightService.GetShipper:input_type -> einride.example.freight.v1.GetShipperRequest + 1, // 9: einride.example.freight.v1.FreightService.ListShippers:input_type -> einride.example.freight.v1.ListShippersRequest + 3, // 10: einride.example.freight.v1.FreightService.CreateShipper:input_type -> einride.example.freight.v1.CreateShipperRequest + 4, // 11: einride.example.freight.v1.FreightService.UpdateShipper:input_type -> einride.example.freight.v1.UpdateShipperRequest + 5, // 12: einride.example.freight.v1.FreightService.DeleteShipper:input_type -> einride.example.freight.v1.DeleteShipperRequest + 6, // 13: einride.example.freight.v1.FreightService.GetSite:input_type -> einride.example.freight.v1.GetSiteRequest + 7, // 14: einride.example.freight.v1.FreightService.ListSites:input_type -> einride.example.freight.v1.ListSitesRequest + 9, // 15: einride.example.freight.v1.FreightService.CreateSite:input_type -> einride.example.freight.v1.CreateSiteRequest + 10, // 16: einride.example.freight.v1.FreightService.UpdateSite:input_type -> einride.example.freight.v1.UpdateSiteRequest + 11, // 17: einride.example.freight.v1.FreightService.DeleteSite:input_type -> einride.example.freight.v1.DeleteSiteRequest + 12, // 18: einride.example.freight.v1.FreightService.GetShipper:output_type -> einride.example.freight.v1.Shipper + 2, // 19: einride.example.freight.v1.FreightService.ListShippers:output_type -> einride.example.freight.v1.ListShippersResponse + 12, // 20: einride.example.freight.v1.FreightService.CreateShipper:output_type -> einride.example.freight.v1.Shipper + 12, // 21: einride.example.freight.v1.FreightService.UpdateShipper:output_type -> einride.example.freight.v1.Shipper + 12, // 22: einride.example.freight.v1.FreightService.DeleteShipper:output_type -> einride.example.freight.v1.Shipper + 14, // 23: einride.example.freight.v1.FreightService.GetSite:output_type -> einride.example.freight.v1.Site + 8, // 24: einride.example.freight.v1.FreightService.ListSites:output_type -> einride.example.freight.v1.ListSitesResponse + 14, // 25: einride.example.freight.v1.FreightService.CreateSite:output_type -> einride.example.freight.v1.Site + 14, // 26: einride.example.freight.v1.FreightService.UpdateSite:output_type -> einride.example.freight.v1.Site + 14, // 27: einride.example.freight.v1.FreightService.DeleteSite:output_type -> einride.example.freight.v1.Site + 18, // [18:28] is the sub-list for method output_type + 8, // [8:18] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_einride_example_freight_v1_freight_service_proto_init() } @@ -1481,7 +1009,6 @@ func file_einride_example_freight_v1_freight_service_proto_init() { if File_einride_example_freight_v1_freight_service_proto != nil { return } - file_einride_example_freight_v1_shipment_proto_init() file_einride_example_freight_v1_shipper_proto_init() file_einride_example_freight_v1_site_proto_init() if !protoimpl.UnsafeEnabled { @@ -1629,78 +1156,6 @@ func file_einride_example_freight_v1_freight_service_proto_init() { return nil } } - file_einride_example_freight_v1_freight_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetShipmentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_freight_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListShipmentsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_freight_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListShipmentsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_freight_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateShipmentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_freight_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateShipmentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_freight_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteShipmentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1708,7 +1163,7 @@ func file_einride_example_freight_v1_freight_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_einride_example_freight_v1_freight_service_proto_rawDesc, NumEnums: 0, - NumMessages: 18, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/gen/einride/example/freight/v1/freight_service_grpc.pb.go b/proto/gen/einride/example/freight/v1/freight_service_grpc.pb.go index 149dce0..9c8f37d 100644 --- a/proto/gen/einride/example/freight/v1/freight_service_grpc.pb.go +++ b/proto/gen/einride/example/freight/v1/freight_service_grpc.pb.go @@ -50,22 +50,6 @@ type FreightServiceClient interface { // See: https://google.aip.dev/135 (Standard methods: Delete). // See: https://google.aip.dev/164 (Soft delete). DeleteSite(ctx context.Context, in *DeleteSiteRequest, opts ...grpc.CallOption) (*Site, error) - // Get a shipment. - // See: https://google.aip.dev/131 (Standard methods: Get). - GetShipment(ctx context.Context, in *GetShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) - // List shipments for a shipper. - // See: https://google.aip.dev/132 (Standard methods: List). - ListShipments(ctx context.Context, in *ListShipmentsRequest, opts ...grpc.CallOption) (*ListShipmentsResponse, error) - // Create a shipment. - // See: https://google.aip.dev/133 (Standard methods: Create). - CreateShipment(ctx context.Context, in *CreateShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) - // Update a shipment. - // See: https://google.aip.dev/134 (Standard methods: Update). - UpdateShipment(ctx context.Context, in *UpdateShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) - // Delete a shipment. - // See: https://google.aip.dev/135 (Standard methods: Delete). - // See: https://google.aip.dev/164 (Soft delete). - DeleteShipment(ctx context.Context, in *DeleteShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) } type freightServiceClient struct { @@ -166,51 +150,6 @@ func (c *freightServiceClient) DeleteSite(ctx context.Context, in *DeleteSiteReq return out, nil } -func (c *freightServiceClient) GetShipment(ctx context.Context, in *GetShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) { - out := new(Shipment) - err := c.cc.Invoke(ctx, "/einride.example.freight.v1.FreightService/GetShipment", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *freightServiceClient) ListShipments(ctx context.Context, in *ListShipmentsRequest, opts ...grpc.CallOption) (*ListShipmentsResponse, error) { - out := new(ListShipmentsResponse) - err := c.cc.Invoke(ctx, "/einride.example.freight.v1.FreightService/ListShipments", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *freightServiceClient) CreateShipment(ctx context.Context, in *CreateShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) { - out := new(Shipment) - err := c.cc.Invoke(ctx, "/einride.example.freight.v1.FreightService/CreateShipment", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *freightServiceClient) UpdateShipment(ctx context.Context, in *UpdateShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) { - out := new(Shipment) - err := c.cc.Invoke(ctx, "/einride.example.freight.v1.FreightService/UpdateShipment", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *freightServiceClient) DeleteShipment(ctx context.Context, in *DeleteShipmentRequest, opts ...grpc.CallOption) (*Shipment, error) { - out := new(Shipment) - err := c.cc.Invoke(ctx, "/einride.example.freight.v1.FreightService/DeleteShipment", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // FreightServiceServer is the server API for FreightService service. // All implementations must embed UnimplementedFreightServiceServer // for forward compatibility @@ -247,22 +186,6 @@ type FreightServiceServer interface { // See: https://google.aip.dev/135 (Standard methods: Delete). // See: https://google.aip.dev/164 (Soft delete). DeleteSite(context.Context, *DeleteSiteRequest) (*Site, error) - // Get a shipment. - // See: https://google.aip.dev/131 (Standard methods: Get). - GetShipment(context.Context, *GetShipmentRequest) (*Shipment, error) - // List shipments for a shipper. - // See: https://google.aip.dev/132 (Standard methods: List). - ListShipments(context.Context, *ListShipmentsRequest) (*ListShipmentsResponse, error) - // Create a shipment. - // See: https://google.aip.dev/133 (Standard methods: Create). - CreateShipment(context.Context, *CreateShipmentRequest) (*Shipment, error) - // Update a shipment. - // See: https://google.aip.dev/134 (Standard methods: Update). - UpdateShipment(context.Context, *UpdateShipmentRequest) (*Shipment, error) - // Delete a shipment. - // See: https://google.aip.dev/135 (Standard methods: Delete). - // See: https://google.aip.dev/164 (Soft delete). - DeleteShipment(context.Context, *DeleteShipmentRequest) (*Shipment, error) mustEmbedUnimplementedFreightServiceServer() } @@ -300,21 +223,6 @@ func (UnimplementedFreightServiceServer) UpdateSite(context.Context, *UpdateSite func (UnimplementedFreightServiceServer) DeleteSite(context.Context, *DeleteSiteRequest) (*Site, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteSite not implemented") } -func (UnimplementedFreightServiceServer) GetShipment(context.Context, *GetShipmentRequest) (*Shipment, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetShipment not implemented") -} -func (UnimplementedFreightServiceServer) ListShipments(context.Context, *ListShipmentsRequest) (*ListShipmentsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListShipments not implemented") -} -func (UnimplementedFreightServiceServer) CreateShipment(context.Context, *CreateShipmentRequest) (*Shipment, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateShipment not implemented") -} -func (UnimplementedFreightServiceServer) UpdateShipment(context.Context, *UpdateShipmentRequest) (*Shipment, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateShipment not implemented") -} -func (UnimplementedFreightServiceServer) DeleteShipment(context.Context, *DeleteShipmentRequest) (*Shipment, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteShipment not implemented") -} func (UnimplementedFreightServiceServer) mustEmbedUnimplementedFreightServiceServer() {} // UnsafeFreightServiceServer may be embedded to opt out of forward compatibility for this service. @@ -508,96 +416,6 @@ func _FreightService_DeleteSite_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } -func _FreightService_GetShipment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetShipmentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FreightServiceServer).GetShipment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/einride.example.freight.v1.FreightService/GetShipment", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FreightServiceServer).GetShipment(ctx, req.(*GetShipmentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _FreightService_ListShipments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListShipmentsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FreightServiceServer).ListShipments(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/einride.example.freight.v1.FreightService/ListShipments", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FreightServiceServer).ListShipments(ctx, req.(*ListShipmentsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _FreightService_CreateShipment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateShipmentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FreightServiceServer).CreateShipment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/einride.example.freight.v1.FreightService/CreateShipment", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FreightServiceServer).CreateShipment(ctx, req.(*CreateShipmentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _FreightService_UpdateShipment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateShipmentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FreightServiceServer).UpdateShipment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/einride.example.freight.v1.FreightService/UpdateShipment", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FreightServiceServer).UpdateShipment(ctx, req.(*UpdateShipmentRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _FreightService_DeleteShipment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteShipmentRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FreightServiceServer).DeleteShipment(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/einride.example.freight.v1.FreightService/DeleteShipment", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FreightServiceServer).DeleteShipment(ctx, req.(*DeleteShipmentRequest)) - } - return interceptor(ctx, in, info, handler) -} - // FreightService_ServiceDesc is the grpc.ServiceDesc for FreightService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -645,26 +463,6 @@ var FreightService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteSite", Handler: _FreightService_DeleteSite_Handler, }, - { - MethodName: "GetShipment", - Handler: _FreightService_GetShipment_Handler, - }, - { - MethodName: "ListShipments", - Handler: _FreightService_ListShipments_Handler, - }, - { - MethodName: "CreateShipment", - Handler: _FreightService_CreateShipment_Handler, - }, - { - MethodName: "UpdateShipment", - Handler: _FreightService_UpdateShipment_Handler, - }, - { - MethodName: "DeleteShipment", - Handler: _FreightService_DeleteShipment_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "einride/example/freight/v1/freight_service.proto", diff --git a/proto/gen/einride/example/freight/v1/shipment.pb.go b/proto/gen/einride/example/freight/v1/shipment.pb.go deleted file mode 100644 index 4a325ec..0000000 --- a/proto/gen/einride/example/freight/v1/shipment.pb.go +++ /dev/null @@ -1,441 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1 -// protoc v3.15.2 -// source: einride/example/freight/v1/shipment.proto - -package examplefreightv1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// A shipment represents transportation of goods between an origin -// [site][einride.example.freight.v1.Site] and a destination -// [site][einride.example.freight.v1.Site]. -type Shipment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name of the shipment. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The creation timestamp of the shipment. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // The last update timestamp of the shipment. - // - // Updated when create/update/delete operation is shipment. - UpdateTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // The deletion timestamp of the shipment. - DeleteTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"` - // The resource name of the origin site of the shipment. - // Format: shippers/{shipper}/sites/{site} - OriginSite string `protobuf:"bytes,5,opt,name=origin_site,json=originSite,proto3" json:"origin_site,omitempty"` - // The resource name of the destination site of the shipment. - // Format: shippers/{shipper}/sites/{site} - DestinationSite string `protobuf:"bytes,6,opt,name=destination_site,json=destinationSite,proto3" json:"destination_site,omitempty"` - // The earliest pickup time of the shipment at the origin site. - PickupEarliestTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=pickup_earliest_time,json=pickupEarliestTime,proto3" json:"pickup_earliest_time,omitempty"` - // The latest pickup time of the shipment at the origin site. - PickupLatestTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=pickup_latest_time,json=pickupLatestTime,proto3" json:"pickup_latest_time,omitempty"` - // The earliest delivery time of the shipment at the destination site. - DeliveryEarliestTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=delivery_earliest_time,json=deliveryEarliestTime,proto3" json:"delivery_earliest_time,omitempty"` - // The latest delivery time of the shipment at the destination site. - DeliveryLatestTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=delivery_latest_time,json=deliveryLatestTime,proto3" json:"delivery_latest_time,omitempty"` - // The line items of the shipment. - LineItems []*LineItem `protobuf:"bytes,11,rep,name=line_items,json=lineItems,proto3" json:"line_items,omitempty"` - // Annotations of the shipment. - Annotations map[string]string `protobuf:"bytes,12,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Shipment) Reset() { - *x = Shipment{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_shipment_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Shipment) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Shipment) ProtoMessage() {} - -func (x *Shipment) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_shipment_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Shipment.ProtoReflect.Descriptor instead. -func (*Shipment) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_shipment_proto_rawDescGZIP(), []int{0} -} - -func (x *Shipment) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Shipment) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *Shipment) GetUpdateTime() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTime - } - return nil -} - -func (x *Shipment) GetDeleteTime() *timestamppb.Timestamp { - if x != nil { - return x.DeleteTime - } - return nil -} - -func (x *Shipment) GetOriginSite() string { - if x != nil { - return x.OriginSite - } - return "" -} - -func (x *Shipment) GetDestinationSite() string { - if x != nil { - return x.DestinationSite - } - return "" -} - -func (x *Shipment) GetPickupEarliestTime() *timestamppb.Timestamp { - if x != nil { - return x.PickupEarliestTime - } - return nil -} - -func (x *Shipment) GetPickupLatestTime() *timestamppb.Timestamp { - if x != nil { - return x.PickupLatestTime - } - return nil -} - -func (x *Shipment) GetDeliveryEarliestTime() *timestamppb.Timestamp { - if x != nil { - return x.DeliveryEarliestTime - } - return nil -} - -func (x *Shipment) GetDeliveryLatestTime() *timestamppb.Timestamp { - if x != nil { - return x.DeliveryLatestTime - } - return nil -} - -func (x *Shipment) GetLineItems() []*LineItem { - if x != nil { - return x.LineItems - } - return nil -} - -func (x *Shipment) GetAnnotations() map[string]string { - if x != nil { - return x.Annotations - } - return nil -} - -// A shipment line item. -type LineItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The title of the line item. - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - // The quantity of the line item. - Quantity float32 `protobuf:"fixed32,2,opt,name=quantity,proto3" json:"quantity,omitempty"` - // The weight of the line item in kilograms. - WeightKg float32 `protobuf:"fixed32,3,opt,name=weight_kg,json=weightKg,proto3" json:"weight_kg,omitempty"` - // The volume of the line item in cubic meters. - VolumeM3 float32 `protobuf:"fixed32,4,opt,name=volume_m3,json=volumeM3,proto3" json:"volume_m3,omitempty"` -} - -func (x *LineItem) Reset() { - *x = LineItem{} - if protoimpl.UnsafeEnabled { - mi := &file_einride_example_freight_v1_shipment_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LineItem) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LineItem) ProtoMessage() {} - -func (x *LineItem) ProtoReflect() protoreflect.Message { - mi := &file_einride_example_freight_v1_shipment_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LineItem.ProtoReflect.Descriptor instead. -func (*LineItem) Descriptor() ([]byte, []int) { - return file_einride_example_freight_v1_shipment_proto_rawDescGZIP(), []int{1} -} - -func (x *LineItem) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *LineItem) GetQuantity() float32 { - if x != nil { - return x.Quantity - } - return 0 -} - -func (x *LineItem) GetWeightKg() float32 { - if x != nil { - return x.WeightKg - } - return 0 -} - -func (x *LineItem) GetVolumeM3() float32 { - if x != nil { - return x.VolumeM3 - } - return 0 -} - -var File_einride_example_freight_v1_shipment_proto protoreflect.FileDescriptor - -var file_einride_example_freight_v1_shipment_proto_rawDesc = []byte{ - 0x0a, 0x29, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x69, - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x65, 0x69, 0x6e, - 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xa3, 0x08, 0x0a, 0x08, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, - 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x0b, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, - 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x0a, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x53, 0x69, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x66, 0x72, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, - 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x53, 0x69, 0x74, 0x65, 0x52, - 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x74, 0x65, - 0x12, 0x52, 0x0a, 0x14, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, - 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x12, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x10, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x16, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, - 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x14, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, - 0x45, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x14, - 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x12, 0x64, 0x65, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x43, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x65, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x65, 0x69, 0x6e, - 0x72, 0x69, 0x64, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, - 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x68, - 0xea, 0x41, 0x65, 0x0a, 0x25, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x74, 0x65, 0x63, - 0x68, 0x2f, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x73, 0x68, 0x69, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x72, 0x7d, 0x2f, 0x73, - 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x7d, 0x2a, 0x09, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x32, 0x08, - 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x76, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x65, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x5f, 0x6b, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x4b, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x33, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x33, - 0x42, 0x92, 0x01, 0x0a, 0x1f, 0x74, 0x65, 0x63, 0x68, 0x2e, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x61, 0x69, 0x70, 0x74, 0x65, 0x73, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x69, 0x6e, 0x72, 0x69, 0x64, - 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x66, 0x72, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_einride_example_freight_v1_shipment_proto_rawDescOnce sync.Once - file_einride_example_freight_v1_shipment_proto_rawDescData = file_einride_example_freight_v1_shipment_proto_rawDesc -) - -func file_einride_example_freight_v1_shipment_proto_rawDescGZIP() []byte { - file_einride_example_freight_v1_shipment_proto_rawDescOnce.Do(func() { - file_einride_example_freight_v1_shipment_proto_rawDescData = protoimpl.X.CompressGZIP(file_einride_example_freight_v1_shipment_proto_rawDescData) - }) - return file_einride_example_freight_v1_shipment_proto_rawDescData -} - -var file_einride_example_freight_v1_shipment_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_einride_example_freight_v1_shipment_proto_goTypes = []interface{}{ - (*Shipment)(nil), // 0: einride.example.freight.v1.Shipment - (*LineItem)(nil), // 1: einride.example.freight.v1.LineItem - nil, // 2: einride.example.freight.v1.Shipment.AnnotationsEntry - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp -} -var file_einride_example_freight_v1_shipment_proto_depIdxs = []int32{ - 3, // 0: einride.example.freight.v1.Shipment.create_time:type_name -> google.protobuf.Timestamp - 3, // 1: einride.example.freight.v1.Shipment.update_time:type_name -> google.protobuf.Timestamp - 3, // 2: einride.example.freight.v1.Shipment.delete_time:type_name -> google.protobuf.Timestamp - 3, // 3: einride.example.freight.v1.Shipment.pickup_earliest_time:type_name -> google.protobuf.Timestamp - 3, // 4: einride.example.freight.v1.Shipment.pickup_latest_time:type_name -> google.protobuf.Timestamp - 3, // 5: einride.example.freight.v1.Shipment.delivery_earliest_time:type_name -> google.protobuf.Timestamp - 3, // 6: einride.example.freight.v1.Shipment.delivery_latest_time:type_name -> google.protobuf.Timestamp - 1, // 7: einride.example.freight.v1.Shipment.line_items:type_name -> einride.example.freight.v1.LineItem - 2, // 8: einride.example.freight.v1.Shipment.annotations:type_name -> einride.example.freight.v1.Shipment.AnnotationsEntry - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_einride_example_freight_v1_shipment_proto_init() } -func file_einride_example_freight_v1_shipment_proto_init() { - if File_einride_example_freight_v1_shipment_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_einride_example_freight_v1_shipment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Shipment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_einride_example_freight_v1_shipment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LineItem); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_einride_example_freight_v1_shipment_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_einride_example_freight_v1_shipment_proto_goTypes, - DependencyIndexes: file_einride_example_freight_v1_shipment_proto_depIdxs, - MessageInfos: file_einride_example_freight_v1_shipment_proto_msgTypes, - }.Build() - File_einride_example_freight_v1_shipment_proto = out.File - file_einride_example_freight_v1_shipment_proto_rawDesc = nil - file_einride_example_freight_v1_shipment_proto_goTypes = nil - file_einride_example_freight_v1_shipment_proto_depIdxs = nil -} diff --git a/proto/gen/einride/example/freight/v1/testing/freight_service.go b/proto/gen/einride/example/freight/v1/testing/freight_service.go index 7f656ff..52fc68d 100644 --- a/proto/gen/einride/example/freight/v1/testing/freight_service.go +++ b/proto/gen/einride/example/freight/v1/testing/freight_service.go @@ -5,7 +5,12 @@ package examplefreightv1test import ( context "context" v1 "github.com/einride/protoc-gen-go-aiptest/proto/gen/einride/example/freight/v1" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + assert "gotest.tools/v3/assert" + strings "strings" testing "testing" + time "time" ) type FreightService struct { @@ -16,32 +21,172 @@ type FreightService struct { Service v1.FreightServiceServer } -func (fx *FreightService) TestShipment(t *testing.T, options Shipment) { - options.test(t) -} - func (fx *FreightService) TestShipper(t *testing.T, options Shipper) { + options.ctx = fx.Context + options.service = fx.Service options.test(t) } func (fx *FreightService) TestSite(t *testing.T, options Site) { + options.ctx = fx.Context + options.service = fx.Service options.test(t) } -type Shipment struct { +type Shipper struct { + ctx context.Context + service v1.FreightServiceServer + currParent int + + // Create should return a resource which is valid to create, ie. + // all required fields set. + Create func() *v1.Shipper + // Patterns of tests to skip. + // For example if a service has a Get method: + // Skip: ["Get"] will skip all tests for Get. + // Skip: ["Get/persisted"] will only skip the subtest called "persisted" of Get. + Skip []string } -func (fx *Shipment) test(t *testing.T) { +func (fx *Shipper) test(t *testing.T) { + t.Run("Create", fx.testCreate) } -type Shipper struct { +func (fx *Shipper) testCreate(t *testing.T) { + // Standard methods: Create + // https://google.aip.dev/133 + + // Field create_time should be populated when the resource is created. + t.Run("create time", func(t *testing.T) { + fx.maybeSkip(t) + msg, err := fx.service.CreateShipper(fx.ctx, &v1.CreateShipperRequest{ + Shipper: fx.Create(), + }) + assert.NilError(t, err) + assert.Check(t, time.Since(msg.CreateTime.AsTime()) < time.Second) + }) + + // If method support user settable IDs, when set the resource should + // returned with the provided ID. + t.Run("user settable id", func(t *testing.T) { + fx.maybeSkip(t) + msg, err := fx.service.CreateShipper(fx.ctx, &v1.CreateShipperRequest{ + Shipper: fx.Create(), + ShipperId: "usersetid", + }) + assert.NilError(t, err) + assert.Check(t, strings.HasSuffix(msg.GetName(), "usersetid")) + }) + + // If method support user settable IDs and the same ID is reused + // the method should return AlreadyExists. + t.Run("already exists", func(t *testing.T) { + fx.maybeSkip(t) + _, err := fx.service.CreateShipper(fx.ctx, &v1.CreateShipperRequest{ + Shipper: fx.Create(), + ShipperId: "alreadyexists", + }) + assert.NilError(t, err) + _, err = fx.service.CreateShipper(fx.ctx, &v1.CreateShipperRequest{ + Shipper: fx.Create(), + ShipperId: "alreadyexists", + }) + assert.Equal(t, codes.AlreadyExists, status.Code(err), err) + }) } -func (fx *Shipper) test(t *testing.T) { +func (fx *Shipper) maybeSkip(t *testing.T) { + for _, skip := range fx.Skip { + if strings.Contains(t.Name(), skip) { + t.Skip("skipped because of .Skip") + } + } } type Site struct { + ctx context.Context + service v1.FreightServiceServer + currParent int + + // The parents to use when creating resources. + // At least one parent needs to be set. Depending on methods available on the resource, + // more may be required. If insufficient number of parents are + // provided the test will fail. + Parents []string + // Create should return a resource which is valid to create, ie. + // all required fields set. + Create func(parent string) *v1.Site + // Patterns of tests to skip. + // For example if a service has a Get method: + // Skip: ["Get"] will skip all tests for Get. + // Skip: ["Get/persisted"] will only skip the subtest called "persisted" of Get. + Skip []string } func (fx *Site) test(t *testing.T) { + t.Run("Create", fx.testCreate) +} + +func (fx *Site) testCreate(t *testing.T) { + // Standard methods: Create + // https://google.aip.dev/133 + + parent := fx.nextParent(t, false) + + // Method should fail with InvalidArgument if no parent is provided. + t.Run("missing parent", func(t *testing.T) { + fx.maybeSkip(t) + _, err := fx.service.CreateSite(fx.ctx, &v1.CreateSiteRequest{ + Parent: "", + Site: fx.Create(""), + }) + assert.Equal(t, codes.InvalidArgument, status.Code(err), err) + }) + + // Method should fail with InvalidArgument is provided parent is not valid. + t.Run("invalid parent", func(t *testing.T) { + fx.maybeSkip(t) + _, err := fx.service.CreateSite(fx.ctx, &v1.CreateSiteRequest{ + Parent: "invalid resource name", + Site: fx.Create("invalid resource name"), + }) + assert.Equal(t, codes.InvalidArgument, status.Code(err), err) + }) + + // Field create_time should be populated when the resource is created. + t.Run("create time", func(t *testing.T) { + fx.maybeSkip(t) + msg, err := fx.service.CreateSite(fx.ctx, &v1.CreateSiteRequest{ + Parent: parent, + Site: fx.Create(parent), + }) + assert.NilError(t, err) + assert.Check(t, time.Since(msg.CreateTime.AsTime()) < time.Second) + }) +} + +func (fx *Site) nextParent(t *testing.T, pristine bool) string { + if pristine { + fx.currParent++ + } + if fx.currParent >= len(fx.Parents) { + t.Fatal("need at least", fx.currParent+1, "parents") + } + return fx.Parents[fx.currParent] +} + +func (fx *Site) peekNextParent(t *testing.T) string { + next := fx.currParent + 1 + if next >= len(fx.Parents) { + t.Fatal("need at least", next+1, "parents") + } + return fx.Parents[next] +} + +func (fx *Site) maybeSkip(t *testing.T) { + for _, skip := range fx.Skip { + if strings.Contains(t.Name(), skip) { + t.Skip("skipped because of .Skip") + } + } } diff --git a/proto/src/einride/example/freight/v1/freight_service.proto b/proto/src/einride/example/freight/v1/freight_service.proto index dacc9f5..6d3c071 100644 --- a/proto/src/einride/example/freight/v1/freight_service.proto +++ b/proto/src/einride/example/freight/v1/freight_service.proto @@ -7,7 +7,6 @@ option java_multiple_files = true; option java_outer_classname = "FreightServiceProto"; option java_package = "tech.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"; @@ -126,54 +125,6 @@ service FreightService { }; 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. @@ -215,6 +166,7 @@ message ListShippersResponse { message CreateShipperRequest { // The shipper to create. Shipper shipper = 1 [(google.api.field_behavior) = REQUIRED]; + string shipper_id = 2; } // Request message for FreightService.UpdateShipper. @@ -317,83 +269,3 @@ message DeleteSiteRequest { (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" - ]; -} diff --git a/proto/src/einride/example/freight/v1/shipment.proto b/proto/src/einride/example/freight/v1/shipment.proto deleted file mode 100644 index 1e330c8..0000000 --- a/proto/src/einride/example/freight/v1/shipment.proto +++ /dev/null @@ -1,83 +0,0 @@ -syntax = "proto3"; - -package einride.example.freight.v1; - -option go_package = "github.com/einride/protoc-gen-go-aiptest/proto/gen/einride/example/freight/v1;examplefreightv1"; -option java_multiple_files = true; -option java_outer_classname = "ShipmentProto"; -option java_package = "tech.einride.example.freight.v1"; - -import "google/api/annotations.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/protobuf/timestamp.proto"; - -// A shipment represents transportation of goods between an origin -// [site][einride.example.freight.v1.Site] and a destination -// [site][einride.example.freight.v1.Site]. -message Shipment { - option (google.api.resource) = { - type: "freight-example.einride.tech/Shipment" - pattern: "shippers/{shipper}/shipments/{shipment}" - singular: "shipment" - plural: "shipments" - }; - - // The resource name of the shipment. - string name = 1; - - // The creation timestamp of the shipment. - google.protobuf.Timestamp create_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // The last update timestamp of the shipment. - // - // Updated when create/update/delete operation is shipment. - google.protobuf.Timestamp update_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // The deletion timestamp of the shipment. - google.protobuf.Timestamp delete_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // The resource name of the origin site of the shipment. - // Format: shippers/{shipper}/sites/{site} - string origin_site = 5 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference).type = "freight-example.einride.tech/Site" - ]; - - // The resource name of the destination site of the shipment. - // Format: shippers/{shipper}/sites/{site} - string destination_site = 6 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference).type = "freight-example.einride.tech/Site" - ]; - - // The earliest pickup time of the shipment at the origin site. - google.protobuf.Timestamp pickup_earliest_time = 7 [(google.api.field_behavior) = REQUIRED]; - - // The latest pickup time of the shipment at the origin site. - google.protobuf.Timestamp pickup_latest_time = 8 [(google.api.field_behavior) = REQUIRED]; - - // The earliest delivery time of the shipment at the destination site. - google.protobuf.Timestamp delivery_earliest_time = 9 [(google.api.field_behavior) = REQUIRED]; - - // The latest delivery time of the shipment at the destination site. - google.protobuf.Timestamp delivery_latest_time = 10 [(google.api.field_behavior) = REQUIRED]; - - // The line items of the shipment. - repeated LineItem line_items = 11; - - // Annotations of the shipment. - map annotations = 12; -} - -// A shipment line item. -message LineItem { - // The title of the line item. - string title = 1; - // The quantity of the line item. - float quantity = 2; - // The weight of the line item in kilograms. - float weight_kg = 3; - // The volume of the line item in cubic meters. - float volume_m3 = 4; -}