From c81acb1faf2709c1faea2a50d5378c8dace47e9f Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 31 Jul 2018 16:20:24 -0400 Subject: [PATCH] Code generate Swift wrappers for protocol buffers. --- Scripts/ProtoWrappers.py | 24 ++++++++++++++----- .../src/Protos/Generated/SSKProto.swift | 8 +++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Scripts/ProtoWrappers.py b/Scripts/ProtoWrappers.py index df8842e29..070f778d7 100755 --- a/Scripts/ProtoWrappers.py +++ b/Scripts/ProtoWrappers.py @@ -18,6 +18,18 @@ def lowerCamlCaseForUnderscoredText(name): splits = [split.title() for split in splits] splits[0] = splits[0].lower() return ''.join(splits) + +# The generated code for "Apple Swift Protos" suppresses +# adjacent capital letters in lowerCamlCase. +def lowerCamlCaseForUnderscoredText_wrapped(name): + chars = [] + lastWasUpper = False + for char in name: + if lastWasUpper: + char = char.lower() + chars.append(char) + lastWasUpper = (char.upper() == char) + return ''.join(chars) class WriterContext: def __init__(self, proto_name, swift_name, parent=None): @@ -148,7 +160,7 @@ class BaseContext(object): return None - def base_swift_type_for_proto_type(self, field): + def base_swift_type_for_field(self, field): if field.proto_type == 'string': return 'String' @@ -170,8 +182,8 @@ class BaseContext(object): # Failure return field.proto_type - def swift_type_for_proto_type(self, field): - base_type = self.base_swift_type_for_proto_type(field) + def swift_type_for_field(self, field): + base_type = self.base_swift_type_for_field(field) if field.rules == 'optional': can_be_optional = self.can_field_be_optional(field) @@ -312,8 +324,8 @@ public enum %s: Error { # Prepare fields for field in self.fields(): - field.type_swift = self.swift_type_for_proto_type(field) - field.name_swift = field.name + field.type_swift = self.swift_type_for_field(field) + field.name_swift = lowerCamlCaseForUnderscoredText_wrapped(field.name) # Property Declarations for field in self.fields(): @@ -361,7 +373,7 @@ public func serializedData() throws -> Data { list_wrapped_swift_name = message_context.derive_wrapped_swift_name() else: # TODO: Assert not an enum. - list_wrapped_swift_name = self.base_swift_type_for_proto_type(field) + list_wrapped_swift_name = self.base_swift_type_for_field(field) writer.add('var %sUnwrapped = [%s]()' % (field.name_swift, list_wrapped_swift_name)) writer.add('for item in %s {' % (field.name_swift)) writer.push_indent() diff --git a/SignalServiceKit/src/Protos/Generated/SSKProto.swift b/SignalServiceKit/src/Protos/Generated/SSKProto.swift index 9583e43d5..47ea68977 100644 --- a/SignalServiceKit/src/Protos/Generated/SSKProto.swift +++ b/SignalServiceKit/src/Protos/Generated/SSKProto.swift @@ -221,13 +221,13 @@ import Foundation @objc public class SSKProtoCallMessage_IceUpdate: NSObject { @objc public let id: UInt64 - @objc public let sdpMLineIndex: UInt32 + @objc public let sdpMlineIndex: UInt32 @objc public let sdpMid: String? @objc public let sdp: String? - @objc public init(id: UInt64, sdpMLineIndex: UInt32, sdpMid: String?, sdp: String?) { + @objc public init(id: UInt64, sdpMlineIndex: UInt32, sdpMid: String?, sdp: String?) { self.id = id - self.sdpMLineIndex = sdpMLineIndex + self.sdpMlineIndex = sdpMlineIndex self.sdpMid = sdpMid self.sdp = sdp } @@ -241,7 +241,7 @@ import Foundation let proto = SignalServiceProtos_CallMessage.IceUpdate.with { (builder) in builder.id = self.id - builder.sdpMLineIndex = self.sdpMLineIndex + builder.sdpMlineIndex = self.sdpMlineIndex if let sdpMid = self.sdpMid { builder.sdpMid = sdpMid