All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalapb.fs2.pubsub.grpc.internal.Card.scala Maven / Gradle / Ivy

// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package fs2.pubsub.grpc.internal

/** A card interface displayed in a Google Chat message or Google Workspace
  * Add-on.
  *
  * Cards support a defined layout, interactive UI elements like buttons, and
  * rich media like images. Use cards to present detailed information,
  * gather information from users, and guide users to take a next step.
  *
  * [Card builder](https://addons.gsuite.google.com/uikit/builder)
  *
  * To learn how
  * to build cards, see the following documentation:
  *
  * * For Google Chat apps, see [Design the components of a card or
  *   dialog](https://developers.google.com/workspace/chat/design-components-card-dialog).
  * * For Google Workspace Add-ons, see [Card-based
  * interfaces](https://developers.google.com/apps-script/add-ons/concepts/cards).
  *
  * **Example: Card message for a Google Chat app**
  *
  * ![Example contact
  * card](https://developers.google.com/workspace/chat/images/card_api_reference.png)
  *
  * To create the sample card message in Google Chat, use the following JSON:
  *
  * ```
  * {
  *   "cardsV2": [
  *     {
  *       "cardId": "unique-card-id",
  *       "card": {
  *         "header": {
  *            "title": "Sasha",
  *            "subtitle": "Software Engineer",
  *            "imageUrl":
  *            "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png",
  *            "imageType": "CIRCLE",
  *            "imageAltText": "Avatar for Sasha"
  *          },
  *          "sections": [
  *            {
  *              "header": "Contact Info",
  *              "collapsible": true,
  *              "uncollapsibleWidgetsCount": 1,
  *              "widgets": [
  *                {
  *                  "decoratedText": {
  *                    "startIcon": {
  *                      "knownIcon": "EMAIL"
  *                    },
  *                    "text": "sasha@example.com"
  *                  }
  *                },
  *                {
  *                  "decoratedText": {
  *                    "startIcon": {
  *                      "knownIcon": "PERSON"
  *                    },
  *                    "text": "<font color=&92;"#80e27e&92;">Online</font>"
  *                  }
  *                },
  *                {
  *                  "decoratedText": {
  *                    "startIcon": {
  *                      "knownIcon": "PHONE"
  *                    },
  *                    "text": "+1 (555) 555-1234"
  *                  }
  *                },
  *                {
  *                  "buttonList": {
  *                    "buttons": [
  *                      {
  *                        "text": "Share",
  *                        "onClick": {
  *                         "openLink": {
  *                            "url": "https://example.com/share"
  *                          }
  *                        }
  *                      },
  *                      {
  *                        "text": "Edit",
  *                        "onClick": {
  *                          "action": {
  *                            "function": "goToView",
  *                            "parameters": [
  *                              {
  *                                "key": "viewType",
  *                                "value": "EDIT"
  *                              }
  *                            ]
  *                          }
  *                        }
  *                      }
  *                    ]
  *                  }
  *                }
  *              ]
  *            }
  *          ]
  *        }
  *     }
  *   ]
  * }
  * ```
  *
  * @param header
  *   The header of the card. A header usually contains a leading image and a
  *   title. Headers always appear at the top of a card.
  * @param sections
  *   Contains a collection of widgets. Each section has its own, optional
  *   header. Sections are visually separated by a line divider. For an example
  *   in Google Chat apps, see [Define a section of a
  *   card](https://developers.google.com/workspace/chat/design-components-card-dialog#define_a_section_of_a_card).
  * @param sectionDividerStyle
  *   The divider style between sections.
  * @param cardActions
  *   The card's actions. Actions are added to the card's toolbar menu.
  *  
  *   [Google Workspace
  *   Add-ons](https://developers.google.com/workspace/add-ons):
  *  
  *   For example, the following JSON constructs a card action menu with
  *   `Settings` and `Send Feedback` options:
  *  
  *   ```
  *   "card_actions": [
  *     {
  *       "actionLabel": "Settings",
  *       "onClick": {
  *         "action": {
  *           "functionName": "goToView",
  *           "parameters": [
  *             {
  *               "key": "viewType",
  *               "value": "SETTING"
  *            }
  *           ],
  *           "loadIndicator": "LoadIndicator.SPINNER"
  *         }
  *       }
  *     },
  *     {
  *       "actionLabel": "Send Feedback",
  *       "onClick": {
  *         "openLink": {
  *           "url": "https://example.com/feedback"
  *         }
  *       }
  *     }
  *   ]
  *   ```
  * @param name
  *   Name of the card. Used as a card identifier in card navigation.
  *  
  *   [Google Workspace
  *   Add-ons](https://developers.google.com/workspace/add-ons):
  * @param fixedFooter
  *   The fixed footer shown at the bottom of this card.
  *  
  *   Setting `fixedFooter` without specifying a `primaryButton` or a
  *   `secondaryButton` causes an error. For Chat apps, you can use fixed footers
  *   in
  *   [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
  *   [card
  *   messages](https://developers.google.com/workspace/chat/create-messages#create).
  *  
  *   [Google Workspace Add-ons and Chat
  *   apps](https://developers.google.com/workspace/extend):
  * @param displayStyle
  *   In Google Workspace Add-ons, sets the display properties of the
  *   `peekCardHeader`.
  *  
  *   [Google Workspace
  *   Add-ons](https://developers.google.com/workspace/add-ons):
  * @param peekCardHeader
  *   When displaying contextual content, the peek card header acts as a
  *   placeholder so that the user can navigate forward between the homepage
  *   cards and the contextual cards.
  *  
  *   [Google Workspace
  *   Add-ons](https://developers.google.com/workspace/add-ons):
  */
@SerialVersionUID(0L)
@scala.annotation.nowarn private[grpc]
final case class Card(
    header: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader] = _root_.scala.None,
    sections: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.Section] = _root_.scala.Seq.empty,
    sectionDividerStyle: fs2.pubsub.grpc.internal.Card.DividerStyle = fs2.pubsub.grpc.internal.Card.DividerStyle.DIVIDER_STYLE_UNSPECIFIED,
    cardActions: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.CardAction] = _root_.scala.Seq.empty,
    name: _root_.scala.Predef.String = "",
    fixedFooter: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardFixedFooter] = _root_.scala.None,
    displayStyle: fs2.pubsub.grpc.internal.Card.DisplayStyle = fs2.pubsub.grpc.internal.Card.DisplayStyle.DISPLAY_STYLE_UNSPECIFIED,
    peekCardHeader: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader] = _root_.scala.None,
    unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
    ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Card] {
    @transient
    private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
    private[this] def __computeSerializedSize(): _root_.scala.Int = {
      var __size = 0
      if (header.isDefined) {
        val __value = header.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      sections.foreach { __item =>
        val __value = __item
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      
      {
        val __value = sectionDividerStyle.value
        if (__value != 0) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(9, __value)
        }
      };
      cardActions.foreach { __item =>
        val __value = __item
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      
      {
        val __value = name
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(4, __value)
        }
      };
      if (fixedFooter.isDefined) {
        val __value = fixedFooter.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = displayStyle.value
        if (__value != 0) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(6, __value)
        }
      };
      if (peekCardHeader.isDefined) {
        val __value = peekCardHeader.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      __size += unknownFields.serializedSize
      __size
    }
    override def serializedSize: _root_.scala.Int = {
      var __size = __serializedSizeMemoized
      if (__size == 0) {
        __size = __computeSerializedSize() + 1
        __serializedSizeMemoized = __size
      }
      __size - 1
      
    }
    def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
      header.foreach { __v =>
        val __m = __v
        _output__.writeTag(1, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      sections.foreach { __v =>
        val __m = __v
        _output__.writeTag(2, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      cardActions.foreach { __v =>
        val __m = __v
        _output__.writeTag(3, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = name
        if (!__v.isEmpty) {
          _output__.writeString(4, __v)
        }
      };
      fixedFooter.foreach { __v =>
        val __m = __v
        _output__.writeTag(5, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = displayStyle.value
        if (__v != 0) {
          _output__.writeEnum(6, __v)
        }
      };
      peekCardHeader.foreach { __v =>
        val __m = __v
        _output__.writeTag(7, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = sectionDividerStyle.value
        if (__v != 0) {
          _output__.writeEnum(9, __v)
        }
      };
      unknownFields.writeTo(_output__)
    }
    def getHeader: fs2.pubsub.grpc.internal.Card.CardHeader = header.getOrElse(fs2.pubsub.grpc.internal.Card.CardHeader.defaultInstance)
    def clearHeader: Card = copy(header = _root_.scala.None)
    def withHeader(__v: fs2.pubsub.grpc.internal.Card.CardHeader): Card = copy(header = Option(__v))
    def clearSections = copy(sections = _root_.scala.Seq.empty)
    def addSections(__vs: fs2.pubsub.grpc.internal.Card.Section *): Card = addAllSections(__vs)
    def addAllSections(__vs: Iterable[fs2.pubsub.grpc.internal.Card.Section]): Card = copy(sections = sections ++ __vs)
    def withSections(__v: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.Section]): Card = copy(sections = __v)
    def withSectionDividerStyle(__v: fs2.pubsub.grpc.internal.Card.DividerStyle): Card = copy(sectionDividerStyle = __v)
    def clearCardActions = copy(cardActions = _root_.scala.Seq.empty)
    def addCardActions(__vs: fs2.pubsub.grpc.internal.Card.CardAction *): Card = addAllCardActions(__vs)
    def addAllCardActions(__vs: Iterable[fs2.pubsub.grpc.internal.Card.CardAction]): Card = copy(cardActions = cardActions ++ __vs)
    def withCardActions(__v: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.CardAction]): Card = copy(cardActions = __v)
    def withName(__v: _root_.scala.Predef.String): Card = copy(name = __v)
    def getFixedFooter: fs2.pubsub.grpc.internal.Card.CardFixedFooter = fixedFooter.getOrElse(fs2.pubsub.grpc.internal.Card.CardFixedFooter.defaultInstance)
    def clearFixedFooter: Card = copy(fixedFooter = _root_.scala.None)
    def withFixedFooter(__v: fs2.pubsub.grpc.internal.Card.CardFixedFooter): Card = copy(fixedFooter = Option(__v))
    def withDisplayStyle(__v: fs2.pubsub.grpc.internal.Card.DisplayStyle): Card = copy(displayStyle = __v)
    def getPeekCardHeader: fs2.pubsub.grpc.internal.Card.CardHeader = peekCardHeader.getOrElse(fs2.pubsub.grpc.internal.Card.CardHeader.defaultInstance)
    def clearPeekCardHeader: Card = copy(peekCardHeader = _root_.scala.None)
    def withPeekCardHeader(__v: fs2.pubsub.grpc.internal.Card.CardHeader): Card = copy(peekCardHeader = 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 = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 1 => header.orNull
        case 2 => sections
        case 9 => {
          val __t = sectionDividerStyle.javaValueDescriptor
          if (__t.getNumber() != 0) __t else null
        }
        case 3 => cardActions
        case 4 => {
          val __t = name
          if (__t != "") __t else null
        }
        case 5 => fixedFooter.orNull
        case 6 => {
          val __t = displayStyle.javaValueDescriptor
          if (__t.getNumber() != 0) __t else null
        }
        case 7 => peekCardHeader.orNull
      }
    }
    def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
      _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
      (__field.number: @_root_.scala.unchecked) match {
        case 1 => header.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 2 => _root_.scalapb.descriptors.PRepeated(sections.iterator.map(_.toPMessage).toVector)
        case 9 => _root_.scalapb.descriptors.PEnum(sectionDividerStyle.scalaValueDescriptor)
        case 3 => _root_.scalapb.descriptors.PRepeated(cardActions.iterator.map(_.toPMessage).toVector)
        case 4 => _root_.scalapb.descriptors.PString(name)
        case 5 => fixedFooter.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 6 => _root_.scalapb.descriptors.PEnum(displayStyle.scalaValueDescriptor)
        case 7 => peekCardHeader.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
      }
    }
    def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
    def companion: fs2.pubsub.grpc.internal.Card.type = fs2.pubsub.grpc.internal.Card
    // @@protoc_insertion_point(GeneratedMessage[google.apps.card.v1.Card])
}

@scala.annotation.nowarn private[grpc]
object Card extends scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card] {
  implicit def messageCompanion: scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card] = this
  def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): fs2.pubsub.grpc.internal.Card = {
    var __header: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader] = _root_.scala.None
    val __sections: _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Card.Section] = new _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Card.Section]
    var __sectionDividerStyle: fs2.pubsub.grpc.internal.Card.DividerStyle = fs2.pubsub.grpc.internal.Card.DividerStyle.DIVIDER_STYLE_UNSPECIFIED
    val __cardActions: _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Card.CardAction] = new _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Card.CardAction]
    var __name: _root_.scala.Predef.String = ""
    var __fixedFooter: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardFixedFooter] = _root_.scala.None
    var __displayStyle: fs2.pubsub.grpc.internal.Card.DisplayStyle = fs2.pubsub.grpc.internal.Card.DisplayStyle.DISPLAY_STYLE_UNSPECIFIED
    var __peekCardHeader: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader] = _root_.scala.None
    var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
    var _done__ = false
    while (!_done__) {
      val _tag__ = _input__.readTag()
      _tag__ match {
        case 0 => _done__ = true
        case 10 =>
          __header = Option(__header.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Card.CardHeader](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 18 =>
          __sections += _root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Card.Section](_input__)
        case 72 =>
          __sectionDividerStyle = fs2.pubsub.grpc.internal.Card.DividerStyle.fromValue(_input__.readEnum())
        case 26 =>
          __cardActions += _root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Card.CardAction](_input__)
        case 34 =>
          __name = _input__.readStringRequireUtf8()
        case 42 =>
          __fixedFooter = Option(__fixedFooter.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Card.CardFixedFooter](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 48 =>
          __displayStyle = fs2.pubsub.grpc.internal.Card.DisplayStyle.fromValue(_input__.readEnum())
        case 58 =>
          __peekCardHeader = Option(__peekCardHeader.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Card.CardHeader](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case tag =>
          if (_unknownFields__ == null) {
            _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
          }
          _unknownFields__.parseField(tag, _input__)
      }
    }
    fs2.pubsub.grpc.internal.Card(
        header = __header,
        sections = __sections.result(),
        sectionDividerStyle = __sectionDividerStyle,
        cardActions = __cardActions.result(),
        name = __name,
        fixedFooter = __fixedFooter,
        displayStyle = __displayStyle,
        peekCardHeader = __peekCardHeader,
        unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
    )
  }
  implicit def messageReads: _root_.scalapb.descriptors.Reads[fs2.pubsub.grpc.internal.Card] = _root_.scalapb.descriptors.Reads{
    case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
      _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
      fs2.pubsub.grpc.internal.Card(
        header = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader]]),
        sections = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Seq[fs2.pubsub.grpc.internal.Card.Section]]).getOrElse(_root_.scala.Seq.empty),
        sectionDividerStyle = fs2.pubsub.grpc.internal.Card.DividerStyle.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(fs2.pubsub.grpc.internal.Card.DividerStyle.DIVIDER_STYLE_UNSPECIFIED.scalaValueDescriptor).number),
        cardActions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Seq[fs2.pubsub.grpc.internal.Card.CardAction]]).getOrElse(_root_.scala.Seq.empty),
        name = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        fixedFooter = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardFixedFooter]]),
        displayStyle = fs2.pubsub.grpc.internal.Card.DisplayStyle.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(fs2.pubsub.grpc.internal.Card.DisplayStyle.DISPLAY_STYLE_UNSPECIFIED.scalaValueDescriptor).number),
        peekCardHeader = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader]])
      )
    case _ => throw new RuntimeException("Expected PMessage")
  }
  def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = CardProto.javaDescriptor.getMessageTypes().get(0)
  def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = CardProto.scalaDescriptor.messages(0)
  def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
    var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
    (__number: @_root_.scala.unchecked) match {
      case 1 => __out = fs2.pubsub.grpc.internal.Card.CardHeader
      case 2 => __out = fs2.pubsub.grpc.internal.Card.Section
      case 3 => __out = fs2.pubsub.grpc.internal.Card.CardAction
      case 5 => __out = fs2.pubsub.grpc.internal.Card.CardFixedFooter
      case 7 => __out = fs2.pubsub.grpc.internal.Card.CardHeader
    }
    __out
  }
  lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
    Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
      _root_.fs2.pubsub.grpc.internal.Card.CardHeader,
      _root_.fs2.pubsub.grpc.internal.Card.Section,
      _root_.fs2.pubsub.grpc.internal.Card.CardAction,
      _root_.fs2.pubsub.grpc.internal.Card.CardFixedFooter
    )
  def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
    (__fieldNumber: @_root_.scala.unchecked) match {
      case 9 => fs2.pubsub.grpc.internal.Card.DividerStyle
      case 6 => fs2.pubsub.grpc.internal.Card.DisplayStyle
    }
  }
  lazy val defaultInstance = fs2.pubsub.grpc.internal.Card(
    header = _root_.scala.None,
    sections = _root_.scala.Seq.empty,
    sectionDividerStyle = fs2.pubsub.grpc.internal.Card.DividerStyle.DIVIDER_STYLE_UNSPECIFIED,
    cardActions = _root_.scala.Seq.empty,
    name = "",
    fixedFooter = _root_.scala.None,
    displayStyle = fs2.pubsub.grpc.internal.Card.DisplayStyle.DISPLAY_STYLE_UNSPECIFIED,
    peekCardHeader = _root_.scala.None
  )
  /** The divider style of a card. Currently only used for dividers betweens card
    * sections.
    *
    * [Google Workspace Add-ons and Chat
    * apps](https://developers.google.com/workspace/extend):
    */
  sealed abstract class DividerStyle(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = fs2.pubsub.grpc.internal.Card.DividerStyle
    type RecognizedType = fs2.pubsub.grpc.internal.Card.DividerStyle.Recognized
    def isDividerStyleUnspecified: _root_.scala.Boolean = false
    def isSolidDivider: _root_.scala.Boolean = false
    def isNoDivider: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[DividerStyle] = fs2.pubsub.grpc.internal.Card.DividerStyle
    final def asRecognized: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.DividerStyle.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[fs2.pubsub.grpc.internal.Card.DividerStyle.Recognized])
  }
  
  object DividerStyle extends _root_.scalapb.GeneratedEnumCompanion[DividerStyle] {
    sealed trait Recognized extends DividerStyle
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[DividerStyle] = this
    
    /** Don't use. Unspecified.
      */
    @SerialVersionUID(0L)
    case object DIVIDER_STYLE_UNSPECIFIED extends DividerStyle(0) with DividerStyle.Recognized {
      val index = 0
      val name = "DIVIDER_STYLE_UNSPECIFIED"
      override def isDividerStyleUnspecified: _root_.scala.Boolean = true
    }
    
    /** Default option. Render a solid divider between sections.
      */
    @SerialVersionUID(0L)
    case object SOLID_DIVIDER extends DividerStyle(1) with DividerStyle.Recognized {
      val index = 1
      val name = "SOLID_DIVIDER"
      override def isSolidDivider: _root_.scala.Boolean = true
    }
    
    /** If set, no divider is rendered between sections.
      */
    @SerialVersionUID(0L)
    case object NO_DIVIDER extends DividerStyle(2) with DividerStyle.Recognized {
      val index = 2
      val name = "NO_DIVIDER"
      override def isNoDivider: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends DividerStyle(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values: scala.collection.immutable.Seq[ValueType] = scala.collection.immutable.Seq(DIVIDER_STYLE_UNSPECIFIED, SOLID_DIVIDER, NO_DIVIDER)
    def fromValue(__value: _root_.scala.Int): DividerStyle = __value match {
      case 0 => DIVIDER_STYLE_UNSPECIFIED
      case 1 => SOLID_DIVIDER
      case 2 => NO_DIVIDER
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getEnumTypes().get(0)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.enums(0)
  }
  /** In Google Workspace Add-ons,
    * determines how a card is displayed.
    *
    * [Google Workspace
    * Add-ons](https://developers.google.com/workspace/add-ons):
    */
  sealed abstract class DisplayStyle(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = fs2.pubsub.grpc.internal.Card.DisplayStyle
    type RecognizedType = fs2.pubsub.grpc.internal.Card.DisplayStyle.Recognized
    def isDisplayStyleUnspecified: _root_.scala.Boolean = false
    def isPeek: _root_.scala.Boolean = false
    def isReplace: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[DisplayStyle] = fs2.pubsub.grpc.internal.Card.DisplayStyle
    final def asRecognized: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.DisplayStyle.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[fs2.pubsub.grpc.internal.Card.DisplayStyle.Recognized])
  }
  
  object DisplayStyle extends _root_.scalapb.GeneratedEnumCompanion[DisplayStyle] {
    sealed trait Recognized extends DisplayStyle
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[DisplayStyle] = this
    
    /** Don't use. Unspecified.
      */
    @SerialVersionUID(0L)
    case object DISPLAY_STYLE_UNSPECIFIED extends DisplayStyle(0) with DisplayStyle.Recognized {
      val index = 0
      val name = "DISPLAY_STYLE_UNSPECIFIED"
      override def isDisplayStyleUnspecified: _root_.scala.Boolean = true
    }
    
    /** The header of the card appears at the bottom of the
      * sidebar, partially covering the current top card of the stack. Clicking
      * the header pops the card into the card stack. If the card has no header,
      * a generated header is used instead.
      */
    @SerialVersionUID(0L)
    case object PEEK extends DisplayStyle(1) with DisplayStyle.Recognized {
      val index = 1
      val name = "PEEK"
      override def isPeek: _root_.scala.Boolean = true
    }
    
    /** Default value. The card is shown by replacing the view of the top card in
      * the card stack.
      */
    @SerialVersionUID(0L)
    case object REPLACE extends DisplayStyle(2) with DisplayStyle.Recognized {
      val index = 2
      val name = "REPLACE"
      override def isReplace: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends DisplayStyle(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values: scala.collection.immutable.Seq[ValueType] = scala.collection.immutable.Seq(DISPLAY_STYLE_UNSPECIFIED, PEEK, REPLACE)
    def fromValue(__value: _root_.scala.Int): DisplayStyle = __value match {
      case 0 => DISPLAY_STYLE_UNSPECIFIED
      case 1 => PEEK
      case 2 => REPLACE
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getEnumTypes().get(1)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.enums(1)
  }
  /** Represents a card header. For an example in Google Chat apps, see [Add a
    * header](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_header).
    *
    * [Google Workspace Add-ons and Chat
    * apps](https://developers.google.com/workspace/extend):
    *
    * @param title
    *   Required. The title of the card header.
    *   The header has a fixed height: if both a
    *   title and subtitle are specified, each takes up one line. If only the
    *   title is specified, it takes up both lines.
    * @param subtitle
    *   The subtitle of the card header. If specified, appears on its own line
    *   below the `title`.
    * @param imageType
    *   The shape used to crop the image.
    *  
    *   [Google Workspace Add-ons and Chat
    *   apps](https://developers.google.com/workspace/extend):
    * @param imageUrl
    *   The HTTPS URL of the image in the card header.
    * @param imageAltText
    *   The alternative text of this image that's used for accessibility.
    */
  @SerialVersionUID(0L)
  @scala.annotation.nowarn private[grpc]
  final case class CardHeader(
      title: _root_.scala.Predef.String = "",
      subtitle: _root_.scala.Predef.String = "",
      imageType: fs2.pubsub.grpc.internal.Widget.ImageType = fs2.pubsub.grpc.internal.Widget.ImageType.SQUARE,
      imageUrl: _root_.scala.Predef.String = "",
      imageAltText: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CardHeader] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = title
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        
        {
          val __value = subtitle
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
          }
        };
        
        {
          val __value = imageType.value
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(3, __value)
          }
        };
        
        {
          val __value = imageUrl
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(4, __value)
          }
        };
        
        {
          val __value = imageAltText
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(5, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = title
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        {
          val __v = subtitle
          if (!__v.isEmpty) {
            _output__.writeString(2, __v)
          }
        };
        {
          val __v = imageType.value
          if (__v != 0) {
            _output__.writeEnum(3, __v)
          }
        };
        {
          val __v = imageUrl
          if (!__v.isEmpty) {
            _output__.writeString(4, __v)
          }
        };
        {
          val __v = imageAltText
          if (!__v.isEmpty) {
            _output__.writeString(5, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withTitle(__v: _root_.scala.Predef.String): CardHeader = copy(title = __v)
      def withSubtitle(__v: _root_.scala.Predef.String): CardHeader = copy(subtitle = __v)
      def withImageType(__v: fs2.pubsub.grpc.internal.Widget.ImageType): CardHeader = copy(imageType = __v)
      def withImageUrl(__v: _root_.scala.Predef.String): CardHeader = copy(imageUrl = __v)
      def withImageAltText(__v: _root_.scala.Predef.String): CardHeader = copy(imageAltText = __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 = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = title
            if (__t != "") __t else null
          }
          case 2 => {
            val __t = subtitle
            if (__t != "") __t else null
          }
          case 3 => {
            val __t = imageType.javaValueDescriptor
            if (__t.getNumber() != 0) __t else null
          }
          case 4 => {
            val __t = imageUrl
            if (__t != "") __t else null
          }
          case 5 => {
            val __t = imageAltText
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(title)
          case 2 => _root_.scalapb.descriptors.PString(subtitle)
          case 3 => _root_.scalapb.descriptors.PEnum(imageType.scalaValueDescriptor)
          case 4 => _root_.scalapb.descriptors.PString(imageUrl)
          case 5 => _root_.scalapb.descriptors.PString(imageAltText)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: fs2.pubsub.grpc.internal.Card.CardHeader.type = fs2.pubsub.grpc.internal.Card.CardHeader
      // @@protoc_insertion_point(GeneratedMessage[google.apps.card.v1.Card.CardHeader])
  }
  
  @scala.annotation.nowarn private[grpc]
  object CardHeader extends scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardHeader] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardHeader] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): fs2.pubsub.grpc.internal.Card.CardHeader = {
      var __title: _root_.scala.Predef.String = ""
      var __subtitle: _root_.scala.Predef.String = ""
      var __imageType: fs2.pubsub.grpc.internal.Widget.ImageType = fs2.pubsub.grpc.internal.Widget.ImageType.SQUARE
      var __imageUrl: _root_.scala.Predef.String = ""
      var __imageAltText: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __title = _input__.readStringRequireUtf8()
          case 18 =>
            __subtitle = _input__.readStringRequireUtf8()
          case 24 =>
            __imageType = fs2.pubsub.grpc.internal.Widget.ImageType.fromValue(_input__.readEnum())
          case 34 =>
            __imageUrl = _input__.readStringRequireUtf8()
          case 42 =>
            __imageAltText = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      fs2.pubsub.grpc.internal.Card.CardHeader(
          title = __title,
          subtitle = __subtitle,
          imageType = __imageType,
          imageUrl = __imageUrl,
          imageAltText = __imageAltText,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[fs2.pubsub.grpc.internal.Card.CardHeader] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        fs2.pubsub.grpc.internal.Card.CardHeader(
          title = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          subtitle = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          imageType = fs2.pubsub.grpc.internal.Widget.ImageType.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(fs2.pubsub.grpc.internal.Widget.ImageType.SQUARE.scalaValueDescriptor).number),
          imageUrl = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          imageAltText = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getNestedTypes().get(0)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.nestedMessages(0)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 3 => fs2.pubsub.grpc.internal.Widget.ImageType
      }
    }
    lazy val defaultInstance = fs2.pubsub.grpc.internal.Card.CardHeader(
      title = "",
      subtitle = "",
      imageType = fs2.pubsub.grpc.internal.Widget.ImageType.SQUARE,
      imageUrl = "",
      imageAltText = ""
    )
    implicit class CardHeaderLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardHeader]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, fs2.pubsub.grpc.internal.Card.CardHeader](_l) {
      def title: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.title)((c_, f_) => c_.copy(title = f_))
      def subtitle: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.subtitle)((c_, f_) => c_.copy(subtitle = f_))
      def imageType: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Widget.ImageType] = field(_.imageType)((c_, f_) => c_.copy(imageType = f_))
      def imageUrl: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.imageUrl)((c_, f_) => c_.copy(imageUrl = f_))
      def imageAltText: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.imageAltText)((c_, f_) => c_.copy(imageAltText = f_))
    }
    final val TITLE_FIELD_NUMBER = 1
    final val SUBTITLE_FIELD_NUMBER = 2
    final val IMAGE_TYPE_FIELD_NUMBER = 3
    final val IMAGE_URL_FIELD_NUMBER = 4
    final val IMAGE_ALT_TEXT_FIELD_NUMBER = 5
    def of(
      title: _root_.scala.Predef.String,
      subtitle: _root_.scala.Predef.String,
      imageType: fs2.pubsub.grpc.internal.Widget.ImageType,
      imageUrl: _root_.scala.Predef.String,
      imageAltText: _root_.scala.Predef.String
    ): _root_.fs2.pubsub.grpc.internal.Card.CardHeader = _root_.fs2.pubsub.grpc.internal.Card.CardHeader(
      title,
      subtitle,
      imageType,
      imageUrl,
      imageAltText
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[google.apps.card.v1.Card.CardHeader])
  }
  
  /** A section contains a collection of widgets that are rendered
    * vertically in the order that they're specified.
    *
    * [Google Workspace Add-ons and Chat
    * apps](https://developers.google.com/workspace/extend):
    *
    * @param header
    *   Text that appears at the top of a section.
    *   Supports simple HTML formatted text. For more information
    *   about formatting text, see
    *   [Formatting text in Google Chat
    *   apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
    *   and
    *   [Formatting
    *   text in Google Workspace
    *   Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
    * @param widgets
    *   All the widgets in the section.
    *   Must contain at least one widget.
    * @param collapsible
    *   Indicates whether this section is collapsible.
    *  
    *   Collapsible sections hide some or all widgets, but users can expand the
    *   section to reveal the hidden widgets by clicking **Show more**. Users
    *   can hide the widgets again by clicking **Show less**.
    *  
    *   To determine which widgets are hidden, specify
    *   `uncollapsibleWidgetsCount`.
    * @param uncollapsibleWidgetsCount
    *   The number of uncollapsible widgets which remain visible even when a
    *   section is collapsed.
    *  
    *   For example, when a section
    *   contains five widgets and the `uncollapsibleWidgetsCount` is set to `2`,
    *   the first two widgets are always shown and the last three are collapsed
    *   by default. The `uncollapsibleWidgetsCount` is taken into account only
    *   when `collapsible` is `true`.
    */
  @SerialVersionUID(0L)
  @scala.annotation.nowarn private[grpc]
  final case class Section(
      header: _root_.scala.Predef.String = "",
      widgets: _root_.scala.Seq[fs2.pubsub.grpc.internal.Widget] = _root_.scala.Seq.empty,
      collapsible: _root_.scala.Boolean = false,
      uncollapsibleWidgetsCount: _root_.scala.Int = 0,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Section] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = header
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        widgets.foreach { __item =>
          val __value = __item
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        
        {
          val __value = collapsible
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(5, __value)
          }
        };
        
        {
          val __value = uncollapsibleWidgetsCount
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeInt32Size(6, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = header
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        widgets.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = collapsible
          if (__v != false) {
            _output__.writeBool(5, __v)
          }
        };
        {
          val __v = uncollapsibleWidgetsCount
          if (__v != 0) {
            _output__.writeInt32(6, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withHeader(__v: _root_.scala.Predef.String): Section = copy(header = __v)
      def clearWidgets = copy(widgets = _root_.scala.Seq.empty)
      def addWidgets(__vs: fs2.pubsub.grpc.internal.Widget *): Section = addAllWidgets(__vs)
      def addAllWidgets(__vs: Iterable[fs2.pubsub.grpc.internal.Widget]): Section = copy(widgets = widgets ++ __vs)
      def withWidgets(__v: _root_.scala.Seq[fs2.pubsub.grpc.internal.Widget]): Section = copy(widgets = __v)
      def withCollapsible(__v: _root_.scala.Boolean): Section = copy(collapsible = __v)
      def withUncollapsibleWidgetsCount(__v: _root_.scala.Int): Section = copy(uncollapsibleWidgetsCount = __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 = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = header
            if (__t != "") __t else null
          }
          case 2 => widgets
          case 5 => {
            val __t = collapsible
            if (__t != false) __t else null
          }
          case 6 => {
            val __t = uncollapsibleWidgetsCount
            if (__t != 0) __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(header)
          case 2 => _root_.scalapb.descriptors.PRepeated(widgets.iterator.map(_.toPMessage).toVector)
          case 5 => _root_.scalapb.descriptors.PBoolean(collapsible)
          case 6 => _root_.scalapb.descriptors.PInt(uncollapsibleWidgetsCount)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: fs2.pubsub.grpc.internal.Card.Section.type = fs2.pubsub.grpc.internal.Card.Section
      // @@protoc_insertion_point(GeneratedMessage[google.apps.card.v1.Card.Section])
  }
  
  @scala.annotation.nowarn private[grpc]
  object Section extends scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.Section] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.Section] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): fs2.pubsub.grpc.internal.Card.Section = {
      var __header: _root_.scala.Predef.String = ""
      val __widgets: _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Widget] = new _root_.scala.collection.immutable.VectorBuilder[fs2.pubsub.grpc.internal.Widget]
      var __collapsible: _root_.scala.Boolean = false
      var __uncollapsibleWidgetsCount: _root_.scala.Int = 0
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __header = _input__.readStringRequireUtf8()
          case 18 =>
            __widgets += _root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Widget](_input__)
          case 40 =>
            __collapsible = _input__.readBool()
          case 48 =>
            __uncollapsibleWidgetsCount = _input__.readInt32()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      fs2.pubsub.grpc.internal.Card.Section(
          header = __header,
          widgets = __widgets.result(),
          collapsible = __collapsible,
          uncollapsibleWidgetsCount = __uncollapsibleWidgetsCount,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[fs2.pubsub.grpc.internal.Card.Section] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        fs2.pubsub.grpc.internal.Card.Section(
          header = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          widgets = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Seq[fs2.pubsub.grpc.internal.Widget]]).getOrElse(_root_.scala.Seq.empty),
          collapsible = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          uncollapsibleWidgetsCount = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scala.Int]).getOrElse(0)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getNestedTypes().get(1)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.nestedMessages(1)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = fs2.pubsub.grpc.internal.Widget
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = fs2.pubsub.grpc.internal.Card.Section(
      header = "",
      widgets = _root_.scala.Seq.empty,
      collapsible = false,
      uncollapsibleWidgetsCount = 0
    )
    implicit class SectionLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.Section]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, fs2.pubsub.grpc.internal.Card.Section](_l) {
      def header: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.header)((c_, f_) => c_.copy(header = f_))
      def widgets: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[fs2.pubsub.grpc.internal.Widget]] = field(_.widgets)((c_, f_) => c_.copy(widgets = f_))
      def collapsible: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.collapsible)((c_, f_) => c_.copy(collapsible = f_))
      def uncollapsibleWidgetsCount: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.uncollapsibleWidgetsCount)((c_, f_) => c_.copy(uncollapsibleWidgetsCount = f_))
    }
    final val HEADER_FIELD_NUMBER = 1
    final val WIDGETS_FIELD_NUMBER = 2
    final val COLLAPSIBLE_FIELD_NUMBER = 5
    final val UNCOLLAPSIBLE_WIDGETS_COUNT_FIELD_NUMBER = 6
    def of(
      header: _root_.scala.Predef.String,
      widgets: _root_.scala.Seq[fs2.pubsub.grpc.internal.Widget],
      collapsible: _root_.scala.Boolean,
      uncollapsibleWidgetsCount: _root_.scala.Int
    ): _root_.fs2.pubsub.grpc.internal.Card.Section = _root_.fs2.pubsub.grpc.internal.Card.Section(
      header,
      widgets,
      collapsible,
      uncollapsibleWidgetsCount
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[google.apps.card.v1.Card.Section])
  }
  
  /** A card action is the action associated with the card. For example,
    * an invoice card might include actions such as delete invoice, email
    * invoice, or open the invoice in a browser.
    *
    * [Google Workspace
    * Add-ons](https://developers.google.com/workspace/add-ons):
    *
    * @param actionLabel
    *   The label that displays as the action menu item.
    * @param onClick
    *   The `onClick` action for this action item.
    */
  @SerialVersionUID(0L)
  @scala.annotation.nowarn private[grpc]
  final case class CardAction(
      actionLabel: _root_.scala.Predef.String = "",
      onClick: _root_.scala.Option[fs2.pubsub.grpc.internal.OnClick] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CardAction] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = actionLabel
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        if (onClick.isDefined) {
          val __value = onClick.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = actionLabel
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        onClick.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def withActionLabel(__v: _root_.scala.Predef.String): CardAction = copy(actionLabel = __v)
      def getOnClick: fs2.pubsub.grpc.internal.OnClick = onClick.getOrElse(fs2.pubsub.grpc.internal.OnClick.defaultInstance)
      def clearOnClick: CardAction = copy(onClick = _root_.scala.None)
      def withOnClick(__v: fs2.pubsub.grpc.internal.OnClick): CardAction = copy(onClick = 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 = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = actionLabel
            if (__t != "") __t else null
          }
          case 2 => onClick.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(actionLabel)
          case 2 => onClick.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: fs2.pubsub.grpc.internal.Card.CardAction.type = fs2.pubsub.grpc.internal.Card.CardAction
      // @@protoc_insertion_point(GeneratedMessage[google.apps.card.v1.Card.CardAction])
  }
  
  @scala.annotation.nowarn private[grpc]
  object CardAction extends scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardAction] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardAction] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): fs2.pubsub.grpc.internal.Card.CardAction = {
      var __actionLabel: _root_.scala.Predef.String = ""
      var __onClick: _root_.scala.Option[fs2.pubsub.grpc.internal.OnClick] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __actionLabel = _input__.readStringRequireUtf8()
          case 18 =>
            __onClick = Option(__onClick.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.OnClick](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      fs2.pubsub.grpc.internal.Card.CardAction(
          actionLabel = __actionLabel,
          onClick = __onClick,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[fs2.pubsub.grpc.internal.Card.CardAction] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        fs2.pubsub.grpc.internal.Card.CardAction(
          actionLabel = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          onClick = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.OnClick]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getNestedTypes().get(2)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.nestedMessages(2)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = fs2.pubsub.grpc.internal.OnClick
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = fs2.pubsub.grpc.internal.Card.CardAction(
      actionLabel = "",
      onClick = _root_.scala.None
    )
    implicit class CardActionLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardAction]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, fs2.pubsub.grpc.internal.Card.CardAction](_l) {
      def actionLabel: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.actionLabel)((c_, f_) => c_.copy(actionLabel = f_))
      def onClick: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.OnClick] = field(_.getOnClick)((c_, f_) => c_.copy(onClick = Option(f_)))
      def optionalOnClick: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.OnClick]] = field(_.onClick)((c_, f_) => c_.copy(onClick = f_))
    }
    final val ACTION_LABEL_FIELD_NUMBER = 1
    final val ON_CLICK_FIELD_NUMBER = 2
    def of(
      actionLabel: _root_.scala.Predef.String,
      onClick: _root_.scala.Option[fs2.pubsub.grpc.internal.OnClick]
    ): _root_.fs2.pubsub.grpc.internal.Card.CardAction = _root_.fs2.pubsub.grpc.internal.Card.CardAction(
      actionLabel,
      onClick
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[google.apps.card.v1.Card.CardAction])
  }
  
  /** A persistent (sticky) footer that that appears at the bottom of the card.
    *
    * Setting `fixedFooter` without specifying a `primaryButton` or a
    * `secondaryButton` causes an error.
    *
    * For Chat apps, you can use fixed footers in
    * [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
    * [card
    * messages](https://developers.google.com/workspace/chat/create-messages#create).
    * For an example in Google Chat apps, see [Add a persistent
    * footer](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_persistent_footer).
    *
    * [Google Workspace Add-ons and Chat
    * apps](https://developers.google.com/workspace/extend):
    *
    * @param primaryButton
    *   The primary button of the fixed footer. The button must be a text button
    *   with text and color set.
    * @param secondaryButton
    *   The secondary button of the fixed footer.  The button must be a text
    *   button with text and color set.
    *   If `secondaryButton` is set, you must also set `primaryButton`.
    */
  @SerialVersionUID(0L)
  @scala.annotation.nowarn private[grpc]
  final case class CardFixedFooter(
      primaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button] = _root_.scala.None,
      secondaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CardFixedFooter] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (primaryButton.isDefined) {
          val __value = primaryButton.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (secondaryButton.isDefined) {
          val __value = secondaryButton.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        primaryButton.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        secondaryButton.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getPrimaryButton: fs2.pubsub.grpc.internal.Button = primaryButton.getOrElse(fs2.pubsub.grpc.internal.Button.defaultInstance)
      def clearPrimaryButton: CardFixedFooter = copy(primaryButton = _root_.scala.None)
      def withPrimaryButton(__v: fs2.pubsub.grpc.internal.Button): CardFixedFooter = copy(primaryButton = Option(__v))
      def getSecondaryButton: fs2.pubsub.grpc.internal.Button = secondaryButton.getOrElse(fs2.pubsub.grpc.internal.Button.defaultInstance)
      def clearSecondaryButton: CardFixedFooter = copy(secondaryButton = _root_.scala.None)
      def withSecondaryButton(__v: fs2.pubsub.grpc.internal.Button): CardFixedFooter = copy(secondaryButton = 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 = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => primaryButton.orNull
          case 2 => secondaryButton.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => primaryButton.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => secondaryButton.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: fs2.pubsub.grpc.internal.Card.CardFixedFooter.type = fs2.pubsub.grpc.internal.Card.CardFixedFooter
      // @@protoc_insertion_point(GeneratedMessage[google.apps.card.v1.Card.CardFixedFooter])
  }
  
  @scala.annotation.nowarn private[grpc]
  object CardFixedFooter extends scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardFixedFooter] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[fs2.pubsub.grpc.internal.Card.CardFixedFooter] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): fs2.pubsub.grpc.internal.Card.CardFixedFooter = {
      var __primaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button] = _root_.scala.None
      var __secondaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __primaryButton = Option(__primaryButton.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Button](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __secondaryButton = Option(__secondaryButton.fold(_root_.scalapb.LiteParser.readMessage[fs2.pubsub.grpc.internal.Button](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      fs2.pubsub.grpc.internal.Card.CardFixedFooter(
          primaryButton = __primaryButton,
          secondaryButton = __secondaryButton,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[fs2.pubsub.grpc.internal.Card.CardFixedFooter] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        fs2.pubsub.grpc.internal.Card.CardFixedFooter(
          primaryButton = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.Button]]),
          secondaryButton = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[fs2.pubsub.grpc.internal.Button]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.javaDescriptor.getNestedTypes().get(3)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = fs2.pubsub.grpc.internal.Card.scalaDescriptor.nestedMessages(3)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = fs2.pubsub.grpc.internal.Button
        case 2 => __out = fs2.pubsub.grpc.internal.Button
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = fs2.pubsub.grpc.internal.Card.CardFixedFooter(
      primaryButton = _root_.scala.None,
      secondaryButton = _root_.scala.None
    )
    implicit class CardFixedFooterLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardFixedFooter]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, fs2.pubsub.grpc.internal.Card.CardFixedFooter](_l) {
      def primaryButton: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Button] = field(_.getPrimaryButton)((c_, f_) => c_.copy(primaryButton = Option(f_)))
      def optionalPrimaryButton: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.Button]] = field(_.primaryButton)((c_, f_) => c_.copy(primaryButton = f_))
      def secondaryButton: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Button] = field(_.getSecondaryButton)((c_, f_) => c_.copy(secondaryButton = Option(f_)))
      def optionalSecondaryButton: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.Button]] = field(_.secondaryButton)((c_, f_) => c_.copy(secondaryButton = f_))
    }
    final val PRIMARY_BUTTON_FIELD_NUMBER = 1
    final val SECONDARY_BUTTON_FIELD_NUMBER = 2
    def of(
      primaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button],
      secondaryButton: _root_.scala.Option[fs2.pubsub.grpc.internal.Button]
    ): _root_.fs2.pubsub.grpc.internal.Card.CardFixedFooter = _root_.fs2.pubsub.grpc.internal.Card.CardFixedFooter(
      primaryButton,
      secondaryButton
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[google.apps.card.v1.Card.CardFixedFooter])
  }
  
  implicit class CardLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, fs2.pubsub.grpc.internal.Card](_l) {
    def header: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardHeader] = field(_.getHeader)((c_, f_) => c_.copy(header = Option(f_)))
    def optionalHeader: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader]] = field(_.header)((c_, f_) => c_.copy(header = f_))
    def sections: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.Section]] = field(_.sections)((c_, f_) => c_.copy(sections = f_))
    def sectionDividerStyle: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.DividerStyle] = field(_.sectionDividerStyle)((c_, f_) => c_.copy(sectionDividerStyle = f_))
    def cardActions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.CardAction]] = field(_.cardActions)((c_, f_) => c_.copy(cardActions = f_))
    def name: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.name)((c_, f_) => c_.copy(name = f_))
    def fixedFooter: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardFixedFooter] = field(_.getFixedFooter)((c_, f_) => c_.copy(fixedFooter = Option(f_)))
    def optionalFixedFooter: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardFixedFooter]] = field(_.fixedFooter)((c_, f_) => c_.copy(fixedFooter = f_))
    def displayStyle: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.DisplayStyle] = field(_.displayStyle)((c_, f_) => c_.copy(displayStyle = f_))
    def peekCardHeader: _root_.scalapb.lenses.Lens[UpperPB, fs2.pubsub.grpc.internal.Card.CardHeader] = field(_.getPeekCardHeader)((c_, f_) => c_.copy(peekCardHeader = Option(f_)))
    def optionalPeekCardHeader: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader]] = field(_.peekCardHeader)((c_, f_) => c_.copy(peekCardHeader = f_))
  }
  final val HEADER_FIELD_NUMBER = 1
  final val SECTIONS_FIELD_NUMBER = 2
  final val SECTION_DIVIDER_STYLE_FIELD_NUMBER = 9
  final val CARD_ACTIONS_FIELD_NUMBER = 3
  final val NAME_FIELD_NUMBER = 4
  final val FIXED_FOOTER_FIELD_NUMBER = 5
  final val DISPLAY_STYLE_FIELD_NUMBER = 6
  final val PEEK_CARD_HEADER_FIELD_NUMBER = 7
  def of(
    header: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader],
    sections: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.Section],
    sectionDividerStyle: fs2.pubsub.grpc.internal.Card.DividerStyle,
    cardActions: _root_.scala.Seq[fs2.pubsub.grpc.internal.Card.CardAction],
    name: _root_.scala.Predef.String,
    fixedFooter: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardFixedFooter],
    displayStyle: fs2.pubsub.grpc.internal.Card.DisplayStyle,
    peekCardHeader: _root_.scala.Option[fs2.pubsub.grpc.internal.Card.CardHeader]
  ): _root_.fs2.pubsub.grpc.internal.Card = _root_.fs2.pubsub.grpc.internal.Card(
    header,
    sections,
    sectionDividerStyle,
    cardActions,
    name,
    fixedFooter,
    displayStyle,
    peekCardHeader
  )
  // @@protoc_insertion_point(GeneratedMessageCompanion[google.apps.card.v1.Card])
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy