diff --git a/clientcompat/internal/clientcompat/clientcompat.twirp.go b/clientcompat/internal/clientcompat/clientcompat.twirp.go index 40d15c6d..ed16f0c1 100644 --- a/clientcompat/internal/clientcompat/clientcompat.twirp.go +++ b/clientcompat/internal/clientcompat/clientcompat.twirp.go @@ -354,7 +354,7 @@ func (s *compatServiceServer) serveMethodJSON(ctx context.Context, resp http.Res if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -410,7 +410,7 @@ func (s *compatServiceServer) serveMethodProtobuf(ctx context.Context, resp http if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -483,7 +483,7 @@ func (s *compatServiceServer) serveNoopMethodJSON(ctx context.Context, resp http if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -539,7 +539,7 @@ func (s *compatServiceServer) serveNoopMethodProtobuf(ctx context.Context, resp if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/clientcompat/pycompat/clientcompat_pb2.py b/clientcompat/pycompat/clientcompat_pb2.py index 51269ad2..5288d307 100644 --- a/clientcompat/pycompat/clientcompat_pb2.py +++ b/clientcompat/pycompat/clientcompat_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: clientcompat.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.clientcompat', syntax='proto3', serialized_options=b'Z\014clientcompat', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x12\x63lientcompat.proto\x12\x12twirp.clientcompat\"\x07\n\x05\x45mpty\"\x10\n\x03Req\x12\t\n\x01v\x18\x01 \x01(\t\"\x11\n\x04Resp\x12\t\n\x01v\x18\x01 \x01(\x05\"\xb9\x01\n\x13\x43lientCompatMessage\x12\x17\n\x0fservice_address\x18\x01 \x01(\t\x12K\n\x06method\x18\x02 \x01(\x0e\x32;.twirp.clientcompat.ClientCompatMessage.CompatServiceMethod\x12\x0f\n\x07request\x18\x03 \x01(\x0c\"+\n\x13\x43ompatServiceMethod\x12\x08\n\x04NOOP\x10\x00\x12\n\n\x06METHOD\x10\x01\x32\x90\x01\n\rCompatService\x12;\n\x06Method\x12\x17.twirp.clientcompat.Req\x1a\x18.twirp.clientcompat.Resp\x12\x42\n\nNoopMethod\x12\x19.twirp.clientcompat.Empty\x1a\x19.twirp.clientcompat.EmptyB\x0eZ\x0c\x63lientcompatb\x06proto3' ) @@ -28,15 +29,18 @@ full_name='twirp.clientcompat.ClientCompatMessage.CompatServiceMethod', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='NOOP', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='METHOD', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, @@ -52,6 +56,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -76,6 +81,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='v', full_name='twirp.clientcompat.Req.v', index=0, @@ -83,7 +89,7 @@ has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -107,6 +113,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='v', full_name='twirp.clientcompat.Resp.v', index=0, @@ -114,7 +121,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -138,6 +145,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='service_address', full_name='twirp.clientcompat.ClientCompatMessage.service_address', index=0, @@ -145,21 +153,21 @@ has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='method', full_name='twirp.clientcompat.ClientCompatMessage.method', index=1, number=2, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='request', full_name='twirp.clientcompat.ClientCompatMessage.request', index=2, number=3, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -222,6 +230,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=277, serialized_end=421, methods=[ @@ -233,6 +242,7 @@ input_type=_REQ, output_type=_RESP, serialized_options=None, + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name='NoopMethod', @@ -242,6 +252,7 @@ input_type=_EMPTY, output_type=_EMPTY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_COMPATSERVICE) diff --git a/clientcompat/pycompat/pycompat.py b/clientcompat/pycompat/pycompat.py index 29f01d7d..49876185 100755 --- a/clientcompat/pycompat/pycompat.py +++ b/clientcompat/pycompat/pycompat.py @@ -25,14 +25,14 @@ def main(): client = clientcompat_pb2_twirp.CompatServiceClient(req.service_address) try: resp = do_request(client, req) - sys.stdout.write(resp.SerializeToString()) + sys.stdout.write(resp.SerializeToString().decode(encoding="utf-8")) except clientcompat_pb2_twirp.TwirpException as e: sys.stderr.write(e.code) def read_request(): input_str = sys.stdin.read() - return clientcompat_pb2.ClientCompatMessage.FromString(input_str) + return clientcompat_pb2.ClientCompatMessage.FromString(input_str.encode(encoding="utf-8")) def do_request(client, req): diff --git a/example/service.twirp.go b/example/service.twirp.go index f21bea60..fe0c72ad 100644 --- a/example/service.twirp.go +++ b/example/service.twirp.go @@ -309,7 +309,7 @@ func (s *haberdasherServer) serveMakeHatJSON(ctx context.Context, resp http.Resp if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -365,7 +365,7 @@ func (s *haberdasherServer) serveMakeHatProtobuf(ctx context.Context, resp http. if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/example/service_pb2.py b/example/service_pb2.py index acc7c3d6..76c9a8a3 100644 --- a/example/service_pb2.py +++ b/example/service_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: service.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twitch.twirp.example', syntax='proto3', serialized_options=b'Z\007example', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\x14twitch.twirp.example\"0\n\x03Hat\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x16\n\x04Size\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32O\n\x0bHaberdasher\x12@\n\x07MakeHat\x12\x1a.twitch.twirp.example.Size\x1a\x19.twitch.twirp.example.HatB\tZ\x07\x65xampleb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twitch.twirp.example.Hat.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twitch.twirp.example.Hat.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twitch.twirp.example.Hat.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -75,6 +77,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twitch.twirp.example.Size.inches', index=0, @@ -82,7 +85,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -126,6 +129,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=113, serialized_end=192, methods=[ @@ -137,6 +141,7 @@ input_type=_SIZE, output_type=_HAT, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_HABERDASHER) diff --git a/install_proto.bash b/install_proto.bash index 26e6b63f..4e7fedbc 100755 --- a/install_proto.bash +++ b/install_proto.bash @@ -18,10 +18,10 @@ PROTOC_EXISTS=$? if [ $PROTOC_EXISTS -eq 0 ]; then echo "Protoc already installed" PROTOC_VERSION=`protoc --version` - if [ "$PROTOC_VERSION" == "libprotoc 3.11.0" ]; then + if [ "$PROTOC_VERSION" == "libprotoc 3.13.0" ]; then exit 0 fi - echo "libprotoc 3.11.0 required, but found: $PROTOC_VERSION" + echo "libprotoc 3.13.0 required, but found: $PROTOC_VERSION" exit 1 fi @@ -30,8 +30,8 @@ if [ "$(uname)" == "Darwin" ]; then elif [ `whoami` == "root" ]; then mkdir -p /usr/local/src/protoc pushd /usr/local/src/protoc - wget https://github.com/google/protobuf/releases/download/v3.11.0/protoc-3.11.0-linux-x86_64.zip -O /usr/local/src/protoc-3.11.0-linux-x86_64.zip - unzip -x ../protoc-3.11.0-linux-x86_64.zip + wget https://github.com/google/protobuf/releases/download/v3.13.0/protoc-3.13.0-linux-x86_64.zip -O /usr/local/src/protoc-3.13.0-linux-x86_64.zip + unzip -x ../protoc-3.13.0-linux-x86_64.zip if [ ! -e /usr/local/bin/protoc ]; then ln -s `pwd`/bin/protoc /usr/local/bin/protoc fi @@ -41,8 +41,8 @@ elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then sudo chmod a+w /usr/local/src mkdir -p /usr/local/src/protoc pushd /usr/local/src/protoc - wget https://github.com/google/protobuf/releases/download/v3.11.0/protoc-3.11.0-linux-x86_64.zip -O /usr/local/src/protoc-3.11.0-linux-x86_64.zip - unzip -x ../protoc-3.11.0-linux-x86_64.zip + wget https://github.com/google/protobuf/releases/download/v3.13.0/protoc-3.13.0-linux-x86_64.zip -O /usr/local/src/protoc-3.13.0-linux-x86_64.zip + unzip -x ../protoc-3.13.0-linux-x86_64.zip if [ ! -e /usr/local/bin/protoc ]; then sudo ln -s `pwd`/bin/protoc /usr/local/bin/protoc fi diff --git a/internal/twirptest/empty_service/empty_service_pb2.py b/internal/twirptest/empty_service/empty_service_pb2.py index c0ca7c84..402ebf78 100644 --- a/internal/twirptest/empty_service/empty_service_pb2.py +++ b/internal/twirptest/empty_service/empty_service_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: empty_service.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.emptyservice', syntax='proto3', serialized_options=b'Z\rempty_service', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x13\x65mpty_service.proto\x12%twirp.internal.twirptest.emptyservice2\x07\n\x05\x45mptyB\x0fZ\rempty_serviceb\x06proto3' ) @@ -34,6 +35,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=62, serialized_end=69, methods=[ diff --git a/internal/twirptest/gogo_compat/service.twirp.go b/internal/twirptest/gogo_compat/service.twirp.go index b079804e..52b5f7fc 100644 --- a/internal/twirptest/gogo_compat/service.twirp.go +++ b/internal/twirptest/gogo_compat/service.twirp.go @@ -311,7 +311,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -367,7 +367,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/google_protobuf_imports/service.twirp.go b/internal/twirptest/google_protobuf_imports/service.twirp.go index 8632acd6..42a41a5b 100644 --- a/internal/twirptest/google_protobuf_imports/service.twirp.go +++ b/internal/twirptest/google_protobuf_imports/service.twirp.go @@ -310,7 +310,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -366,7 +366,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/google_protobuf_imports/service_pb2.py b/internal/twirptest/google_protobuf_imports/service_pb2.py index bd6a0258..aead55cb 100644 --- a/internal/twirptest/google_protobuf_imports/service_pb2.py +++ b/internal/twirptest/google_protobuf_imports/service_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: service.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -20,6 +20,7 @@ package='twirp.internal.twirptest.use_empty', syntax='proto3', serialized_options=b'Z\027google_protobuf_imports', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\"twirp.internal.twirptest.use_empty\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto2C\n\x03Svc\x12<\n\x04Send\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.EmptyB\x19Z\x17google_protobuf_importsb\x06proto3' , dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,]) @@ -37,6 +38,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=114, serialized_end=181, methods=[ @@ -48,6 +50,7 @@ input_type=google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE, output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importable/importable.twirp.go b/internal/twirptest/importable/importable.twirp.go index 4c76ad23..e0aa4fde 100644 --- a/internal/twirptest/importable/importable.twirp.go +++ b/internal/twirptest/importable/importable.twirp.go @@ -310,7 +310,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -366,7 +366,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/importable/importable_pb2.py b/internal/twirptest/importable/importable_pb2.py index 209eeb06..c1f22e39 100644 --- a/internal/twirptest/importable/importable_pb2.py +++ b/internal/twirptest/importable/importable_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: importable.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importable', syntax='proto3', serialized_options=b'Z\nimportable', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x10importable.proto\x12#twirp.internal.twirptest.importable\"\x05\n\x03Msg2a\n\x03Svc\x12Z\n\x04Send\x12(.twirp.internal.twirptest.importable.Msg\x1a(.twirp.internal.twirptest.importable.MsgB\x0cZ\nimportableb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=64, serialized_end=161, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importer/importer.twirp.go b/internal/twirptest/importer/importer.twirp.go index e8f0e5ea..5d633cb5 100644 --- a/internal/twirptest/importer/importer.twirp.go +++ b/internal/twirptest/importer/importer.twirp.go @@ -312,7 +312,7 @@ func (s *svc2Server) serveSendJSON(ctx context.Context, resp http.ResponseWriter if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -368,7 +368,7 @@ func (s *svc2Server) serveSendProtobuf(ctx context.Context, resp http.ResponseWr if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/importer/importer_pb2.py b/internal/twirptest/importer/importer_pb2.py index cb5670a3..34e92317 100644 --- a/internal/twirptest/importer/importer_pb2.py +++ b/internal/twirptest/importer/importer_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: importer.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importer', syntax='proto3', serialized_options=b'Z\010importer', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0eimporter.proto\x12!twirp.internal.twirptest.importer\x1aHgithub.com/twitchtv/twirp/internal/twirptest/importable/importable.proto2b\n\x04Svc2\x12Z\n\x04Send\x12(.twirp.internal.twirptest.importable.Msg\x1a(.twirp.internal.twirptest.importable.MsgB\nZ\x08importerb\x06proto3' , dependencies=[github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=127, serialized_end=225, methods=[ @@ -47,6 +49,7 @@ input_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2._MSG, output_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/importer_local/importer_local.twirp.go b/internal/twirptest/importer_local/importer_local.twirp.go index e7e80fe4..148e1909 100644 --- a/internal/twirptest/importer_local/importer_local.twirp.go +++ b/internal/twirptest/importer_local/importer_local.twirp.go @@ -307,7 +307,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -363,7 +363,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/importer_local/importer_local_msgdef_pb2.py b/internal/twirptest/importer_local/importer_local_msgdef_pb2.py index b4c115f8..d37319a6 100644 --- a/internal/twirptest/importer_local/importer_local_msgdef_pb2.py +++ b/internal/twirptest/importer_local/importer_local_msgdef_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: importer_local_msgdef.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importer_local', syntax='proto3', serialized_options=b'Z;github.com/twitchtv/twirp/internal/twirptest/importer_local', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1bimporter_local_msgdef.proto\x12\'twirp.internal.twirptest.importer_local\"\x05\n\x03MsgB=Z;github.com/twitchtv/twirp/internal/twirptest/importer_localb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ diff --git a/internal/twirptest/importer_local/importer_local_pb2.py b/internal/twirptest/importer_local/importer_local_pb2.py index 6404c952..2aab0226 100644 --- a/internal/twirptest/importer_local/importer_local_pb2.py +++ b/internal/twirptest/importer_local/importer_local_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: importer_local.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importer_local', syntax='proto3', serialized_options=b'Z;github.com/twitchtv/twirp/internal/twirptest/importer_local', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x14importer_local.proto\x12\'twirp.internal.twirptest.importer_local\x1a\x1bimporter_local_msgdef.proto2i\n\x03Svc\x12\x62\n\x04Send\x12,.twirp.internal.twirptest.importer_local.Msg\x1a,.twirp.internal.twirptest.importer_local.MsgB=Z;github.com/twitchtv/twirp/internal/twirptest/importer_localb\x06proto3' , dependencies=[importer__local__msgdef__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=94, serialized_end=199, methods=[ @@ -47,6 +49,7 @@ input_type=importer__local__msgdef__pb2._MSG, output_type=importer__local__msgdef__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importmapping/x/x.twirp.go b/internal/twirptest/importmapping/x/x.twirp.go index 34a91966..96da2502 100644 --- a/internal/twirptest/importmapping/x/x.twirp.go +++ b/internal/twirptest/importmapping/x/x.twirp.go @@ -309,7 +309,7 @@ func (s *svc1Server) serveSendJSON(ctx context.Context, resp http.ResponseWriter if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -365,7 +365,7 @@ func (s *svc1Server) serveSendProtobuf(ctx context.Context, resp http.ResponseWr if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/importmapping/x/x_pb2.py b/internal/twirptest/importmapping/x/x_pb2.py index 452fad75..02dc9886 100644 --- a/internal/twirptest/importmapping/x/x_pb2.py +++ b/internal/twirptest/importmapping/x/x_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: x/x.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importmapping.x', syntax='proto3', serialized_options=b'Z\001x', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\tx/x.proto\x12(twirp.internal.twirptest.importmapping.x\x1a\ty/y.proto2n\n\x04Svc1\x12\x66\n\x04Send\x12..twirp.internal.twirptest.importmapping.y.MsgY\x1a..twirp.internal.twirptest.importmapping.y.MsgYB\x03Z\x01xb\x06proto3' , dependencies=[y_dot_y__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=66, serialized_end=176, methods=[ @@ -47,6 +49,7 @@ input_type=y_dot_y__pb2._MSGY, output_type=y_dot_y__pb2._MSGY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC1) diff --git a/internal/twirptest/importmapping/y/y_pb2.py b/internal/twirptest/importmapping/y/y_pb2.py index f037d0d2..f898bfca 100644 --- a/internal/twirptest/importmapping/y/y_pb2.py +++ b/internal/twirptest/importmapping/y/y_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: y/y.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importmapping.y', syntax='proto3', serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\ty/y.proto\x12(twirp.internal.twirptest.importmapping.y\"\x06\n\x04MsgYb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ diff --git a/internal/twirptest/multiple/multiple1.twirp.go b/internal/twirptest/multiple/multiple1.twirp.go index d4ac0b14..4a3f4083 100644 --- a/internal/twirptest/multiple/multiple1.twirp.go +++ b/internal/twirptest/multiple/multiple1.twirp.go @@ -311,7 +311,7 @@ func (s *svc1Server) serveSendJSON(ctx context.Context, resp http.ResponseWriter if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -367,7 +367,7 @@ func (s *svc1Server) serveSendProtobuf(ctx context.Context, resp http.ResponseWr if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/multiple/multiple1_pb2.py b/internal/twirptest/multiple/multiple1_pb2.py index 956e442b..e9fc157f 100644 --- a/internal/twirptest/multiple/multiple1_pb2.py +++ b/internal/twirptest/multiple/multiple1_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: multiple1.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.multiple', syntax='proto3', serialized_options=b'Z\010multiple', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0fmultiple1.proto\x12!twirp.internal.twirptest.multiple\"\x06\n\x04Msg12`\n\x04Svc1\x12X\n\x04Send\x12\'.twirp.internal.twirptest.multiple.Msg1\x1a\'.twirp.internal.twirptest.multiple.Msg1B\nZ\x08multipleb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=62, serialized_end=158, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG1, output_type=_MSG1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC1) diff --git a/internal/twirptest/multiple/multiple2.twirp.go b/internal/twirptest/multiple/multiple2.twirp.go index bec2d0ce..a45465a5 100644 --- a/internal/twirptest/multiple/multiple2.twirp.go +++ b/internal/twirptest/multiple/multiple2.twirp.go @@ -341,7 +341,7 @@ func (s *svc2Server) serveSendJSON(ctx context.Context, resp http.ResponseWriter if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -397,7 +397,7 @@ func (s *svc2Server) serveSendProtobuf(ctx context.Context, resp http.ResponseWr if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -470,7 +470,7 @@ func (s *svc2Server) serveSamePackageProtoImportJSON(ctx context.Context, resp h if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -526,7 +526,7 @@ func (s *svc2Server) serveSamePackageProtoImportProtobuf(ctx context.Context, re if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/multiple/multiple2_pb2.py b/internal/twirptest/multiple/multiple2_pb2.py index 408cdf0d..4de8b334 100644 --- a/internal/twirptest/multiple/multiple2_pb2.py +++ b/internal/twirptest/multiple/multiple2_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: multiple2.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.multiple', syntax='proto3', serialized_options=b'Z\010multiple', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0fmultiple2.proto\x12!twirp.internal.twirptest.multiple\x1a\x0fmultiple1.proto\"\x06\n\x04Msg22\xcc\x01\n\x04Svc2\x12X\n\x04Send\x12\'.twirp.internal.twirptest.multiple.Msg2\x1a\'.twirp.internal.twirptest.multiple.Msg2\x12j\n\x16SamePackageProtoImport\x12\'.twirp.internal.twirptest.multiple.Msg1\x1a\'.twirp.internal.twirptest.multiple.Msg1B\nZ\x08multipleb\x06proto3' , dependencies=[multiple1__pb2.DESCRIPTOR,]) @@ -32,6 +33,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -68,6 +70,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=80, serialized_end=284, methods=[ @@ -79,6 +82,7 @@ input_type=_MSG2, output_type=_MSG2, serialized_options=None, + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name='SamePackageProtoImport', @@ -88,6 +92,7 @@ input_type=multiple1__pb2._MSG1, output_type=multiple1__pb2._MSG1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/no_package_name/no_package_name.twirp.go b/internal/twirptest/no_package_name/no_package_name.twirp.go index b333894c..c1cb3675 100644 --- a/internal/twirptest/no_package_name/no_package_name.twirp.go +++ b/internal/twirptest/no_package_name/no_package_name.twirp.go @@ -307,7 +307,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -363,7 +363,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/no_package_name/no_package_name_pb2.py b/internal/twirptest/no_package_name/no_package_name_pb2.py index 9250af2c..b982bcc2 100644 --- a/internal/twirptest/no_package_name/no_package_name_pb2.py +++ b/internal/twirptest/no_package_name/no_package_name_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: no_package_name.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='', syntax='proto3', serialized_options=b'Z\017no_package_name', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x15no_package_name.proto\"\x05\n\x03Msg2\x19\n\x03Svc\x12\x12\n\x04Send\x12\x04.Msg\x1a\x04.MsgB\x11Z\x0fno_package_nameb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=32, serialized_end=57, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/no_package_name_importer/no_package_name_importer.twirp.go b/internal/twirptest/no_package_name_importer/no_package_name_importer.twirp.go index 149e261c..ba610f6c 100644 --- a/internal/twirptest/no_package_name_importer/no_package_name_importer.twirp.go +++ b/internal/twirptest/no_package_name_importer/no_package_name_importer.twirp.go @@ -309,7 +309,7 @@ func (s *svc2Server) serveMethodJSON(ctx context.Context, resp http.ResponseWrit if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -365,7 +365,7 @@ func (s *svc2Server) serveMethodProtobuf(ctx context.Context, resp http.Response if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py b/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py index d05a2e33..5d4003bc 100644 --- a/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py +++ b/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: no_package_name_importer.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -19,6 +19,7 @@ package='', syntax='proto3', serialized_options=b'Z\030no_package_name_importer', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1eno_package_name_importer.proto\x1aRgithub.com/twitchtv/twirp/internal/twirptest/no_package_name/no_package_name.proto2\x1c\n\x04Svc2\x12\x14\n\x06Method\x12\x04.Msg\x1a\x04.MsgB\x1aZ\x18no_package_name_importerb\x06proto3' , dependencies=[github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=118, serialized_end=146, methods=[ @@ -47,6 +49,7 @@ input_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2._MSG, output_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/proto/proto.twirp.go b/internal/twirptest/proto/proto.twirp.go index 43e778ef..816e4c07 100644 --- a/internal/twirptest/proto/proto.twirp.go +++ b/internal/twirptest/proto/proto.twirp.go @@ -310,7 +310,7 @@ func (s *svcServer) serveSendJSON(ctx context.Context, resp http.ResponseWriter, if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -366,7 +366,7 @@ func (s *svcServer) serveSendProtobuf(ctx context.Context, resp http.ResponseWri if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/proto/proto_pb2.py b/internal/twirptest/proto/proto_pb2.py index 2baacaf3..e5781271 100644 --- a/internal/twirptest/proto/proto_pb2.py +++ b/internal/twirptest/proto/proto_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: proto.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.proto', syntax='proto3', serialized_options=b'Z\005proto', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0bproto.proto\x12\x1etwirp.internal.twirptest.proto\"\x05\n\x03Msg2W\n\x03Svc\x12P\n\x04Send\x12#.twirp.internal.twirptest.proto.Msg\x1a#.twirp.internal.twirptest.proto.MsgB\x07Z\x05protob\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=54, serialized_end=141, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/service.twirp.go b/internal/twirptest/service.twirp.go index 12df6467..545cee2e 100644 --- a/internal/twirptest/service.twirp.go +++ b/internal/twirptest/service.twirp.go @@ -309,7 +309,7 @@ func (s *haberdasherServer) serveMakeHatJSON(ctx context.Context, resp http.Resp if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -365,7 +365,7 @@ func (s *haberdasherServer) serveMakeHatProtobuf(ctx context.Context, resp http. if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/service_method_same_name/service_method_same_name.twirp.go b/internal/twirptest/service_method_same_name/service_method_same_name.twirp.go index 231d9425..22539b4d 100644 --- a/internal/twirptest/service_method_same_name/service_method_same_name.twirp.go +++ b/internal/twirptest/service_method_same_name/service_method_same_name.twirp.go @@ -307,7 +307,7 @@ func (s *echoServer) serveEchoJSON(ctx context.Context, resp http.ResponseWriter if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -363,7 +363,7 @@ func (s *echoServer) serveEchoProtobuf(ctx context.Context, resp http.ResponseWr if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py b/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py index 73b6fecb..5978dd7f 100644 --- a/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py +++ b/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: service_method_same_name.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='', syntax='proto3', serialized_options=b'Z\030service_method_same_name', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1eservice_method_same_name.proto\"\x05\n\x03Msg2\x1c\n\x04\x45\x63ho\x12\x14\n\x04\x45\x63ho\x12\x04.Msg\x1a\x04.Msg\"\x00\x42\x1aZ\x18service_method_same_nameb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=41, serialized_end=69, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_ECHO) diff --git a/internal/twirptest/service_pb2.py b/internal/twirptest/service_pb2.py index 2b3b592f..2f638e95 100644 --- a/internal/twirptest/service_pb2.py +++ b/internal/twirptest/service_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: service.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest', syntax='proto3', serialized_options=b'Z\ttwirptest', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\x18twirp.internal.twirptest\"0\n\x03Hat\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x16\n\x04Size\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32W\n\x0bHaberdasher\x12H\n\x07MakeHat\x12\x1e.twirp.internal.twirptest.Size\x1a\x1d.twirp.internal.twirptest.HatB\x0bZ\ttwirptestb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twirp.internal.twirptest.Hat.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twirp.internal.twirptest.Hat.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twirp.internal.twirptest.Hat.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -75,6 +77,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twirp.internal.twirptest.Size.inches', index=0, @@ -82,7 +85,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -126,6 +129,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=117, serialized_end=204, methods=[ @@ -137,6 +141,7 @@ input_type=_SIZE, output_type=_HAT, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_HABERDASHER) diff --git a/internal/twirptest/snake_case_names/compatibility_test.go b/internal/twirptest/snake_case_names/compatibility_test.go new file mode 100644 index 00000000..cea9fcdf --- /dev/null +++ b/internal/twirptest/snake_case_names/compatibility_test.go @@ -0,0 +1,76 @@ +// Copyright 2019 Twitch Interactive, Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may not +// use this file except in compliance with the License. A copy of the License is +// located at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// or in the "license" file accompanying this file. This file is distributed on +// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +package snake_case_names + +import ( + context "context" + http "net/http" + "net/http/httptest" + "testing" +) + +type HaberdasherService struct{} + +func (h *HaberdasherService) MakeHatV1(ctx context.Context, s *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { + return &MakeHatArgsV1_HatV1{ + Size: s.Inches, + }, nil +} + +// When the proto definition contains service and/or method names with underscores (not following proto naming +// best practices), Go clients will mistakenly convert routes into it's CamelCased versions, but clients in other +// languages may keep the literal casing of the routes. This test makes a go client that would send CamelCased routes +// and checks that the generated Go server remains backwards compatible and is able to handle those routes. +func TestServiceMethodNamesCamelCase(t *testing.T) { + s := httptest.NewServer(NewHaberdasherV1Server(&HaberdasherService{}, nil)) + defer s.Close() + + client := NewHaberdasherV1ProtobufClient(s.URL, http.DefaultClient) + + hat, err := client.MakeHatV1(context.Background(), &MakeHatArgsV1_SizeV1{Inches: 1}) + if err != nil { + t.Fatalf("go protobuf client err=%q", err) + } + if hat.Size != 1 { + t.Errorf("wrong hat size returned") + } +} + +type compatibilityTestClient struct { + client *http.Client +} + +func (t compatibilityTestClient) Do(req *http.Request) (*http.Response, error) { + req.URL.Path = "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher_v1/MakeHat_v1" + return t.client.Do(req) +} + +// When the proto definition contains service and/or method names with underscores (not following proto naming +// best practices), Go clients will mistakenly convert routes into it's CamelCased versions, but clients in other +// languages may keep the literal casing of the routes. This test makes a fake client that would send literal routes +// and checks that the generated Go server is still able to handle those routes. +func TestServiceMethodNamesUnderscores(t *testing.T) { + s := httptest.NewServer(NewHaberdasherV1Server(&HaberdasherService{}, nil)) + defer s.Close() + + client := NewHaberdasherV1ProtobufClient(s.URL, compatibilityTestClient{client: http.DefaultClient}) + hat, err := client.MakeHatV1(context.Background(), &MakeHatArgsV1_SizeV1{Inches: 1}) + if err != nil { + t.Fatalf("compatible protobuf client err=%q", err) + } + if hat.Size != 1 { + t.Errorf("wrong hat size returned") + } + +} diff --git a/internal/twirptest/snake_case_names/snake_case_names.pb.go b/internal/twirptest/snake_case_names/snake_case_names.pb.go index c2aa46dd..87979454 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.pb.go +++ b/internal/twirptest/snake_case_names/snake_case_names.pb.go @@ -157,7 +157,7 @@ func init() { func init() { proto.RegisterFile("snake_case_names.proto", fileDescriptor_c768f27eb22a6056) } var fileDescriptor_c768f27eb22a6056 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto + // 225 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2b, 0xce, 0x4b, 0xcc, 0x4e, 0x8d, 0x4f, 0x4e, 0x2c, 0x4e, 0x8d, 0xcf, 0x4b, 0xcc, 0x4d, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xd2, 0x2c, 0x29, 0xcf, 0x2c, 0x2a, 0xd0, 0xcb, 0xcc, 0x2b, 0x49, 0x2d, 0xca, @@ -167,9 +167,10 @@ var fileDescriptor_c768f27eb22a6056 = []byte{ 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0xc9, 0xf9, 0x39, 0xf9, 0x45, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x10, 0x0e, 0x48, 0x25, 0xc8, 0x38, 0x09, 0x66, 0xb0, 0x20, 0x98, 0x2d, 0xa5, 0xc8, 0xc5, 0x1e, 0x9c, 0x59, 0x95, 0x0a, 0x32, 0x48, 0x8c, - 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x90, 0x91, 0x8b, - 0xdb, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x48, 0x68, 0x22, 0x23, 0x17, - 0x17, 0xd4, 0x35, 0x20, 0x6d, 0x8e, 0x7a, 0x44, 0xfb, 0x43, 0x0f, 0xd5, 0x13, 0x7a, 0x50, 0x9b, - 0xa5, 0x1c, 0xc8, 0x37, 0x02, 0xe2, 0x08, 0x27, 0xa1, 0x28, 0x01, 0x74, 0x95, 0x49, 0x6c, 0xe0, - 0x60, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x7b, 0xaf, 0xa9, 0x80, 0x01, 0x00, 0x00, + 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x84, 0x91, 0x8b, + 0xcf, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x08, 0xa4, 0x74, 0x22, 0x23, + 0x17, 0x17, 0xd4, 0x41, 0x20, 0xae, 0xa3, 0x1e, 0xd1, 0x5e, 0xd1, 0x43, 0xf5, 0x87, 0x1e, 0xd4, + 0x72, 0x29, 0x07, 0xf2, 0x8d, 0x80, 0x38, 0xc2, 0x49, 0x28, 0x4a, 0x00, 0x5d, 0x65, 0x12, 0x1b, + 0x38, 0xa4, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xa6, 0x01, 0xae, 0x83, 0x01, 0x00, + 0x00, } diff --git a/internal/twirptest/snake_case_names/snake_case_names.proto b/internal/twirptest/snake_case_names/snake_case_names.proto index 02359a7d..b6c98d7a 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.proto +++ b/internal/twirptest/snake_case_names/snake_case_names.proto @@ -18,6 +18,6 @@ message MakeHatArgs_v1 { } // A Haberdasher makes hats for clients. -service Haberdasher { +service Haberdasher_v1 { rpc MakeHat_v1 (MakeHatArgs_v1.Size_v1) returns (MakeHatArgs_v1.Hat_v1); } diff --git a/internal/twirptest/snake_case_names/snake_case_names.twirp.go b/internal/twirptest/snake_case_names/snake_case_names.twirp.go index ac0b3a5e..c0ec178e 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.twirp.go +++ b/internal/twirptest/snake_case_names/snake_case_names.twirp.go @@ -33,28 +33,28 @@ import json "encoding/json" import path "path" import url "net/url" -// ===================== -// Haberdasher Interface -// ===================== +// ======================= +// HaberdasherV1 Interface +// ======================= // A Haberdasher makes hats for clients. -type Haberdasher interface { +type HaberdasherV1 interface { MakeHatV1(context.Context, *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) } -// =========================== -// Haberdasher Protobuf Client -// =========================== +// ============================= +// HaberdasherV1 Protobuf Client +// ============================= -type haberdasherProtobufClient struct { +type haberdasherV1ProtobufClient struct { client HTTPClient urls [1]string opts twirp.ClientOptions } -// NewHaberdasherProtobufClient creates a Protobuf client that implements the Haberdasher interface. +// NewHaberdasherV1ProtobufClient creates a Protobuf client that implements the HaberdasherV1 interface. // It communicates using Protobuf and can be configured with a custom HTTPClient. -func NewHaberdasherProtobufClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) Haberdasher { +func NewHaberdasherV1ProtobufClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) HaberdasherV1 { if c, ok := client.(*http.Client); ok { client = withoutRedirects(c) } @@ -66,21 +66,21 @@ func NewHaberdasherProtobufClient(baseURL string, client HTTPClient, opts ...twi // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) - serviceURL += baseServicePath(clientOpts.PathPrefix(), "twirp.internal.twirptest.snake_case_names", "Haberdasher") + serviceURL += baseServicePath(clientOpts.PathPrefix(), "twirp.internal.twirptest.snake_case_names", "HaberdasherV1") urls := [1]string{ serviceURL + "MakeHatV1", } - return &haberdasherProtobufClient{ + return &haberdasherV1ProtobufClient{ client: client, urls: urls, opts: clientOpts, } } -func (c *haberdasherProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { +func (c *haberdasherV1ProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") out := new(MakeHatArgsV1_HatV1) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) @@ -98,19 +98,19 @@ func (c *haberdasherProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatAr return out, nil } -// ======================= -// Haberdasher JSON Client -// ======================= +// ========================= +// HaberdasherV1 JSON Client +// ========================= -type haberdasherJSONClient struct { +type haberdasherV1JSONClient struct { client HTTPClient urls [1]string opts twirp.ClientOptions } -// NewHaberdasherJSONClient creates a JSON client that implements the Haberdasher interface. +// NewHaberdasherV1JSONClient creates a JSON client that implements the HaberdasherV1 interface. // It communicates using JSON and can be configured with a custom HTTPClient. -func NewHaberdasherJSONClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) Haberdasher { +func NewHaberdasherV1JSONClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) HaberdasherV1 { if c, ok := client.(*http.Client); ok { client = withoutRedirects(c) } @@ -122,21 +122,21 @@ func NewHaberdasherJSONClient(baseURL string, client HTTPClient, opts ...twirp.C // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) - serviceURL += baseServicePath(clientOpts.PathPrefix(), "twirp.internal.twirptest.snake_case_names", "Haberdasher") + serviceURL += baseServicePath(clientOpts.PathPrefix(), "twirp.internal.twirptest.snake_case_names", "HaberdasherV1") urls := [1]string{ serviceURL + "MakeHatV1", } - return &haberdasherJSONClient{ + return &haberdasherV1JSONClient{ client: client, urls: urls, opts: clientOpts, } } -func (c *haberdasherJSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { +func (c *haberdasherV1JSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") out := new(MakeHatArgsV1_HatV1) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) @@ -154,20 +154,20 @@ func (c *haberdasherJSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1 return out, nil } -// ========================== -// Haberdasher Server Handler -// ========================== +// ============================ +// HaberdasherV1 Server Handler +// ============================ -type haberdasherServer struct { - Haberdasher +type haberdasherV1Server struct { + HaberdasherV1 hooks *twirp.ServerHooks pathPrefix string // prefix for routing } -// NewHaberdasherServer builds a TwirpServer that can be used as an http.Handler to handle +// NewHaberdasherV1Server builds a TwirpServer that can be used as an http.Handler to handle // HTTP requests that are routed to the right method in the provided svc implementation. // The opts are twirp.ServerOption modifiers, for example twirp.WithServerHooks(hooks). -func NewHaberdasherServer(svc Haberdasher, opts ...interface{}) TwirpServer { +func NewHaberdasherV1Server(svc HaberdasherV1, opts ...interface{}) TwirpServer { serverOpts := twirp.ServerOptions{} for _, opt := range opts { switch o := opt.(type) { @@ -178,33 +178,33 @@ func NewHaberdasherServer(svc Haberdasher, opts ...interface{}) TwirpServer { case nil: // backwards compatibility, allow nil value for the argument continue default: - panic(fmt.Sprintf("Invalid option type %T on NewHaberdasherServer", o)) + panic(fmt.Sprintf("Invalid option type %T on NewHaberdasherV1Server", o)) } } - return &haberdasherServer{ - Haberdasher: svc, - pathPrefix: serverOpts.PathPrefix(), - hooks: serverOpts.Hooks, + return &haberdasherV1Server{ + HaberdasherV1: svc, + pathPrefix: serverOpts.PathPrefix(), + hooks: serverOpts.Hooks, } } // writeError writes an HTTP response with a valid Twirp error format, and triggers hooks. // If err is not a twirp.Error, it will get wrapped with twirp.InternalErrorWith(err) -func (s *haberdasherServer) writeError(ctx context.Context, resp http.ResponseWriter, err error) { +func (s *haberdasherV1Server) writeError(ctx context.Context, resp http.ResponseWriter, err error) { writeError(ctx, resp, err, s.hooks) } -// HaberdasherPathPrefix is a convenience constant that could used to identify URL paths. +// HaberdasherV1PathPrefix is a convenience constant that could used to identify URL paths. // Should be used with caution, it only matches routes generated by Twirp Go clients, // that add a "/twirp" prefix by default, and use CamelCase service and method names. // More info: https://twitchtv.github.io/twirp/docs/routing.html -const HaberdasherPathPrefix = "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher/" +const HaberdasherV1PathPrefix = "/twirp/twirp.internal.twirptest.snake_case_names.HaberdasherV1/" -func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) ServeHTTP(resp http.ResponseWriter, req *http.Request) { ctx := req.Context() ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithResponseWriter(ctx, resp) var err error @@ -222,7 +222,7 @@ func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques // Verify path format: []/./ prefix, pkgService, method := parseTwirpPath(req.URL.Path) - if pkgService != "twirp.internal.twirptest.snake_case_names.Haberdasher" { + if pkgService != "twirp.internal.twirptest.snake_case_names.Haberdasher_v1" && pkgService != "twirp.internal.twirptest.snake_case_names.HaberdasherV1" { msg := fmt.Sprintf("no handler for path %q", req.URL.Path) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) return @@ -234,7 +234,7 @@ func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques } switch method { - case "MakeHatV1": + case "MakeHat_v1", "MakeHatV1": s.serveMakeHatV1(ctx, resp, req) return default: @@ -244,7 +244,7 @@ func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques } } -func (s *haberdasherServer) serveMakeHatV1(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -262,7 +262,7 @@ func (s *haberdasherServer) serveMakeHatV1(ctx context.Context, resp http.Respon } } -func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1JSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") ctx, err = callRequestRouted(ctx, s.hooks) @@ -282,7 +282,7 @@ func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.Re var respContent *MakeHatArgsV1_HatV1 func() { defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = s.Haberdasher.MakeHatV1(ctx, reqContent) + respContent, err = s.HaberdasherV1.MakeHatV1(ctx, reqContent) }() if err != nil { @@ -312,12 +312,12 @@ func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.Re if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } -func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1Protobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") ctx, err = callRequestRouted(ctx, s.hooks) @@ -341,7 +341,7 @@ func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp htt var respContent *MakeHatArgsV1_HatV1 func() { defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = s.Haberdasher.MakeHatV1(ctx, reqContent) + respContent, err = s.HaberdasherV1.MakeHatV1(ctx, reqContent) }() if err != nil { @@ -368,24 +368,24 @@ func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp htt if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } -func (s *haberdasherServer) ServiceDescriptor() ([]byte, int) { +func (s *haberdasherV1Server) ServiceDescriptor() ([]byte, int) { return twirpFileDescriptor0, 0 } -func (s *haberdasherServer) ProtocGenTwirpVersion() string { +func (s *haberdasherV1Server) ProtocGenTwirpVersion() string { return "v5.12.1" } // PathPrefix returns the base service path, in the form: "//./" // that is everything in a Twirp route except for the . This can be used for routing, // for example to identify the requests that are targeted to this service in a mux. -func (s *haberdasherServer) PathPrefix() string { - return baseServicePath(s.pathPrefix, "twirp.internal.twirptest.snake_case_names", "Haberdasher") +func (s *haberdasherV1Server) PathPrefix() string { + return baseServicePath(s.pathPrefix, "twirp.internal.twirptest.snake_case_names", "HaberdasherV1") } // ===== @@ -933,7 +933,7 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto + // 225 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2b, 0xce, 0x4b, 0xcc, 0x4e, 0x8d, 0x4f, 0x4e, 0x2c, 0x4e, 0x8d, 0xcf, 0x4b, 0xcc, 0x4d, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xd2, 0x2c, 0x29, 0xcf, 0x2c, 0x2a, 0xd0, 0xcb, 0xcc, 0x2b, 0x49, 0x2d, 0xca, @@ -943,9 +943,10 @@ var twirpFileDescriptor0 = []byte{ 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0xc9, 0xf9, 0x39, 0xf9, 0x45, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x10, 0x0e, 0x48, 0x25, 0xc8, 0x38, 0x09, 0x66, 0xb0, 0x20, 0x98, 0x2d, 0xa5, 0xc8, 0xc5, 0x1e, 0x9c, 0x59, 0x95, 0x0a, 0x32, 0x48, 0x8c, - 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x90, 0x91, 0x8b, - 0xdb, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x48, 0x68, 0x22, 0x23, 0x17, - 0x17, 0xd4, 0x35, 0x20, 0x6d, 0x8e, 0x7a, 0x44, 0xfb, 0x43, 0x0f, 0xd5, 0x13, 0x7a, 0x50, 0x9b, - 0xa5, 0x1c, 0xc8, 0x37, 0x02, 0xe2, 0x08, 0x27, 0xa1, 0x28, 0x01, 0x74, 0x95, 0x49, 0x6c, 0xe0, - 0x60, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x7b, 0xaf, 0xa9, 0x80, 0x01, 0x00, 0x00, + 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x84, 0x91, 0x8b, + 0xcf, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x08, 0xa4, 0x74, 0x22, 0x23, + 0x17, 0x17, 0xd4, 0x41, 0x20, 0xae, 0xa3, 0x1e, 0xd1, 0x5e, 0xd1, 0x43, 0xf5, 0x87, 0x1e, 0xd4, + 0x72, 0x29, 0x07, 0xf2, 0x8d, 0x80, 0x38, 0xc2, 0x49, 0x28, 0x4a, 0x00, 0x5d, 0x65, 0x12, 0x1b, + 0x38, 0xa4, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xa6, 0x01, 0xae, 0x83, 0x01, 0x00, + 0x00, } diff --git a/internal/twirptest/snake_case_names/snake_case_names_pb2.py b/internal/twirptest/snake_case_names/snake_case_names_pb2.py index 49561fff..31aef1ce 100644 --- a/internal/twirptest/snake_case_names/snake_case_names_pb2.py +++ b/internal/twirptest/snake_case_names/snake_case_names_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: snake_case_names.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,7 +18,8 @@ package='twirp.internal.twirptest.snake_case_names', syntax='proto3', serialized_options=b'Z\020snake_case_names', - serialized_pb=b'\n\x16snake_case_names.proto\x12)twirp.internal.twirptest.snake_case_names\"`\n\x0eMakeHatArgs_v1\x1a\x33\n\x06Hat_v1\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x1a\x19\n\x07Size_v1\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32\xa1\x01\n\x0bHaberdasher\x12\x91\x01\n\nMakeHat_v1\x12\x41.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1\x1a@.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1B\x12Z\x10snake_case_namesb\x06proto3' + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x16snake_case_names.proto\x12)twirp.internal.twirptest.snake_case_names\"`\n\x0eMakeHatArgs_v1\x1a\x33\n\x06Hat_v1\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x1a\x19\n\x07Size_v1\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32\xa4\x01\n\x0eHaberdasher_v1\x12\x91\x01\n\nMakeHat_v1\x12\x41.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1\x1a@.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1B\x12Z\x10snake_case_namesb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -74,6 +76,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1.inches', index=0, @@ -81,7 +84,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -104,6 +107,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -152,27 +156,29 @@ DESCRIPTOR._options = None -_HABERDASHER = _descriptor.ServiceDescriptor( - name='Haberdasher', - full_name='twirp.internal.twirptest.snake_case_names.Haberdasher', +_HABERDASHER_V1 = _descriptor.ServiceDescriptor( + name='Haberdasher_v1', + full_name='twirp.internal.twirptest.snake_case_names.Haberdasher_v1', file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=168, - serialized_end=329, + serialized_end=332, methods=[ _descriptor.MethodDescriptor( name='MakeHat_v1', - full_name='twirp.internal.twirptest.snake_case_names.Haberdasher.MakeHat_v1', + full_name='twirp.internal.twirptest.snake_case_names.Haberdasher_v1.MakeHat_v1', index=0, containing_service=None, input_type=_MAKEHATARGS_V1_SIZE_V1, output_type=_MAKEHATARGS_V1_HAT_V1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) -_sym_db.RegisterServiceDescriptor(_HABERDASHER) +_sym_db.RegisterServiceDescriptor(_HABERDASHER_V1) -DESCRIPTOR.services_by_name['Haberdasher'] = _HABERDASHER +DESCRIPTOR.services_by_name['Haberdasher_v1'] = _HABERDASHER_V1 # @@protoc_insertion_point(module_scope) diff --git a/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py b/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py index 5db323af..0b3c94c6 100644 --- a/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py +++ b/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py @@ -38,13 +38,13 @@ def from_http_err(cls, err): meta = {} return cls(code, msg, meta) -class HaberdasherClient(object): +class HaberdasherV1Client(object): """ A Haberdasher makes hats for clients. """ def __init__(self, server_address): - """Creates a new client for the Haberdasher service. + """Creates a new client for the HaberdasherV1 service. Args: server_address: The address of the server to send requests to, in @@ -54,7 +54,7 @@ def __init__(self, server_address): self.__target = server_address else: self.__target = server_address.encode('ascii') - self.__service_name = "twirp.internal.twirptest.snake_case_names.Haberdasher" + self.__service_name = "twirp.internal.twirptest.snake_case_names.HaberdasherV1" def __make_request(self, body, full_method): req = Request( diff --git a/internal/twirptest/source_relative/source_relative.twirp.go b/internal/twirptest/source_relative/source_relative.twirp.go index bb713851..6972cde9 100644 --- a/internal/twirptest/source_relative/source_relative.twirp.go +++ b/internal/twirptest/source_relative/source_relative.twirp.go @@ -307,7 +307,7 @@ func (s *svcServer) serveMethodJSON(ctx context.Context, resp http.ResponseWrite if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } @@ -363,7 +363,7 @@ func (s *svcServer) serveMethodProtobuf(ctx context.Context, resp http.ResponseW if n, err := resp.Write(respBytes); err != nil { msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) twerr := twirp.NewError(twirp.Unknown, msg) - callError(ctx, s.hooks, twerr) + ctx = callError(ctx, s.hooks, twerr) } callResponseSent(ctx, s.hooks) } diff --git a/internal/twirptest/source_relative/source_relative_pb2.py b/internal/twirptest/source_relative/source_relative_pb2.py index eaaa7a80..f692254a 100644 --- a/internal/twirptest/source_relative/source_relative_pb2.py +++ b/internal/twirptest/source_relative/source_relative_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: source_relative.proto - +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.source_relative', syntax='proto3', serialized_options=b'ZZ]/./`) t.P(` prefix, pkgService, method := parseTwirpPath(req.URL.Path)`) - t.P(` if pkgService != `, strconv.Quote(fullServiceName(file, service)), ` {`) + if pkgServNameLit == pkgServNameCc { + t.P(` if pkgService != `, strconv.Quote(pkgServNameLit), ` {`) + } else { // proto service name is not CamelCased, but need to support CamelCased routes for Go clients (https://github.com/twitchtv/twirp/pull/257) + t.P(` if pkgService != `, strconv.Quote(pkgServNameLit), ` && pkgService != `, strconv.Quote(pkgServNameCc), ` {`) + } t.P(` msg := `, t.pkgs["fmt"], `.Sprintf("no handler for path %q", req.URL.Path)`) t.P(` s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path))`) t.P(` return`) @@ -1147,10 +1153,15 @@ func (t *twirp) generateServerRouting(servStruct string, file *descriptor.FileDe t.P() t.P(` switch method {`) for _, method := range service.Method { - methSuffix := stringutils.CamelCase(method.GetName()) - methName := "serve" + stringutils.CamelCase(method.GetName()) - t.P(` case `, strconv.Quote(methSuffix), `:`) - t.P(` s.`, methName, `(ctx, resp, req)`) + methNameLit := methodNameLiteral(method) + methNameCc := methodNameCamelCased(method) + + if methNameCc == methNameLit { + t.P(` case `, strconv.Quote(methNameLit), `:`) + } else { // proto method name is not CamelCased, but need to support CamelCased routes for Go clients (https://github.com/twitchtv/twirp/pull/257) + t.P(` case `, strconv.Quote(methNameLit), `, `, strconv.Quote(methNameCc), `:`) + } + t.P(` s.serve`, methNameCc, `(ctx, resp, req)`) t.P(` return`) } t.P(` default:`) @@ -1163,7 +1174,7 @@ func (t *twirp) generateServerRouting(servStruct string, file *descriptor.FileDe } func (t *twirp) generateServerMethod(service *descriptor.ServiceDescriptorProto, method *descriptor.MethodDescriptorProto) { - methName := stringutils.CamelCase(method.GetName()) + methName := methodNameCamelCased(method) servStruct := serviceStruct(service) t.P(`func (s *`, servStruct, `) serve`, methName, `(ctx `, t.pkgs["context"], `.Context, resp `, t.pkgs["http"], `.ResponseWriter, req *`, t.pkgs["http"], `.Request) {`) t.P(` header := req.Header.Get("Content-Type")`) @@ -1189,8 +1200,8 @@ func (t *twirp) generateServerMethod(service *descriptor.ServiceDescriptorProto, func (t *twirp) generateServerJSONMethod(service *descriptor.ServiceDescriptorProto, method *descriptor.MethodDescriptorProto) { servStruct := serviceStruct(service) - methName := stringutils.CamelCase(method.GetName()) - servName := serviceName(service) + methName := methodNameCamelCased(method) + servName := serviceNameCamelCased(service) t.P(`func (s *`, servStruct, `) serve`, methName, `JSON(ctx `, t.pkgs["context"], `.Context, resp `, t.pkgs["http"], `.ResponseWriter, req *`, t.pkgs["http"], `.Request) {`) t.P(` var err error`) t.P(` ctx = `, t.pkgs["ctxsetters"], `.WithMethodName(ctx, "`, methName, `")`) @@ -1250,8 +1261,8 @@ func (t *twirp) generateServerJSONMethod(service *descriptor.ServiceDescriptorPr func (t *twirp) generateServerProtobufMethod(service *descriptor.ServiceDescriptorProto, method *descriptor.MethodDescriptorProto) { servStruct := serviceStruct(service) - methName := stringutils.CamelCase(method.GetName()) - servName := serviceName(service) + methName := methodNameCamelCased(method) + servName := serviceNameCamelCased(service) t.P(`func (s *`, servStruct, `) serve`, methName, `Protobuf(ctx `, t.pkgs["context"], `.Context, resp `, t.pkgs["http"], `.ResponseWriter, req *`, t.pkgs["http"], `.Request) {`) t.P(` var err error`) t.P(` ctx = `, t.pkgs["ctxsetters"], `.WithMethodName(ctx, "`, methName, `")`) @@ -1325,7 +1336,6 @@ func (t *twirp) serviceMetadataVarName() string { func (t *twirp) generateServiceMetadataAccessors(file *descriptor.FileDescriptorProto, service *descriptor.ServiceDescriptorProto) { servStruct := serviceStruct(service) servPkg := pkgName(file) - servName := serviceName(service) index := 0 for i, s := range file.Service { @@ -1345,6 +1355,7 @@ func (t *twirp) generateServiceMetadataAccessors(file *descriptor.FileDescriptor t.P(`// that is everything in a Twirp route except for the . This can be used for routing,`) t.P(`// for example to identify the requests that are targeted to this service in a mux.`) t.P(`func (s *`, servStruct, `) PathPrefix() (string) {`) + servName := serviceNameCamelCased(service) // it should be serviceNameLiteral(service), but needs to use CamelCase routes for backwards compatibility t.P(` return baseServicePath(s.pathPrefix, "`, servPkg, `", "`, servName, `") `) t.P(`}`) } @@ -1361,7 +1372,7 @@ func (t *twirp) generateFileDescriptor(file *descriptor.FileDescriptorProto) { var buf bytes.Buffer w, _ := gzip.NewWriterLevel(&buf, gzip.BestCompression) - w.Write(b) + _, _ = w.Write(b) w.Close() b = buf.Bytes() @@ -1451,30 +1462,46 @@ func (t *twirp) formattedOutput() string { func unexported(s string) string { return strings.ToLower(s[:1]) + s[1:] } -func fullServiceName(file *descriptor.FileDescriptorProto, service *descriptor.ServiceDescriptorProto) string { - name := stringutils.CamelCase(service.GetName()) +func pkgName(file *descriptor.FileDescriptorProto) string { + return file.GetPackage() +} + +func serviceNameCamelCased(service *descriptor.ServiceDescriptorProto) string { + return stringutils.CamelCase(service.GetName()) +} + +func serviceNameLiteral(service *descriptor.ServiceDescriptorProto) string { + return service.GetName() +} + +func pkgServiceNameCamelCased(file *descriptor.FileDescriptorProto, service *descriptor.ServiceDescriptorProto) string { + name := serviceNameCamelCased(service) if pkg := pkgName(file); pkg != "" { name = pkg + "." + name } return name } -func pkgName(file *descriptor.FileDescriptorProto) string { - return file.GetPackage() -} - -func serviceName(service *descriptor.ServiceDescriptorProto) string { - return stringutils.CamelCase(service.GetName()) +func pkgServiceNameLiteral(file *descriptor.FileDescriptorProto, service *descriptor.ServiceDescriptorProto) string { + name := serviceNameLiteral(service) + if pkg := pkgName(file); pkg != "" { + name = pkg + "." + name + } + return name } func serviceStruct(service *descriptor.ServiceDescriptorProto) string { - return unexported(serviceName(service)) + "Server" + return unexported(serviceNameCamelCased(service)) + "Server" } -func methodName(method *descriptor.MethodDescriptorProto) string { +func methodNameCamelCased(method *descriptor.MethodDescriptorProto) string { return stringutils.CamelCase(method.GetName()) } +func methodNameLiteral(method *descriptor.MethodDescriptorProto) string { + return method.GetName() +} + func fileDescSliceContains(slice []*descriptor.FileDescriptorProto, f *descriptor.FileDescriptorProto) bool { for _, sf := range slice { if f == sf {