From 0b67d06384a1cce9cff1d9959e9bb3d9d2112706 Mon Sep 17 00:00:00 2001 From: Nadav Samet Date: Wed, 6 May 2020 19:06:00 -0700 Subject: [PATCH] Update third_party protos to 3.12.2 --- build.sbt | 2 +- .../plugin/CodeGeneratorResponse.scala | 74 +++++++ .../compiler/plugin/PluginProto.scala | 14 +- .../protobuf/descriptor/DescriptorProto.scala | 5 + .../descriptor/DescriptorProtoCompanion.scala | 190 +++++++++--------- .../descriptor/FieldDescriptorProto.scala | 59 +++++- .../protobuf/descriptor/FileOptions.scala | 6 +- .../protobuf/descriptor/MessageOptions.scala | 2 +- .../protobuf/descriptor/SourceCodeInfo.scala | 2 +- .../google/protobuf/duration/Duration.scala | 2 +- .../protobuf/field_mask/FieldMask.scala | 2 +- .../google/protobuf/timestamp/Timestamp.scala | 10 +- .../plugin/CodeGeneratorResponse.scala | 67 ++++++ .../compiler/plugin/PluginProto.scala | 14 +- .../protobuf/descriptor/DescriptorProto.scala | 5 + .../descriptor/DescriptorProtoCompanion.scala | 190 +++++++++--------- .../descriptor/FieldDescriptorProto.scala | 55 ++++- .../protobuf/descriptor/FileOptions.scala | 6 +- .../protobuf/descriptor/MessageOptions.scala | 2 +- .../protobuf/descriptor/SourceCodeInfo.scala | 2 +- .../google/protobuf/duration/Duration.scala | 2 +- .../protobuf/field_mask/FieldMask.scala | 2 +- .../google/protobuf/timestamp/Timestamp.scala | 10 +- .../google/protobuf/compiler/plugin.proto | 11 + third_party/google/protobuf/descriptor.proto | 164 ++++++++------- third_party/google/protobuf/duration.proto | 3 +- third_party/google/protobuf/field_mask.proto | 2 +- third_party/google/protobuf/struct.proto | 1 - third_party/google/protobuf/timestamp.proto | 11 +- third_party/google/protobuf/type.proto | 40 ++-- 30 files changed, 623 insertions(+), 332 deletions(-) diff --git a/build.sbt b/build.sbt index 3be8cd5b3..f6cf3e3ac 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ import Dependencies._ // Different version for compiler-plugin since >=3.8.0 is not binary // compatible with 3.7.x. When loaded inside SBT (which has its own old // version), the binary incompatibility surfaces. -val protobufCompilerVersion = "3.7.1" +val protobufCompilerVersion = "3.12.2" val MimaPreviousVersion = "0.10.0" diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala index 180c0360f..8d76e812e 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala @@ -17,10 +17,14 @@ import _root_.scalapb.internal.compat.JavaConverters._ * problem in protoc itself -- such as the input CodeGeneratorRequest being * unparseable -- should be reported by writing a message to stderr and * exiting with a non-zero status code. + * @param supportedFeatures + * A bitmask of supported features that the code generator supports. + * This is a bitwise "or" of values from the Feature enum. */ @SerialVersionUID(0L) final case class CodeGeneratorResponse( error: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None, + supportedFeatures: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None, file: _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] = _root_.scala.Seq.empty, unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CodeGeneratorResponse] { @@ -32,6 +36,10 @@ final case class CodeGeneratorResponse( val __value = error.get __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value) }; + if (supportedFeatures.isDefined) { + val __value = supportedFeatures.get + __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(2, __value) + }; file.foreach { __item => val __value = __item __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize @@ -52,6 +60,10 @@ final case class CodeGeneratorResponse( val __m = __v _output__.writeString(1, __m) }; + supportedFeatures.foreach { __v => + val __m = __v + _output__.writeUInt64(2, __m) + }; file.foreach { __v => val __m = __v _output__.writeTag(15, 2) @@ -63,6 +75,9 @@ final case class CodeGeneratorResponse( def getError: _root_.scala.Predef.String = error.getOrElse("") def clearError: CodeGeneratorResponse = copy(error = _root_.scala.None) def withError(__v: _root_.scala.Predef.String): CodeGeneratorResponse = copy(error = Option(__v)) + def getSupportedFeatures: _root_.scala.Long = supportedFeatures.getOrElse(0L) + def clearSupportedFeatures: CodeGeneratorResponse = copy(supportedFeatures = _root_.scala.None) + def withSupportedFeatures(__v: _root_.scala.Long): CodeGeneratorResponse = copy(supportedFeatures = Option(__v)) def clearFile = copy(file = _root_.scala.Seq.empty) def addFile(__vs: com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File*): CodeGeneratorResponse = addAllFile(__vs) def addAllFile(__vs: Iterable[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]): CodeGeneratorResponse = copy(file = file ++ __vs) @@ -72,6 +87,7 @@ final case class CodeGeneratorResponse( def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { (__fieldNumber: @_root_.scala.unchecked) match { case 1 => error.orNull + case 2 => supportedFeatures.orNull case 15 => file } } @@ -79,6 +95,7 @@ final case class CodeGeneratorResponse( _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor) (__field.number: @_root_.scala.unchecked) match { case 1 => error.map(_root_.scalapb.descriptors.PString).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 2 => supportedFeatures.map(_root_.scalapb.descriptors.PLong).getOrElse(_root_.scalapb.descriptors.PEmpty) case 15 => _root_.scalapb.descriptors.PRepeated(file.iterator.map(_.toPMessage).toVector) } } @@ -91,15 +108,18 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl def toJavaProto(scalaPbSource: com.google.protobuf.compiler.plugin.CodeGeneratorResponse): com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse = { val javaPbOut = com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse.newBuilder scalaPbSource.error.foreach(javaPbOut.setError) + scalaPbSource.supportedFeatures.foreach(javaPbOut.setSupportedFeatures) javaPbOut.addAllFile(_root_.scalapb.internal.compat.toIterable(scalaPbSource.file.iterator.map(com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File.toJavaProto)).asJava) javaPbOut.build } def fromJavaProto(javaPbSource: com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse): com.google.protobuf.compiler.plugin.CodeGeneratorResponse = com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = if (javaPbSource.hasError) Some(javaPbSource.getError) else _root_.scala.None, + supportedFeatures = if (javaPbSource.hasSupportedFeatures) Some(javaPbSource.getSupportedFeatures.longValue) else _root_.scala.None, file = javaPbSource.getFileList.asScala.iterator.map(com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File.fromJavaProto).toSeq ) def merge(`_message__`: com.google.protobuf.compiler.plugin.CodeGeneratorResponse, `_input__`: _root_.com.google.protobuf.CodedInputStream): com.google.protobuf.compiler.plugin.CodeGeneratorResponse = { var __error = `_message__`.error + var __supportedFeatures = `_message__`.supportedFeatures val __file = (_root_.scala.collection.immutable.Vector.newBuilder[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] ++= `_message__`.file) var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null var _done__ = false @@ -109,6 +129,8 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl case 0 => _done__ = true case 10 => __error = Option(_input__.readStringRequireUtf8()) + case 16 => + __supportedFeatures = Option(_input__.readUInt64()) case 122 => __file += _root_.scalapb.LiteParser.readMessage(_input__, com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File.defaultInstance) case tag => @@ -120,6 +142,7 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl } com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = __error, + supportedFeatures = __supportedFeatures, file = __file.result(), unknownFields = if (_unknownFields__ == null) _message__.unknownFields else _unknownFields__.result() ) @@ -129,6 +152,7 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage == scalaDescriptor), "FieldDescriptor does not match message type.") com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), + supportedFeatures = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Long]]), file = __fieldsMap.get(scalaDescriptor.findFieldByNumber(15).get).map(_.as[_root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]]).getOrElse(_root_.scala.Seq.empty) ) case _ => throw new RuntimeException("Expected PMessage") @@ -149,8 +173,53 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber) lazy val defaultInstance = com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = _root_.scala.None, + supportedFeatures = _root_.scala.None, file = _root_.scala.Seq.empty ) + /** Sync with code_generator.h. + */ + sealed abstract class Feature(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum { + type EnumType = Feature + def isFeatureNone: _root_.scala.Boolean = false + def isFeatureProto3Optional: _root_.scala.Boolean = false + def companion: _root_.scalapb.GeneratedEnumCompanion[Feature] = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature + final def asRecognized: _root_.scala.Option[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature.Recognized]) + } + + object Feature extends _root_.scalapb.GeneratedEnumCompanion[Feature] { + sealed trait Recognized extends Feature + implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[Feature] = this + @SerialVersionUID(0L) + case object FEATURE_NONE extends Feature(0) with Feature.Recognized { + val index = 0 + val name = "FEATURE_NONE" + override def isFeatureNone: _root_.scala.Boolean = true + } + + @SerialVersionUID(0L) + case object FEATURE_PROTO3_OPTIONAL extends Feature(1) with Feature.Recognized { + val index = 1 + val name = "FEATURE_PROTO3_OPTIONAL" + override def isFeatureProto3Optional: _root_.scala.Boolean = true + } + + @SerialVersionUID(0L) + final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends Feature(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum + + lazy val values = scala.collection.immutable.Seq(FEATURE_NONE, FEATURE_PROTO3_OPTIONAL) + def fromValue(__value: _root_.scala.Int): Feature = __value match { + case 0 => FEATURE_NONE + case 1 => FEATURE_PROTO3_OPTIONAL + case __other => Unrecognized(__other) + } + def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.javaDescriptor.getEnumTypes.get(0) + def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.scalaDescriptor.enums(0) + def fromJavaValue(pbJavaSource: com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse.Feature): Feature = fromValue(pbJavaSource.getNumber) + def toJavaValue(pbScalaSource: Feature): com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse.Feature = { + _root_.scala.Predef.require(!pbScalaSource.isUnrecognized, "Unrecognized enum values can not be converted to Java") + com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse.Feature.forNumber(pbScalaSource.value) + } + } /** Represents a single generated file. * * @param name @@ -374,15 +443,20 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl implicit class CodeGeneratorResponseLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.compiler.plugin.CodeGeneratorResponse]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, com.google.protobuf.compiler.plugin.CodeGeneratorResponse](_l) { def error: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.getError)((c_, f_) => c_.copy(error = Option(f_))) def optionalError: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.error)((c_, f_) => c_.copy(error = f_)) + def supportedFeatures: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getSupportedFeatures)((c_, f_) => c_.copy(supportedFeatures = Option(f_))) + def optionalSupportedFeatures: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.supportedFeatures)((c_, f_) => c_.copy(supportedFeatures = f_)) def file: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]] = field(_.file)((c_, f_) => c_.copy(file = f_)) } final val ERROR_FIELD_NUMBER = 1 + final val SUPPORTED_FEATURES_FIELD_NUMBER = 2 final val FILE_FIELD_NUMBER = 15 def of( error: _root_.scala.Option[_root_.scala.Predef.String], + supportedFeatures: _root_.scala.Option[_root_.scala.Long], file: _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] ): _root_.com.google.protobuf.compiler.plugin.CodeGeneratorResponse = _root_.com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error, + supportedFeatures, file ) } diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala index 2cdd18587..4482eedc2 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala @@ -24,12 +24,14 @@ object PluginProto extends _root_.scalapb.GeneratedFileObject { AMoCUIT4j8QEg5maWxlVG9HZW5lcmF0ZVIOZmlsZVRvR2VuZXJhdGUSLAoJcGFyYW1ldGVyGAIgASgJQg7iPwsSCXBhcmFtZXRlc lIJcGFyYW1ldGVyElMKCnByb3RvX2ZpbGUYDyADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b0IO4j8LE glwcm90b0ZpbGVSCXByb3RvRmlsZRJiChBjb21waWxlcl92ZXJzaW9uGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyL - lZlcnNpb25CFOI/ERIPY29tcGlsZXJWZXJzaW9uUg9jb21waWxlclZlcnNpb24inAIKFUNvZGVHZW5lcmF0b3JSZXNwb25zZRIgC - gVlcnJvchgBIAEoCUIK4j8HEgVlcnJvclIFZXJyb3ISUwoEZmlsZRgPIAMoCzI0Lmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db - 2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZUIJ4j8GEgRmaWxlUgRmaWxlGosBCgRGaWxlEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZ - VIEbmFtZRI8Cg9pbnNlcnRpb25fcG9pbnQYAiABKAlCE+I/EBIOaW5zZXJ0aW9uUG9pbnRSDmluc2VydGlvblBvaW50EiYKB2Nvb - nRlbnQYDyABKAlCDOI/CRIHY29udGVudFIHY29udGVudEJnChxjb20uZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyQgxQbHVnaW5Qc - m90b3NaOWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vcGx1Z2luO3BsdWdpbl9nbw==""" + lZlcnNpb25CFOI/ERIPY29tcGlsZXJWZXJzaW9uUg9jb21waWxlclZlcnNpb24inQMKFUNvZGVHZW5lcmF0b3JSZXNwb25zZRIgC + gVlcnJvchgBIAEoCUIK4j8HEgVlcnJvclIFZXJyb3ISRQoSc3VwcG9ydGVkX2ZlYXR1cmVzGAIgASgEQhbiPxMSEXN1cHBvcnRlZ + EZlYXR1cmVzUhFzdXBwb3J0ZWRGZWF0dXJlcxJTCgRmaWxlGA8gAygLMjQuZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZ + W5lcmF0b3JSZXNwb25zZS5GaWxlQgniPwYSBGZpbGVSBGZpbGUaiwEKBEZpbGUSHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuY + W1lEjwKD2luc2VydGlvbl9wb2ludBgCIAEoCUIT4j8QEg5pbnNlcnRpb25Qb2ludFIOaW5zZXJ0aW9uUG9pbnQSJgoHY29udGVud + BgPIAEoCUIM4j8JEgdjb250ZW50Ugdjb250ZW50IjgKB0ZlYXR1cmUSEAoMRkVBVFVSRV9OT05FEAASGwoXRkVBVFVSRV9QUk9UT + zNfT1BUSU9OQUwQAUJnChxjb20uZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyQgxQbHVnaW5Qcm90b3NaOWdpdGh1Yi5jb20vZ29sY + W5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vcGx1Z2luO3BsdWdpbl9nbw==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala index 24b7cbec6..01cadda9c 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala @@ -350,6 +350,11 @@ object DescriptorProto extends scalapb.GeneratedMessageCompanion[com.google.prot reservedRange = _root_.scala.Seq.empty, reservedName = _root_.scala.Seq.empty ) + /** @param start + * Inclusive. + * @param end + * Exclusive. + */ @SerialVersionUID(0L) final case class ExtensionRange( start: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None, diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala index b6437370f..9725a80e4 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala @@ -61,7 +61,7 @@ object DescriptorProtoCompanion extends _root_.scalapb.GeneratedFileObject { G9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMaTQoNUmVzZXJ2ZWRSYW5nZRIgCgVzdGFyd BgBIAEoBUIK4j8HEgVzdGFydFIFc3RhcnQSGgoDZW5kGAIgASgFQgjiPwUSA2VuZFIDZW5kIpYBChVFeHRlbnNpb25SYW5nZU9wd GlvbnMScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CG - OI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIqYHChRGaWVsZERlc2NyaXB0b + OI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIuQHChRGaWVsZERlc2NyaXB0b 3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSIwoGbnVtYmVyGAMgASgFQgviPwgSBm51bWJlclIGbnVtYmVyE k0KBWxhYmVsGAQgASgOMisuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsQgriPwcSBWxhYmVsUgVsY WJlbBJJCgR0eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVCCeI/BhIEdHlwZVIEd @@ -69,101 +69,101 @@ object DescriptorProtoCompanion extends _root_.scalapb.GeneratedFileObject { GVuZGVlUghleHRlbmRlZRI2Cg1kZWZhdWx0X3ZhbHVlGAcgASgJQhHiPw4SDGRlZmF1bHRWYWx1ZVIMZGVmYXVsdFZhbHVlEjAKC 29uZW9mX2luZGV4GAkgASgFQg/iPwwSCm9uZW9mSW5kZXhSCm9uZW9mSW5kZXgSKgoJanNvbl9uYW1lGAogASgJQg3iPwoSCGpzb 25OYW1lUghqc29uTmFtZRJFCgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc0IM4j8JEgdvcHRpb - 25zUgdvcHRpb25zIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUW - VBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT - 0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLV - FlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU - 0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUVVJUkVEEAISE - goOTEFCRUxfUkVQRUFURUQQAyJ8ChRPbmVvZkRlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSR - QoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb3B0aW9ucyLFAwoTR - W51bURlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSSwoFdmFsdWUYAiADKAsyKS5nb29nbGUuc - HJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvQgriPwcSBXZhbHVlUgV2YWx1ZRJECgdvcHRpb25zGAMgASgLMhwuZ29vZ - 2xlLnByb3RvYnVmLkVudW1PcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMScQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb - 29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZUIS4j8PEg1yZXNlcnZlZFJhbmdlUg1yZ - XNlcnZlZFJhbmdlEjYKDXJlc2VydmVkX25hbWUYBSADKAlCEeI/DhIMcmVzZXJ2ZWROYW1lUgxyZXNlcnZlZE5hbWUaUQoRRW51b - VJlc2VydmVkUmFuZ2USIAoFc3RhcnQYASABKAVCCuI/BxIFc3RhcnRSBXN0YXJ0EhoKA2VuZBgCIAEoBUII4j8FEgNlbmRSA2VuZ - CKpAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRIjCgZudW1iZXIYAiABK - AVCC+I/CBIGbnVtYmVyUgZudW1iZXISSQoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zQ - gziPwkSB29wdGlvbnNSB29wdGlvbnMizQEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lU - gRuYW1lEksKBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9CC+I/CBIGbWV0aG9kU - gZtZXRob2QSRwoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvc - HRpb25zIu8CChVNZXRob2REZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuYW1lEi0KCmlucHV0X3R5c - GUYAiABKAlCDuI/CxIJaW5wdXRUeXBlUglpbnB1dFR5cGUSMAoLb3V0cHV0X3R5cGUYAyABKAlCD+I/DBIKb3V0cHV0VHlwZVIKb - 3V0cHV0VHlwZRJGCgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb - 3B0aW9ucxJGChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZUIU4j8REg9jbGllbnRTdHJlYW1pbmdSD2NsaWVudFN0cmVhb - WluZxJGChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZUIU4j8REg9zZXJ2ZXJTdHJlYW1pbmdSD3NlcnZlclN0cmVhbWluZ - yLlDAoLRmlsZU9wdGlvbnMSMwoMamF2YV9wYWNrYWdlGAEgASgJQhDiPw0SC2phdmFQYWNrYWdlUgtqYXZhUGFja2FnZRJJChRqY - XZhX291dGVyX2NsYXNzbmFtZRgIIAEoCUIX4j8UEhJqYXZhT3V0ZXJDbGFzc25hbWVSEmphdmFPdXRlckNsYXNzbmFtZRJNChNqY - XZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZUIW4j8TEhFqYXZhTXVsdGlwbGVGaWxlc1IRamF2YU11bHRpcGxlRmlsZXMSY - godamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCIBgB4j8bEhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoUhlqY - XZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoElQKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlQhjiPxUSE2phdmFTd - HJpbmdDaGVja1V0ZjhSE2phdmFTdHJpbmdDaGVja1V0ZjgSZQoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVmL - kZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRURCEOI/DRILb3B0aW1pemVGb3JSC29wdGltaXplRm9yEi0KCmdvX3BhY2thZ - 2UYCyABKAlCDuI/CxIJZ29QYWNrYWdlUglnb1BhY2thZ2USTQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VCFuI/E - xIRY2NHZW5lcmljU2VydmljZXNSEWNjR2VuZXJpY1NlcnZpY2VzElMKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc - 2VCGOI/FRITamF2YUdlbmVyaWNTZXJ2aWNlc1ITamF2YUdlbmVyaWNTZXJ2aWNlcxJNChNweV9nZW5lcmljX3NlcnZpY2VzGBIgA - SgIOgVmYWxzZUIW4j8TEhFweUdlbmVyaWNTZXJ2aWNlc1IRcHlHZW5lcmljU2VydmljZXMSUAoUcGhwX2dlbmVyaWNfc2VydmljZ - XMYKiABKAg6BWZhbHNlQhfiPxQSEnBocEdlbmVyaWNTZXJ2aWNlc1IScGhwR2VuZXJpY1NlcnZpY2VzEjYKCmRlcHJlY2F0ZWQYF - yABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSRAoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoFZmFsc2VCE - +I/EBIOY2NFbmFibGVBcmVuYXNSDmNjRW5hYmxlQXJlbmFzEkAKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJQhTiPxESD29iamNDb - GFzc1ByZWZpeFIPb2JqY0NsYXNzUHJlZml4Ej8KEGNzaGFycF9uYW1lc3BhY2UYJSABKAlCFOI/ERIPY3NoYXJwTmFtZXNwYWNlU - g9jc2hhcnBOYW1lc3BhY2USMwoMc3dpZnRfcHJlZml4GCcgASgJQhDiPw0SC3N3aWZ0UHJlZml4Ugtzd2lmdFByZWZpeBI9ChBwa - HBfY2xhc3NfcHJlZml4GCggASgJQhPiPxASDnBocENsYXNzUHJlZml4Ug5waHBDbGFzc1ByZWZpeBI2Cg1waHBfbmFtZXNwYWNlG - CkgASgJQhHiPw4SDHBocE5hbWVzcGFjZVIMcGhwTmFtZXNwYWNlEk8KFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlCGeI/F - hIUcGhwTWV0YWRhdGFOYW1lc3BhY2VSFHBocE1ldGFkYXRhTmFtZXNwYWNlEjMKDHJ1YnlfcGFja2FnZRgtIAEoCUIQ4j8NEgtyd - WJ5UGFja2FnZVILcnVieVBhY2thZ2UScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVua - W50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiI6CgxPcHRpbWl6Z - U1vZGUSCQoFU1BFRUQQARINCglDT0RFX1NJWkUQAhIQCgxMSVRFX1JVTlRJTUUQAyoJCOgHEICAgIACSgQIJhAnIskDCg5NZXNzY - WdlT3B0aW9ucxJXChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2VCGeI/FhIUbWVzc2FnZVNldFdpcmVGb3JtY - XRSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0Em8KH25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlQiHiP - x4SHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISNgoKZGVwcmVjYXRlZ - BgDIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBIqCgltYXBfZW50cnkYByABKAhCDeI/ChIIbWFwRW50c - nlSCG1hcEVudHJ5EnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT - 3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAgQCUoECAkQC - iLJBAoMRmllbGRPcHRpb25zEk0KBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSS - U5HQgriPwcSBWN0eXBlUgVjdHlwZRIjCgZwYWNrZWQYAiABKAhCC+I/CBIGcGFja2VkUgZwYWNrZWQSVAoGanN0eXBlGAYgASgOM - iQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTEIL4j8IEgZqc3R5cGVSBmpzdHlwZRIkCgRsY - Xp5GAUgASgIOgVmYWxzZUIJ4j8GEgRsYXp5UgRsYXp5EjYKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0Z - WRSCmRlcHJlY2F0ZWQSJAoEd2VhaxgKIAEoCDoFZmFsc2VCCeI/BhIEd2Vha1IEd2VhaxJyChR1bmludGVycHJldGVkX29wdGlvb - hjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1bmludGVycHJldGVkT3B0aW9uUhN1b - mludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5c - GUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIqCQjoBxCAgICAAkoECAQQBSKNAQoMT25lb2ZPc - HRpb25zEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uQ - hjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiL8AQoLRW51bU9wdGlvbnMSM - AoLYWxsb3dfYWxpYXMYAiABKAhCD+I/DBIKYWxsb3dBbGlhc1IKYWxsb3dBbGlhcxI2CgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZ - UIP4j8MEgpkZXByZWNhdGVkUgpkZXByZWNhdGVkEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b - 2J1Zi5VbmludGVycHJldGVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoB - xCAgICAAkoECAUQBiLJAQoQRW51bVZhbHVlT3B0aW9ucxI2CgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZUIP4j8MEgpkZXByZWNhd - GVkUgpkZXByZWNhdGVkEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJld - GVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLHAQoOU2Vyd - mljZU9wdGlvbnMSNgoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBJyChR1bmlud + 25zUgdvcHRpb25zEjwKD3Byb3RvM19vcHRpb25hbBgRIAEoCEIT4j8QEg5wcm90bzNPcHRpb25hbFIOcHJvdG8zT3B0aW9uYWwit + gIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSD + goKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU + 1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANE + g0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUW + VBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQ + VRFRBADInwKFE9uZW9mRGVzY3JpcHRvclByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRJFCgdvcHRpb25zGAIgA + SgLMh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvcHRpb25zIsUDChNFbnVtRGVzY3JpcHRvc + lByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRJLCgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtV + mFsdWVEZXNjcmlwdG9yUHJvdG9CCuI/BxIFdmFsdWVSBXZhbHVlEkQKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuR + W51bU9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb3B0aW9ucxJxCg5yZXNlcnZlZF9yYW5nZRgEIAMoCzI2Lmdvb2dsZS5wcm90b2J1Z + i5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlQhLiPw8SDXJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USN + goNcmVzZXJ2ZWRfbmFtZRgFIAMoCUIR4j8OEgxyZXNlcnZlZE5hbWVSDHJlc2VydmVkTmFtZRpRChFFbnVtUmVzZXJ2ZWRSYW5nZ + RIgCgVzdGFydBgBIAEoBUIK4j8HEgVzdGFydFIFc3RhcnQSGgoDZW5kGAIgASgFQgjiPwUSA2VuZFIDZW5kIqkBChhFbnVtVmFsd + WVEZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuYW1lEiMKBm51bWJlchgCIAEoBUIL4j8IEgZudW1iZ + XJSBm51bWJlchJJCgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNCDOI/CRIHb3B0aW9uc + 1IHb3B0aW9ucyLNAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSSwoGbWV0a + G9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b0IL4j8IEgZtZXRob2RSBm1ldGhvZBJHCgdvc + HRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMi7wIKFU1ld + GhvZERlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSLQoKaW5wdXRfdHlwZRgCIAEoCUIO4j8LE + glpbnB1dFR5cGVSCWlucHV0VHlwZRIwCgtvdXRwdXRfdHlwZRgDIAEoCUIP4j8MEgpvdXRwdXRUeXBlUgpvdXRwdXRUeXBlEkYKB + 29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvcHRpb25zEkYKEGNsa + WVudF9zdHJlYW1pbmcYBSABKAg6BWZhbHNlQhTiPxESD2NsaWVudFN0cmVhbWluZ1IPY2xpZW50U3RyZWFtaW5nEkYKEHNlcnZlc + l9zdHJlYW1pbmcYBiABKAg6BWZhbHNlQhTiPxESD3NlcnZlclN0cmVhbWluZ1IPc2VydmVyU3RyZWFtaW5nIuQMCgtGaWxlT3B0a + W9ucxIzCgxqYXZhX3BhY2thZ2UYASABKAlCEOI/DRILamF2YVBhY2thZ2VSC2phdmFQYWNrYWdlEkkKFGphdmFfb3V0ZXJfY2xhc + 3NuYW1lGAggASgJQhfiPxQSEmphdmFPdXRlckNsYXNzbmFtZVISamF2YU91dGVyQ2xhc3NuYW1lEk0KE2phdmFfbXVsdGlwbGVfZ + mlsZXMYCiABKAg6BWZhbHNlQhbiPxMSEWphdmFNdWx0aXBsZUZpbGVzUhFqYXZhTXVsdGlwbGVGaWxlcxJiCh1qYXZhX2dlbmVyY + XRlX2VxdWFsc19hbmRfaGFzaBgUIAEoCEIgGAHiPxsSGWphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2hSGWphdmFHZW5lcmF0ZUVxd + WFsc0FuZEhhc2gSVAoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoFZmFsc2VCGOI/FRITamF2YVN0cmluZ0NoZWNrVXRmO + FITamF2YVN0cmluZ0NoZWNrVXRmOBJlCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT + 3B0aW1pemVNb2RlOgVTUEVFREIQ4j8NEgtvcHRpbWl6ZUZvclILb3B0aW1pemVGb3ISLQoKZ29fcGFja2FnZRgLIAEoCUIO4j8LE + glnb1BhY2thZ2VSCWdvUGFja2FnZRJNChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZUIW4j8TEhFjY0dlbmVyaWNTZ + XJ2aWNlc1IRY2NHZW5lcmljU2VydmljZXMSUwoVamF2YV9nZW5lcmljX3NlcnZpY2VzGBEgASgIOgVmYWxzZUIY4j8VEhNqYXZhR + 2VuZXJpY1NlcnZpY2VzUhNqYXZhR2VuZXJpY1NlcnZpY2VzEk0KE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlQhbiP + xMSEXB5R2VuZXJpY1NlcnZpY2VzUhFweUdlbmVyaWNTZXJ2aWNlcxJQChRwaHBfZ2VuZXJpY19zZXJ2aWNlcxgqIAEoCDoFZmFsc + 2VCF+I/FBIScGhwR2VuZXJpY1NlcnZpY2VzUhJwaHBHZW5lcmljU2VydmljZXMSNgoKZGVwcmVjYXRlZBgXIAEoCDoFZmFsc2VCD + +I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBJDChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlQhPiPxASDmNjRW5hYmxlQ + XJlbmFzUg5jY0VuYWJsZUFyZW5hcxJAChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCUIU4j8REg9vYmpjQ2xhc3NQcmVmaXhSD29ia + mNDbGFzc1ByZWZpeBI/ChBjc2hhcnBfbmFtZXNwYWNlGCUgASgJQhTiPxESD2NzaGFycE5hbWVzcGFjZVIPY3NoYXJwTmFtZXNwY + WNlEjMKDHN3aWZ0X3ByZWZpeBgnIAEoCUIQ4j8NEgtzd2lmdFByZWZpeFILc3dpZnRQcmVmaXgSPQoQcGhwX2NsYXNzX3ByZWZpe + BgoIAEoCUIT4j8QEg5waHBDbGFzc1ByZWZpeFIOcGhwQ2xhc3NQcmVmaXgSNgoNcGhwX25hbWVzcGFjZRgpIAEoCUIR4j8OEgxwa + HBOYW1lc3BhY2VSDHBocE5hbWVzcGFjZRJPChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJQhniPxYSFHBocE1ldGFkYXRhT + mFtZXNwYWNlUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIzCgxydWJ5X3BhY2thZ2UYLSABKAlCEOI/DRILcnVieVBhY2thZ2VSC3J1Y + nlQYWNrYWdlEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0a + W9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEE + AESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyLJAwoOTWVzc2FnZU9wdGlvbnMSVwoXb + WVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlQhniPxYSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0UhRtZXNzYWdlU2V0V + 2lyZUZvcm1hdBJvCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZUIh4j8eEhxub1N0YW5kYXJkR + GVzY3JpcHRvckFjY2Vzc29yUhxub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yEjYKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlQ + g/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSKgoJbWFwX2VudHJ5GAcgASgIQg3iPwoSCG1hcEVudHJ5UghtYXBFbnRyeRJyC + hR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1b + mludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgIEAlKBAgJEAoiyQQKDEZpZWxkT3B0a + W9ucxJNCgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklOR0IK4j8HEgVjdHlwZ + VIFY3R5cGUSIwoGcGFja2VkGAIgASgIQgviPwgSBnBhY2tlZFIGcGFja2VkElQKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b + 2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxCC+I/CBIGanN0eXBlUgZqc3R5cGUSJAoEbGF6eRgFIAEoCDoFZmFsc + 2VCCeI/BhIEbGF6eVIEbGF6eRI2CgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZUIP4j8MEgpkZXByZWNhdGVkUgpkZXByZWNhdGVkE + iQKBHdlYWsYCiABKAg6BWZhbHNlQgniPwYSBHdlYWtSBHdlYWsScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ + 2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wd + GlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BT + BAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQgICAgAJKBAgEEAUijQEKDE9uZW9mT3B0aW9ucxJyChR1bmlud GVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1bmludGVyc - HJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIiowMKDU1ldGhvZE9wdGlvbnMSNgoKZGVwcmVjYXRlZ - BghIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBKIAQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb - 29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOQhXiPxISEGlkZ - W1wb3RlbmN5TGV2ZWxSEGlkZW1wb3RlbmN5TGV2ZWwScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb - 3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiJQC - hBJZGVtcG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19TSURFX0VGRkVDVFMQARIOCgpJREVNUE9UR - U5UEAIqCQjoBxCAgICAAiLDBAoTVW5pbnRlcnByZXRlZE9wdGlvbhJMCgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3RvYnVmLlVua - W50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRCCeI/BhIEbmFtZVIEbmFtZRI/ChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJQhTiPxESD - 2lkZW50aWZpZXJWYWx1ZVIPaWRlbnRpZmllclZhbHVlEkMKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBEIV4j8SEhBwb3NpdGl2Z - UludFZhbHVlUhBwb3NpdGl2ZUludFZhbHVlEkMKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA0IV4j8SEhBuZWdhdGl2ZUludFZhb - HVlUhBuZWdhdGl2ZUludFZhbHVlEjMKDGRvdWJsZV92YWx1ZRgGIAEoAUIQ4j8NEgtkb3VibGVWYWx1ZVILZG91YmxlVmFsdWUSM - woMc3RyaW5nX3ZhbHVlGAcgASgMQhDiPw0SC3N0cmluZ1ZhbHVlUgtzdHJpbmdWYWx1ZRI8Cg9hZ2dyZWdhdGVfdmFsdWUYCCABK - AlCE+I/EBIOYWdncmVnYXRlVmFsdWVSDmFnZ3JlZ2F0ZVZhbHVlGmsKCE5hbWVQYXJ0EioKCW5hbWVfcGFydBgBIAIoCUIN4j8KE - ghuYW1lUGFydFIIbmFtZVBhcnQSMwoMaXNfZXh0ZW5zaW9uGAIgAigIQhDiPw0SC2lzRXh0ZW5zaW9uUgtpc0V4dGVuc2lvbiKTA - woOU291cmNlQ29kZUluZm8SUwoIbG9jYXRpb24YASADKAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb - 25CDeI/ChIIbG9jYXRpb25SCGxvY2F0aW9uGqsCCghMb2NhdGlvbhIfCgRwYXRoGAEgAygFQgsQAeI/BhIEcGF0aFIEcGF0aBIfC - gRzcGFuGAIgAygFQgsQAeI/BhIEc3BhblIEc3BhbhI/ChBsZWFkaW5nX2NvbW1lbnRzGAMgASgJQhTiPxESD2xlYWRpbmdDb21tZ - W50c1IPbGVhZGluZ0NvbW1lbnRzEkIKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJQhXiPxISEHRyYWlsaW5nQ29tbWVudHNSEHRyY - WlsaW5nQ29tbWVudHMSWAoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMoCUIc4j8ZEhdsZWFkaW5nRGV0YWNoZWRDb21tZ - W50c1IXbGVhZGluZ0RldGFjaGVkQ29tbWVudHMikwIKEUdlbmVyYXRlZENvZGVJbmZvEl4KCmFubm90YXRpb24YASADKAsyLS5nb - 29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbkIP4j8MEgphbm5vdGF0aW9uUgphbm5vdGF0aW9uGp0BC - gpBbm5vdGF0aW9uEh8KBHBhdGgYASADKAVCCxAB4j8GEgRwYXRoUgRwYXRoEjAKC3NvdXJjZV9maWxlGAIgASgJQg/iPwwSCnNvd - XJjZUZpbGVSCnNvdXJjZUZpbGUSIAoFYmVnaW4YAyABKAVCCuI/BxIFYmVnaW5SBWJlZ2luEhoKA2VuZBgEIAEoBUII4j8FEgNlb - mRSA2VuZEKPAQoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRvclByb3Rvc0gBWj5naXRodWIuY29tL2dvbGFuZy9wcm90b - 2J1Zi9wcm90b2MtZ2VuLWdvL2Rlc2NyaXB0b3I7ZGVzY3JpcHRvcvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0a - W9u""" + HJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi/AEKC0VudW1PcHRpb25zEjAKC2FsbG93X2FsaWFzG + AIgASgIQg/iPwwSCmFsbG93QWxpYXNSCmFsbG93QWxpYXMSNgoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjY + XRlZFIKZGVwcmVjYXRlZBJyChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZ + XRlZE9wdGlvbkIY4j8VEhN1bmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYiy + QEKEEVudW1WYWx1ZU9wdGlvbnMSNgoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZ + BJyChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VE + hN1bmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIixwEKDlNlcnZpY2VPcHRpb25zEjYKC + mRlcHJlY2F0ZWQYISABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQScgoUdW5pbnRlcnByZXRlZF9vcHRpb + 24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITd + W5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIqMDCg1NZXRob2RPcHRpb25zEjYKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlQ + g/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSiAEKEWlkZW1wb3RlbmN5X2xldmVsGCIgASgOMi8uZ29vZ2xlLnByb3RvYnVmL + k1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbDoTSURFTVBPVEVOQ1lfVU5LTk9XTkIV4j8SEhBpZGVtcG90ZW5jeUxldmVsU + hBpZGVtcG90ZW5jeUxldmVsEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVyc + HJldGVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZ + XZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAg + AIiwwQKE1VuaW50ZXJwcmV0ZWRPcHRpb24STAoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0a + W9uLk5hbWVQYXJ0QgniPwYSBG5hbWVSBG5hbWUSPwoQaWRlbnRpZmllcl92YWx1ZRgDIAEoCUIU4j8REg9pZGVudGlmaWVyVmFsd + WVSD2lkZW50aWZpZXJWYWx1ZRJDChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARCFeI/EhIQcG9zaXRpdmVJbnRWYWx1ZVIQcG9za + XRpdmVJbnRWYWx1ZRJDChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKANCFeI/EhIQbmVnYXRpdmVJbnRWYWx1ZVIQbmVnYXRpdmVJb + nRWYWx1ZRIzCgxkb3VibGVfdmFsdWUYBiABKAFCEOI/DRILZG91YmxlVmFsdWVSC2RvdWJsZVZhbHVlEjMKDHN0cmluZ192YWx1Z + RgHIAEoDEIQ4j8NEgtzdHJpbmdWYWx1ZVILc3RyaW5nVmFsdWUSPAoPYWdncmVnYXRlX3ZhbHVlGAggASgJQhPiPxASDmFnZ3JlZ + 2F0ZVZhbHVlUg5hZ2dyZWdhdGVWYWx1ZRprCghOYW1lUGFydBIqCgluYW1lX3BhcnQYASACKAlCDeI/ChIIbmFtZVBhcnRSCG5hb + WVQYXJ0EjMKDGlzX2V4dGVuc2lvbhgCIAIoCEIQ4j8NEgtpc0V4dGVuc2lvblILaXNFeHRlbnNpb24ikwMKDlNvdXJjZUNvZGVJb + mZvElMKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uQg3iPwoSCGxvY2F0a + W9uUghsb2NhdGlvbhqrAgoITG9jYXRpb24SHwoEcGF0aBgBIAMoBUILEAHiPwYSBHBhdGhSBHBhdGgSHwoEc3BhbhgCIAMoBUILE + AHiPwYSBHNwYW5SBHNwYW4SPwoQbGVhZGluZ19jb21tZW50cxgDIAEoCUIU4j8REg9sZWFkaW5nQ29tbWVudHNSD2xlYWRpbmdDb + 21tZW50cxJCChF0cmFpbGluZ19jb21tZW50cxgEIAEoCUIV4j8SEhB0cmFpbGluZ0NvbW1lbnRzUhB0cmFpbGluZ0NvbW1lbnRzE + lgKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlCHOI/GRIXbGVhZGluZ0RldGFjaGVkQ29tbWVudHNSF2xlYWRpbmdEZ + XRhY2hlZENvbW1lbnRzIpMCChFHZW5lcmF0ZWRDb2RlSW5mbxJeCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmL + kdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25CD+I/DBIKYW5ub3RhdGlvblIKYW5ub3RhdGlvbhqdAQoKQW5ub3RhdGlvbhIfC + gRwYXRoGAEgAygFQgsQAeI/BhIEcGF0aFIEcGF0aBIwCgtzb3VyY2VfZmlsZRgCIAEoCUIP4j8MEgpzb3VyY2VGaWxlUgpzb3VyY + 2VGaWxlEiAKBWJlZ2luGAMgASgFQgriPwcSBWJlZ2luUgViZWdpbhIaCgNlbmQYBCABKAVCCOI/BRIDZW5kUgNlbmRCjwEKE2Nvb + S5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVo+Z2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG9jLWdlb + i1nby9kZXNjcmlwdG9yO2Rlc2NyaXB0b3L4AQGiAgNHUEKqAhpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbg==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala index c697720b1..27c78ed82 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala @@ -33,6 +33,28 @@ package com.google.protobuf.descriptor * user has set a "json_name" option on this field, that option's value * will be used. Otherwise, it's deduced from the field's name by converting * it to camelCase. + * @param proto3Optional + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. */ @SerialVersionUID(0L) final case class FieldDescriptorProto( @@ -46,6 +68,7 @@ final case class FieldDescriptorProto( oneofIndex: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None, jsonName: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None, options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions] = _root_.scala.None, + proto3Optional: _root_.scala.Option[_root_.scala.Boolean] = _root_.scala.None, unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[FieldDescriptorProto] { @transient @@ -92,6 +115,10 @@ final case class FieldDescriptorProto( val __value = options.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (proto3Optional.isDefined) { + val __value = proto3Optional.get + __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(17, __value) + }; __size += unknownFields.serializedSize __size } @@ -146,6 +173,10 @@ final case class FieldDescriptorProto( val __m = __v _output__.writeString(10, __m) }; + proto3Optional.foreach { __v => + val __m = __v + _output__.writeBool(17, __m) + }; unknownFields.writeTo(_output__) } def getName: _root_.scala.Predef.String = name.getOrElse("") @@ -178,6 +209,9 @@ final case class FieldDescriptorProto( def getOptions: com.google.protobuf.descriptor.FieldOptions = options.getOrElse(com.google.protobuf.descriptor.FieldOptions.defaultInstance) def clearOptions: FieldDescriptorProto = copy(options = _root_.scala.None) def withOptions(__v: com.google.protobuf.descriptor.FieldOptions): FieldDescriptorProto = copy(options = Option(__v)) + def getProto3Optional: _root_.scala.Boolean = proto3Optional.getOrElse(false) + def clearProto3Optional: FieldDescriptorProto = copy(proto3Optional = _root_.scala.None) + def withProto3Optional(__v: _root_.scala.Boolean): FieldDescriptorProto = copy(proto3Optional = Option(__v)) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty) def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { @@ -192,6 +226,7 @@ final case class FieldDescriptorProto( case 9 => oneofIndex.orNull case 10 => jsonName.orNull case 8 => options.orNull + case 17 => proto3Optional.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -207,6 +242,7 @@ final case class FieldDescriptorProto( case 9 => oneofIndex.map(_root_.scalapb.descriptors.PInt).getOrElse(_root_.scalapb.descriptors.PEmpty) case 10 => jsonName.map(_root_.scalapb.descriptors.PString).getOrElse(_root_.scalapb.descriptors.PEmpty) case 8 => options.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 17 => proto3Optional.map(_root_.scalapb.descriptors.PBoolean).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -227,6 +263,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google scalaPbSource.oneofIndex.foreach(javaPbOut.setOneofIndex) scalaPbSource.jsonName.foreach(javaPbOut.setJsonName) scalaPbSource.options.map(com.google.protobuf.descriptor.FieldOptions.toJavaProto).foreach(javaPbOut.setOptions) + scalaPbSource.proto3Optional.foreach(javaPbOut.setProto3Optional) javaPbOut.build } def fromJavaProto(javaPbSource: com.google.protobuf.DescriptorProtos.FieldDescriptorProto): com.google.protobuf.descriptor.FieldDescriptorProto = com.google.protobuf.descriptor.FieldDescriptorProto( @@ -239,7 +276,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue = if (javaPbSource.hasDefaultValue) Some(javaPbSource.getDefaultValue) else _root_.scala.None, oneofIndex = if (javaPbSource.hasOneofIndex) Some(javaPbSource.getOneofIndex.intValue) else _root_.scala.None, jsonName = if (javaPbSource.hasJsonName) Some(javaPbSource.getJsonName) else _root_.scala.None, - options = if (javaPbSource.hasOptions) Some(com.google.protobuf.descriptor.FieldOptions.fromJavaProto(javaPbSource.getOptions)) else _root_.scala.None + options = if (javaPbSource.hasOptions) Some(com.google.protobuf.descriptor.FieldOptions.fromJavaProto(javaPbSource.getOptions)) else _root_.scala.None, + proto3Optional = if (javaPbSource.hasProto3Optional) Some(javaPbSource.getProto3Optional.booleanValue) else _root_.scala.None ) def merge(`_message__`: com.google.protobuf.descriptor.FieldDescriptorProto, `_input__`: _root_.com.google.protobuf.CodedInputStream): com.google.protobuf.descriptor.FieldDescriptorProto = { var __name = `_message__`.name @@ -252,6 +290,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google var __oneofIndex = `_message__`.oneofIndex var __jsonName = `_message__`.jsonName var __options = `_message__`.options + var __proto3Optional = `_message__`.proto3Optional var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null var _done__ = false while (!_done__) { @@ -278,6 +317,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google __jsonName = Option(_input__.readStringRequireUtf8()) case 66 => __options = Option(_root_.scalapb.LiteParser.readMessage(_input__, __options.getOrElse(com.google.protobuf.descriptor.FieldOptions.defaultInstance))) + case 136 => + __proto3Optional = Option(_input__.readBool()) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder(_message__.unknownFields) @@ -296,6 +337,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google oneofIndex = __oneofIndex, jsonName = __jsonName, options = __options, + proto3Optional = __proto3Optional, unknownFields = if (_unknownFields__ == null) _message__.unknownFields else _unknownFields__.result() ) } @@ -312,7 +354,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), oneofIndex = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Int]]), jsonName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(10).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), - options = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]]) + options = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]]), + proto3Optional = __fieldsMap.get(scalaDescriptor.findFieldByNumber(17).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Boolean]]) ) case _ => throw new RuntimeException("Expected PMessage") } @@ -342,7 +385,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue = _root_.scala.None, oneofIndex = _root_.scala.None, jsonName = _root_.scala.None, - options = _root_.scala.None + options = _root_.scala.None, + proto3Optional = _root_.scala.None ) sealed abstract class Type(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum { type EnumType = Type @@ -626,6 +670,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google def optionalJsonName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.jsonName)((c_, f_) => c_.copy(jsonName = f_)) def options: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.descriptor.FieldOptions] = field(_.getOptions)((c_, f_) => c_.copy(options = Option(f_))) def optionalOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]] = field(_.options)((c_, f_) => c_.copy(options = f_)) + def proto3Optional: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getProto3Optional)((c_, f_) => c_.copy(proto3Optional = Option(f_))) + def optionalProto3Optional: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.proto3Optional)((c_, f_) => c_.copy(proto3Optional = f_)) } final val NAME_FIELD_NUMBER = 1 final val NUMBER_FIELD_NUMBER = 3 @@ -637,6 +683,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google final val ONEOF_INDEX_FIELD_NUMBER = 9 final val JSON_NAME_FIELD_NUMBER = 10 final val OPTIONS_FIELD_NUMBER = 8 + final val PROTO3_OPTIONAL_FIELD_NUMBER = 17 def of( name: _root_.scala.Option[_root_.scala.Predef.String], number: _root_.scala.Option[_root_.scala.Int], @@ -647,7 +694,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue: _root_.scala.Option[_root_.scala.Predef.String], oneofIndex: _root_.scala.Option[_root_.scala.Int], jsonName: _root_.scala.Option[_root_.scala.Predef.String], - options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions] + options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions], + proto3Optional: _root_.scala.Option[_root_.scala.Boolean] ): _root_.com.google.protobuf.descriptor.FieldDescriptorProto = _root_.com.google.protobuf.descriptor.FieldDescriptorProto( name, number, @@ -658,6 +706,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue, oneofIndex, jsonName, - options + options, + proto3Optional ) } diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala index 2d4e3185e..1b316e237 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala @@ -77,8 +77,8 @@ import _root_.scalapb.internal.compat.JavaConverters._ * determining the namespace. * @param phpMetadataNamespace * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be used - * for determining the namespace. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. * @param rubyPackage * Use this option to change the package of ruby generated classes. Default * is empty. When this option is not set, the package name will be used for @@ -336,7 +336,7 @@ final case class FileOptions( def getDeprecated: _root_.scala.Boolean = deprecated.getOrElse(false) def clearDeprecated: FileOptions = copy(deprecated = _root_.scala.None) def withDeprecated(__v: _root_.scala.Boolean): FileOptions = copy(deprecated = Option(__v)) - def getCcEnableArenas: _root_.scala.Boolean = ccEnableArenas.getOrElse(false) + def getCcEnableArenas: _root_.scala.Boolean = ccEnableArenas.getOrElse(true) def clearCcEnableArenas: FileOptions = copy(ccEnableArenas = _root_.scala.None) def withCcEnableArenas(__v: _root_.scala.Boolean): FileOptions = copy(ccEnableArenas = Option(__v)) def getObjcClassPrefix: _root_.scala.Predef.String = objcClassPrefix.getOrElse("") diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala index 708a41b83..b6defc373 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala @@ -50,7 +50,7 @@ import _root_.scalapb.internal.compat.JavaConverters._ * * Implementations may choose not to generate the map_entry=true message, but * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementions still need to work as + * The reflection APIs in such implementations still need to work as * if the field is a repeated message field. * * NOTE: Do not set the option in .proto files. Always use the maps syntax diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala index 203e198d0..f08050c03 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala @@ -47,7 +47,7 @@ import _root_.scalapb.internal.compat.JavaConverters._ * beginning of the "extend" block and is shared by all extensions within * the block. * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendent. For example, a "group" defines + * does not mean that it is a descendant. For example, a "group" defines * both a type and a field in a single declaration. Thus, the locations * corresponding to the type and field and their components will overlap. * - Code which tries to interpret locations should probably be designed to diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/duration/Duration.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/duration/Duration.scala index 1acb048d0..40c90b9f5 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/duration/Duration.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/duration/Duration.scala @@ -26,7 +26,7 @@ package com.google.protobuf.duration * if (duration.seconds < 0 && duration.nanos > 0) { * duration.seconds += 1; * duration.nanos -= 1000000000; - * } else if (durations.seconds > 0 && duration.nanos < 0) { + * } else if (duration.seconds > 0 && duration.nanos < 0) { * duration.seconds -= 1; * duration.nanos += 1000000000; * } diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala index 517877829..76f759e03 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala @@ -204,7 +204,7 @@ import _root_.scalapb.internal.compat.JavaConverters._ * * The implementation of any API method which has a FieldMask type field in the * request should verify the included field paths, and return an - * `INVALID_ARGUMENT` error if any path is duplicated or unmappable. + * `INVALID_ARGUMENT` error if any path is unmappable. * * @param paths * The set of field mask paths. diff --git a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala index 9e5560ea4..dfe0800ea 100644 --- a/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala +++ b/scalapb-runtime/jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala @@ -78,11 +78,13 @@ package com.google.protobuf.timestamp * 01:30 UTC on January 15, 2017. * * In JavaScript, one can convert a Date object to this format using the - * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) + * standard + * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) * method. In Python, a standard `datetime.datetime` object can be converted - * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) - * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one - * can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( + * to this format using + * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with + * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use + * the Joda Time's [`ISODateTimeFormat.dateTime()`]( * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D * ) to obtain a formatter capable of generating timestamps in this format. * diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala index 993566c49..820fb42a8 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/CodeGeneratorResponse.scala @@ -16,10 +16,14 @@ package com.google.protobuf.compiler.plugin * problem in protoc itself -- such as the input CodeGeneratorRequest being * unparseable -- should be reported by writing a message to stderr and * exiting with a non-zero status code. + * @param supportedFeatures + * A bitmask of supported features that the code generator supports. + * This is a bitwise "or" of values from the Feature enum. */ @SerialVersionUID(0L) final case class CodeGeneratorResponse( error: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None, + supportedFeatures: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None, file: _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] = _root_.scala.Seq.empty, unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CodeGeneratorResponse] { @@ -31,6 +35,10 @@ final case class CodeGeneratorResponse( val __value = error.get __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value) }; + if (supportedFeatures.isDefined) { + val __value = supportedFeatures.get + __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(2, __value) + }; file.foreach { __item => val __value = __item __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize @@ -51,6 +59,10 @@ final case class CodeGeneratorResponse( val __m = __v _output__.writeString(1, __m) }; + supportedFeatures.foreach { __v => + val __m = __v + _output__.writeUInt64(2, __m) + }; file.foreach { __v => val __m = __v _output__.writeTag(15, 2) @@ -62,6 +74,9 @@ final case class CodeGeneratorResponse( def getError: _root_.scala.Predef.String = error.getOrElse("") def clearError: CodeGeneratorResponse = copy(error = _root_.scala.None) def withError(__v: _root_.scala.Predef.String): CodeGeneratorResponse = copy(error = Option(__v)) + def getSupportedFeatures: _root_.scala.Long = supportedFeatures.getOrElse(0L) + def clearSupportedFeatures: CodeGeneratorResponse = copy(supportedFeatures = _root_.scala.None) + def withSupportedFeatures(__v: _root_.scala.Long): CodeGeneratorResponse = copy(supportedFeatures = Option(__v)) def clearFile = copy(file = _root_.scala.Seq.empty) def addFile(__vs: com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File*): CodeGeneratorResponse = addAllFile(__vs) def addAllFile(__vs: Iterable[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]): CodeGeneratorResponse = copy(file = file ++ __vs) @@ -71,6 +86,7 @@ final case class CodeGeneratorResponse( def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { (__fieldNumber: @_root_.scala.unchecked) match { case 1 => error.orNull + case 2 => supportedFeatures.orNull case 15 => file } } @@ -78,6 +94,7 @@ final case class CodeGeneratorResponse( _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor) (__field.number: @_root_.scala.unchecked) match { case 1 => error.map(_root_.scalapb.descriptors.PString).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 2 => supportedFeatures.map(_root_.scalapb.descriptors.PLong).getOrElse(_root_.scalapb.descriptors.PEmpty) case 15 => _root_.scalapb.descriptors.PRepeated(file.iterator.map(_.toPMessage).toVector) } } @@ -89,6 +106,7 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl implicit def messageCompanion: scalapb.GeneratedMessageCompanion[com.google.protobuf.compiler.plugin.CodeGeneratorResponse] = this def merge(`_message__`: com.google.protobuf.compiler.plugin.CodeGeneratorResponse, `_input__`: _root_.com.google.protobuf.CodedInputStream): com.google.protobuf.compiler.plugin.CodeGeneratorResponse = { var __error = `_message__`.error + var __supportedFeatures = `_message__`.supportedFeatures val __file = (_root_.scala.collection.immutable.Vector.newBuilder[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] ++= `_message__`.file) var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null var _done__ = false @@ -98,6 +116,8 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl case 0 => _done__ = true case 10 => __error = Option(_input__.readStringRequireUtf8()) + case 16 => + __supportedFeatures = Option(_input__.readUInt64()) case 122 => __file += _root_.scalapb.LiteParser.readMessage(_input__, com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File.defaultInstance) case tag => @@ -109,6 +129,7 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl } com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = __error, + supportedFeatures = __supportedFeatures, file = __file.result(), unknownFields = if (_unknownFields__ == null) _message__.unknownFields else _unknownFields__.result() ) @@ -118,6 +139,7 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage == scalaDescriptor), "FieldDescriptor does not match message type.") com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), + supportedFeatures = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Long]]), file = __fieldsMap.get(scalaDescriptor.findFieldByNumber(15).get).map(_.as[_root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]]).getOrElse(_root_.scala.Seq.empty) ) case _ => throw new RuntimeException("Expected PMessage") @@ -138,8 +160,48 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber) lazy val defaultInstance = com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error = _root_.scala.None, + supportedFeatures = _root_.scala.None, file = _root_.scala.Seq.empty ) + /** Sync with code_generator.h. + */ + sealed abstract class Feature(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum { + type EnumType = Feature + def isFeatureNone: _root_.scala.Boolean = false + def isFeatureProto3Optional: _root_.scala.Boolean = false + def companion: _root_.scalapb.GeneratedEnumCompanion[Feature] = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature + final def asRecognized: _root_.scala.Option[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.Feature.Recognized]) + } + + object Feature extends _root_.scalapb.GeneratedEnumCompanion[Feature] { + sealed trait Recognized extends Feature + implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[Feature] = this + @SerialVersionUID(0L) + case object FEATURE_NONE extends Feature(0) with Feature.Recognized { + val index = 0 + val name = "FEATURE_NONE" + override def isFeatureNone: _root_.scala.Boolean = true + } + + @SerialVersionUID(0L) + case object FEATURE_PROTO3_OPTIONAL extends Feature(1) with Feature.Recognized { + val index = 1 + val name = "FEATURE_PROTO3_OPTIONAL" + override def isFeatureProto3Optional: _root_.scala.Boolean = true + } + + @SerialVersionUID(0L) + final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends Feature(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum + + lazy val values = scala.collection.immutable.Seq(FEATURE_NONE, FEATURE_PROTO3_OPTIONAL) + def fromValue(__value: _root_.scala.Int): Feature = __value match { + case 0 => FEATURE_NONE + case 1 => FEATURE_PROTO3_OPTIONAL + case __other => Unrecognized(__other) + } + def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.javaDescriptor.getEnumTypes.get(0) + def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = com.google.protobuf.compiler.plugin.CodeGeneratorResponse.scalaDescriptor.enums(0) + } /** Represents a single generated file. * * @param name @@ -351,15 +413,20 @@ object CodeGeneratorResponse extends scalapb.GeneratedMessageCompanion[com.googl implicit class CodeGeneratorResponseLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.compiler.plugin.CodeGeneratorResponse]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, com.google.protobuf.compiler.plugin.CodeGeneratorResponse](_l) { def error: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.getError)((c_, f_) => c_.copy(error = Option(f_))) def optionalError: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.error)((c_, f_) => c_.copy(error = f_)) + def supportedFeatures: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getSupportedFeatures)((c_, f_) => c_.copy(supportedFeatures = Option(f_))) + def optionalSupportedFeatures: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.supportedFeatures)((c_, f_) => c_.copy(supportedFeatures = f_)) def file: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File]] = field(_.file)((c_, f_) => c_.copy(file = f_)) } final val ERROR_FIELD_NUMBER = 1 + final val SUPPORTED_FEATURES_FIELD_NUMBER = 2 final val FILE_FIELD_NUMBER = 15 def of( error: _root_.scala.Option[_root_.scala.Predef.String], + supportedFeatures: _root_.scala.Option[_root_.scala.Long], file: _root_.scala.Seq[com.google.protobuf.compiler.plugin.CodeGeneratorResponse.File] ): _root_.com.google.protobuf.compiler.plugin.CodeGeneratorResponse = _root_.com.google.protobuf.compiler.plugin.CodeGeneratorResponse( error, + supportedFeatures, file ) } diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala index 4c2ce3155..8a8b83bfb 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/compiler/plugin/PluginProto.scala @@ -24,12 +24,14 @@ object PluginProto extends _root_.scalapb.GeneratedFileObject { AMoCUIT4j8QEg5maWxlVG9HZW5lcmF0ZVIOZmlsZVRvR2VuZXJhdGUSLAoJcGFyYW1ldGVyGAIgASgJQg7iPwsSCXBhcmFtZXRlc lIJcGFyYW1ldGVyElMKCnByb3RvX2ZpbGUYDyADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b0IO4j8LE glwcm90b0ZpbGVSCXByb3RvRmlsZRJiChBjb21waWxlcl92ZXJzaW9uGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyL - lZlcnNpb25CFOI/ERIPY29tcGlsZXJWZXJzaW9uUg9jb21waWxlclZlcnNpb24inAIKFUNvZGVHZW5lcmF0b3JSZXNwb25zZRIgC - gVlcnJvchgBIAEoCUIK4j8HEgVlcnJvclIFZXJyb3ISUwoEZmlsZRgPIAMoCzI0Lmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db - 2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZUIJ4j8GEgRmaWxlUgRmaWxlGosBCgRGaWxlEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZ - VIEbmFtZRI8Cg9pbnNlcnRpb25fcG9pbnQYAiABKAlCE+I/EBIOaW5zZXJ0aW9uUG9pbnRSDmluc2VydGlvblBvaW50EiYKB2Nvb - nRlbnQYDyABKAlCDOI/CRIHY29udGVudFIHY29udGVudEJnChxjb20uZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyQgxQbHVnaW5Qc - m90b3NaOWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vcGx1Z2luO3BsdWdpbl9nbw==""" + lZlcnNpb25CFOI/ERIPY29tcGlsZXJWZXJzaW9uUg9jb21waWxlclZlcnNpb24inQMKFUNvZGVHZW5lcmF0b3JSZXNwb25zZRIgC + gVlcnJvchgBIAEoCUIK4j8HEgVlcnJvclIFZXJyb3ISRQoSc3VwcG9ydGVkX2ZlYXR1cmVzGAIgASgEQhbiPxMSEXN1cHBvcnRlZ + EZlYXR1cmVzUhFzdXBwb3J0ZWRGZWF0dXJlcxJTCgRmaWxlGA8gAygLMjQuZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZ + W5lcmF0b3JSZXNwb25zZS5GaWxlQgniPwYSBGZpbGVSBGZpbGUaiwEKBEZpbGUSHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuY + W1lEjwKD2luc2VydGlvbl9wb2ludBgCIAEoCUIT4j8QEg5pbnNlcnRpb25Qb2ludFIOaW5zZXJ0aW9uUG9pbnQSJgoHY29udGVud + BgPIAEoCUIM4j8JEgdjb250ZW50Ugdjb250ZW50IjgKB0ZlYXR1cmUSEAoMRkVBVFVSRV9OT05FEAASGwoXRkVBVFVSRV9QUk9UT + zNfT1BUSU9OQUwQAUJnChxjb20uZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyQgxQbHVnaW5Qcm90b3NaOWdpdGh1Yi5jb20vZ29sY + W5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vcGx1Z2luO3BsdWdpbl9nbw==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala index f247ac2c3..4ea7bcb08 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProto.scala @@ -323,6 +323,11 @@ object DescriptorProto extends scalapb.GeneratedMessageCompanion[com.google.prot reservedRange = _root_.scala.Seq.empty, reservedName = _root_.scala.Seq.empty ) + /** @param start + * Inclusive. + * @param end + * Exclusive. + */ @SerialVersionUID(0L) final case class ExtensionRange( start: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None, diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala index 5bf9ff7ee..70934a789 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/DescriptorProtoCompanion.scala @@ -61,7 +61,7 @@ object DescriptorProtoCompanion extends _root_.scalapb.GeneratedFileObject { G9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMaTQoNUmVzZXJ2ZWRSYW5nZRIgCgVzdGFyd BgBIAEoBUIK4j8HEgVzdGFydFIFc3RhcnQSGgoDZW5kGAIgASgFQgjiPwUSA2VuZFIDZW5kIpYBChVFeHRlbnNpb25SYW5nZU9wd GlvbnMScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CG - OI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIqYHChRGaWVsZERlc2NyaXB0b + OI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIuQHChRGaWVsZERlc2NyaXB0b 3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSIwoGbnVtYmVyGAMgASgFQgviPwgSBm51bWJlclIGbnVtYmVyE k0KBWxhYmVsGAQgASgOMisuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsQgriPwcSBWxhYmVsUgVsY WJlbBJJCgR0eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVCCeI/BhIEdHlwZVIEd @@ -69,101 +69,101 @@ object DescriptorProtoCompanion extends _root_.scalapb.GeneratedFileObject { GVuZGVlUghleHRlbmRlZRI2Cg1kZWZhdWx0X3ZhbHVlGAcgASgJQhHiPw4SDGRlZmF1bHRWYWx1ZVIMZGVmYXVsdFZhbHVlEjAKC 29uZW9mX2luZGV4GAkgASgFQg/iPwwSCm9uZW9mSW5kZXhSCm9uZW9mSW5kZXgSKgoJanNvbl9uYW1lGAogASgJQg3iPwoSCGpzb 25OYW1lUghqc29uTmFtZRJFCgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc0IM4j8JEgdvcHRpb - 25zUgdvcHRpb25zIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUW - VBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT - 0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLV - FlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU - 0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUVVJUkVEEAISE - goOTEFCRUxfUkVQRUFURUQQAyJ8ChRPbmVvZkRlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSR - QoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb3B0aW9ucyLFAwoTR - W51bURlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSSwoFdmFsdWUYAiADKAsyKS5nb29nbGUuc - HJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvQgriPwcSBXZhbHVlUgV2YWx1ZRJECgdvcHRpb25zGAMgASgLMhwuZ29vZ - 2xlLnByb3RvYnVmLkVudW1PcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMScQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb - 29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZUIS4j8PEg1yZXNlcnZlZFJhbmdlUg1yZ - XNlcnZlZFJhbmdlEjYKDXJlc2VydmVkX25hbWUYBSADKAlCEeI/DhIMcmVzZXJ2ZWROYW1lUgxyZXNlcnZlZE5hbWUaUQoRRW51b - VJlc2VydmVkUmFuZ2USIAoFc3RhcnQYASABKAVCCuI/BxIFc3RhcnRSBXN0YXJ0EhoKA2VuZBgCIAEoBUII4j8FEgNlbmRSA2VuZ - CKpAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRIjCgZudW1iZXIYAiABK - AVCC+I/CBIGbnVtYmVyUgZudW1iZXISSQoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zQ - gziPwkSB29wdGlvbnNSB29wdGlvbnMizQEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lU - gRuYW1lEksKBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9CC+I/CBIGbWV0aG9kU - gZtZXRob2QSRwoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvc - HRpb25zIu8CChVNZXRob2REZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuYW1lEi0KCmlucHV0X3R5c - GUYAiABKAlCDuI/CxIJaW5wdXRUeXBlUglpbnB1dFR5cGUSMAoLb3V0cHV0X3R5cGUYAyABKAlCD+I/DBIKb3V0cHV0VHlwZVIKb - 3V0cHV0VHlwZRJGCgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb - 3B0aW9ucxJGChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZUIU4j8REg9jbGllbnRTdHJlYW1pbmdSD2NsaWVudFN0cmVhb - WluZxJGChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZUIU4j8REg9zZXJ2ZXJTdHJlYW1pbmdSD3NlcnZlclN0cmVhbWluZ - yLlDAoLRmlsZU9wdGlvbnMSMwoMamF2YV9wYWNrYWdlGAEgASgJQhDiPw0SC2phdmFQYWNrYWdlUgtqYXZhUGFja2FnZRJJChRqY - XZhX291dGVyX2NsYXNzbmFtZRgIIAEoCUIX4j8UEhJqYXZhT3V0ZXJDbGFzc25hbWVSEmphdmFPdXRlckNsYXNzbmFtZRJNChNqY - XZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZUIW4j8TEhFqYXZhTXVsdGlwbGVGaWxlc1IRamF2YU11bHRpcGxlRmlsZXMSY - godamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCIBgB4j8bEhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoUhlqY - XZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoElQKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlQhjiPxUSE2phdmFTd - HJpbmdDaGVja1V0ZjhSE2phdmFTdHJpbmdDaGVja1V0ZjgSZQoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVmL - kZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRURCEOI/DRILb3B0aW1pemVGb3JSC29wdGltaXplRm9yEi0KCmdvX3BhY2thZ - 2UYCyABKAlCDuI/CxIJZ29QYWNrYWdlUglnb1BhY2thZ2USTQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VCFuI/E - xIRY2NHZW5lcmljU2VydmljZXNSEWNjR2VuZXJpY1NlcnZpY2VzElMKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc - 2VCGOI/FRITamF2YUdlbmVyaWNTZXJ2aWNlc1ITamF2YUdlbmVyaWNTZXJ2aWNlcxJNChNweV9nZW5lcmljX3NlcnZpY2VzGBIgA - SgIOgVmYWxzZUIW4j8TEhFweUdlbmVyaWNTZXJ2aWNlc1IRcHlHZW5lcmljU2VydmljZXMSUAoUcGhwX2dlbmVyaWNfc2VydmljZ - XMYKiABKAg6BWZhbHNlQhfiPxQSEnBocEdlbmVyaWNTZXJ2aWNlc1IScGhwR2VuZXJpY1NlcnZpY2VzEjYKCmRlcHJlY2F0ZWQYF - yABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSRAoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoFZmFsc2VCE - +I/EBIOY2NFbmFibGVBcmVuYXNSDmNjRW5hYmxlQXJlbmFzEkAKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJQhTiPxESD29iamNDb - GFzc1ByZWZpeFIPb2JqY0NsYXNzUHJlZml4Ej8KEGNzaGFycF9uYW1lc3BhY2UYJSABKAlCFOI/ERIPY3NoYXJwTmFtZXNwYWNlU - g9jc2hhcnBOYW1lc3BhY2USMwoMc3dpZnRfcHJlZml4GCcgASgJQhDiPw0SC3N3aWZ0UHJlZml4Ugtzd2lmdFByZWZpeBI9ChBwa - HBfY2xhc3NfcHJlZml4GCggASgJQhPiPxASDnBocENsYXNzUHJlZml4Ug5waHBDbGFzc1ByZWZpeBI2Cg1waHBfbmFtZXNwYWNlG - CkgASgJQhHiPw4SDHBocE5hbWVzcGFjZVIMcGhwTmFtZXNwYWNlEk8KFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlCGeI/F - hIUcGhwTWV0YWRhdGFOYW1lc3BhY2VSFHBocE1ldGFkYXRhTmFtZXNwYWNlEjMKDHJ1YnlfcGFja2FnZRgtIAEoCUIQ4j8NEgtyd - WJ5UGFja2FnZVILcnVieVBhY2thZ2UScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVua - W50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiI6CgxPcHRpbWl6Z - U1vZGUSCQoFU1BFRUQQARINCglDT0RFX1NJWkUQAhIQCgxMSVRFX1JVTlRJTUUQAyoJCOgHEICAgIACSgQIJhAnIskDCg5NZXNzY - WdlT3B0aW9ucxJXChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2VCGeI/FhIUbWVzc2FnZVNldFdpcmVGb3JtY - XRSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0Em8KH25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlQiHiP - x4SHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISNgoKZGVwcmVjYXRlZ - BgDIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBIqCgltYXBfZW50cnkYByABKAhCDeI/ChIIbWFwRW50c - nlSCG1hcEVudHJ5EnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT - 3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAgQCUoECAkQC - iLJBAoMRmllbGRPcHRpb25zEk0KBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSS - U5HQgriPwcSBWN0eXBlUgVjdHlwZRIjCgZwYWNrZWQYAiABKAhCC+I/CBIGcGFja2VkUgZwYWNrZWQSVAoGanN0eXBlGAYgASgOM - iQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTEIL4j8IEgZqc3R5cGVSBmpzdHlwZRIkCgRsY - Xp5GAUgASgIOgVmYWxzZUIJ4j8GEgRsYXp5UgRsYXp5EjYKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0Z - WRSCmRlcHJlY2F0ZWQSJAoEd2VhaxgKIAEoCDoFZmFsc2VCCeI/BhIEd2Vha1IEd2VhaxJyChR1bmludGVycHJldGVkX29wdGlvb - hjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1bmludGVycHJldGVkT3B0aW9uUhN1b - mludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5c - GUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIqCQjoBxCAgICAAkoECAQQBSKNAQoMT25lb2ZPc - HRpb25zEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uQ - hjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiL8AQoLRW51bU9wdGlvbnMSM - AoLYWxsb3dfYWxpYXMYAiABKAhCD+I/DBIKYWxsb3dBbGlhc1IKYWxsb3dBbGlhcxI2CgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZ - UIP4j8MEgpkZXByZWNhdGVkUgpkZXByZWNhdGVkEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b - 2J1Zi5VbmludGVycHJldGVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoB - xCAgICAAkoECAUQBiLJAQoQRW51bVZhbHVlT3B0aW9ucxI2CgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZUIP4j8MEgpkZXByZWNhd - GVkUgpkZXByZWNhdGVkEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJld - GVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLHAQoOU2Vyd - mljZU9wdGlvbnMSNgoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBJyChR1bmlud + 25zUgdvcHRpb25zEjwKD3Byb3RvM19vcHRpb25hbBgRIAEoCEIT4j8QEg5wcm90bzNPcHRpb25hbFIOcHJvdG8zT3B0aW9uYWwit + gIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSD + goKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU + 1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANE + g0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUW + VBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQ + VRFRBADInwKFE9uZW9mRGVzY3JpcHRvclByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRJFCgdvcHRpb25zGAIgA + SgLMh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvcHRpb25zIsUDChNFbnVtRGVzY3JpcHRvc + lByb3RvEh0KBG5hbWUYASABKAlCCeI/BhIEbmFtZVIEbmFtZRJLCgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtV + mFsdWVEZXNjcmlwdG9yUHJvdG9CCuI/BxIFdmFsdWVSBXZhbHVlEkQKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuR + W51bU9wdGlvbnNCDOI/CRIHb3B0aW9uc1IHb3B0aW9ucxJxCg5yZXNlcnZlZF9yYW5nZRgEIAMoCzI2Lmdvb2dsZS5wcm90b2J1Z + i5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlQhLiPw8SDXJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USN + goNcmVzZXJ2ZWRfbmFtZRgFIAMoCUIR4j8OEgxyZXNlcnZlZE5hbWVSDHJlc2VydmVkTmFtZRpRChFFbnVtUmVzZXJ2ZWRSYW5nZ + RIgCgVzdGFydBgBIAEoBUIK4j8HEgVzdGFydFIFc3RhcnQSGgoDZW5kGAIgASgFQgjiPwUSA2VuZFIDZW5kIqkBChhFbnVtVmFsd + WVEZXNjcmlwdG9yUHJvdG8SHQoEbmFtZRgBIAEoCUIJ4j8GEgRuYW1lUgRuYW1lEiMKBm51bWJlchgCIAEoBUIL4j8IEgZudW1iZ + XJSBm51bWJlchJJCgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNCDOI/CRIHb3B0aW9uc + 1IHb3B0aW9ucyLNAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSSwoGbWV0a + G9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b0IL4j8IEgZtZXRob2RSBm1ldGhvZBJHCgdvc + HRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zQgziPwkSB29wdGlvbnNSB29wdGlvbnMi7wIKFU1ld + GhvZERlc2NyaXB0b3JQcm90bxIdCgRuYW1lGAEgASgJQgniPwYSBG5hbWVSBG5hbWUSLQoKaW5wdXRfdHlwZRgCIAEoCUIO4j8LE + glpbnB1dFR5cGVSCWlucHV0VHlwZRIwCgtvdXRwdXRfdHlwZRgDIAEoCUIP4j8MEgpvdXRwdXRUeXBlUgpvdXRwdXRUeXBlEkYKB + 29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc0IM4j8JEgdvcHRpb25zUgdvcHRpb25zEkYKEGNsa + WVudF9zdHJlYW1pbmcYBSABKAg6BWZhbHNlQhTiPxESD2NsaWVudFN0cmVhbWluZ1IPY2xpZW50U3RyZWFtaW5nEkYKEHNlcnZlc + l9zdHJlYW1pbmcYBiABKAg6BWZhbHNlQhTiPxESD3NlcnZlclN0cmVhbWluZ1IPc2VydmVyU3RyZWFtaW5nIuQMCgtGaWxlT3B0a + W9ucxIzCgxqYXZhX3BhY2thZ2UYASABKAlCEOI/DRILamF2YVBhY2thZ2VSC2phdmFQYWNrYWdlEkkKFGphdmFfb3V0ZXJfY2xhc + 3NuYW1lGAggASgJQhfiPxQSEmphdmFPdXRlckNsYXNzbmFtZVISamF2YU91dGVyQ2xhc3NuYW1lEk0KE2phdmFfbXVsdGlwbGVfZ + mlsZXMYCiABKAg6BWZhbHNlQhbiPxMSEWphdmFNdWx0aXBsZUZpbGVzUhFqYXZhTXVsdGlwbGVGaWxlcxJiCh1qYXZhX2dlbmVyY + XRlX2VxdWFsc19hbmRfaGFzaBgUIAEoCEIgGAHiPxsSGWphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2hSGWphdmFHZW5lcmF0ZUVxd + WFsc0FuZEhhc2gSVAoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoFZmFsc2VCGOI/FRITamF2YVN0cmluZ0NoZWNrVXRmO + FITamF2YVN0cmluZ0NoZWNrVXRmOBJlCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT + 3B0aW1pemVNb2RlOgVTUEVFREIQ4j8NEgtvcHRpbWl6ZUZvclILb3B0aW1pemVGb3ISLQoKZ29fcGFja2FnZRgLIAEoCUIO4j8LE + glnb1BhY2thZ2VSCWdvUGFja2FnZRJNChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZUIW4j8TEhFjY0dlbmVyaWNTZ + XJ2aWNlc1IRY2NHZW5lcmljU2VydmljZXMSUwoVamF2YV9nZW5lcmljX3NlcnZpY2VzGBEgASgIOgVmYWxzZUIY4j8VEhNqYXZhR + 2VuZXJpY1NlcnZpY2VzUhNqYXZhR2VuZXJpY1NlcnZpY2VzEk0KE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlQhbiP + xMSEXB5R2VuZXJpY1NlcnZpY2VzUhFweUdlbmVyaWNTZXJ2aWNlcxJQChRwaHBfZ2VuZXJpY19zZXJ2aWNlcxgqIAEoCDoFZmFsc + 2VCF+I/FBIScGhwR2VuZXJpY1NlcnZpY2VzUhJwaHBHZW5lcmljU2VydmljZXMSNgoKZGVwcmVjYXRlZBgXIAEoCDoFZmFsc2VCD + +I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBJDChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlQhPiPxASDmNjRW5hYmxlQ + XJlbmFzUg5jY0VuYWJsZUFyZW5hcxJAChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCUIU4j8REg9vYmpjQ2xhc3NQcmVmaXhSD29ia + mNDbGFzc1ByZWZpeBI/ChBjc2hhcnBfbmFtZXNwYWNlGCUgASgJQhTiPxESD2NzaGFycE5hbWVzcGFjZVIPY3NoYXJwTmFtZXNwY + WNlEjMKDHN3aWZ0X3ByZWZpeBgnIAEoCUIQ4j8NEgtzd2lmdFByZWZpeFILc3dpZnRQcmVmaXgSPQoQcGhwX2NsYXNzX3ByZWZpe + BgoIAEoCUIT4j8QEg5waHBDbGFzc1ByZWZpeFIOcGhwQ2xhc3NQcmVmaXgSNgoNcGhwX25hbWVzcGFjZRgpIAEoCUIR4j8OEgxwa + HBOYW1lc3BhY2VSDHBocE5hbWVzcGFjZRJPChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJQhniPxYSFHBocE1ldGFkYXRhT + mFtZXNwYWNlUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIzCgxydWJ5X3BhY2thZ2UYLSABKAlCEOI/DRILcnVieVBhY2thZ2VSC3J1Y + nlQYWNrYWdlEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0a + W9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEE + AESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyLJAwoOTWVzc2FnZU9wdGlvbnMSVwoXb + WVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlQhniPxYSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0UhRtZXNzYWdlU2V0V + 2lyZUZvcm1hdBJvCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZUIh4j8eEhxub1N0YW5kYXJkR + GVzY3JpcHRvckFjY2Vzc29yUhxub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yEjYKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlQ + g/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSKgoJbWFwX2VudHJ5GAcgASgIQg3iPwoSCG1hcEVudHJ5UghtYXBFbnRyeRJyC + hR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1b + mludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgIEAlKBAgJEAoiyQQKDEZpZWxkT3B0a + W9ucxJNCgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklOR0IK4j8HEgVjdHlwZ + VIFY3R5cGUSIwoGcGFja2VkGAIgASgIQgviPwgSBnBhY2tlZFIGcGFja2VkElQKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b + 2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxCC+I/CBIGanN0eXBlUgZqc3R5cGUSJAoEbGF6eRgFIAEoCDoFZmFsc + 2VCCeI/BhIEbGF6eVIEbGF6eRI2CgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZUIP4j8MEgpkZXByZWNhdGVkUgpkZXByZWNhdGVkE + iQKBHdlYWsYCiABKAg6BWZhbHNlQgniPwYSBHdlYWtSBHdlYWsScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ + 2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wd + GlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BT + BAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQgICAgAJKBAgEEAUijQEKDE9uZW9mT3B0aW9ucxJyChR1bmlud GVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VEhN1bmludGVyc - HJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIiowMKDU1ldGhvZE9wdGlvbnMSNgoKZGVwcmVjYXRlZ - BghIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZBKIAQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb - 29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOQhXiPxISEGlkZ - W1wb3RlbmN5TGV2ZWxSEGlkZW1wb3RlbmN5TGV2ZWwScgoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb - 3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiJQC - hBJZGVtcG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19TSURFX0VGRkVDVFMQARIOCgpJREVNUE9UR - U5UEAIqCQjoBxCAgICAAiLDBAoTVW5pbnRlcnByZXRlZE9wdGlvbhJMCgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3RvYnVmLlVua - W50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRCCeI/BhIEbmFtZVIEbmFtZRI/ChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJQhTiPxESD - 2lkZW50aWZpZXJWYWx1ZVIPaWRlbnRpZmllclZhbHVlEkMKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBEIV4j8SEhBwb3NpdGl2Z - UludFZhbHVlUhBwb3NpdGl2ZUludFZhbHVlEkMKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA0IV4j8SEhBuZWdhdGl2ZUludFZhb - HVlUhBuZWdhdGl2ZUludFZhbHVlEjMKDGRvdWJsZV92YWx1ZRgGIAEoAUIQ4j8NEgtkb3VibGVWYWx1ZVILZG91YmxlVmFsdWUSM - woMc3RyaW5nX3ZhbHVlGAcgASgMQhDiPw0SC3N0cmluZ1ZhbHVlUgtzdHJpbmdWYWx1ZRI8Cg9hZ2dyZWdhdGVfdmFsdWUYCCABK - AlCE+I/EBIOYWdncmVnYXRlVmFsdWVSDmFnZ3JlZ2F0ZVZhbHVlGmsKCE5hbWVQYXJ0EioKCW5hbWVfcGFydBgBIAIoCUIN4j8KE - ghuYW1lUGFydFIIbmFtZVBhcnQSMwoMaXNfZXh0ZW5zaW9uGAIgAigIQhDiPw0SC2lzRXh0ZW5zaW9uUgtpc0V4dGVuc2lvbiKTA - woOU291cmNlQ29kZUluZm8SUwoIbG9jYXRpb24YASADKAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb - 25CDeI/ChIIbG9jYXRpb25SCGxvY2F0aW9uGqsCCghMb2NhdGlvbhIfCgRwYXRoGAEgAygFQgsQAeI/BhIEcGF0aFIEcGF0aBIfC - gRzcGFuGAIgAygFQgsQAeI/BhIEc3BhblIEc3BhbhI/ChBsZWFkaW5nX2NvbW1lbnRzGAMgASgJQhTiPxESD2xlYWRpbmdDb21tZ - W50c1IPbGVhZGluZ0NvbW1lbnRzEkIKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJQhXiPxISEHRyYWlsaW5nQ29tbWVudHNSEHRyY - WlsaW5nQ29tbWVudHMSWAoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMoCUIc4j8ZEhdsZWFkaW5nRGV0YWNoZWRDb21tZ - W50c1IXbGVhZGluZ0RldGFjaGVkQ29tbWVudHMikwIKEUdlbmVyYXRlZENvZGVJbmZvEl4KCmFubm90YXRpb24YASADKAsyLS5nb - 29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbkIP4j8MEgphbm5vdGF0aW9uUgphbm5vdGF0aW9uGp0BC - gpBbm5vdGF0aW9uEh8KBHBhdGgYASADKAVCCxAB4j8GEgRwYXRoUgRwYXRoEjAKC3NvdXJjZV9maWxlGAIgASgJQg/iPwwSCnNvd - XJjZUZpbGVSCnNvdXJjZUZpbGUSIAoFYmVnaW4YAyABKAVCCuI/BxIFYmVnaW5SBWJlZ2luEhoKA2VuZBgEIAEoBUII4j8FEgNlb - mRSA2VuZEKPAQoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRvclByb3Rvc0gBWj5naXRodWIuY29tL2dvbGFuZy9wcm90b - 2J1Zi9wcm90b2MtZ2VuLWdvL2Rlc2NyaXB0b3I7ZGVzY3JpcHRvcvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0a - W9u""" + HJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi/AEKC0VudW1PcHRpb25zEjAKC2FsbG93X2FsaWFzG + AIgASgIQg/iPwwSCmFsbG93QWxpYXNSCmFsbG93QWxpYXMSNgoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjY + XRlZFIKZGVwcmVjYXRlZBJyChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZ + XRlZE9wdGlvbkIY4j8VEhN1bmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYiy + QEKEEVudW1WYWx1ZU9wdGlvbnMSNgoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VCD+I/DBIKZGVwcmVjYXRlZFIKZGVwcmVjYXRlZ + BJyChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbkIY4j8VE + hN1bmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIixwEKDlNlcnZpY2VPcHRpb25zEjYKC + mRlcHJlY2F0ZWQYISABKAg6BWZhbHNlQg/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQScgoUdW5pbnRlcnByZXRlZF9vcHRpb + 24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25CGOI/FRITdW5pbnRlcnByZXRlZE9wdGlvblITd + W5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIqMDCg1NZXRob2RPcHRpb25zEjYKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlQ + g/iPwwSCmRlcHJlY2F0ZWRSCmRlcHJlY2F0ZWQSiAEKEWlkZW1wb3RlbmN5X2xldmVsGCIgASgOMi8uZ29vZ2xlLnByb3RvYnVmL + k1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbDoTSURFTVBPVEVOQ1lfVU5LTk9XTkIV4j8SEhBpZGVtcG90ZW5jeUxldmVsU + hBpZGVtcG90ZW5jeUxldmVsEnIKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVyc + HJldGVkT3B0aW9uQhjiPxUSE3VuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZ + XZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAg + AIiwwQKE1VuaW50ZXJwcmV0ZWRPcHRpb24STAoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0a + W9uLk5hbWVQYXJ0QgniPwYSBG5hbWVSBG5hbWUSPwoQaWRlbnRpZmllcl92YWx1ZRgDIAEoCUIU4j8REg9pZGVudGlmaWVyVmFsd + WVSD2lkZW50aWZpZXJWYWx1ZRJDChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARCFeI/EhIQcG9zaXRpdmVJbnRWYWx1ZVIQcG9za + XRpdmVJbnRWYWx1ZRJDChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKANCFeI/EhIQbmVnYXRpdmVJbnRWYWx1ZVIQbmVnYXRpdmVJb + nRWYWx1ZRIzCgxkb3VibGVfdmFsdWUYBiABKAFCEOI/DRILZG91YmxlVmFsdWVSC2RvdWJsZVZhbHVlEjMKDHN0cmluZ192YWx1Z + RgHIAEoDEIQ4j8NEgtzdHJpbmdWYWx1ZVILc3RyaW5nVmFsdWUSPAoPYWdncmVnYXRlX3ZhbHVlGAggASgJQhPiPxASDmFnZ3JlZ + 2F0ZVZhbHVlUg5hZ2dyZWdhdGVWYWx1ZRprCghOYW1lUGFydBIqCgluYW1lX3BhcnQYASACKAlCDeI/ChIIbmFtZVBhcnRSCG5hb + WVQYXJ0EjMKDGlzX2V4dGVuc2lvbhgCIAIoCEIQ4j8NEgtpc0V4dGVuc2lvblILaXNFeHRlbnNpb24ikwMKDlNvdXJjZUNvZGVJb + mZvElMKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uQg3iPwoSCGxvY2F0a + W9uUghsb2NhdGlvbhqrAgoITG9jYXRpb24SHwoEcGF0aBgBIAMoBUILEAHiPwYSBHBhdGhSBHBhdGgSHwoEc3BhbhgCIAMoBUILE + AHiPwYSBHNwYW5SBHNwYW4SPwoQbGVhZGluZ19jb21tZW50cxgDIAEoCUIU4j8REg9sZWFkaW5nQ29tbWVudHNSD2xlYWRpbmdDb + 21tZW50cxJCChF0cmFpbGluZ19jb21tZW50cxgEIAEoCUIV4j8SEhB0cmFpbGluZ0NvbW1lbnRzUhB0cmFpbGluZ0NvbW1lbnRzE + lgKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlCHOI/GRIXbGVhZGluZ0RldGFjaGVkQ29tbWVudHNSF2xlYWRpbmdEZ + XRhY2hlZENvbW1lbnRzIpMCChFHZW5lcmF0ZWRDb2RlSW5mbxJeCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmL + kdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25CD+I/DBIKYW5ub3RhdGlvblIKYW5ub3RhdGlvbhqdAQoKQW5ub3RhdGlvbhIfC + gRwYXRoGAEgAygFQgsQAeI/BhIEcGF0aFIEcGF0aBIwCgtzb3VyY2VfZmlsZRgCIAEoCUIP4j8MEgpzb3VyY2VGaWxlUgpzb3VyY + 2VGaWxlEiAKBWJlZ2luGAMgASgFQgriPwcSBWJlZ2luUgViZWdpbhIaCgNlbmQYBCABKAVCCOI/BRIDZW5kUgNlbmRCjwEKE2Nvb + S5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVo+Z2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG9jLWdlb + i1nby9kZXNjcmlwdG9yO2Rlc2NyaXB0b3L4AQGiAgNHUEKqAhpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbg==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala index cf1033eaa..22ed09a5b 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FieldDescriptorProto.scala @@ -33,6 +33,28 @@ package com.google.protobuf.descriptor * user has set a "json_name" option on this field, that option's value * will be used. Otherwise, it's deduced from the field's name by converting * it to camelCase. + * @param proto3Optional + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. */ @SerialVersionUID(0L) final case class FieldDescriptorProto( @@ -46,6 +68,7 @@ final case class FieldDescriptorProto( oneofIndex: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None, jsonName: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None, options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions] = _root_.scala.None, + proto3Optional: _root_.scala.Option[_root_.scala.Boolean] = _root_.scala.None, unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[FieldDescriptorProto] { @transient @@ -92,6 +115,10 @@ final case class FieldDescriptorProto( val __value = options.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (proto3Optional.isDefined) { + val __value = proto3Optional.get + __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(17, __value) + }; __size += unknownFields.serializedSize __size } @@ -146,6 +173,10 @@ final case class FieldDescriptorProto( val __m = __v _output__.writeString(10, __m) }; + proto3Optional.foreach { __v => + val __m = __v + _output__.writeBool(17, __m) + }; unknownFields.writeTo(_output__) } def getName: _root_.scala.Predef.String = name.getOrElse("") @@ -178,6 +209,9 @@ final case class FieldDescriptorProto( def getOptions: com.google.protobuf.descriptor.FieldOptions = options.getOrElse(com.google.protobuf.descriptor.FieldOptions.defaultInstance) def clearOptions: FieldDescriptorProto = copy(options = _root_.scala.None) def withOptions(__v: com.google.protobuf.descriptor.FieldOptions): FieldDescriptorProto = copy(options = Option(__v)) + def getProto3Optional: _root_.scala.Boolean = proto3Optional.getOrElse(false) + def clearProto3Optional: FieldDescriptorProto = copy(proto3Optional = _root_.scala.None) + def withProto3Optional(__v: _root_.scala.Boolean): FieldDescriptorProto = copy(proto3Optional = Option(__v)) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty) def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { @@ -192,6 +226,7 @@ final case class FieldDescriptorProto( case 9 => oneofIndex.orNull case 10 => jsonName.orNull case 8 => options.orNull + case 17 => proto3Optional.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -207,6 +242,7 @@ final case class FieldDescriptorProto( case 9 => oneofIndex.map(_root_.scalapb.descriptors.PInt).getOrElse(_root_.scalapb.descriptors.PEmpty) case 10 => jsonName.map(_root_.scalapb.descriptors.PString).getOrElse(_root_.scalapb.descriptors.PEmpty) case 8 => options.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 17 => proto3Optional.map(_root_.scalapb.descriptors.PBoolean).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -226,6 +262,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google var __oneofIndex = `_message__`.oneofIndex var __jsonName = `_message__`.jsonName var __options = `_message__`.options + var __proto3Optional = `_message__`.proto3Optional var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null var _done__ = false while (!_done__) { @@ -252,6 +289,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google __jsonName = Option(_input__.readStringRequireUtf8()) case 66 => __options = Option(_root_.scalapb.LiteParser.readMessage(_input__, __options.getOrElse(com.google.protobuf.descriptor.FieldOptions.defaultInstance))) + case 136 => + __proto3Optional = Option(_input__.readBool()) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder(_message__.unknownFields) @@ -270,6 +309,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google oneofIndex = __oneofIndex, jsonName = __jsonName, options = __options, + proto3Optional = __proto3Optional, unknownFields = if (_unknownFields__ == null) _message__.unknownFields else _unknownFields__.result() ) } @@ -286,7 +326,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), oneofIndex = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Int]]), jsonName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(10).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]), - options = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]]) + options = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]]), + proto3Optional = __fieldsMap.get(scalaDescriptor.findFieldByNumber(17).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Boolean]]) ) case _ => throw new RuntimeException("Expected PMessage") } @@ -316,7 +357,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue = _root_.scala.None, oneofIndex = _root_.scala.None, jsonName = _root_.scala.None, - options = _root_.scala.None + options = _root_.scala.None, + proto3Optional = _root_.scala.None ) sealed abstract class Type(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum { type EnumType = Type @@ -590,6 +632,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google def optionalJsonName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.jsonName)((c_, f_) => c_.copy(jsonName = f_)) def options: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.descriptor.FieldOptions] = field(_.getOptions)((c_, f_) => c_.copy(options = Option(f_))) def optionalOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions]] = field(_.options)((c_, f_) => c_.copy(options = f_)) + def proto3Optional: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getProto3Optional)((c_, f_) => c_.copy(proto3Optional = Option(f_))) + def optionalProto3Optional: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.proto3Optional)((c_, f_) => c_.copy(proto3Optional = f_)) } final val NAME_FIELD_NUMBER = 1 final val NUMBER_FIELD_NUMBER = 3 @@ -601,6 +645,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google final val ONEOF_INDEX_FIELD_NUMBER = 9 final val JSON_NAME_FIELD_NUMBER = 10 final val OPTIONS_FIELD_NUMBER = 8 + final val PROTO3_OPTIONAL_FIELD_NUMBER = 17 def of( name: _root_.scala.Option[_root_.scala.Predef.String], number: _root_.scala.Option[_root_.scala.Int], @@ -611,7 +656,8 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue: _root_.scala.Option[_root_.scala.Predef.String], oneofIndex: _root_.scala.Option[_root_.scala.Int], jsonName: _root_.scala.Option[_root_.scala.Predef.String], - options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions] + options: _root_.scala.Option[com.google.protobuf.descriptor.FieldOptions], + proto3Optional: _root_.scala.Option[_root_.scala.Boolean] ): _root_.com.google.protobuf.descriptor.FieldDescriptorProto = _root_.com.google.protobuf.descriptor.FieldDescriptorProto( name, number, @@ -622,6 +668,7 @@ object FieldDescriptorProto extends scalapb.GeneratedMessageCompanion[com.google defaultValue, oneofIndex, jsonName, - options + options, + proto3Optional ) } diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala index 89c5110bd..17e56e5a3 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/FileOptions.scala @@ -76,8 +76,8 @@ package com.google.protobuf.descriptor * determining the namespace. * @param phpMetadataNamespace * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be used - * for determining the namespace. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. * @param rubyPackage * Use this option to change the package of ruby generated classes. Default * is empty. When this option is not set, the package name will be used for @@ -335,7 +335,7 @@ final case class FileOptions( def getDeprecated: _root_.scala.Boolean = deprecated.getOrElse(false) def clearDeprecated: FileOptions = copy(deprecated = _root_.scala.None) def withDeprecated(__v: _root_.scala.Boolean): FileOptions = copy(deprecated = Option(__v)) - def getCcEnableArenas: _root_.scala.Boolean = ccEnableArenas.getOrElse(false) + def getCcEnableArenas: _root_.scala.Boolean = ccEnableArenas.getOrElse(true) def clearCcEnableArenas: FileOptions = copy(ccEnableArenas = _root_.scala.None) def withCcEnableArenas(__v: _root_.scala.Boolean): FileOptions = copy(ccEnableArenas = Option(__v)) def getObjcClassPrefix: _root_.scala.Predef.String = objcClassPrefix.getOrElse("") diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala index d969ef2c4..e3e0f5dad 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/MessageOptions.scala @@ -49,7 +49,7 @@ package com.google.protobuf.descriptor * * Implementations may choose not to generate the map_entry=true message, but * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementions still need to work as + * The reflection APIs in such implementations still need to work as * if the field is a repeated message field. * * NOTE: Do not set the option in .proto files. Always use the maps syntax diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala index 081b565f8..e14ef2a39 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/descriptor/SourceCodeInfo.scala @@ -46,7 +46,7 @@ package com.google.protobuf.descriptor * beginning of the "extend" block and is shared by all extensions within * the block. * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendent. For example, a "group" defines + * does not mean that it is a descendant. For example, a "group" defines * both a type and a field in a single declaration. Thus, the locations * corresponding to the type and field and their components will overlap. * - Code which tries to interpret locations should probably be designed to diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/duration/Duration.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/duration/Duration.scala index b41b89022..d32cc473a 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/duration/Duration.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/duration/Duration.scala @@ -26,7 +26,7 @@ package com.google.protobuf.duration * if (duration.seconds < 0 && duration.nanos > 0) { * duration.seconds += 1; * duration.nanos -= 1000000000; - * } else if (durations.seconds > 0 && duration.nanos < 0) { + * } else if (duration.seconds > 0 && duration.nanos < 0) { * duration.seconds -= 1; * duration.nanos += 1000000000; * } diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala index e17e85a07..698d8afd3 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/field_mask/FieldMask.scala @@ -203,7 +203,7 @@ package com.google.protobuf.field_mask * * The implementation of any API method which has a FieldMask type field in the * request should verify the included field paths, and return an - * `INVALID_ARGUMENT` error if any path is duplicated or unmappable. + * `INVALID_ARGUMENT` error if any path is unmappable. * * @param paths * The set of field mask paths. diff --git a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala index 6ba4f389d..b0ec69225 100644 --- a/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala +++ b/scalapb-runtime/non-jvm/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala @@ -78,11 +78,13 @@ package com.google.protobuf.timestamp * 01:30 UTC on January 15, 2017. * * In JavaScript, one can convert a Date object to this format using the - * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) + * standard + * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) * method. In Python, a standard `datetime.datetime` object can be converted - * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) - * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one - * can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( + * to this format using + * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with + * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use + * the Joda Time's [`ISODateTimeFormat.dateTime()`]( * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D * ) to obtain a formatter capable of generating timestamps in this format. * diff --git a/third_party/google/protobuf/compiler/plugin.proto b/third_party/google/protobuf/compiler/plugin.proto index 5b5574529..492b896c5 100644 --- a/third_party/google/protobuf/compiler/plugin.proto +++ b/third_party/google/protobuf/compiler/plugin.proto @@ -45,6 +45,7 @@ // flag "--${NAME}_out" is passed to protoc. syntax = "proto2"; + package google.protobuf.compiler; option java_package = "com.google.protobuf.compiler"; option java_outer_classname = "PluginProtos"; @@ -106,6 +107,16 @@ message CodeGeneratorResponse { // exiting with a non-zero status code. optional string error = 1; + // A bitmask of supported features that the code generator supports. + // This is a bitwise "or" of values from the Feature enum. + optional uint64 supported_features = 2; + + // Sync with code_generator.h. + enum Feature { + FEATURE_NONE = 0; + FEATURE_PROTO3_OPTIONAL = 1; + } + // Represents a single generated file. message File { // The file name, relative to the output directory. The name must not diff --git a/third_party/google/protobuf/descriptor.proto b/third_party/google/protobuf/descriptor.proto index ed08fcbc5..d29fdec5e 100644 --- a/third_party/google/protobuf/descriptor.proto +++ b/third_party/google/protobuf/descriptor.proto @@ -40,6 +40,7 @@ syntax = "proto2"; package google.protobuf; + option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; option java_package = "com.google.protobuf"; option java_outer_classname = "DescriptorProtos"; @@ -59,8 +60,8 @@ message FileDescriptorSet { // Describes a complete .proto file. message FileDescriptorProto { - optional string name = 1; // file name, relative to root of source tree - optional string package = 2; // e.g. "foo", "foo.bar", etc. + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. // Names of files imported by this file. repeated string dependency = 3; @@ -100,8 +101,8 @@ message DescriptorProto { repeated EnumDescriptorProto enum_type = 4; message ExtensionRange { - optional int32 start = 1; - optional int32 end = 2; + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. optional ExtensionRangeOptions options = 3; } @@ -115,8 +116,8 @@ message DescriptorProto { // fields or extension ranges in the same message. Reserved ranges may // not overlap. message ReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Exclusive. + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. } repeated ReservedRange reserved_range = 9; // Reserved field names, which may not be used by fields in the same message. @@ -128,6 +129,7 @@ message ExtensionRangeOptions { // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; + // Clients can define custom options in extensions of this message. See above. extensions 1000 to max; } @@ -137,42 +139,42 @@ message FieldDescriptorProto { enum Type { // 0 is reserved for errors. // Order is weird for historical reasons. - TYPE_DOUBLE = 1; - TYPE_FLOAT = 2; + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if // negative values are likely. - TYPE_INT64 = 3; - TYPE_UINT64 = 4; + TYPE_INT64 = 3; + TYPE_UINT64 = 4; // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if // negative values are likely. - TYPE_INT32 = 5; - TYPE_FIXED64 = 6; - TYPE_FIXED32 = 7; - TYPE_BOOL = 8; - TYPE_STRING = 9; + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; // Tag-delimited aggregate. // Group type is deprecated and not supported in proto3. However, Proto3 // implementations should still be able to parse the group wire format and // treat group fields as unknown fields. - TYPE_GROUP = 10; - TYPE_MESSAGE = 11; // Length-delimited aggregate. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. // New in version 2. - TYPE_BYTES = 12; - TYPE_UINT32 = 13; - TYPE_ENUM = 14; - TYPE_SFIXED32 = 15; - TYPE_SFIXED64 = 16; - TYPE_SINT32 = 17; // Uses ZigZag encoding. - TYPE_SINT64 = 18; // Uses ZigZag encoding. - }; + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + } enum Label { // 0 is reserved for errors - LABEL_OPTIONAL = 1; - LABEL_REQUIRED = 2; - LABEL_REPEATED = 3; - }; + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + } optional string name = 1; optional int32 number = 3; @@ -211,6 +213,29 @@ message FieldDescriptorProto { optional string json_name = 10; optional FieldOptions options = 8; + + // If true, this is a proto3 "optional". When a proto3 field is optional, it + // tracks presence regardless of field type. + // + // When proto3_optional is true, this field must be belong to a oneof to + // signal to old proto3 clients that presence is tracked for this field. This + // oneof is known as a "synthetic" oneof, and this field must be its sole + // member (each proto3 optional field gets its own synthetic oneof). Synthetic + // oneofs exist in the descriptor only, and do not generate any API. Synthetic + // oneofs must be ordered after all "real" oneofs. + // + // For message fields, proto3_optional doesn't create any semantic change, + // since non-repeated message fields always track presence. However it still + // indicates the semantic detail of whether the user wrote "optional" or not. + // This can be useful for round-tripping the .proto file. For consistency we + // give message fields a synthetic oneof also, even though it is not required + // to track presence. This is especially important because the parser can't + // tell if a field is a message or an enum, so it must always create a + // synthetic oneof. + // + // Proto2 optional fields do not set this flag, because they already indicate + // optional with `LABEL_OPTIONAL`. + optional bool proto3_optional = 17; } // Describes a oneof. @@ -234,8 +259,8 @@ message EnumDescriptorProto { // is inclusive such that it can appropriately represent the entire int32 // domain. message EnumReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Inclusive. + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Inclusive. } // Range of reserved numeric values. Reserved numeric values may not be used @@ -276,9 +301,9 @@ message MethodDescriptorProto { optional MethodOptions options = 4; // Identifies if client streams multiple client messages - optional bool client_streaming = 5 [default=false]; + optional bool client_streaming = 5 [default = false]; // Identifies if server streams multiple server messages - optional bool server_streaming = 6 [default=false]; + optional bool server_streaming = 6 [default = false]; } @@ -314,7 +339,6 @@ message MethodDescriptorProto { // If this turns out to be popular, a web service will be set up // to automatically assign option numbers. - message FileOptions { // Sets the Java package where classes generated from this .proto will be @@ -337,7 +361,7 @@ message FileOptions { // named by java_outer_classname. However, the outer class will still be // generated to contain the file's getDescriptor() method as well as any // top-level extensions defined in the file. - optional bool java_multiple_files = 10 [default=false]; + optional bool java_multiple_files = 10 [default = false]; // This option does nothing. optional bool java_generate_equals_and_hash = 20 [deprecated=true]; @@ -348,17 +372,17 @@ message FileOptions { // Message reflection will do the same. // However, an extension field still accepts non-UTF-8 byte sequences. // This option has no effect on when used with the lite runtime. - optional bool java_string_check_utf8 = 27 [default=false]; + optional bool java_string_check_utf8 = 27 [default = false]; // Generated classes can be optimized for speed or code size. enum OptimizeMode { - SPEED = 1; // Generate complete code for parsing, serialization, - // etc. - CODE_SIZE = 2; // Use ReflectionOps to implement these methods. - LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. } - optional OptimizeMode optimize_for = 9 [default=SPEED]; + optional OptimizeMode optimize_for = 9 [default = SPEED]; // Sets the Go package where structs generated from this .proto will be // placed. If omitted, the Go package will be derived from the following: @@ -369,6 +393,7 @@ message FileOptions { + // Should generic services be generated in each language? "Generic" services // are not specific to any particular RPC system. They are generated by the // main code generators in each language (without additional plugins). @@ -379,20 +404,20 @@ message FileOptions { // that generate code specific to your particular RPC system. Therefore, // these default to false. Old code which depends on generic services should // explicitly set them to true. - optional bool cc_generic_services = 16 [default=false]; - optional bool java_generic_services = 17 [default=false]; - optional bool py_generic_services = 18 [default=false]; - optional bool php_generic_services = 42 [default=false]; + optional bool cc_generic_services = 16 [default = false]; + optional bool java_generic_services = 17 [default = false]; + optional bool py_generic_services = 18 [default = false]; + optional bool php_generic_services = 42 [default = false]; // Is this file deprecated? // Depending on the target platform, this can emit Deprecated annotations // for everything in the file, or it will be completely ignored; in the very // least, this is a formalization for deprecating files. - optional bool deprecated = 23 [default=false]; + optional bool deprecated = 23 [default = false]; // Enables the use of arenas for the proto messages in this file. This applies // only to generated classes for C++. - optional bool cc_enable_arenas = 31 [default=false]; + optional bool cc_enable_arenas = 31 [default = true]; // Sets the objective c class prefix which is prepended to all objective c @@ -417,10 +442,9 @@ message FileOptions { // determining the namespace. optional string php_namespace = 41; - // Use this option to change the namespace of php generated metadata classes. - // Default is empty. When this option is empty, the proto file name will be used - // for determining the namespace. + // Default is empty. When this option is empty, the proto file name will be + // used for determining the namespace. optional string php_metadata_namespace = 44; // Use this option to change the package of ruby generated classes. Default @@ -428,6 +452,7 @@ message FileOptions { // determining the ruby package. optional string ruby_package = 45; + // The parser stores options it doesn't recognize here. // See the documentation for the "Options" section above. repeated UninterpretedOption uninterpreted_option = 999; @@ -458,18 +483,18 @@ message MessageOptions { // // Because this is an option, the above two restrictions are not enforced by // the protocol compiler. - optional bool message_set_wire_format = 1 [default=false]; + optional bool message_set_wire_format = 1 [default = false]; // Disables the generation of the standard "descriptor()" accessor, which can // conflict with a field of the same name. This is meant to make migration // from proto1 easier; new code should avoid fields named "descriptor". - optional bool no_standard_descriptor_accessor = 2 [default=false]; + optional bool no_standard_descriptor_accessor = 2 [default = false]; // Is this message deprecated? // Depending on the target platform, this can emit Deprecated annotations // for the message, or it will be completely ignored; in the very least, // this is a formalization for deprecating messages. - optional bool deprecated = 3 [default=false]; + optional bool deprecated = 3 [default = false]; // Whether the message is an automatically generated map entry type for the // maps field. @@ -486,7 +511,7 @@ message MessageOptions { // // Implementations may choose not to generate the map_entry=true message, but // use a native map in the target language to hold the keys and values. - // The reflection APIs in such implementions still need to work as + // The reflection APIs in such implementations still need to work as // if the field is a repeated message field. // // NOTE: Do not set the option in .proto files. Always use the maps syntax @@ -497,6 +522,7 @@ message MessageOptions { reserved 8; // javalite_serializable reserved 9; // javanano_as_lite + // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; @@ -576,16 +602,16 @@ message FieldOptions { // implementation must either *always* check its required fields, or *never* // check its required fields, regardless of whether or not the message has // been parsed. - optional bool lazy = 5 [default=false]; + optional bool lazy = 5 [default = false]; // Is this field deprecated? // Depending on the target platform, this can emit Deprecated annotations // for accessors, or it will be completely ignored; in the very least, this // is a formalization for deprecating fields. - optional bool deprecated = 3 [default=false]; + optional bool deprecated = 3 [default = false]; // For Google-internal migration only. Do not use. - optional bool weak = 10 [default=false]; + optional bool weak = 10 [default = false]; // The parser stores options it doesn't recognize here. See above. @@ -615,7 +641,7 @@ message EnumOptions { // Depending on the target platform, this can emit Deprecated annotations // for the enum, or it will be completely ignored; in the very least, this // is a formalization for deprecating enums. - optional bool deprecated = 3 [default=false]; + optional bool deprecated = 3 [default = false]; reserved 5; // javanano_as_lite @@ -631,7 +657,7 @@ message EnumValueOptions { // Depending on the target platform, this can emit Deprecated annotations // for the enum value, or it will be completely ignored; in the very least, // this is a formalization for deprecating enum values. - optional bool deprecated = 1 [default=false]; + optional bool deprecated = 1 [default = false]; // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; @@ -651,7 +677,7 @@ message ServiceOptions { // Depending on the target platform, this can emit Deprecated annotations // for the service, or it will be completely ignored; in the very least, // this is a formalization for deprecating services. - optional bool deprecated = 33 [default=false]; + optional bool deprecated = 33 [default = false]; // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; @@ -671,18 +697,18 @@ message MethodOptions { // Depending on the target platform, this can emit Deprecated annotations // for the method, or it will be completely ignored; in the very least, // this is a formalization for deprecating methods. - optional bool deprecated = 33 [default=false]; + optional bool deprecated = 33 [default = false]; // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, // or neither? HTTP based RPC implementation may choose GET verb for safe // methods, and PUT verb for idempotent methods instead of the default POST. enum IdempotencyLevel { IDEMPOTENCY_UNKNOWN = 0; - NO_SIDE_EFFECTS = 1; // implies idempotent - IDEMPOTENT = 2; // idempotent, but may have side effects + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects } - optional IdempotencyLevel idempotency_level = - 34 [default=IDEMPOTENCY_UNKNOWN]; + optional IdempotencyLevel idempotency_level = 34 + [default = IDEMPOTENCY_UNKNOWN]; // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; @@ -763,7 +789,7 @@ message SourceCodeInfo { // beginning of the "extend" block and is shared by all extensions within // the block. // - Just because a location's span is a subset of some other location's span - // does not mean that it is a descendent. For example, a "group" defines + // does not mean that it is a descendant. For example, a "group" defines // both a type and a field in a single declaration. Thus, the locations // corresponding to the type and field and their components will overlap. // - Code which tries to interpret locations should probably be designed to @@ -794,14 +820,14 @@ message SourceCodeInfo { // [ 4, 3, 2, 7 ] // this path refers to the whole field declaration (from the beginning // of the label to the terminating semicolon). - repeated int32 path = 1 [packed=true]; + repeated int32 path = 1 [packed = true]; // Always has exactly three or four elements: start line, start column, // end line (optional, otherwise assumed same as start line), end column. // These are packed into a single field for efficiency. Note that line // and column numbers are zero-based -- typically you will want to add // 1 to each before displaying to a user. - repeated int32 span = 2 [packed=true]; + repeated int32 span = 2 [packed = true]; // If this SourceCodeInfo represents a complete declaration, these are any // comments appearing before and after the declaration which appear to be @@ -866,7 +892,7 @@ message GeneratedCodeInfo { message Annotation { // Identifies the element in the original source .proto file. This field // is formatted the same as SourceCodeInfo.Location.path. - repeated int32 path = 1 [packed=true]; + repeated int32 path = 1 [packed = true]; // Identifies the filesystem path to the original source .proto. optional string source_file = 2; diff --git a/third_party/google/protobuf/duration.proto b/third_party/google/protobuf/duration.proto index 975fce41a..99cb102c3 100644 --- a/third_party/google/protobuf/duration.proto +++ b/third_party/google/protobuf/duration.proto @@ -61,7 +61,7 @@ option objc_class_prefix = "GPB"; // if (duration.seconds < 0 && duration.nanos > 0) { // duration.seconds += 1; // duration.nanos -= 1000000000; -// } else if (durations.seconds > 0 && duration.nanos < 0) { +// } else if (duration.seconds > 0 && duration.nanos < 0) { // duration.seconds -= 1; // duration.nanos += 1000000000; // } @@ -101,7 +101,6 @@ option objc_class_prefix = "GPB"; // // message Duration { - // Signed seconds of the span of time. Must be from -315,576,000,000 // to +315,576,000,000 inclusive. Note: these bounds are computed from: // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years diff --git a/third_party/google/protobuf/field_mask.proto b/third_party/google/protobuf/field_mask.proto index 4015b1a3e..baac8744c 100644 --- a/third_party/google/protobuf/field_mask.proto +++ b/third_party/google/protobuf/field_mask.proto @@ -238,7 +238,7 @@ option cc_enable_arenas = true; // // The implementation of any API method which has a FieldMask type field in the // request should verify the included field paths, and return an -// `INVALID_ARGUMENT` error if any path is duplicated or unmappable. +// `INVALID_ARGUMENT` error if any path is unmappable. message FieldMask { // The set of field mask paths. repeated string paths = 1; diff --git a/third_party/google/protobuf/struct.proto b/third_party/google/protobuf/struct.proto index 7d7808e7f..ed990e31d 100644 --- a/third_party/google/protobuf/struct.proto +++ b/third_party/google/protobuf/struct.proto @@ -40,7 +40,6 @@ option java_outer_classname = "StructProto"; option java_multiple_files = true; option objc_class_prefix = "GPB"; - // `Struct` represents a structured data value, consisting of fields // which map to dynamically typed values. In some languages, `Struct` // might be supported by a native representation. For example, in diff --git a/third_party/google/protobuf/timestamp.proto b/third_party/google/protobuf/timestamp.proto index 2b9e26a9b..cd357864a 100644 --- a/third_party/google/protobuf/timestamp.proto +++ b/third_party/google/protobuf/timestamp.proto @@ -113,17 +113,18 @@ option objc_class_prefix = "GPB"; // 01:30 UTC on January 15, 2017. // // In JavaScript, one can convert a Date object to this format using the -// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) // method. In Python, a standard `datetime.datetime` object can be converted -// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) -// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one -// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( // http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D // ) to obtain a formatter capable of generating timestamps in this format. // // message Timestamp { - // Represents seconds of UTC time since Unix epoch // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to // 9999-12-31T23:59:59Z inclusive. diff --git a/third_party/google/protobuf/type.proto b/third_party/google/protobuf/type.proto index 624c15ee6..e4b1d3a4a 100644 --- a/third_party/google/protobuf/type.proto +++ b/third_party/google/protobuf/type.proto @@ -64,44 +64,44 @@ message Field { // Basic field types. enum Kind { // Field type unknown. - TYPE_UNKNOWN = 0; + TYPE_UNKNOWN = 0; // Field type double. - TYPE_DOUBLE = 1; + TYPE_DOUBLE = 1; // Field type float. - TYPE_FLOAT = 2; + TYPE_FLOAT = 2; // Field type int64. - TYPE_INT64 = 3; + TYPE_INT64 = 3; // Field type uint64. - TYPE_UINT64 = 4; + TYPE_UINT64 = 4; // Field type int32. - TYPE_INT32 = 5; + TYPE_INT32 = 5; // Field type fixed64. - TYPE_FIXED64 = 6; + TYPE_FIXED64 = 6; // Field type fixed32. - TYPE_FIXED32 = 7; + TYPE_FIXED32 = 7; // Field type bool. - TYPE_BOOL = 8; + TYPE_BOOL = 8; // Field type string. - TYPE_STRING = 9; + TYPE_STRING = 9; // Field type group. Proto2 syntax only, and deprecated. - TYPE_GROUP = 10; + TYPE_GROUP = 10; // Field type message. - TYPE_MESSAGE = 11; + TYPE_MESSAGE = 11; // Field type bytes. - TYPE_BYTES = 12; + TYPE_BYTES = 12; // Field type uint32. - TYPE_UINT32 = 13; + TYPE_UINT32 = 13; // Field type enum. - TYPE_ENUM = 14; + TYPE_ENUM = 14; // Field type sfixed32. - TYPE_SFIXED32 = 15; + TYPE_SFIXED32 = 15; // Field type sfixed64. - TYPE_SFIXED64 = 16; + TYPE_SFIXED64 = 16; // Field type sint32. - TYPE_SINT32 = 17; + TYPE_SINT32 = 17; // Field type sint64. - TYPE_SINT64 = 18; - }; + TYPE_SINT64 = 18; + } // Whether a field is optional, required, or repeated. enum Cardinality {