// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 // protoc v4.24.4 // source: google/apps/card/v1/card.proto package card import ( reflect "reflect" sync "sync" color "google.golang.org/genproto/googleapis/type/color" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // 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): type Card_DividerStyle int32 const ( // Don't use. Unspecified. Card_DIVIDER_STYLE_UNSPECIFIED Card_DividerStyle = 0 // Default option. Render a solid divider between sections. Card_SOLID_DIVIDER Card_DividerStyle = 1 // If set, no divider is rendered between sections. Card_NO_DIVIDER Card_DividerStyle = 2 ) // Enum value maps for Card_DividerStyle. var ( Card_DividerStyle_name = map[int32]string{ 0: "DIVIDER_STYLE_UNSPECIFIED", 1: "SOLID_DIVIDER", 2: "NO_DIVIDER", } Card_DividerStyle_value = map[string]int32{ "DIVIDER_STYLE_UNSPECIFIED": 0, "SOLID_DIVIDER": 1, "NO_DIVIDER": 2, } ) func (x Card_DividerStyle) Enum() *Card_DividerStyle { p := new(Card_DividerStyle) *p = x return p } func (x Card_DividerStyle) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Card_DividerStyle) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[0].Descriptor() } func (Card_DividerStyle) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[0] } func (x Card_DividerStyle) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Card_DividerStyle.Descriptor instead. func (Card_DividerStyle) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0} } // In Google Workspace Add-ons, // determines how a card is displayed. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): type Card_DisplayStyle int32 const ( // Don't use. Unspecified. Card_DISPLAY_STYLE_UNSPECIFIED Card_DisplayStyle = 0 // 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. Card_PEEK Card_DisplayStyle = 1 // Default value. The card is shown by replacing the view of the top card in // the card stack. Card_REPLACE Card_DisplayStyle = 2 ) // Enum value maps for Card_DisplayStyle. var ( Card_DisplayStyle_name = map[int32]string{ 0: "DISPLAY_STYLE_UNSPECIFIED", 1: "PEEK", 2: "REPLACE", } Card_DisplayStyle_value = map[string]int32{ "DISPLAY_STYLE_UNSPECIFIED": 0, "PEEK": 1, "REPLACE": 2, } ) func (x Card_DisplayStyle) Enum() *Card_DisplayStyle { p := new(Card_DisplayStyle) *p = x return p } func (x Card_DisplayStyle) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Card_DisplayStyle) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[1].Descriptor() } func (Card_DisplayStyle) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[1] } func (x Card_DisplayStyle) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Card_DisplayStyle.Descriptor instead. func (Card_DisplayStyle) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1} } // The shape used to crop the image. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Widget_ImageType int32 const ( // Default value. Applies a square mask to the image. For example, a 4x3 // image becomes 3x3. Widget_SQUARE Widget_ImageType = 0 // Applies a circular mask to the image. For example, a 4x3 image becomes a // circle with a diameter of 3. Widget_CIRCLE Widget_ImageType = 1 ) // Enum value maps for Widget_ImageType. var ( Widget_ImageType_name = map[int32]string{ 0: "SQUARE", 1: "CIRCLE", } Widget_ImageType_value = map[string]int32{ "SQUARE": 0, "CIRCLE": 1, } ) func (x Widget_ImageType) Enum() *Widget_ImageType { p := new(Widget_ImageType) *p = x return p } func (x Widget_ImageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Widget_ImageType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[2].Descriptor() } func (Widget_ImageType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[2] } func (x Widget_ImageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Widget_ImageType.Descriptor instead. func (Widget_ImageType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 0} } // Specifies whether widgets align to the left, right, or center of a column. // // [Google Chat apps](https://developers.google.com/workspace/chat): type Widget_HorizontalAlignment int32 const ( // Don't use. Unspecified. Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED Widget_HorizontalAlignment = 0 // Default value. Aligns widgets to the start position of the column. For // left-to-right layouts, aligns to the left. For right-to-left layouts, // aligns to the right. Widget_START Widget_HorizontalAlignment = 1 // Aligns widgets to the center of the column. Widget_CENTER Widget_HorizontalAlignment = 2 // Aligns widgets to the end position of the column. For left-to-right // layouts, aligns widgets to the right. For right-to-left layouts, aligns // widgets to the left. Widget_END Widget_HorizontalAlignment = 3 ) // Enum value maps for Widget_HorizontalAlignment. var ( Widget_HorizontalAlignment_name = map[int32]string{ 0: "HORIZONTAL_ALIGNMENT_UNSPECIFIED", 1: "START", 2: "CENTER", 3: "END", } Widget_HorizontalAlignment_value = map[string]int32{ "HORIZONTAL_ALIGNMENT_UNSPECIFIED": 0, "START": 1, "CENTER": 2, "END": 3, } ) func (x Widget_HorizontalAlignment) Enum() *Widget_HorizontalAlignment { p := new(Widget_HorizontalAlignment) *p = x return p } func (x Widget_HorizontalAlignment) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Widget_HorizontalAlignment) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[3].Descriptor() } func (Widget_HorizontalAlignment) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[3] } func (x Widget_HorizontalAlignment) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Widget_HorizontalAlignment.Descriptor instead. func (Widget_HorizontalAlignment) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 1} } // How the switch appears in the user interface. // // [Google Workspace Add-ons // and Chat apps](https://developers.google.com/workspace/extend): type DecoratedText_SwitchControl_ControlType int32 const ( // A toggle-style switch. DecoratedText_SwitchControl_SWITCH DecoratedText_SwitchControl_ControlType = 0 // Deprecated in favor of `CHECK_BOX`. DecoratedText_SwitchControl_CHECKBOX DecoratedText_SwitchControl_ControlType = 1 // A checkbox. DecoratedText_SwitchControl_CHECK_BOX DecoratedText_SwitchControl_ControlType = 2 ) // Enum value maps for DecoratedText_SwitchControl_ControlType. var ( DecoratedText_SwitchControl_ControlType_name = map[int32]string{ 0: "SWITCH", 1: "CHECKBOX", 2: "CHECK_BOX", } DecoratedText_SwitchControl_ControlType_value = map[string]int32{ "SWITCH": 0, "CHECKBOX": 1, "CHECK_BOX": 2, } ) func (x DecoratedText_SwitchControl_ControlType) Enum() *DecoratedText_SwitchControl_ControlType { p := new(DecoratedText_SwitchControl_ControlType) *p = x return p } func (x DecoratedText_SwitchControl_ControlType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DecoratedText_SwitchControl_ControlType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[4].Descriptor() } func (DecoratedText_SwitchControl_ControlType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[4] } func (x DecoratedText_SwitchControl_ControlType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use DecoratedText_SwitchControl_ControlType.Descriptor instead. func (DecoratedText_SwitchControl_ControlType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0, 0} } // How a text input field appears in the user interface. For example, // whether it's a single line input field, or a multi-line input. If // `initialSuggestions` is specified, `type` is always `SINGLE_LINE`, // even if it's set to `MULTIPLE_LINE`. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type TextInput_Type int32 const ( // The text input field has a fixed height of one line. TextInput_SINGLE_LINE TextInput_Type = 0 // The text input field has a fixed height of multiple lines. TextInput_MULTIPLE_LINE TextInput_Type = 1 ) // Enum value maps for TextInput_Type. var ( TextInput_Type_name = map[int32]string{ 0: "SINGLE_LINE", 1: "MULTIPLE_LINE", } TextInput_Type_value = map[string]int32{ "SINGLE_LINE": 0, "MULTIPLE_LINE": 1, } ) func (x TextInput_Type) Enum() *TextInput_Type { p := new(TextInput_Type) *p = x return p } func (x TextInput_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TextInput_Type) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[5].Descriptor() } func (TextInput_Type) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[5] } func (x TextInput_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TextInput_Type.Descriptor instead. func (TextInput_Type) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6, 0} } // The format for the items that users can select. Different options support // different types of interactions. For example, users can select multiple // checkboxes, but can only select one item from a dropdown menu. // // Each selection input supports one type of selection. Mixing checkboxes // and switches, for example, isn't supported. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type SelectionInput_SelectionType int32 const ( // A set of checkboxes. Users can select one or more checkboxes. SelectionInput_CHECK_BOX SelectionInput_SelectionType = 0 // A set of radio buttons. Users can select one radio button. SelectionInput_RADIO_BUTTON SelectionInput_SelectionType = 1 // A set of switches. Users can turn on one or more switches. SelectionInput_SWITCH SelectionInput_SelectionType = 2 // A dropdown menu. Users can select one item from the menu. SelectionInput_DROPDOWN SelectionInput_SelectionType = 3 // A multiselect menu for static or dynamic data. From the menu bar, // users select one or more items. Users can also input values to populate // dynamic data. For example, users can start typing the name of a Google // Chat space and the widget autosuggests the space. // // To populate items for a multiselect menu, you can use one of the // following types of data sources: // // - Static data: Items are specified as `SelectionItem` objects in the // widget. Up to 100 items. // - Google Workspace data: Items are populated using data from Google // Workspace, such as Google Workspace users or Google Chat spaces. // - External data: Items are populated from an external data // source outside of Google Workspace. // // For examples of how to implement multiselect menus, see // [Add a multiselect // menu](https://developers.google.com/workspace/chat/design-interactive-card-dialog#multiselect-menu). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Multiselect for Google Workspace Add-ons are in // Developer Preview. SelectionInput_MULTI_SELECT SelectionInput_SelectionType = 4 ) // Enum value maps for SelectionInput_SelectionType. var ( SelectionInput_SelectionType_name = map[int32]string{ 0: "CHECK_BOX", 1: "RADIO_BUTTON", 2: "SWITCH", 3: "DROPDOWN", 4: "MULTI_SELECT", } SelectionInput_SelectionType_value = map[string]int32{ "CHECK_BOX": 0, "RADIO_BUTTON": 1, "SWITCH": 2, "DROPDOWN": 3, "MULTI_SELECT": 4, } ) func (x SelectionInput_SelectionType) Enum() *SelectionInput_SelectionType { p := new(SelectionInput_SelectionType) *p = x return p } func (x SelectionInput_SelectionType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SelectionInput_SelectionType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[6].Descriptor() } func (SelectionInput_SelectionType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[6] } func (x SelectionInput_SelectionType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SelectionInput_SelectionType.Descriptor instead. func (SelectionInput_SelectionType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0} } // A data source shared by all [Google Workspace // applications] // (https://developers.google.com/workspace/chat/api/reference/rest/v1/HostApp). // // [Google Chat apps](https://developers.google.com/workspace/chat): type SelectionInput_PlatformDataSource_CommonDataSource int32 const ( // Default value. Don't use. SelectionInput_PlatformDataSource_UNKNOWN SelectionInput_PlatformDataSource_CommonDataSource = 0 // Google Workspace users. The user can only view and select users from // their Google Workspace organization. SelectionInput_PlatformDataSource_USER SelectionInput_PlatformDataSource_CommonDataSource = 1 ) // Enum value maps for SelectionInput_PlatformDataSource_CommonDataSource. var ( SelectionInput_PlatformDataSource_CommonDataSource_name = map[int32]string{ 0: "UNKNOWN", 1: "USER", } SelectionInput_PlatformDataSource_CommonDataSource_value = map[string]int32{ "UNKNOWN": 0, "USER": 1, } ) func (x SelectionInput_PlatformDataSource_CommonDataSource) Enum() *SelectionInput_PlatformDataSource_CommonDataSource { p := new(SelectionInput_PlatformDataSource_CommonDataSource) *p = x return p } func (x SelectionInput_PlatformDataSource_CommonDataSource) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SelectionInput_PlatformDataSource_CommonDataSource) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[7].Descriptor() } func (SelectionInput_PlatformDataSource_CommonDataSource) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[7] } func (x SelectionInput_PlatformDataSource_CommonDataSource) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SelectionInput_PlatformDataSource_CommonDataSource.Descriptor instead. func (SelectionInput_PlatformDataSource_CommonDataSource) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1, 0} } // The format for the date and time in the `DateTimePicker` widget. // Determines whether users can input a date, a time, or both a date and time. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type DateTimePicker_DateTimePickerType int32 const ( // Users input a date and time. DateTimePicker_DATE_AND_TIME DateTimePicker_DateTimePickerType = 0 // Users input a date. DateTimePicker_DATE_ONLY DateTimePicker_DateTimePickerType = 1 // Users input a time. DateTimePicker_TIME_ONLY DateTimePicker_DateTimePickerType = 2 ) // Enum value maps for DateTimePicker_DateTimePickerType. var ( DateTimePicker_DateTimePickerType_name = map[int32]string{ 0: "DATE_AND_TIME", 1: "DATE_ONLY", 2: "TIME_ONLY", } DateTimePicker_DateTimePickerType_value = map[string]int32{ "DATE_AND_TIME": 0, "DATE_ONLY": 1, "TIME_ONLY": 2, } ) func (x DateTimePicker_DateTimePickerType) Enum() *DateTimePicker_DateTimePickerType { p := new(DateTimePicker_DateTimePickerType) *p = x return p } func (x DateTimePicker_DateTimePickerType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DateTimePicker_DateTimePickerType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[8].Descriptor() } func (DateTimePicker_DateTimePickerType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[8] } func (x DateTimePicker_DateTimePickerType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use DateTimePicker_DateTimePickerType.Descriptor instead. func (DateTimePicker_DateTimePickerType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10, 0} } // Represents the crop style applied to an image. // // [Google Workspace Add-ons // and Chat apps](https://developers.google.com/workspace/extend): type ImageCropStyle_ImageCropType int32 const ( // Don't use. Unspecified. ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED ImageCropStyle_ImageCropType = 0 // Default value. Applies a square crop. ImageCropStyle_SQUARE ImageCropStyle_ImageCropType = 1 // Applies a circular crop. ImageCropStyle_CIRCLE ImageCropStyle_ImageCropType = 2 // Applies a rectangular crop with a custom aspect ratio. Set the custom // aspect ratio with `aspectRatio`. ImageCropStyle_RECTANGLE_CUSTOM ImageCropStyle_ImageCropType = 3 // Applies a rectangular crop with a 4:3 aspect ratio. ImageCropStyle_RECTANGLE_4_3 ImageCropStyle_ImageCropType = 4 ) // Enum value maps for ImageCropStyle_ImageCropType. var ( ImageCropStyle_ImageCropType_name = map[int32]string{ 0: "IMAGE_CROP_TYPE_UNSPECIFIED", 1: "SQUARE", 2: "CIRCLE", 3: "RECTANGLE_CUSTOM", 4: "RECTANGLE_4_3", } ImageCropStyle_ImageCropType_value = map[string]int32{ "IMAGE_CROP_TYPE_UNSPECIFIED": 0, "SQUARE": 1, "CIRCLE": 2, "RECTANGLE_CUSTOM": 3, "RECTANGLE_4_3": 4, } ) func (x ImageCropStyle_ImageCropType) Enum() *ImageCropStyle_ImageCropType { p := new(ImageCropStyle_ImageCropType) *p = x return p } func (x ImageCropStyle_ImageCropType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ImageCropStyle_ImageCropType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[9].Descriptor() } func (ImageCropStyle_ImageCropType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[9] } func (x ImageCropStyle_ImageCropType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ImageCropStyle_ImageCropType.Descriptor instead. func (ImageCropStyle_ImageCropType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14, 0} } // Represents the border types applied to widgets. // // [Google Workspace Add-ons // and Chat apps](https://developers.google.com/workspace/extend): type BorderStyle_BorderType int32 const ( // Don't use. Unspecified. BorderStyle_BORDER_TYPE_UNSPECIFIED BorderStyle_BorderType = 0 // Default value. No border. BorderStyle_NO_BORDER BorderStyle_BorderType = 1 // Outline. BorderStyle_STROKE BorderStyle_BorderType = 2 ) // Enum value maps for BorderStyle_BorderType. var ( BorderStyle_BorderType_name = map[int32]string{ 0: "BORDER_TYPE_UNSPECIFIED", 1: "NO_BORDER", 2: "STROKE", } BorderStyle_BorderType_value = map[string]int32{ "BORDER_TYPE_UNSPECIFIED": 0, "NO_BORDER": 1, "STROKE": 2, } ) func (x BorderStyle_BorderType) Enum() *BorderStyle_BorderType { p := new(BorderStyle_BorderType) *p = x return p } func (x BorderStyle_BorderType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (BorderStyle_BorderType) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[10].Descriptor() } func (BorderStyle_BorderType) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[10] } func (x BorderStyle_BorderType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use BorderStyle_BorderType.Descriptor instead. func (BorderStyle_BorderType) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15, 0} } // Represents the various layout options available for a grid item. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Grid_GridItem_GridItemLayout int32 const ( // Don't use. Unspecified. Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED Grid_GridItem_GridItemLayout = 0 // The title and subtitle are shown below the grid item's image. Grid_GridItem_TEXT_BELOW Grid_GridItem_GridItemLayout = 1 // The title and subtitle are shown above the grid item's image. Grid_GridItem_TEXT_ABOVE Grid_GridItem_GridItemLayout = 2 ) // Enum value maps for Grid_GridItem_GridItemLayout. var ( Grid_GridItem_GridItemLayout_name = map[int32]string{ 0: "GRID_ITEM_LAYOUT_UNSPECIFIED", 1: "TEXT_BELOW", 2: "TEXT_ABOVE", } Grid_GridItem_GridItemLayout_value = map[string]int32{ "GRID_ITEM_LAYOUT_UNSPECIFIED": 0, "TEXT_BELOW": 1, "TEXT_ABOVE": 2, } ) func (x Grid_GridItem_GridItemLayout) Enum() *Grid_GridItem_GridItemLayout { p := new(Grid_GridItem_GridItemLayout) *p = x return p } func (x Grid_GridItem_GridItemLayout) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Grid_GridItem_GridItemLayout) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[11].Descriptor() } func (Grid_GridItem_GridItemLayout) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[11] } func (x Grid_GridItem_GridItemLayout) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Grid_GridItem_GridItemLayout.Descriptor instead. func (Grid_GridItem_GridItemLayout) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0, 0} } // Specifies how a column fills the width of the card. The width of each // column depends on both the `HorizontalSizeStyle` and the width of the // widgets within the column. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Columns for Google Workspace Add-ons are in // Developer Preview. type Columns_Column_HorizontalSizeStyle int32 const ( // Don't use. Unspecified. Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED Columns_Column_HorizontalSizeStyle = 0 // Default value. Column fills the available space, up to 70% of the // card's width. If both columns are set to `FILL_AVAILABLE_SPACE`, each // column fills 50% of the space. Columns_Column_FILL_AVAILABLE_SPACE Columns_Column_HorizontalSizeStyle = 1 // Column fills the least amount of space possible and no more than 30% of // the card's width. Columns_Column_FILL_MINIMUM_SPACE Columns_Column_HorizontalSizeStyle = 2 ) // Enum value maps for Columns_Column_HorizontalSizeStyle. var ( Columns_Column_HorizontalSizeStyle_name = map[int32]string{ 0: "HORIZONTAL_SIZE_STYLE_UNSPECIFIED", 1: "FILL_AVAILABLE_SPACE", 2: "FILL_MINIMUM_SPACE", } Columns_Column_HorizontalSizeStyle_value = map[string]int32{ "HORIZONTAL_SIZE_STYLE_UNSPECIFIED": 0, "FILL_AVAILABLE_SPACE": 1, "FILL_MINIMUM_SPACE": 2, } ) func (x Columns_Column_HorizontalSizeStyle) Enum() *Columns_Column_HorizontalSizeStyle { p := new(Columns_Column_HorizontalSizeStyle) *p = x return p } func (x Columns_Column_HorizontalSizeStyle) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Columns_Column_HorizontalSizeStyle) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[12].Descriptor() } func (Columns_Column_HorizontalSizeStyle) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[12] } func (x Columns_Column_HorizontalSizeStyle) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Columns_Column_HorizontalSizeStyle.Descriptor instead. func (Columns_Column_HorizontalSizeStyle) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0} } // Specifies whether widgets align to the top, bottom, or center of a // column. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Columns for Google Workspace Add-ons are in // Developer Preview. type Columns_Column_VerticalAlignment int32 const ( // Don't use. Unspecified. Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED Columns_Column_VerticalAlignment = 0 // Default value. Aligns widgets to the center of a column. Columns_Column_CENTER Columns_Column_VerticalAlignment = 1 // Aligns widgets to the top of a column. Columns_Column_TOP Columns_Column_VerticalAlignment = 2 // Aligns widgets to the bottom of a column. Columns_Column_BOTTOM Columns_Column_VerticalAlignment = 3 ) // Enum value maps for Columns_Column_VerticalAlignment. var ( Columns_Column_VerticalAlignment_name = map[int32]string{ 0: "VERTICAL_ALIGNMENT_UNSPECIFIED", 1: "CENTER", 2: "TOP", 3: "BOTTOM", } Columns_Column_VerticalAlignment_value = map[string]int32{ "VERTICAL_ALIGNMENT_UNSPECIFIED": 0, "CENTER": 1, "TOP": 2, "BOTTOM": 3, } ) func (x Columns_Column_VerticalAlignment) Enum() *Columns_Column_VerticalAlignment { p := new(Columns_Column_VerticalAlignment) *p = x return p } func (x Columns_Column_VerticalAlignment) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Columns_Column_VerticalAlignment) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[13].Descriptor() } func (Columns_Column_VerticalAlignment) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[13] } func (x Columns_Column_VerticalAlignment) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Columns_Column_VerticalAlignment.Descriptor instead. func (Columns_Column_VerticalAlignment) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 1} } // When an `OnClick` action opens a link, then the client can either open it // as a full-size window (if that's the frame used by the client), or an // overlay (such as a pop-up). The implementation depends on the client // platform capabilities, and the value selected might be ignored if the // client doesn't support it. `FULL_SIZE` is supported by all clients. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): type OpenLink_OpenAs int32 const ( // The link opens as a full-size window (if that's the frame used by the // client). OpenLink_FULL_SIZE OpenLink_OpenAs = 0 // The link opens as an overlay, such as a pop-up. OpenLink_OVERLAY OpenLink_OpenAs = 1 ) // Enum value maps for OpenLink_OpenAs. var ( OpenLink_OpenAs_name = map[int32]string{ 0: "FULL_SIZE", 1: "OVERLAY", } OpenLink_OpenAs_value = map[string]int32{ "FULL_SIZE": 0, "OVERLAY": 1, } ) func (x OpenLink_OpenAs) Enum() *OpenLink_OpenAs { p := new(OpenLink_OpenAs) *p = x return p } func (x OpenLink_OpenAs) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (OpenLink_OpenAs) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[14].Descriptor() } func (OpenLink_OpenAs) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[14] } func (x OpenLink_OpenAs) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use OpenLink_OpenAs.Descriptor instead. func (OpenLink_OpenAs) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 0} } // What the client does when a link opened by an `OnClick` action is closed. // // Implementation depends on client platform capabilities. For example, a web // browser might open a link in a pop-up window with an `OnClose` handler. // // If both `OnOpen` and `OnClose` handlers are set, and the client platform // can't support both values, `OnClose` takes precedence. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): type OpenLink_OnClose int32 const ( // Default value. The card doesn't reload; nothing happens. OpenLink_NOTHING OpenLink_OnClose = 0 // Reloads the card after the child window closes. // // If used in conjunction with // [`OpenAs.OVERLAY`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#openas), // the child window acts as a modal dialog and the parent card is blocked // until the child window closes. OpenLink_RELOAD OpenLink_OnClose = 1 ) // Enum value maps for OpenLink_OnClose. var ( OpenLink_OnClose_name = map[int32]string{ 0: "NOTHING", 1: "RELOAD", } OpenLink_OnClose_value = map[string]int32{ "NOTHING": 0, "RELOAD": 1, } ) func (x OpenLink_OnClose) Enum() *OpenLink_OnClose { p := new(OpenLink_OnClose) *p = x return p } func (x OpenLink_OnClose) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (OpenLink_OnClose) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[15].Descriptor() } func (OpenLink_OnClose) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[15] } func (x OpenLink_OnClose) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use OpenLink_OnClose.Descriptor instead. func (OpenLink_OnClose) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 1} } // Specifies the loading indicator that the action displays while // making the call to the action. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Action_LoadIndicator int32 const ( // Displays a spinner to indicate that content is loading. Action_SPINNER Action_LoadIndicator = 0 // Nothing is displayed. Action_NONE Action_LoadIndicator = 1 ) // Enum value maps for Action_LoadIndicator. var ( Action_LoadIndicator_name = map[int32]string{ 0: "SPINNER", 1: "NONE", } Action_LoadIndicator_value = map[string]int32{ "SPINNER": 0, "NONE": 1, } ) func (x Action_LoadIndicator) Enum() *Action_LoadIndicator { p := new(Action_LoadIndicator) *p = x return p } func (x Action_LoadIndicator) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Action_LoadIndicator) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[16].Descriptor() } func (Action_LoadIndicator) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[16] } func (x Action_LoadIndicator) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Action_LoadIndicator.Descriptor instead. func (Action_LoadIndicator) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0} } // Optional. Required when opening a // [dialog](https://developers.google.com/workspace/chat/dialogs). // // What to do in response to an interaction with a user, such as a user // clicking a button in a card message. // // If unspecified, the app responds by executing an `action`—like opening a // link or running a function—as normal. // // By specifying an `interaction`, the app can respond in special interactive // ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can // open a [dialog](https://developers.google.com/workspace/chat/dialogs). // // When specified, a loading indicator isn't shown. If specified for // an add-on, the entire card is stripped and nothing is shown in the client. // // [Google Chat apps](https://developers.google.com/workspace/chat): type Action_Interaction int32 const ( // Default value. The `action` executes as normal. Action_INTERACTION_UNSPECIFIED Action_Interaction = 0 // Opens a [dialog](https://developers.google.com/workspace/chat/dialogs), a // windowed, card-based interface that Chat apps use to interact with users. // // Only supported by Chat apps in response to button-clicks on card // messages. If specified for // an add-on, the entire card is stripped and nothing is shown in the // client. // // [Google Chat apps](https://developers.google.com/workspace/chat): Action_OPEN_DIALOG Action_Interaction = 1 ) // Enum value maps for Action_Interaction. var ( Action_Interaction_name = map[int32]string{ 0: "INTERACTION_UNSPECIFIED", 1: "OPEN_DIALOG", } Action_Interaction_value = map[string]int32{ "INTERACTION_UNSPECIFIED": 0, "OPEN_DIALOG": 1, } ) func (x Action_Interaction) Enum() *Action_Interaction { p := new(Action_Interaction) *p = x return p } func (x Action_Interaction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Action_Interaction) Descriptor() protoreflect.EnumDescriptor { return file_google_apps_card_v1_card_proto_enumTypes[17].Descriptor() } func (Action_Interaction) Type() protoreflect.EnumType { return &file_google_apps_card_v1_card_proto_enumTypes[17] } func (x Action_Interaction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Action_Interaction.Descriptor instead. func (Action_Interaction) EnumDescriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 1} } // 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": "Online" // } // }, // { // "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" // } // ] // } // } // } // ] // } // } // ] // } // ] // } // } // ] // } // // ``` type Card struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The header of the card. A header usually contains a leading image and a // title. Headers always appear at the top of a card. Header *Card_CardHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` // 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). Sections []*Card_Section `protobuf:"bytes,2,rep,name=sections,proto3" json:"sections,omitempty"` // The divider style between sections. SectionDividerStyle Card_DividerStyle `protobuf:"varint,9,opt,name=section_divider_style,json=sectionDividerStyle,proto3,enum=google.apps.card.v1.Card_DividerStyle" json:"section_divider_style,omitempty"` // 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" // } // } // } // // ] // ``` CardActions []*Card_CardAction `protobuf:"bytes,3,rep,name=card_actions,json=cardActions,proto3" json:"card_actions,omitempty"` // Name of the card. Used as a card identifier in card navigation. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` // 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): FixedFooter *Card_CardFixedFooter `protobuf:"bytes,5,opt,name=fixed_footer,json=fixedFooter,proto3" json:"fixed_footer,omitempty"` // In Google Workspace Add-ons, sets the display properties of the // `peekCardHeader`. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): DisplayStyle Card_DisplayStyle `protobuf:"varint,6,opt,name=display_style,json=displayStyle,proto3,enum=google.apps.card.v1.Card_DisplayStyle" json:"display_style,omitempty"` // 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): PeekCardHeader *Card_CardHeader `protobuf:"bytes,7,opt,name=peek_card_header,json=peekCardHeader,proto3" json:"peek_card_header,omitempty"` } func (x *Card) Reset() { *x = Card{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Card) String() string { return protoimpl.X.MessageStringOf(x) } func (*Card) ProtoMessage() {} func (x *Card) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Card.ProtoReflect.Descriptor instead. func (*Card) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0} } func (x *Card) GetHeader() *Card_CardHeader { if x != nil { return x.Header } return nil } func (x *Card) GetSections() []*Card_Section { if x != nil { return x.Sections } return nil } func (x *Card) GetSectionDividerStyle() Card_DividerStyle { if x != nil { return x.SectionDividerStyle } return Card_DIVIDER_STYLE_UNSPECIFIED } func (x *Card) GetCardActions() []*Card_CardAction { if x != nil { return x.CardActions } return nil } func (x *Card) GetName() string { if x != nil { return x.Name } return "" } func (x *Card) GetFixedFooter() *Card_CardFixedFooter { if x != nil { return x.FixedFooter } return nil } func (x *Card) GetDisplayStyle() Card_DisplayStyle { if x != nil { return x.DisplayStyle } return Card_DISPLAY_STYLE_UNSPECIFIED } func (x *Card) GetPeekCardHeader() *Card_CardHeader { if x != nil { return x.PeekCardHeader } return nil } // Each card is made up of widgets. // // A widget is a composite object that can represent one of text, images, // buttons, and other object types. type Widget struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A widget can only have one of the following items. You can use multiple // widget fields to display more items. // // Types that are assignable to Data: // // *Widget_TextParagraph // *Widget_Image // *Widget_DecoratedText // *Widget_ButtonList // *Widget_TextInput // *Widget_SelectionInput // *Widget_DateTimePicker // *Widget_Divider // *Widget_Grid // *Widget_Columns Data isWidget_Data `protobuf_oneof:"data"` // Specifies whether widgets align to the left, right, or center of a column. HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,8,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"` } func (x *Widget) Reset() { *x = Widget{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Widget) String() string { return protoimpl.X.MessageStringOf(x) } func (*Widget) ProtoMessage() {} func (x *Widget) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Widget.ProtoReflect.Descriptor instead. func (*Widget) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1} } func (m *Widget) GetData() isWidget_Data { if m != nil { return m.Data } return nil } func (x *Widget) GetTextParagraph() *TextParagraph { if x, ok := x.GetData().(*Widget_TextParagraph); ok { return x.TextParagraph } return nil } func (x *Widget) GetImage() *Image { if x, ok := x.GetData().(*Widget_Image); ok { return x.Image } return nil } func (x *Widget) GetDecoratedText() *DecoratedText { if x, ok := x.GetData().(*Widget_DecoratedText); ok { return x.DecoratedText } return nil } func (x *Widget) GetButtonList() *ButtonList { if x, ok := x.GetData().(*Widget_ButtonList); ok { return x.ButtonList } return nil } func (x *Widget) GetTextInput() *TextInput { if x, ok := x.GetData().(*Widget_TextInput); ok { return x.TextInput } return nil } func (x *Widget) GetSelectionInput() *SelectionInput { if x, ok := x.GetData().(*Widget_SelectionInput); ok { return x.SelectionInput } return nil } func (x *Widget) GetDateTimePicker() *DateTimePicker { if x, ok := x.GetData().(*Widget_DateTimePicker); ok { return x.DateTimePicker } return nil } func (x *Widget) GetDivider() *Divider { if x, ok := x.GetData().(*Widget_Divider); ok { return x.Divider } return nil } func (x *Widget) GetGrid() *Grid { if x, ok := x.GetData().(*Widget_Grid); ok { return x.Grid } return nil } func (x *Widget) GetColumns() *Columns { if x, ok := x.GetData().(*Widget_Columns); ok { return x.Columns } return nil } func (x *Widget) GetHorizontalAlignment() Widget_HorizontalAlignment { if x != nil { return x.HorizontalAlignment } return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED } type isWidget_Data interface { isWidget_Data() } type Widget_TextParagraph struct { // Displays a text paragraph. 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). // // For example, the following JSON creates a bolded text: // ``` // // "textParagraph": { // "text": " bold text" // } // // ``` TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"` } type Widget_Image struct { // Displays an image. // // For example, the following JSON creates an image with alternative text: // ``` // // "image": { // "imageUrl": // "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png", // "altText": "Chat app avatar" // } // // ``` Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"` } type Widget_DecoratedText struct { // Displays a decorated text item. // // For example, the following JSON creates a decorated text widget showing // email address: // // ``` // // "decoratedText": { // "icon": { // "knownIcon": "EMAIL" // }, // "topLabel": "Email Address", // "text": "sasha@example.com", // "bottomLabel": "This is a new Email address!", // "switchControl": { // "name": "has_send_welcome_email_to_sasha", // "selected": false, // "controlType": "CHECKBOX" // } // } // // ``` DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"` } type Widget_ButtonList struct { // A list of buttons. // // For example, the following JSON creates two buttons. The first // is a blue text button and the second is an image button that opens a // link: // ``` // // "buttonList": { // "buttons": [ // { // "text": "Edit", // "color": { // "red": 0, // "green": 0, // "blue": 1, // "alpha": 1 // }, // "disabled": true, // }, // { // "icon": { // "knownIcon": "INVITE", // "altText": "check calendar" // }, // "onClick": { // "openLink": { // "url": "https://example.com/calendar" // } // } // } // ] // } // // ``` ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"` } type Widget_TextInput struct { // Displays a text box that users can type into. // // For example, the following JSON creates a text input for an email // address: // // ``` // // "textInput": { // "name": "mailing_address", // "label": "Mailing Address" // } // // ``` // // As another example, the following JSON creates a text input for a // programming language with static suggestions: // ``` // // "textInput": { // "name": "preferred_programing_language", // "label": "Preferred Language", // "initialSuggestions": { // "items": [ // { // "text": "C++" // }, // { // "text": "Java" // }, // { // "text": "JavaScript" // }, // { // "text": "Python" // } // ] // } // } // // ``` TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"` } type Widget_SelectionInput struct { // Displays a selection control that lets users select items. Selection // controls can be checkboxes, radio buttons, switches, or dropdown menus. // // For example, the following JSON creates a dropdown menu that lets users // choose a size: // // ``` // // "selectionInput": { // "name": "size", // "label": "Size" // "type": "DROPDOWN", // "items": [ // { // "text": "S", // "value": "small", // "selected": false // }, // { // "text": "M", // "value": "medium", // "selected": true // }, // { // "text": "L", // "value": "large", // "selected": false // }, // { // "text": "XL", // "value": "extra_large", // "selected": false // } // ] // } // // ``` SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"` } type Widget_DateTimePicker struct { // Displays a widget that lets users input a date, time, or date and time. // // For example, the following JSON creates a date time picker to schedule an // appointment: // // ``` // // "dateTimePicker": { // "name": "appointment_time", // "label": "Book your appointment at:", // "type": "DATE_AND_TIME", // "valueMsEpoch": "796435200000" // } // // ``` DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"` } type Widget_Divider struct { // Displays a horizontal line divider between widgets. // // For example, the following JSON creates a divider: // ``` // "divider": { // } // ``` Divider *Divider `protobuf:"bytes,9,opt,name=divider,proto3,oneof"` } type Widget_Grid struct { // Displays a grid with a collection of items. // // A grid supports any number of columns and items. The number of rows is // determined by the upper bounds of the number items divided by the number // of columns. A grid with 10 items and 2 columns has 5 rows. A grid with 11 // items and 2 columns has 6 rows. // // [Google Workspace Add-ons and // Chat apps](https://developers.google.com/workspace/extend): // // For example, the following JSON creates a 2 column grid with a single // item: // // ``` // // "grid": { // "title": "A fine collection of items", // "columnCount": 2, // "borderStyle": { // "type": "STROKE", // "cornerRadius": 4 // }, // "items": [ // { // "image": { // "imageUri": "https://www.example.com/image.png", // "cropStyle": { // "type": "SQUARE" // }, // "borderStyle": { // "type": "STROKE" // } // }, // "title": "An item", // "textAlignment": "CENTER" // } // ], // "onClick": { // "openLink": { // "url": "https://www.example.com" // } // } // } // // ``` Grid *Grid `protobuf:"bytes,10,opt,name=grid,proto3,oneof"` } type Widget_Columns struct { // Displays up to 2 columns. // // To include more than 2 columns, or to use rows, use the `Grid` widget. // // For example, the following JSON creates 2 columns that each contain // text paragraphs: // // ``` // // "columns": { // "columnItems": [ // { // "horizontalSizeStyle": "FILL_AVAILABLE_SPACE", // "horizontalAlignment": "CENTER", // "verticalAlignment": "CENTER", // "widgets": [ // { // "textParagraph": { // "text": "First column text paragraph" // } // } // ] // }, // { // "horizontalSizeStyle": "FILL_AVAILABLE_SPACE", // "horizontalAlignment": "CENTER", // "verticalAlignment": "CENTER", // "widgets": [ // { // "textParagraph": { // "text": "Second column text paragraph" // } // } // ] // } // ] // } // // ``` Columns *Columns `protobuf:"bytes,11,opt,name=columns,proto3,oneof"` } func (*Widget_TextParagraph) isWidget_Data() {} func (*Widget_Image) isWidget_Data() {} func (*Widget_DecoratedText) isWidget_Data() {} func (*Widget_ButtonList) isWidget_Data() {} func (*Widget_TextInput) isWidget_Data() {} func (*Widget_SelectionInput) isWidget_Data() {} func (*Widget_DateTimePicker) isWidget_Data() {} func (*Widget_Divider) isWidget_Data() {} func (*Widget_Grid) isWidget_Data() {} func (*Widget_Columns) isWidget_Data() {} // A paragraph of text that supports formatting. For an example in // Google Chat apps, see [Add a paragraph of formatted // text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_a_paragraph_of_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). // // [Google Workspace Add-ons and // Chat apps](https://developers.google.com/workspace/extend): type TextParagraph struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The text that's shown in the widget. Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` } func (x *TextParagraph) Reset() { *x = TextParagraph{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TextParagraph) String() string { return protoimpl.X.MessageStringOf(x) } func (*TextParagraph) ProtoMessage() {} func (x *TextParagraph) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TextParagraph.ProtoReflect.Descriptor instead. func (*TextParagraph) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{2} } func (x *TextParagraph) GetText() string { if x != nil { return x.Text } return "" } // An image that is specified by a URL and can have an `onClick` action. For an // example, see [Add an // image](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_image). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Image struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The HTTPS URL that hosts the image. // // For example: // // ``` // https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png // ``` ImageUrl string `protobuf:"bytes,1,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` // When a user clicks the image, the click triggers this action. OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"` // The alternative text of this image that's used for accessibility. AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` } func (x *Image) Reset() { *x = Image{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Image) String() string { return protoimpl.X.MessageStringOf(x) } func (*Image) ProtoMessage() {} func (x *Image) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Image.ProtoReflect.Descriptor instead. func (*Image) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{3} } func (x *Image) GetImageUrl() string { if x != nil { return x.ImageUrl } return "" } func (x *Image) GetOnClick() *OnClick { if x != nil { return x.OnClick } return nil } func (x *Image) GetAltText() string { if x != nil { return x.AltText } return "" } // Displays a divider between widgets as a horizontal line. For an example in // Google Chat apps, see // [Add a horizontal divider between // widgets](https://developers.google.com/workspace/chat/format-structure-card-dialog#add_a_horizontal_divider_between_widgets). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // // For example, the following JSON creates a divider: // // ``` // "divider": {} // ``` type Divider struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *Divider) Reset() { *x = Divider{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Divider) String() string { return protoimpl.X.MessageStringOf(x) } func (*Divider) ProtoMessage() {} func (x *Divider) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Divider.ProtoReflect.Descriptor instead. func (*Divider) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{4} } // A widget that displays text with optional decorations such as a label above // or below the text, an icon in front of the text, a selection widget, or a // button after the text. For an example in // Google Chat apps, see [Display text with decorative // text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#display_text_with_decorative_elements). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type DecoratedText struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Deprecated in favor of `startIcon`. // // Deprecated: Do not use. Icon *Icon `protobuf:"bytes,1,opt,name=icon,proto3" json:"icon,omitempty"` // The icon displayed in front of the text. StartIcon *Icon `protobuf:"bytes,12,opt,name=start_icon,json=startIcon,proto3" json:"start_icon,omitempty"` // The text that appears above `text`. Always truncates. TopLabel string `protobuf:"bytes,3,opt,name=top_label,json=topLabel,proto3" json:"top_label,omitempty"` // Required. The primary text. // // Supports simple formatting. 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). Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"` // The wrap text setting. If `true`, the text wraps and displays on // multiple lines. Otherwise, the text is truncated. // // Only applies to `text`, not `topLabel` and `bottomLabel`. WrapText bool `protobuf:"varint,5,opt,name=wrap_text,json=wrapText,proto3" json:"wrap_text,omitempty"` // The text that appears below `text`. Always wraps. BottomLabel string `protobuf:"bytes,6,opt,name=bottom_label,json=bottomLabel,proto3" json:"bottom_label,omitempty"` // This action is triggered when users click `topLabel` or `bottomLabel`. OnClick *OnClick `protobuf:"bytes,7,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"` // A button, switch, checkbox, or image that appears to the right-hand side // of text in the `decoratedText` widget. // // Types that are assignable to Control: // // *DecoratedText_Button // *DecoratedText_SwitchControl_ // *DecoratedText_EndIcon Control isDecoratedText_Control `protobuf_oneof:"control"` } func (x *DecoratedText) Reset() { *x = DecoratedText{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DecoratedText) String() string { return protoimpl.X.MessageStringOf(x) } func (*DecoratedText) ProtoMessage() {} func (x *DecoratedText) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DecoratedText.ProtoReflect.Descriptor instead. func (*DecoratedText) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5} } // Deprecated: Do not use. func (x *DecoratedText) GetIcon() *Icon { if x != nil { return x.Icon } return nil } func (x *DecoratedText) GetStartIcon() *Icon { if x != nil { return x.StartIcon } return nil } func (x *DecoratedText) GetTopLabel() string { if x != nil { return x.TopLabel } return "" } func (x *DecoratedText) GetText() string { if x != nil { return x.Text } return "" } func (x *DecoratedText) GetWrapText() bool { if x != nil { return x.WrapText } return false } func (x *DecoratedText) GetBottomLabel() string { if x != nil { return x.BottomLabel } return "" } func (x *DecoratedText) GetOnClick() *OnClick { if x != nil { return x.OnClick } return nil } func (m *DecoratedText) GetControl() isDecoratedText_Control { if m != nil { return m.Control } return nil } func (x *DecoratedText) GetButton() *Button { if x, ok := x.GetControl().(*DecoratedText_Button); ok { return x.Button } return nil } func (x *DecoratedText) GetSwitchControl() *DecoratedText_SwitchControl { if x, ok := x.GetControl().(*DecoratedText_SwitchControl_); ok { return x.SwitchControl } return nil } func (x *DecoratedText) GetEndIcon() *Icon { if x, ok := x.GetControl().(*DecoratedText_EndIcon); ok { return x.EndIcon } return nil } type isDecoratedText_Control interface { isDecoratedText_Control() } type DecoratedText_Button struct { // A button that a user can click to trigger an action. Button *Button `protobuf:"bytes,8,opt,name=button,proto3,oneof"` } type DecoratedText_SwitchControl_ struct { // A switch widget that a user can click to change its state and trigger an // action. SwitchControl *DecoratedText_SwitchControl `protobuf:"bytes,9,opt,name=switch_control,json=switchControl,proto3,oneof"` } type DecoratedText_EndIcon struct { // An icon displayed after the text. // // Supports // [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons) // and // [custom](https://developers.google.com/workspace/chat/format-messages#customicons) // icons. EndIcon *Icon `protobuf:"bytes,11,opt,name=end_icon,json=endIcon,proto3,oneof"` } func (*DecoratedText_Button) isDecoratedText_Control() {} func (*DecoratedText_SwitchControl_) isDecoratedText_Control() {} func (*DecoratedText_EndIcon) isDecoratedText_Control() {} // A field in which users can enter text. Supports suggestions and on-change // actions. For an example in Google Chat apps, see [Add a field in which a user // can enter // text](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_field_in_which_a_user_can_enter_text). // // Chat apps receive and can process the value of entered text during form input // events. For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). // // When you need to collect undefined or abstract data from users, // use a text input. To collect defined or enumerated data from users, use the // [SelectionInput][google.apps.card.v1.SelectionInput] widget. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type TextInput struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name by which the text input is identified in a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The text that appears above the text input field in the user interface. // // Specify text that helps the user enter the information your app needs. // For example, if you are asking someone's name, but specifically need their // surname, write `surname` instead of `name`. // // Required if `hintText` is unspecified. Otherwise, optional. Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` // Text that appears below the text input field meant to assist users by // prompting them to enter a certain value. This text is always visible. // // Required if `label` is unspecified. Otherwise, optional. HintText string `protobuf:"bytes,3,opt,name=hint_text,json=hintText,proto3" json:"hint_text,omitempty"` // The value entered by a user, returned as part of a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` // How a text input field appears in the user interface. // For example, whether the field is single or multi-line. Type TextInput_Type `protobuf:"varint,5,opt,name=type,proto3,enum=google.apps.card.v1.TextInput_Type" json:"type,omitempty"` // What to do when a change occurs in the text input field. For example, a // user adding to the field or deleting text. // // Examples of actions to take include running a custom function or opening // a [dialog](https://developers.google.com/workspace/chat/dialogs) // in Google Chat. OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"` // Suggested values that users can enter. These values appear when users click // inside the text input field. As users type, the suggested values // dynamically filter to match what the users have typed. // // For example, a text input field for programming language might suggest // Java, JavaScript, Python, and C++. When users start typing `Jav`, the list // of suggestions filters to show just `Java` and `JavaScript`. // // Suggested values help guide users to enter values that your app can make // sense of. When referring to JavaScript, some users might enter `javascript` // and others `java script`. Suggesting `JavaScript` can standardize how users // interact with your app. // // When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set // to `MULTIPLE_LINE`. // // [Google Workspace // Add-ons and Chat apps](https://developers.google.com/workspace/extend): InitialSuggestions *Suggestions `protobuf:"bytes,7,opt,name=initial_suggestions,json=initialSuggestions,proto3" json:"initial_suggestions,omitempty"` // Optional. Specify what action to take when the text input field provides // suggestions to users who interact with it. // // If unspecified, the suggestions are set by `initialSuggestions` and // are processed by the client. // // If specified, the app takes the action specified here, such as running // a custom function. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): AutoCompleteAction *Action `protobuf:"bytes,8,opt,name=auto_complete_action,json=autoCompleteAction,proto3" json:"auto_complete_action,omitempty"` // Text that appears in the text input field when the field is empty. // Use this text to prompt users to enter a value. For example, `Enter a // number from 0 to 100`. // // [Google Chat apps](https://developers.google.com/workspace/chat): PlaceholderText string `protobuf:"bytes,12,opt,name=placeholder_text,json=placeholderText,proto3" json:"placeholder_text,omitempty"` } func (x *TextInput) Reset() { *x = TextInput{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TextInput) String() string { return protoimpl.X.MessageStringOf(x) } func (*TextInput) ProtoMessage() {} func (x *TextInput) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TextInput.ProtoReflect.Descriptor instead. func (*TextInput) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6} } func (x *TextInput) GetName() string { if x != nil { return x.Name } return "" } func (x *TextInput) GetLabel() string { if x != nil { return x.Label } return "" } func (x *TextInput) GetHintText() string { if x != nil { return x.HintText } return "" } func (x *TextInput) GetValue() string { if x != nil { return x.Value } return "" } func (x *TextInput) GetType() TextInput_Type { if x != nil { return x.Type } return TextInput_SINGLE_LINE } func (x *TextInput) GetOnChangeAction() *Action { if x != nil { return x.OnChangeAction } return nil } func (x *TextInput) GetInitialSuggestions() *Suggestions { if x != nil { return x.InitialSuggestions } return nil } func (x *TextInput) GetAutoCompleteAction() *Action { if x != nil { return x.AutoCompleteAction } return nil } func (x *TextInput) GetPlaceholderText() string { if x != nil { return x.PlaceholderText } return "" } // Suggested values that users can enter. These values appear when users click // inside the text input field. As users type, the suggested values // dynamically filter to match what the users have typed. // // For example, a text input field for programming language might suggest // Java, JavaScript, Python, and C++. When users start typing `Jav`, the list // of suggestions filters to show `Java` and `JavaScript`. // // Suggested values help guide users to enter values that your app can make // sense of. When referring to JavaScript, some users might enter `javascript` // and others `java script`. Suggesting `JavaScript` can standardize how users // interact with your app. // // When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set // to `MULTIPLE_LINE`. // // [Google Workspace // Add-ons and Chat apps](https://developers.google.com/workspace/extend): type Suggestions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A list of suggestions used for autocomplete recommendations in text input // fields. Items []*Suggestions_SuggestionItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` } func (x *Suggestions) Reset() { *x = Suggestions{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Suggestions) String() string { return protoimpl.X.MessageStringOf(x) } func (*Suggestions) ProtoMessage() {} func (x *Suggestions) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Suggestions.ProtoReflect.Descriptor instead. func (*Suggestions) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7} } func (x *Suggestions) GetItems() []*Suggestions_SuggestionItem { if x != nil { return x.Items } return nil } // A list of buttons layed out horizontally. For an example in // Google Chat apps, see // [Add a // button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type ButtonList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // An array of buttons. Buttons []*Button `protobuf:"bytes,1,rep,name=buttons,proto3" json:"buttons,omitempty"` } func (x *ButtonList) Reset() { *x = ButtonList{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ButtonList) String() string { return protoimpl.X.MessageStringOf(x) } func (*ButtonList) ProtoMessage() {} func (x *ButtonList) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ButtonList.ProtoReflect.Descriptor instead. func (*ButtonList) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{8} } func (x *ButtonList) GetButtons() []*Button { if x != nil { return x.Buttons } return nil } // A widget that creates one or more UI items that users can select. // For example, a dropdown menu or checkboxes. You can use this widget to // collect data that can be predicted or enumerated. For an example in Google // Chat apps, see [Add selectable UI // elements](/workspace/chat/design-interactive-card-dialog#add_selectable_ui_elements). // // Chat apps can process the value of items that users select or input. For // details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). // // To collect undefined or abstract data from users, use // the [TextInput][google.apps.card.v1.TextInput] widget. // // [Google Workspace Add-ons // and Chat apps](https://developers.google.com/workspace/extend): type SelectionInput struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name that identifies the selection input in a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The text that appears above the selection input field in the user // interface. // // Specify text that helps the user enter the information your app needs. // For example, if users are selecting the urgency of a work ticket from a // drop-down menu, the label might be "Urgency" or "Select urgency". Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` // The type of items that are displayed to users in a `SelectionInput` widget. // Selection types support different types of interactions. For example, users // can select one or more checkboxes, but they can only select one value from // a dropdown menu. Type SelectionInput_SelectionType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.SelectionInput_SelectionType" json:"type,omitempty"` // An array of selectable items. For example, an array of radio buttons or // checkboxes. Supports up to 100 items. Items []*SelectionInput_SelectionItem `protobuf:"bytes,4,rep,name=items,proto3" json:"items,omitempty"` // If specified, the form is submitted when the selection changes. If not // specified, you must specify a separate button that submits the form. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). OnChangeAction *Action `protobuf:"bytes,5,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"` // For multiselect menus, the maximum number of items that a user can select. // Minimum value is 1 item. If unspecified, defaults to 3 items. MultiSelectMaxSelectedItems int32 `protobuf:"varint,6,opt,name=multi_select_max_selected_items,json=multiSelectMaxSelectedItems,proto3" json:"multi_select_max_selected_items,omitempty"` // For multiselect menus, the number of text characters that a user inputs // before the app queries autocomplete and displays suggested items // in the menu. // // If unspecified, defaults to 0 characters for static data sources and 3 // characters for external data sources. MultiSelectMinQueryLength int32 `protobuf:"varint,7,opt,name=multi_select_min_query_length,json=multiSelectMinQueryLength,proto3" json:"multi_select_min_query_length,omitempty"` // For a multiselect menu, the data source that populates // selection items. // // [Google Chat apps](https://developers.google.com/workspace/chat): // // Types that are assignable to MultiSelectDataSource: // // *SelectionInput_ExternalDataSource // *SelectionInput_PlatformDataSource_ MultiSelectDataSource isSelectionInput_MultiSelectDataSource `protobuf_oneof:"multi_select_data_source"` } func (x *SelectionInput) Reset() { *x = SelectionInput{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SelectionInput) String() string { return protoimpl.X.MessageStringOf(x) } func (*SelectionInput) ProtoMessage() {} func (x *SelectionInput) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SelectionInput.ProtoReflect.Descriptor instead. func (*SelectionInput) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9} } func (x *SelectionInput) GetName() string { if x != nil { return x.Name } return "" } func (x *SelectionInput) GetLabel() string { if x != nil { return x.Label } return "" } func (x *SelectionInput) GetType() SelectionInput_SelectionType { if x != nil { return x.Type } return SelectionInput_CHECK_BOX } func (x *SelectionInput) GetItems() []*SelectionInput_SelectionItem { if x != nil { return x.Items } return nil } func (x *SelectionInput) GetOnChangeAction() *Action { if x != nil { return x.OnChangeAction } return nil } func (x *SelectionInput) GetMultiSelectMaxSelectedItems() int32 { if x != nil { return x.MultiSelectMaxSelectedItems } return 0 } func (x *SelectionInput) GetMultiSelectMinQueryLength() int32 { if x != nil { return x.MultiSelectMinQueryLength } return 0 } func (m *SelectionInput) GetMultiSelectDataSource() isSelectionInput_MultiSelectDataSource { if m != nil { return m.MultiSelectDataSource } return nil } func (x *SelectionInput) GetExternalDataSource() *Action { if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_ExternalDataSource); ok { return x.ExternalDataSource } return nil } func (x *SelectionInput) GetPlatformDataSource() *SelectionInput_PlatformDataSource { if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_PlatformDataSource_); ok { return x.PlatformDataSource } return nil } type isSelectionInput_MultiSelectDataSource interface { isSelectionInput_MultiSelectDataSource() } type SelectionInput_ExternalDataSource struct { // An external data source, such as a relational data base. ExternalDataSource *Action `protobuf:"bytes,8,opt,name=external_data_source,json=externalDataSource,proto3,oneof"` } type SelectionInput_PlatformDataSource_ struct { // A data source from Google Workspace. PlatformDataSource *SelectionInput_PlatformDataSource `protobuf:"bytes,9,opt,name=platform_data_source,json=platformDataSource,proto3,oneof"` } func (*SelectionInput_ExternalDataSource) isSelectionInput_MultiSelectDataSource() {} func (*SelectionInput_PlatformDataSource_) isSelectionInput_MultiSelectDataSource() {} // Lets users input a date, a time, or both a date and a time. For an example in // Google Chat apps, see [Let a user pick a date and // time](https://developers.google.com/workspace/chat/design-interactive-card-dialog#let_a_user_pick_a_date_and_time). // // Users can input text or use the picker to select dates and times. If users // input an invalid date or time, the picker shows an error that prompts users // to input the information correctly. // // [Google Workspace // Add-ons and Chat apps](https://developers.google.com/workspace/extend): type DateTimePicker struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name by which the `DateTimePicker` is identified in a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The text that prompts users to input a date, a time, or a date and time. // For example, if users are scheduling an appointment, use a label such as // `Appointment date` or `Appointment date and time`. Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` // Whether the widget supports inputting a date, a time, or the date and time. Type DateTimePicker_DateTimePickerType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.DateTimePicker_DateTimePickerType" json:"type,omitempty"` // The default value displayed in the widget, in milliseconds since [Unix // epoch time](https://en.wikipedia.org/wiki/Unix_time). // // Specify the value based on the type of picker (`DateTimePickerType`): // // - `DATE_AND_TIME`: a calendar date and time in UTC. For example, to // represent January 1, 2023 at 12:00 PM UTC, use `1672574400000`. // - `DATE_ONLY`: a calendar date at 00:00:00 UTC. For example, to represent // January 1, 2023, use `1672531200000`. // - `TIME_ONLY`: a time in UTC. For example, to represent 12:00 PM, use // `43200000` (or `12 * 60 * 60 * 1000`). ValueMsEpoch int64 `protobuf:"varint,4,opt,name=value_ms_epoch,json=valueMsEpoch,proto3" json:"value_ms_epoch,omitempty"` // The number representing the time zone offset from UTC, in minutes. // If set, the `value_ms_epoch` is displayed in the specified time zone. // If unset, the value defaults to the user's time zone setting. TimezoneOffsetDate int32 `protobuf:"varint,5,opt,name=timezone_offset_date,json=timezoneOffsetDate,proto3" json:"timezone_offset_date,omitempty"` // Triggered when the user clicks **Save** or **Clear** from the // `DateTimePicker` interface. OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"` } func (x *DateTimePicker) Reset() { *x = DateTimePicker{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DateTimePicker) String() string { return protoimpl.X.MessageStringOf(x) } func (*DateTimePicker) ProtoMessage() {} func (x *DateTimePicker) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DateTimePicker.ProtoReflect.Descriptor instead. func (*DateTimePicker) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10} } func (x *DateTimePicker) GetName() string { if x != nil { return x.Name } return "" } func (x *DateTimePicker) GetLabel() string { if x != nil { return x.Label } return "" } func (x *DateTimePicker) GetType() DateTimePicker_DateTimePickerType { if x != nil { return x.Type } return DateTimePicker_DATE_AND_TIME } func (x *DateTimePicker) GetValueMsEpoch() int64 { if x != nil { return x.ValueMsEpoch } return 0 } func (x *DateTimePicker) GetTimezoneOffsetDate() int32 { if x != nil { return x.TimezoneOffsetDate } return 0 } func (x *DateTimePicker) GetOnChangeAction() *Action { if x != nil { return x.OnChangeAction } return nil } // A text, icon, or text and icon button that users can click. For an example in // Google Chat apps, see // [Add a // button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button). // // To make an image a clickable button, specify an // [`Image`][google.apps.card.v1.Image] (not an // [`ImageComponent`][google.apps.card.v1.ImageComponent]) and set an // `onClick` action. // // [Google Workspace // Add-ons and Chat apps](https://developers.google.com/workspace/extend): type Button struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The text displayed inside the button. Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` // The icon image. If both `icon` and `text` are set, then the icon appears // before the text. Icon *Icon `protobuf:"bytes,2,opt,name=icon,proto3" json:"icon,omitempty"` // If set, the button is filled with a solid background color and the font // color changes to maintain contrast with the background color. For example, // setting a blue background likely results in white text. // // If unset, the image background is white and the font color is blue. // // For red, green, and blue, the value of each field is a `float` number that // you can express in either of two ways: as a number between 0 and 255 // divided by 255 (153/255), or as a value between 0 and 1 (0.6). 0 represents // the absence of a color and 1 or 255/255 represent the full presence of that // color on the RGB scale. // // Optionally set `alpha`, which sets a level of transparency using this // equation: // // ``` // pixel color = alpha * (this color) + (1.0 - alpha) * (background color) // ``` // // For `alpha`, a value of `1` corresponds with a solid color, and a value of // `0` corresponds with a completely transparent color. // // For example, the following color represents a half transparent red: // // ``` // // "color": { // "red": 1, // "green": 0, // "blue": 0, // "alpha": 0.5 // } // // ``` Color *color.Color `protobuf:"bytes,3,opt,name=color,proto3" json:"color,omitempty"` // Required. The action to perform when a user clicks the button, such as // opening a hyperlink or running a custom function. OnClick *OnClick `protobuf:"bytes,4,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"` // If `true`, the button is displayed in an inactive state and doesn't respond // to user actions. Disabled bool `protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"` // The alternative text that's used for accessibility. // // Set descriptive text that lets users know what the button does. For // example, if a button opens a hyperlink, you might write: "Opens a new // browser tab and navigates to the Google Chat developer documentation at // https://developers.google.com/workspace/chat". AltText string `protobuf:"bytes,6,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` } func (x *Button) Reset() { *x = Button{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Button) String() string { return protoimpl.X.MessageStringOf(x) } func (*Button) ProtoMessage() {} func (x *Button) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Button.ProtoReflect.Descriptor instead. func (*Button) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{11} } func (x *Button) GetText() string { if x != nil { return x.Text } return "" } func (x *Button) GetIcon() *Icon { if x != nil { return x.Icon } return nil } func (x *Button) GetColor() *color.Color { if x != nil { return x.Color } return nil } func (x *Button) GetOnClick() *OnClick { if x != nil { return x.OnClick } return nil } func (x *Button) GetDisabled() bool { if x != nil { return x.Disabled } return false } func (x *Button) GetAltText() string { if x != nil { return x.AltText } return "" } // An icon displayed in a widget on a card. For an example in Google Chat apps, // see [Add an // icon](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_icon). // // Supports // [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons) // and // [custom](https://developers.google.com/workspace/chat/format-messages#customicons) // icons. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Icon struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The icon displayed in the widget on the card. // // Types that are assignable to Icons: // // *Icon_KnownIcon // *Icon_IconUrl // *Icon_MaterialIcon Icons isIcon_Icons `protobuf_oneof:"icons"` // Optional. A description of the icon used for accessibility. // If unspecified, the default value `Button` is provided. As a best practice, // you should set a helpful description for what the icon displays, and if // applicable, what it does. For example, `A user's account portrait`, or // `Opens a new browser tab and navigates to the Google Chat developer // documentation at https://developers.google.com/workspace/chat`. // // If the icon is set in a [`Button`][google.apps.card.v1.Button], the // `altText` appears as helper text when the user hovers over the button. // However, if the button also sets `text`, the icon's `altText` is ignored. AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` // The crop style applied to the image. In some cases, applying a // `CIRCLE` crop causes the image to be drawn larger than a built-in // icon. ImageType Widget_ImageType `protobuf:"varint,4,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"` } func (x *Icon) Reset() { *x = Icon{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Icon) String() string { return protoimpl.X.MessageStringOf(x) } func (*Icon) ProtoMessage() {} func (x *Icon) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Icon.ProtoReflect.Descriptor instead. func (*Icon) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{12} } func (m *Icon) GetIcons() isIcon_Icons { if m != nil { return m.Icons } return nil } func (x *Icon) GetKnownIcon() string { if x, ok := x.GetIcons().(*Icon_KnownIcon); ok { return x.KnownIcon } return "" } func (x *Icon) GetIconUrl() string { if x, ok := x.GetIcons().(*Icon_IconUrl); ok { return x.IconUrl } return "" } func (x *Icon) GetMaterialIcon() *MaterialIcon { if x, ok := x.GetIcons().(*Icon_MaterialIcon); ok { return x.MaterialIcon } return nil } func (x *Icon) GetAltText() string { if x != nil { return x.AltText } return "" } func (x *Icon) GetImageType() Widget_ImageType { if x != nil { return x.ImageType } return Widget_SQUARE } type isIcon_Icons interface { isIcon_Icons() } type Icon_KnownIcon struct { // Display one of the built-in icons provided by Google Workspace. // // For example, to display an airplane icon, specify `AIRPLANE`. // For a bus, specify `BUS`. // // For a full list of supported icons, see [built-in // icons](https://developers.google.com/workspace/chat/format-messages#builtinicons). KnownIcon string `protobuf:"bytes,1,opt,name=known_icon,json=knownIcon,proto3,oneof"` } type Icon_IconUrl struct { // Display a custom icon hosted at an HTTPS URL. // // For example: // // ``` // "iconUrl": // "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png" // ``` // // Supported file types include `.png` and `.jpg`. IconUrl string `protobuf:"bytes,2,opt,name=icon_url,json=iconUrl,proto3,oneof"` } type Icon_MaterialIcon struct { // Display one of the [Google Material // Icons](https://fonts.google.com/icons). // // For example, to display a [checkbox // icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048), // use // ``` // // "material_icon": { // "name": "check_box" // } // // ``` // // [Google Chat apps](https://developers.google.com/workspace/chat): MaterialIcon *MaterialIcon `protobuf:"bytes,5,opt,name=material_icon,json=materialIcon,proto3,oneof"` } func (*Icon_KnownIcon) isIcon_Icons() {} func (*Icon_IconUrl) isIcon_Icons() {} func (*Icon_MaterialIcon) isIcon_Icons() {} // A [Google Material Icon](https://fonts.google.com/icons), which includes over // 2500+ options. // // For example, to display a [checkbox // icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048) // with customized weight and grade, write the following: // // ``` // // { // "name": "check_box", // "fill": true, // "weight": 300, // "grade": -25 // } // // ``` // // [Google Chat apps](https://developers.google.com/workspace/chat): type MaterialIcon struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The icon name defined in the [Google Material // Icon](https://fonts.google.com/icons), for example, `check_box`. Any // invalid names are abandoned and replaced with empty string and // results in the icon failing to render. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Whether the icon renders as filled. Default value is false. // // To preview different icon settings, go to // [Google Font Icons](https://fonts.google.com/icons) and adjust the // settings under **Customize**. Fill bool `protobuf:"varint,2,opt,name=fill,proto3" json:"fill,omitempty"` // The stroke weight of the icon. Choose from {100, 200, 300, 400, // 500, 600, 700}. If absent, default value is 400. If any other value is // specified, the default value is used. // // To preview different icon settings, go to // [Google Font Icons](https://fonts.google.com/icons) and adjust the // settings under **Customize**. Weight int32 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"` // Weight and grade affect a symbol’s thickness. Adjustments to grade are more // granular than adjustments to weight and have a small impact on the size of // the symbol. Choose from {-25, 0, 200}. If absent, default value is 0. If // any other value is specified, the default value is used. // // To preview different icon settings, go to // [Google Font Icons](https://fonts.google.com/icons) and adjust the // settings under **Customize**. Grade int32 `protobuf:"varint,4,opt,name=grade,proto3" json:"grade,omitempty"` } func (x *MaterialIcon) Reset() { *x = MaterialIcon{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MaterialIcon) String() string { return protoimpl.X.MessageStringOf(x) } func (*MaterialIcon) ProtoMessage() {} func (x *MaterialIcon) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MaterialIcon.ProtoReflect.Descriptor instead. func (*MaterialIcon) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{13} } func (x *MaterialIcon) GetName() string { if x != nil { return x.Name } return "" } func (x *MaterialIcon) GetFill() bool { if x != nil { return x.Fill } return false } func (x *MaterialIcon) GetWeight() int32 { if x != nil { return x.Weight } return 0 } func (x *MaterialIcon) GetGrade() int32 { if x != nil { return x.Grade } return 0 } // Represents the crop style applied to an image. // // [Google Workspace Add-ons and // Chat apps](https://developers.google.com/workspace/extend): // // For example, here's how to apply a 16:9 aspect ratio: // // ``` // // cropStyle { // "type": "RECTANGLE_CUSTOM", // "aspectRatio": 16/9 // } // // ``` type ImageCropStyle struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The crop type. Type ImageCropStyle_ImageCropType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.ImageCropStyle_ImageCropType" json:"type,omitempty"` // The aspect ratio to use if the crop type is `RECTANGLE_CUSTOM`. // // For example, here's how to apply a 16:9 aspect ratio: // // ``` // // cropStyle { // "type": "RECTANGLE_CUSTOM", // "aspectRatio": 16/9 // } // // ``` AspectRatio float64 `protobuf:"fixed64,2,opt,name=aspect_ratio,json=aspectRatio,proto3" json:"aspect_ratio,omitempty"` } func (x *ImageCropStyle) Reset() { *x = ImageCropStyle{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ImageCropStyle) String() string { return protoimpl.X.MessageStringOf(x) } func (*ImageCropStyle) ProtoMessage() {} func (x *ImageCropStyle) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ImageCropStyle.ProtoReflect.Descriptor instead. func (*ImageCropStyle) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14} } func (x *ImageCropStyle) GetType() ImageCropStyle_ImageCropType { if x != nil { return x.Type } return ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED } func (x *ImageCropStyle) GetAspectRatio() float64 { if x != nil { return x.AspectRatio } return 0 } // The style options for the border of a card or widget, including the border // type and color. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type BorderStyle struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The border type. Type BorderStyle_BorderType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.BorderStyle_BorderType" json:"type,omitempty"` // The colors to use when the type is `BORDER_TYPE_STROKE`. StrokeColor *color.Color `protobuf:"bytes,2,opt,name=stroke_color,json=strokeColor,proto3" json:"stroke_color,omitempty"` // The corner radius for the border. CornerRadius int32 `protobuf:"varint,3,opt,name=corner_radius,json=cornerRadius,proto3" json:"corner_radius,omitempty"` } func (x *BorderStyle) Reset() { *x = BorderStyle{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BorderStyle) String() string { return protoimpl.X.MessageStringOf(x) } func (*BorderStyle) ProtoMessage() {} func (x *BorderStyle) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BorderStyle.ProtoReflect.Descriptor instead. func (*BorderStyle) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15} } func (x *BorderStyle) GetType() BorderStyle_BorderType { if x != nil { return x.Type } return BorderStyle_BORDER_TYPE_UNSPECIFIED } func (x *BorderStyle) GetStrokeColor() *color.Color { if x != nil { return x.StrokeColor } return nil } func (x *BorderStyle) GetCornerRadius() int32 { if x != nil { return x.CornerRadius } return 0 } // Represents an image. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type ImageComponent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The image URL. ImageUri string `protobuf:"bytes,1,opt,name=image_uri,json=imageUri,proto3" json:"image_uri,omitempty"` // The accessibility label for the image. AltText string `protobuf:"bytes,2,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` // The crop style to apply to the image. CropStyle *ImageCropStyle `protobuf:"bytes,3,opt,name=crop_style,json=cropStyle,proto3" json:"crop_style,omitempty"` // The border style to apply to the image. BorderStyle *BorderStyle `protobuf:"bytes,4,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"` } func (x *ImageComponent) Reset() { *x = ImageComponent{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ImageComponent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ImageComponent) ProtoMessage() {} func (x *ImageComponent) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ImageComponent.ProtoReflect.Descriptor instead. func (*ImageComponent) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{16} } func (x *ImageComponent) GetImageUri() string { if x != nil { return x.ImageUri } return "" } func (x *ImageComponent) GetAltText() string { if x != nil { return x.AltText } return "" } func (x *ImageComponent) GetCropStyle() *ImageCropStyle { if x != nil { return x.CropStyle } return nil } func (x *ImageComponent) GetBorderStyle() *BorderStyle { if x != nil { return x.BorderStyle } return nil } // Displays a grid with a collection of items. Items can only include text or // images. For responsive columns, or to include more than text or images, use // [`Columns`][google.apps.card.v1.Columns]. For an example in Google Chat apps, // see [Display a Grid with a collection of // items](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_a_grid_with_a_collection_of_items). // // A grid supports any number of columns and items. The number of rows is // determined by items divided by columns. A grid with // 10 items and 2 columns has 5 rows. A grid with 11 items and 2 columns // has 6 rows. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // // For example, the following JSON creates a 2 column grid with a single // item: // // ``` // // "grid": { // "title": "A fine collection of items", // "columnCount": 2, // "borderStyle": { // "type": "STROKE", // "cornerRadius": 4 // }, // "items": [ // { // "image": { // "imageUri": "https://www.example.com/image.png", // "cropStyle": { // "type": "SQUARE" // }, // "borderStyle": { // "type": "STROKE" // } // }, // "title": "An item", // "textAlignment": "CENTER" // } // ], // "onClick": { // "openLink": { // "url": "https://www.example.com" // } // } // } // // ``` type Grid struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The text that displays in the grid header. Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` // The items to display in the grid. Items []*Grid_GridItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` // The border style to apply to each grid item. BorderStyle *BorderStyle `protobuf:"bytes,3,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"` // The number of columns to display in the grid. A default value // is used if this field isn't specified, and that default value is // different depending on where the grid is shown (dialog versus companion). ColumnCount int32 `protobuf:"varint,4,opt,name=column_count,json=columnCount,proto3" json:"column_count,omitempty"` // This callback is reused by each individual grid item, but with the // item's identifier and index in the items list added to the callback's // parameters. OnClick *OnClick `protobuf:"bytes,5,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"` } func (x *Grid) Reset() { *x = Grid{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Grid) String() string { return protoimpl.X.MessageStringOf(x) } func (*Grid) ProtoMessage() {} func (x *Grid) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Grid.ProtoReflect.Descriptor instead. func (*Grid) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17} } func (x *Grid) GetTitle() string { if x != nil { return x.Title } return "" } func (x *Grid) GetItems() []*Grid_GridItem { if x != nil { return x.Items } return nil } func (x *Grid) GetBorderStyle() *BorderStyle { if x != nil { return x.BorderStyle } return nil } func (x *Grid) GetColumnCount() int32 { if x != nil { return x.ColumnCount } return 0 } func (x *Grid) GetOnClick() *OnClick { if x != nil { return x.OnClick } return nil } // The `Columns` widget displays up to 2 columns in a card or dialog. You can // add widgets to each column; the widgets appear in the order that they are // specified. For an example in Google Chat apps, see // [Display cards and dialogs in // columns](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_cards_and_dialogs_in_columns). // // The height of each column is determined by the taller column. For example, if // the first column is taller than the second column, both columns have the // height of the first column. Because each column can contain a different // number of widgets, you can't define rows or align widgets between the // columns. // // Columns are displayed side-by-side. You can customize the width of each // column using the `HorizontalSizeStyle` field. If the user's // screen width is too narrow, the second column wraps below the first: // // - On web, the second column wraps if the screen width is less than or equal // to 480 pixels. // - On iOS devices, the second column wraps if the screen width is // less than or equal to 300 pt. // - On Android devices, the second column wraps if the screen width is // less than or equal to 320 dp. // // To include more than 2 columns, or to use rows, use the // [`Grid`][google.apps.card.v1.Grid] widget. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Columns for Google Workspace Add-ons are in // Developer Preview. type Columns struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // An array of columns. You can include up to 2 columns in a card or dialog. ColumnItems []*Columns_Column `protobuf:"bytes,2,rep,name=column_items,json=columnItems,proto3" json:"column_items,omitempty"` } func (x *Columns) Reset() { *x = Columns{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Columns) String() string { return protoimpl.X.MessageStringOf(x) } func (*Columns) ProtoMessage() {} func (x *Columns) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Columns.ProtoReflect.Descriptor instead. func (*Columns) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18} } func (x *Columns) GetColumnItems() []*Columns_Column { if x != nil { return x.ColumnItems } return nil } // Represents how to respond when users click an interactive element on // a card, such as a button. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type OnClick struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Data: // // *OnClick_Action // *OnClick_OpenLink // *OnClick_OpenDynamicLinkAction // *OnClick_Card Data isOnClick_Data `protobuf_oneof:"data"` } func (x *OnClick) Reset() { *x = OnClick{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *OnClick) String() string { return protoimpl.X.MessageStringOf(x) } func (*OnClick) ProtoMessage() {} func (x *OnClick) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use OnClick.ProtoReflect.Descriptor instead. func (*OnClick) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{19} } func (m *OnClick) GetData() isOnClick_Data { if m != nil { return m.Data } return nil } func (x *OnClick) GetAction() *Action { if x, ok := x.GetData().(*OnClick_Action); ok { return x.Action } return nil } func (x *OnClick) GetOpenLink() *OpenLink { if x, ok := x.GetData().(*OnClick_OpenLink); ok { return x.OpenLink } return nil } func (x *OnClick) GetOpenDynamicLinkAction() *Action { if x, ok := x.GetData().(*OnClick_OpenDynamicLinkAction); ok { return x.OpenDynamicLinkAction } return nil } func (x *OnClick) GetCard() *Card { if x, ok := x.GetData().(*OnClick_Card); ok { return x.Card } return nil } type isOnClick_Data interface { isOnClick_Data() } type OnClick_Action struct { // If specified, an action is triggered by this `onClick`. Action *Action `protobuf:"bytes,1,opt,name=action,proto3,oneof"` } type OnClick_OpenLink struct { // If specified, this `onClick` triggers an open link action. OpenLink *OpenLink `protobuf:"bytes,2,opt,name=open_link,json=openLink,proto3,oneof"` } type OnClick_OpenDynamicLinkAction struct { // An add-on triggers this action when the action needs to open a // link. This differs from the `open_link` above in that this needs to talk // to server to get the link. Thus some preparation work is required for // web client to do before the open link action response comes back. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): OpenDynamicLinkAction *Action `protobuf:"bytes,3,opt,name=open_dynamic_link_action,json=openDynamicLinkAction,proto3,oneof"` } type OnClick_Card struct { // A new card is pushed to the card stack after clicking if specified. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): Card *Card `protobuf:"bytes,4,opt,name=card,proto3,oneof"` } func (*OnClick_Action) isOnClick_Data() {} func (*OnClick_OpenLink) isOnClick_Data() {} func (*OnClick_OpenDynamicLinkAction) isOnClick_Data() {} func (*OnClick_Card) isOnClick_Data() {} // Represents an `onClick` event that opens a hyperlink. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type OpenLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The URL to open. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // How to open a link. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): OpenAs OpenLink_OpenAs `protobuf:"varint,2,opt,name=open_as,json=openAs,proto3,enum=google.apps.card.v1.OpenLink_OpenAs" json:"open_as,omitempty"` // Whether the client forgets about a link after opening it, or observes it // until the window closes. // // [Google Workspace // Add-ons](https://developers.google.com/workspace/add-ons): OnClose OpenLink_OnClose `protobuf:"varint,3,opt,name=on_close,json=onClose,proto3,enum=google.apps.card.v1.OpenLink_OnClose" json:"on_close,omitempty"` } func (x *OpenLink) Reset() { *x = OpenLink{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *OpenLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*OpenLink) ProtoMessage() {} func (x *OpenLink) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use OpenLink.ProtoReflect.Descriptor instead. func (*OpenLink) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20} } func (x *OpenLink) GetUrl() string { if x != nil { return x.Url } return "" } func (x *OpenLink) GetOpenAs() OpenLink_OpenAs { if x != nil { return x.OpenAs } return OpenLink_FULL_SIZE } func (x *OpenLink) GetOnClose() OpenLink_OnClose { if x != nil { return x.OnClose } return OpenLink_NOTHING } // An action that describes the behavior when the form is submitted. // For example, you can invoke an Apps Script script to handle the form. // If the action is triggered, the form values are sent to the server. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Action struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A custom function to invoke when the containing element is // clicked or othrwise activated. // // For example usage, see [Read form // data](https://developers.google.com/workspace/chat/read-form-data). Function string `protobuf:"bytes,1,opt,name=function,proto3" json:"function,omitempty"` // List of action parameters. Parameters []*Action_ActionParameter `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty"` // Specifies the loading indicator that the action displays while // making the call to the action. LoadIndicator Action_LoadIndicator `protobuf:"varint,3,opt,name=load_indicator,json=loadIndicator,proto3,enum=google.apps.card.v1.Action_LoadIndicator" json:"load_indicator,omitempty"` // Indicates whether form values persist after the action. The default value // is `false`. // // If `true`, form values remain after the action is triggered. To let the // user make changes while the action is being processed, set // [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator) // to `NONE`. For [card // messages](https://developers.google.com/workspace/chat/api/guides/v1/messages/create#create) // in Chat apps, you must also set the action's // [`ResponseType`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#responsetype) // to `UPDATE_MESSAGE` and use the same // [`card_id`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#CardWithId) // from the card that contained the action. // // If `false`, the form values are cleared when the action is triggered. // To prevent the user from making changes while the action is being // processed, set // [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator) // to `SPINNER`. PersistValues bool `protobuf:"varint,4,opt,name=persist_values,json=persistValues,proto3" json:"persist_values,omitempty"` // Optional. Required when opening a // [dialog](https://developers.google.com/workspace/chat/dialogs). // // What to do in response to an interaction with a user, such as a user // clicking a button in a card message. // // If unspecified, the app responds by executing an `action`—like opening a // link or running a function—as normal. // // By specifying an `interaction`, the app can respond in special interactive // ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can // open a [dialog](https://developers.google.com/workspace/chat/dialogs). When // specified, a loading indicator isn't shown. If specified for // an add-on, the entire card is stripped and nothing is shown in the client. // // [Google Chat apps](https://developers.google.com/workspace/chat): Interaction Action_Interaction `protobuf:"varint,5,opt,name=interaction,proto3,enum=google.apps.card.v1.Action_Interaction" json:"interaction,omitempty"` } func (x *Action) Reset() { *x = Action{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Action) String() string { return protoimpl.X.MessageStringOf(x) } func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Action.ProtoReflect.Descriptor instead. func (*Action) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21} } func (x *Action) GetFunction() string { if x != nil { return x.Function } return "" } func (x *Action) GetParameters() []*Action_ActionParameter { if x != nil { return x.Parameters } return nil } func (x *Action) GetLoadIndicator() Action_LoadIndicator { if x != nil { return x.LoadIndicator } return Action_SPINNER } func (x *Action) GetPersistValues() bool { if x != nil { return x.PersistValues } return false } func (x *Action) GetInteraction() Action_Interaction { if x != nil { return x.Interaction } return Action_INTERACTION_UNSPECIFIED } // 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): type Card_CardHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // 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. Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` // The subtitle of the card header. If specified, appears on its own line // below the `title`. Subtitle string `protobuf:"bytes,2,opt,name=subtitle,proto3" json:"subtitle,omitempty"` // The shape used to crop the image. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): ImageType Widget_ImageType `protobuf:"varint,3,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"` // The HTTPS URL of the image in the card header. ImageUrl string `protobuf:"bytes,4,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"` // The alternative text of this image that's used for accessibility. ImageAltText string `protobuf:"bytes,5,opt,name=image_alt_text,json=imageAltText,proto3" json:"image_alt_text,omitempty"` } func (x *Card_CardHeader) Reset() { *x = Card_CardHeader{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Card_CardHeader) String() string { return protoimpl.X.MessageStringOf(x) } func (*Card_CardHeader) ProtoMessage() {} func (x *Card_CardHeader) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Card_CardHeader.ProtoReflect.Descriptor instead. func (*Card_CardHeader) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0} } func (x *Card_CardHeader) GetTitle() string { if x != nil { return x.Title } return "" } func (x *Card_CardHeader) GetSubtitle() string { if x != nil { return x.Subtitle } return "" } func (x *Card_CardHeader) GetImageType() Widget_ImageType { if x != nil { return x.ImageType } return Widget_SQUARE } func (x *Card_CardHeader) GetImageUrl() string { if x != nil { return x.ImageUrl } return "" } func (x *Card_CardHeader) GetImageAltText() string { if x != nil { return x.ImageAltText } return "" } // 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): type Card_Section struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // 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). Header string `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` // All the widgets in the section. // Must contain at least one widget. Widgets []*Widget `protobuf:"bytes,2,rep,name=widgets,proto3" json:"widgets,omitempty"` // 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`. Collapsible bool `protobuf:"varint,5,opt,name=collapsible,proto3" json:"collapsible,omitempty"` // 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`. UncollapsibleWidgetsCount int32 `protobuf:"varint,6,opt,name=uncollapsible_widgets_count,json=uncollapsibleWidgetsCount,proto3" json:"uncollapsible_widgets_count,omitempty"` } func (x *Card_Section) Reset() { *x = Card_Section{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Card_Section) String() string { return protoimpl.X.MessageStringOf(x) } func (*Card_Section) ProtoMessage() {} func (x *Card_Section) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Card_Section.ProtoReflect.Descriptor instead. func (*Card_Section) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1} } func (x *Card_Section) GetHeader() string { if x != nil { return x.Header } return "" } func (x *Card_Section) GetWidgets() []*Widget { if x != nil { return x.Widgets } return nil } func (x *Card_Section) GetCollapsible() bool { if x != nil { return x.Collapsible } return false } func (x *Card_Section) GetUncollapsibleWidgetsCount() int32 { if x != nil { return x.UncollapsibleWidgetsCount } return 0 } // 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): type Card_CardAction struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The label that displays as the action menu item. ActionLabel string `protobuf:"bytes,1,opt,name=action_label,json=actionLabel,proto3" json:"action_label,omitempty"` // The `onClick` action for this action item. OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"` } func (x *Card_CardAction) Reset() { *x = Card_CardAction{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Card_CardAction) String() string { return protoimpl.X.MessageStringOf(x) } func (*Card_CardAction) ProtoMessage() {} func (x *Card_CardAction) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Card_CardAction.ProtoReflect.Descriptor instead. func (*Card_CardAction) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 2} } func (x *Card_CardAction) GetActionLabel() string { if x != nil { return x.ActionLabel } return "" } func (x *Card_CardAction) GetOnClick() *OnClick { if x != nil { return x.OnClick } return nil } // 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): type Card_CardFixedFooter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The primary button of the fixed footer. The button must be a text button // with text and color set. PrimaryButton *Button `protobuf:"bytes,1,opt,name=primary_button,json=primaryButton,proto3" json:"primary_button,omitempty"` // 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`. SecondaryButton *Button `protobuf:"bytes,2,opt,name=secondary_button,json=secondaryButton,proto3" json:"secondary_button,omitempty"` } func (x *Card_CardFixedFooter) Reset() { *x = Card_CardFixedFooter{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Card_CardFixedFooter) String() string { return protoimpl.X.MessageStringOf(x) } func (*Card_CardFixedFooter) ProtoMessage() {} func (x *Card_CardFixedFooter) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Card_CardFixedFooter.ProtoReflect.Descriptor instead. func (*Card_CardFixedFooter) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 3} } func (x *Card_CardFixedFooter) GetPrimaryButton() *Button { if x != nil { return x.PrimaryButton } return nil } func (x *Card_CardFixedFooter) GetSecondaryButton() *Button { if x != nil { return x.SecondaryButton } return nil } // Either a toggle-style switch or a checkbox inside a `decoratedText` widget. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // // Only supported in the `decoratedText` widget. type DecoratedText_SwitchControl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name by which the switch widget is identified in a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The value entered by a user, returned as part of a form input event. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // When `true`, the switch is selected. Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"` // The action to perform when the switch state is changed, such as what // // function to run. OnChangeAction *Action `protobuf:"bytes,4,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"` // How the switch appears in the user interface. // // [Google Workspace Add-ons // and Chat apps](https://developers.google.com/workspace/extend): ControlType DecoratedText_SwitchControl_ControlType `protobuf:"varint,5,opt,name=control_type,json=controlType,proto3,enum=google.apps.card.v1.DecoratedText_SwitchControl_ControlType" json:"control_type,omitempty"` } func (x *DecoratedText_SwitchControl) Reset() { *x = DecoratedText_SwitchControl{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DecoratedText_SwitchControl) String() string { return protoimpl.X.MessageStringOf(x) } func (*DecoratedText_SwitchControl) ProtoMessage() {} func (x *DecoratedText_SwitchControl) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DecoratedText_SwitchControl.ProtoReflect.Descriptor instead. func (*DecoratedText_SwitchControl) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0} } func (x *DecoratedText_SwitchControl) GetName() string { if x != nil { return x.Name } return "" } func (x *DecoratedText_SwitchControl) GetValue() string { if x != nil { return x.Value } return "" } func (x *DecoratedText_SwitchControl) GetSelected() bool { if x != nil { return x.Selected } return false } func (x *DecoratedText_SwitchControl) GetOnChangeAction() *Action { if x != nil { return x.OnChangeAction } return nil } func (x *DecoratedText_SwitchControl) GetControlType() DecoratedText_SwitchControl_ControlType { if x != nil { return x.ControlType } return DecoratedText_SwitchControl_SWITCH } // One suggested value that users can enter in a text input field. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Suggestions_SuggestionItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Content: // // *Suggestions_SuggestionItem_Text Content isSuggestions_SuggestionItem_Content `protobuf_oneof:"content"` } func (x *Suggestions_SuggestionItem) Reset() { *x = Suggestions_SuggestionItem{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Suggestions_SuggestionItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*Suggestions_SuggestionItem) ProtoMessage() {} func (x *Suggestions_SuggestionItem) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Suggestions_SuggestionItem.ProtoReflect.Descriptor instead. func (*Suggestions_SuggestionItem) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7, 0} } func (m *Suggestions_SuggestionItem) GetContent() isSuggestions_SuggestionItem_Content { if m != nil { return m.Content } return nil } func (x *Suggestions_SuggestionItem) GetText() string { if x, ok := x.GetContent().(*Suggestions_SuggestionItem_Text); ok { return x.Text } return "" } type isSuggestions_SuggestionItem_Content interface { isSuggestions_SuggestionItem_Content() } type Suggestions_SuggestionItem_Text struct { // The value of a suggested input to a text input field. This is // equivalent to what users enter themselves. Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"` } func (*Suggestions_SuggestionItem_Text) isSuggestions_SuggestionItem_Content() {} // An item that users can select in a selection input, such as a checkbox // or switch. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type SelectionInput_SelectionItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The text that identifies or describes the item to users. Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` // The value associated with this item. The client should use this as a form // input value. // // For details about working with form inputs, see [Receive form // data](https://developers.google.com/workspace/chat/read-form-data). Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // Whether the item is selected by default. If the selection input only // accepts one value (such as for radio buttons or a dropdown menu), only // set this field for one item. Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"` // For multiselect menus, the URL for the icon displayed next to // the item's `text` field. Supports PNG and JPEG files. Must be an `HTTPS` // URL. For example, // `https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png`. StartIconUri string `protobuf:"bytes,4,opt,name=start_icon_uri,json=startIconUri,proto3" json:"start_icon_uri,omitempty"` // For multiselect menus, a text description or label that's // displayed below the item's `text` field. BottomText string `protobuf:"bytes,5,opt,name=bottom_text,json=bottomText,proto3" json:"bottom_text,omitempty"` } func (x *SelectionInput_SelectionItem) Reset() { *x = SelectionInput_SelectionItem{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SelectionInput_SelectionItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*SelectionInput_SelectionItem) ProtoMessage() {} func (x *SelectionInput_SelectionItem) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SelectionInput_SelectionItem.ProtoReflect.Descriptor instead. func (*SelectionInput_SelectionItem) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0} } func (x *SelectionInput_SelectionItem) GetText() string { if x != nil { return x.Text } return "" } func (x *SelectionInput_SelectionItem) GetValue() string { if x != nil { return x.Value } return "" } func (x *SelectionInput_SelectionItem) GetSelected() bool { if x != nil { return x.Selected } return false } func (x *SelectionInput_SelectionItem) GetStartIconUri() string { if x != nil { return x.StartIconUri } return "" } func (x *SelectionInput_SelectionItem) GetBottomText() string { if x != nil { return x.BottomText } return "" } // For a // [`SelectionInput`][google.apps.card.v1.SelectionInput] widget that uses a // multiselect menu, a data source from Google Workspace. Used to populate // items in a multiselect menu. // // [Google Chat apps](https://developers.google.com/workspace/chat): type SelectionInput_PlatformDataSource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The data source. // // Types that are assignable to DataSource: // // *SelectionInput_PlatformDataSource_CommonDataSource_ DataSource isSelectionInput_PlatformDataSource_DataSource `protobuf_oneof:"data_source"` } func (x *SelectionInput_PlatformDataSource) Reset() { *x = SelectionInput_PlatformDataSource{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SelectionInput_PlatformDataSource) String() string { return protoimpl.X.MessageStringOf(x) } func (*SelectionInput_PlatformDataSource) ProtoMessage() {} func (x *SelectionInput_PlatformDataSource) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SelectionInput_PlatformDataSource.ProtoReflect.Descriptor instead. func (*SelectionInput_PlatformDataSource) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1} } func (m *SelectionInput_PlatformDataSource) GetDataSource() isSelectionInput_PlatformDataSource_DataSource { if m != nil { return m.DataSource } return nil } func (x *SelectionInput_PlatformDataSource) GetCommonDataSource() SelectionInput_PlatformDataSource_CommonDataSource { if x, ok := x.GetDataSource().(*SelectionInput_PlatformDataSource_CommonDataSource_); ok { return x.CommonDataSource } return SelectionInput_PlatformDataSource_UNKNOWN } type isSelectionInput_PlatformDataSource_DataSource interface { isSelectionInput_PlatformDataSource_DataSource() } type SelectionInput_PlatformDataSource_CommonDataSource_ struct { // A data source shared by all Google Workspace applications, such as // users in a Google Workspace organization. CommonDataSource SelectionInput_PlatformDataSource_CommonDataSource `protobuf:"varint,1,opt,name=common_data_source,json=commonDataSource,proto3,enum=google.apps.card.v1.SelectionInput_PlatformDataSource_CommonDataSource,oneof"` } func (*SelectionInput_PlatformDataSource_CommonDataSource_) isSelectionInput_PlatformDataSource_DataSource() { } // Represents an item in a grid layout. Items can contain text, an image, or // both text and an image. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Grid_GridItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A user-specified identifier for this grid item. This identifier is // returned in the parent grid's `onClick` callback parameters. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The image that displays in the grid item. Image *ImageComponent `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` // The grid item's title. Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` // The grid item's subtitle. Subtitle string `protobuf:"bytes,4,opt,name=subtitle,proto3" json:"subtitle,omitempty"` // The layout to use for the grid item. Layout Grid_GridItem_GridItemLayout `protobuf:"varint,9,opt,name=layout,proto3,enum=google.apps.card.v1.Grid_GridItem_GridItemLayout" json:"layout,omitempty"` } func (x *Grid_GridItem) Reset() { *x = Grid_GridItem{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Grid_GridItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*Grid_GridItem) ProtoMessage() {} func (x *Grid_GridItem) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Grid_GridItem.ProtoReflect.Descriptor instead. func (*Grid_GridItem) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0} } func (x *Grid_GridItem) GetId() string { if x != nil { return x.Id } return "" } func (x *Grid_GridItem) GetImage() *ImageComponent { if x != nil { return x.Image } return nil } func (x *Grid_GridItem) GetTitle() string { if x != nil { return x.Title } return "" } func (x *Grid_GridItem) GetSubtitle() string { if x != nil { return x.Subtitle } return "" } func (x *Grid_GridItem) GetLayout() Grid_GridItem_GridItemLayout { if x != nil { return x.Layout } return Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED } // A column. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Columns for Google Workspace Add-ons are in // Developer Preview. type Columns_Column struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specifies how a column fills the width of the card. HorizontalSizeStyle Columns_Column_HorizontalSizeStyle `protobuf:"varint,1,opt,name=horizontal_size_style,json=horizontalSizeStyle,proto3,enum=google.apps.card.v1.Columns_Column_HorizontalSizeStyle" json:"horizontal_size_style,omitempty"` // Specifies whether widgets align to the left, right, or center of a // column. HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,2,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"` // Specifies whether widgets align to the top, bottom, or center of a // column. VerticalAlignment Columns_Column_VerticalAlignment `protobuf:"varint,3,opt,name=vertical_alignment,json=verticalAlignment,proto3,enum=google.apps.card.v1.Columns_Column_VerticalAlignment" json:"vertical_alignment,omitempty"` // An array of widgets included in a column. Widgets appear in the order // that they are specified. Widgets []*Columns_Column_Widgets `protobuf:"bytes,4,rep,name=widgets,proto3" json:"widgets,omitempty"` } func (x *Columns_Column) Reset() { *x = Columns_Column{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Columns_Column) String() string { return protoimpl.X.MessageStringOf(x) } func (*Columns_Column) ProtoMessage() {} func (x *Columns_Column) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Columns_Column.ProtoReflect.Descriptor instead. func (*Columns_Column) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0} } func (x *Columns_Column) GetHorizontalSizeStyle() Columns_Column_HorizontalSizeStyle { if x != nil { return x.HorizontalSizeStyle } return Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED } func (x *Columns_Column) GetHorizontalAlignment() Widget_HorizontalAlignment { if x != nil { return x.HorizontalAlignment } return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED } func (x *Columns_Column) GetVerticalAlignment() Columns_Column_VerticalAlignment { if x != nil { return x.VerticalAlignment } return Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED } func (x *Columns_Column) GetWidgets() []*Columns_Column_Widgets { if x != nil { return x.Widgets } return nil } // The supported widgets that you can include in a column. // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): // Columns for Google Workspace Add-ons are in // Developer Preview. type Columns_Column_Widgets struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Data: // // *Columns_Column_Widgets_TextParagraph // *Columns_Column_Widgets_Image // *Columns_Column_Widgets_DecoratedText // *Columns_Column_Widgets_ButtonList // *Columns_Column_Widgets_TextInput // *Columns_Column_Widgets_SelectionInput // *Columns_Column_Widgets_DateTimePicker Data isColumns_Column_Widgets_Data `protobuf_oneof:"data"` } func (x *Columns_Column_Widgets) Reset() { *x = Columns_Column_Widgets{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Columns_Column_Widgets) String() string { return protoimpl.X.MessageStringOf(x) } func (*Columns_Column_Widgets) ProtoMessage() {} func (x *Columns_Column_Widgets) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Columns_Column_Widgets.ProtoReflect.Descriptor instead. func (*Columns_Column_Widgets) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0} } func (m *Columns_Column_Widgets) GetData() isColumns_Column_Widgets_Data { if m != nil { return m.Data } return nil } func (x *Columns_Column_Widgets) GetTextParagraph() *TextParagraph { if x, ok := x.GetData().(*Columns_Column_Widgets_TextParagraph); ok { return x.TextParagraph } return nil } func (x *Columns_Column_Widgets) GetImage() *Image { if x, ok := x.GetData().(*Columns_Column_Widgets_Image); ok { return x.Image } return nil } func (x *Columns_Column_Widgets) GetDecoratedText() *DecoratedText { if x, ok := x.GetData().(*Columns_Column_Widgets_DecoratedText); ok { return x.DecoratedText } return nil } func (x *Columns_Column_Widgets) GetButtonList() *ButtonList { if x, ok := x.GetData().(*Columns_Column_Widgets_ButtonList); ok { return x.ButtonList } return nil } func (x *Columns_Column_Widgets) GetTextInput() *TextInput { if x, ok := x.GetData().(*Columns_Column_Widgets_TextInput); ok { return x.TextInput } return nil } func (x *Columns_Column_Widgets) GetSelectionInput() *SelectionInput { if x, ok := x.GetData().(*Columns_Column_Widgets_SelectionInput); ok { return x.SelectionInput } return nil } func (x *Columns_Column_Widgets) GetDateTimePicker() *DateTimePicker { if x, ok := x.GetData().(*Columns_Column_Widgets_DateTimePicker); ok { return x.DateTimePicker } return nil } type isColumns_Column_Widgets_Data interface { isColumns_Column_Widgets_Data() } type Columns_Column_Widgets_TextParagraph struct { // [TextParagraph][google.apps.card.v1.TextParagraph] widget. TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"` } type Columns_Column_Widgets_Image struct { // [Image][google.apps.card.v1.Image] widget. Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"` } type Columns_Column_Widgets_DecoratedText struct { // [DecoratedText][google.apps.card.v1.DecoratedText] widget. DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"` } type Columns_Column_Widgets_ButtonList struct { // [ButtonList][google.apps.card.v1.ButtonList] widget. ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"` } type Columns_Column_Widgets_TextInput struct { // [TextInput][google.apps.card.v1.TextInput] widget. TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"` } type Columns_Column_Widgets_SelectionInput struct { // [SelectionInput][google.apps.card.v1.SelectionInput] widget. SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"` } type Columns_Column_Widgets_DateTimePicker struct { // [DateTimePicker][google.apps.card.v1.DateTimePicker] widget. DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"` } func (*Columns_Column_Widgets_TextParagraph) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_Image) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_DecoratedText) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_ButtonList) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_TextInput) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_SelectionInput) isColumns_Column_Widgets_Data() {} func (*Columns_Column_Widgets_DateTimePicker) isColumns_Column_Widgets_Data() {} // List of string parameters to supply when the action method is invoked. // For example, consider three snooze buttons: snooze now, snooze one day, // or snooze next week. You might use `action method = snooze()`, passing the // snooze type and snooze time in the list of string parameters. // // To learn more, see // [`CommonEventObject`](https://developers.google.com/workspace/chat/api/reference/rest/v1/Event#commoneventobject). // // [Google Workspace Add-ons and Chat // apps](https://developers.google.com/workspace/extend): type Action_ActionParameter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name of the parameter for the action script. Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // The value of the parameter. Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *Action_ActionParameter) Reset() { *x = Action_ActionParameter{} if protoimpl.UnsafeEnabled { mi := &file_google_apps_card_v1_card_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Action_ActionParameter) String() string { return protoimpl.X.MessageStringOf(x) } func (*Action_ActionParameter) ProtoMessage() {} func (x *Action_ActionParameter) ProtoReflect() protoreflect.Message { mi := &file_google_apps_card_v1_card_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Action_ActionParameter.ProtoReflect.Descriptor instead. func (*Action_ActionParameter) Descriptor() ([]byte, []int) { return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0} } func (x *Action_ActionParameter) GetKey() string { if x != nil { return x.Key } return "" } func (x *Action_ActionParameter) GetValue() string { if x != nil { return x.Value } return "" } var File_google_apps_card_v1_card_proto protoreflect.FileDescriptor var file_google_apps_card_v1_card_proto_rawDesc = []byte{ 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x0a, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x6b, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x70, 0x65, 0x65, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x1a, 0xc7, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x3e, 0x0a, 0x1b, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x68, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0x9d, 0x01, 0x0a, 0x0f, 0x43, 0x61, 0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0c, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x44, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x45, 0x45, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x8f, 0x07, 0x0a, 0x06, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x67, 0x72, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x22, 0x5b, 0x0a, 0x13, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x20, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x23, 0x0a, 0x0d, 0x54, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x22, 0x09, 0x0a, 0x07, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xb3, 0x06, 0x0a, 0x0d, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x72, 0x61, 0x70, 0x54, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0e, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x49, 0x63, 0x6f, 0x6e, 0x1a, 0xb5, 0x02, 0x0a, 0x0d, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x36, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x22, 0xe1, 0x03, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x69, 0x6e, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x61, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x2a, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x31, 0x0a, 0x0e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x43, 0x0a, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x08, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x1f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4d, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x4f, 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x14, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x9c, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x54, 0x65, 0x78, 0x74, 0x1a, 0xc7, 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x29, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x5f, 0x42, 0x55, 0x54, 0x54, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x52, 0x4f, 0x50, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x10, 0x04, 0x42, 0x1a, 0x0a, 0x18, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xec, 0x02, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x12, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xe5, 0x01, 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2d, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x22, 0xf8, 0x01, 0x0a, 0x04, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x48, 0x0a, 0x0d, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x71, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x43, 0x54, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x43, 0x54, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x34, 0x5f, 0x33, 0x10, 0x04, 0x22, 0xf0, 0x01, 0x0a, 0x0b, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x44, 0x0a, 0x0a, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x4f, 0x4b, 0x45, 0x10, 0x02, 0x22, 0xd1, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x69, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x72, 0x6f, 0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x22, 0xa0, 0x04, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0xa6, 0x02, 0x0a, 0x08, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0x52, 0x0a, 0x0e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x52, 0x49, 0x44, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x42, 0x45, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x41, 0x42, 0x4f, 0x56, 0x45, 0x10, 0x02, 0x22, 0xac, 0x09, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xd8, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x6b, 0x0a, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x1a, 0x85, 0x04, 0x0a, 0x07, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x0e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x13, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x55, 0x4d, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x58, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4f, 0x54, 0x54, 0x4f, 0x4d, 0x10, 0x03, 0x22, 0x8f, 0x02, 0x0a, 0x07, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x56, 0x0a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe7, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x56, 0x45, 0x52, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x22, 0x22, 0x0a, 0x07, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x22, 0xd5, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x44, 0x49, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x01, 0x42, 0xa4, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x09, 0x43, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x61, 0x72, 0x64, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x73, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x70, 0x73, 0x5c, 0x43, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x41, 0x70, 0x70, 0x73, 0x3a, 0x3a, 0x43, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_google_apps_card_v1_card_proto_rawDescOnce sync.Once file_google_apps_card_v1_card_proto_rawDescData = file_google_apps_card_v1_card_proto_rawDesc ) func file_google_apps_card_v1_card_proto_rawDescGZIP() []byte { file_google_apps_card_v1_card_proto_rawDescOnce.Do(func() { file_google_apps_card_v1_card_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_apps_card_v1_card_proto_rawDescData) }) return file_google_apps_card_v1_card_proto_rawDescData } var file_google_apps_card_v1_card_proto_enumTypes = make([]protoimpl.EnumInfo, 18) var file_google_apps_card_v1_card_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_google_apps_card_v1_card_proto_goTypes = []interface{}{ (Card_DividerStyle)(0), // 0: google.apps.card.v1.Card.DividerStyle (Card_DisplayStyle)(0), // 1: google.apps.card.v1.Card.DisplayStyle (Widget_ImageType)(0), // 2: google.apps.card.v1.Widget.ImageType (Widget_HorizontalAlignment)(0), // 3: google.apps.card.v1.Widget.HorizontalAlignment (DecoratedText_SwitchControl_ControlType)(0), // 4: google.apps.card.v1.DecoratedText.SwitchControl.ControlType (TextInput_Type)(0), // 5: google.apps.card.v1.TextInput.Type (SelectionInput_SelectionType)(0), // 6: google.apps.card.v1.SelectionInput.SelectionType (SelectionInput_PlatformDataSource_CommonDataSource)(0), // 7: google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource (DateTimePicker_DateTimePickerType)(0), // 8: google.apps.card.v1.DateTimePicker.DateTimePickerType (ImageCropStyle_ImageCropType)(0), // 9: google.apps.card.v1.ImageCropStyle.ImageCropType (BorderStyle_BorderType)(0), // 10: google.apps.card.v1.BorderStyle.BorderType (Grid_GridItem_GridItemLayout)(0), // 11: google.apps.card.v1.Grid.GridItem.GridItemLayout (Columns_Column_HorizontalSizeStyle)(0), // 12: google.apps.card.v1.Columns.Column.HorizontalSizeStyle (Columns_Column_VerticalAlignment)(0), // 13: google.apps.card.v1.Columns.Column.VerticalAlignment (OpenLink_OpenAs)(0), // 14: google.apps.card.v1.OpenLink.OpenAs (OpenLink_OnClose)(0), // 15: google.apps.card.v1.OpenLink.OnClose (Action_LoadIndicator)(0), // 16: google.apps.card.v1.Action.LoadIndicator (Action_Interaction)(0), // 17: google.apps.card.v1.Action.Interaction (*Card)(nil), // 18: google.apps.card.v1.Card (*Widget)(nil), // 19: google.apps.card.v1.Widget (*TextParagraph)(nil), // 20: google.apps.card.v1.TextParagraph (*Image)(nil), // 21: google.apps.card.v1.Image (*Divider)(nil), // 22: google.apps.card.v1.Divider (*DecoratedText)(nil), // 23: google.apps.card.v1.DecoratedText (*TextInput)(nil), // 24: google.apps.card.v1.TextInput (*Suggestions)(nil), // 25: google.apps.card.v1.Suggestions (*ButtonList)(nil), // 26: google.apps.card.v1.ButtonList (*SelectionInput)(nil), // 27: google.apps.card.v1.SelectionInput (*DateTimePicker)(nil), // 28: google.apps.card.v1.DateTimePicker (*Button)(nil), // 29: google.apps.card.v1.Button (*Icon)(nil), // 30: google.apps.card.v1.Icon (*MaterialIcon)(nil), // 31: google.apps.card.v1.MaterialIcon (*ImageCropStyle)(nil), // 32: google.apps.card.v1.ImageCropStyle (*BorderStyle)(nil), // 33: google.apps.card.v1.BorderStyle (*ImageComponent)(nil), // 34: google.apps.card.v1.ImageComponent (*Grid)(nil), // 35: google.apps.card.v1.Grid (*Columns)(nil), // 36: google.apps.card.v1.Columns (*OnClick)(nil), // 37: google.apps.card.v1.OnClick (*OpenLink)(nil), // 38: google.apps.card.v1.OpenLink (*Action)(nil), // 39: google.apps.card.v1.Action (*Card_CardHeader)(nil), // 40: google.apps.card.v1.Card.CardHeader (*Card_Section)(nil), // 41: google.apps.card.v1.Card.Section (*Card_CardAction)(nil), // 42: google.apps.card.v1.Card.CardAction (*Card_CardFixedFooter)(nil), // 43: google.apps.card.v1.Card.CardFixedFooter (*DecoratedText_SwitchControl)(nil), // 44: google.apps.card.v1.DecoratedText.SwitchControl (*Suggestions_SuggestionItem)(nil), // 45: google.apps.card.v1.Suggestions.SuggestionItem (*SelectionInput_SelectionItem)(nil), // 46: google.apps.card.v1.SelectionInput.SelectionItem (*SelectionInput_PlatformDataSource)(nil), // 47: google.apps.card.v1.SelectionInput.PlatformDataSource (*Grid_GridItem)(nil), // 48: google.apps.card.v1.Grid.GridItem (*Columns_Column)(nil), // 49: google.apps.card.v1.Columns.Column (*Columns_Column_Widgets)(nil), // 50: google.apps.card.v1.Columns.Column.Widgets (*Action_ActionParameter)(nil), // 51: google.apps.card.v1.Action.ActionParameter (*color.Color)(nil), // 52: google.type.Color } var file_google_apps_card_v1_card_proto_depIdxs = []int32{ 40, // 0: google.apps.card.v1.Card.header:type_name -> google.apps.card.v1.Card.CardHeader 41, // 1: google.apps.card.v1.Card.sections:type_name -> google.apps.card.v1.Card.Section 0, // 2: google.apps.card.v1.Card.section_divider_style:type_name -> google.apps.card.v1.Card.DividerStyle 42, // 3: google.apps.card.v1.Card.card_actions:type_name -> google.apps.card.v1.Card.CardAction 43, // 4: google.apps.card.v1.Card.fixed_footer:type_name -> google.apps.card.v1.Card.CardFixedFooter 1, // 5: google.apps.card.v1.Card.display_style:type_name -> google.apps.card.v1.Card.DisplayStyle 40, // 6: google.apps.card.v1.Card.peek_card_header:type_name -> google.apps.card.v1.Card.CardHeader 20, // 7: google.apps.card.v1.Widget.text_paragraph:type_name -> google.apps.card.v1.TextParagraph 21, // 8: google.apps.card.v1.Widget.image:type_name -> google.apps.card.v1.Image 23, // 9: google.apps.card.v1.Widget.decorated_text:type_name -> google.apps.card.v1.DecoratedText 26, // 10: google.apps.card.v1.Widget.button_list:type_name -> google.apps.card.v1.ButtonList 24, // 11: google.apps.card.v1.Widget.text_input:type_name -> google.apps.card.v1.TextInput 27, // 12: google.apps.card.v1.Widget.selection_input:type_name -> google.apps.card.v1.SelectionInput 28, // 13: google.apps.card.v1.Widget.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker 22, // 14: google.apps.card.v1.Widget.divider:type_name -> google.apps.card.v1.Divider 35, // 15: google.apps.card.v1.Widget.grid:type_name -> google.apps.card.v1.Grid 36, // 16: google.apps.card.v1.Widget.columns:type_name -> google.apps.card.v1.Columns 3, // 17: google.apps.card.v1.Widget.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment 37, // 18: google.apps.card.v1.Image.on_click:type_name -> google.apps.card.v1.OnClick 30, // 19: google.apps.card.v1.DecoratedText.icon:type_name -> google.apps.card.v1.Icon 30, // 20: google.apps.card.v1.DecoratedText.start_icon:type_name -> google.apps.card.v1.Icon 37, // 21: google.apps.card.v1.DecoratedText.on_click:type_name -> google.apps.card.v1.OnClick 29, // 22: google.apps.card.v1.DecoratedText.button:type_name -> google.apps.card.v1.Button 44, // 23: google.apps.card.v1.DecoratedText.switch_control:type_name -> google.apps.card.v1.DecoratedText.SwitchControl 30, // 24: google.apps.card.v1.DecoratedText.end_icon:type_name -> google.apps.card.v1.Icon 5, // 25: google.apps.card.v1.TextInput.type:type_name -> google.apps.card.v1.TextInput.Type 39, // 26: google.apps.card.v1.TextInput.on_change_action:type_name -> google.apps.card.v1.Action 25, // 27: google.apps.card.v1.TextInput.initial_suggestions:type_name -> google.apps.card.v1.Suggestions 39, // 28: google.apps.card.v1.TextInput.auto_complete_action:type_name -> google.apps.card.v1.Action 45, // 29: google.apps.card.v1.Suggestions.items:type_name -> google.apps.card.v1.Suggestions.SuggestionItem 29, // 30: google.apps.card.v1.ButtonList.buttons:type_name -> google.apps.card.v1.Button 6, // 31: google.apps.card.v1.SelectionInput.type:type_name -> google.apps.card.v1.SelectionInput.SelectionType 46, // 32: google.apps.card.v1.SelectionInput.items:type_name -> google.apps.card.v1.SelectionInput.SelectionItem 39, // 33: google.apps.card.v1.SelectionInput.on_change_action:type_name -> google.apps.card.v1.Action 39, // 34: google.apps.card.v1.SelectionInput.external_data_source:type_name -> google.apps.card.v1.Action 47, // 35: google.apps.card.v1.SelectionInput.platform_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource 8, // 36: google.apps.card.v1.DateTimePicker.type:type_name -> google.apps.card.v1.DateTimePicker.DateTimePickerType 39, // 37: google.apps.card.v1.DateTimePicker.on_change_action:type_name -> google.apps.card.v1.Action 30, // 38: google.apps.card.v1.Button.icon:type_name -> google.apps.card.v1.Icon 52, // 39: google.apps.card.v1.Button.color:type_name -> google.type.Color 37, // 40: google.apps.card.v1.Button.on_click:type_name -> google.apps.card.v1.OnClick 31, // 41: google.apps.card.v1.Icon.material_icon:type_name -> google.apps.card.v1.MaterialIcon 2, // 42: google.apps.card.v1.Icon.image_type:type_name -> google.apps.card.v1.Widget.ImageType 9, // 43: google.apps.card.v1.ImageCropStyle.type:type_name -> google.apps.card.v1.ImageCropStyle.ImageCropType 10, // 44: google.apps.card.v1.BorderStyle.type:type_name -> google.apps.card.v1.BorderStyle.BorderType 52, // 45: google.apps.card.v1.BorderStyle.stroke_color:type_name -> google.type.Color 32, // 46: google.apps.card.v1.ImageComponent.crop_style:type_name -> google.apps.card.v1.ImageCropStyle 33, // 47: google.apps.card.v1.ImageComponent.border_style:type_name -> google.apps.card.v1.BorderStyle 48, // 48: google.apps.card.v1.Grid.items:type_name -> google.apps.card.v1.Grid.GridItem 33, // 49: google.apps.card.v1.Grid.border_style:type_name -> google.apps.card.v1.BorderStyle 37, // 50: google.apps.card.v1.Grid.on_click:type_name -> google.apps.card.v1.OnClick 49, // 51: google.apps.card.v1.Columns.column_items:type_name -> google.apps.card.v1.Columns.Column 39, // 52: google.apps.card.v1.OnClick.action:type_name -> google.apps.card.v1.Action 38, // 53: google.apps.card.v1.OnClick.open_link:type_name -> google.apps.card.v1.OpenLink 39, // 54: google.apps.card.v1.OnClick.open_dynamic_link_action:type_name -> google.apps.card.v1.Action 18, // 55: google.apps.card.v1.OnClick.card:type_name -> google.apps.card.v1.Card 14, // 56: google.apps.card.v1.OpenLink.open_as:type_name -> google.apps.card.v1.OpenLink.OpenAs 15, // 57: google.apps.card.v1.OpenLink.on_close:type_name -> google.apps.card.v1.OpenLink.OnClose 51, // 58: google.apps.card.v1.Action.parameters:type_name -> google.apps.card.v1.Action.ActionParameter 16, // 59: google.apps.card.v1.Action.load_indicator:type_name -> google.apps.card.v1.Action.LoadIndicator 17, // 60: google.apps.card.v1.Action.interaction:type_name -> google.apps.card.v1.Action.Interaction 2, // 61: google.apps.card.v1.Card.CardHeader.image_type:type_name -> google.apps.card.v1.Widget.ImageType 19, // 62: google.apps.card.v1.Card.Section.widgets:type_name -> google.apps.card.v1.Widget 37, // 63: google.apps.card.v1.Card.CardAction.on_click:type_name -> google.apps.card.v1.OnClick 29, // 64: google.apps.card.v1.Card.CardFixedFooter.primary_button:type_name -> google.apps.card.v1.Button 29, // 65: google.apps.card.v1.Card.CardFixedFooter.secondary_button:type_name -> google.apps.card.v1.Button 39, // 66: google.apps.card.v1.DecoratedText.SwitchControl.on_change_action:type_name -> google.apps.card.v1.Action 4, // 67: google.apps.card.v1.DecoratedText.SwitchControl.control_type:type_name -> google.apps.card.v1.DecoratedText.SwitchControl.ControlType 7, // 68: google.apps.card.v1.SelectionInput.PlatformDataSource.common_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource 34, // 69: google.apps.card.v1.Grid.GridItem.image:type_name -> google.apps.card.v1.ImageComponent 11, // 70: google.apps.card.v1.Grid.GridItem.layout:type_name -> google.apps.card.v1.Grid.GridItem.GridItemLayout 12, // 71: google.apps.card.v1.Columns.Column.horizontal_size_style:type_name -> google.apps.card.v1.Columns.Column.HorizontalSizeStyle 3, // 72: google.apps.card.v1.Columns.Column.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment 13, // 73: google.apps.card.v1.Columns.Column.vertical_alignment:type_name -> google.apps.card.v1.Columns.Column.VerticalAlignment 50, // 74: google.apps.card.v1.Columns.Column.widgets:type_name -> google.apps.card.v1.Columns.Column.Widgets 20, // 75: google.apps.card.v1.Columns.Column.Widgets.text_paragraph:type_name -> google.apps.card.v1.TextParagraph 21, // 76: google.apps.card.v1.Columns.Column.Widgets.image:type_name -> google.apps.card.v1.Image 23, // 77: google.apps.card.v1.Columns.Column.Widgets.decorated_text:type_name -> google.apps.card.v1.DecoratedText 26, // 78: google.apps.card.v1.Columns.Column.Widgets.button_list:type_name -> google.apps.card.v1.ButtonList 24, // 79: google.apps.card.v1.Columns.Column.Widgets.text_input:type_name -> google.apps.card.v1.TextInput 27, // 80: google.apps.card.v1.Columns.Column.Widgets.selection_input:type_name -> google.apps.card.v1.SelectionInput 28, // 81: google.apps.card.v1.Columns.Column.Widgets.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker 82, // [82:82] is the sub-list for method output_type 82, // [82:82] is the sub-list for method input_type 82, // [82:82] is the sub-list for extension type_name 82, // [82:82] is the sub-list for extension extendee 0, // [0:82] is the sub-list for field type_name } func init() { file_google_apps_card_v1_card_proto_init() } func file_google_apps_card_v1_card_proto_init() { if File_google_apps_card_v1_card_proto != nil { return } if !protoimpl.UnsafeEnabled { file_google_apps_card_v1_card_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Card); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Widget); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TextParagraph); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Image); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Divider); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DecoratedText); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TextInput); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Suggestions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ButtonList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SelectionInput); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DateTimePicker); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Button); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Icon); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MaterialIcon); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageCropStyle); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BorderStyle); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageComponent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Grid); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Columns); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OnClick); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpenLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Action); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Card_CardHeader); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Card_Section); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Card_CardAction); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Card_CardFixedFooter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DecoratedText_SwitchControl); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Suggestions_SuggestionItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SelectionInput_SelectionItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SelectionInput_PlatformDataSource); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Grid_GridItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Columns_Column); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Columns_Column_Widgets); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_apps_card_v1_card_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Action_ActionParameter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_google_apps_card_v1_card_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Widget_TextParagraph)(nil), (*Widget_Image)(nil), (*Widget_DecoratedText)(nil), (*Widget_ButtonList)(nil), (*Widget_TextInput)(nil), (*Widget_SelectionInput)(nil), (*Widget_DateTimePicker)(nil), (*Widget_Divider)(nil), (*Widget_Grid)(nil), (*Widget_Columns)(nil), } file_google_apps_card_v1_card_proto_msgTypes[5].OneofWrappers = []interface{}{ (*DecoratedText_Button)(nil), (*DecoratedText_SwitchControl_)(nil), (*DecoratedText_EndIcon)(nil), } file_google_apps_card_v1_card_proto_msgTypes[9].OneofWrappers = []interface{}{ (*SelectionInput_ExternalDataSource)(nil), (*SelectionInput_PlatformDataSource_)(nil), } file_google_apps_card_v1_card_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Icon_KnownIcon)(nil), (*Icon_IconUrl)(nil), (*Icon_MaterialIcon)(nil), } file_google_apps_card_v1_card_proto_msgTypes[19].OneofWrappers = []interface{}{ (*OnClick_Action)(nil), (*OnClick_OpenLink)(nil), (*OnClick_OpenDynamicLinkAction)(nil), (*OnClick_Card)(nil), } file_google_apps_card_v1_card_proto_msgTypes[27].OneofWrappers = []interface{}{ (*Suggestions_SuggestionItem_Text)(nil), } file_google_apps_card_v1_card_proto_msgTypes[29].OneofWrappers = []interface{}{ (*SelectionInput_PlatformDataSource_CommonDataSource_)(nil), } file_google_apps_card_v1_card_proto_msgTypes[32].OneofWrappers = []interface{}{ (*Columns_Column_Widgets_TextParagraph)(nil), (*Columns_Column_Widgets_Image)(nil), (*Columns_Column_Widgets_DecoratedText)(nil), (*Columns_Column_Widgets_ButtonList)(nil), (*Columns_Column_Widgets_TextInput)(nil), (*Columns_Column_Widgets_SelectionInput)(nil), (*Columns_Column_Widgets_DateTimePicker)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_apps_card_v1_card_proto_rawDesc, NumEnums: 18, NumMessages: 34, NumExtensions: 0, NumServices: 0, }, GoTypes: file_google_apps_card_v1_card_proto_goTypes, DependencyIndexes: file_google_apps_card_v1_card_proto_depIdxs, EnumInfos: file_google_apps_card_v1_card_proto_enumTypes, MessageInfos: file_google_apps_card_v1_card_proto_msgTypes, }.Build() File_google_apps_card_v1_card_proto = out.File file_google_apps_card_v1_card_proto_rawDesc = nil file_google_apps_card_v1_card_proto_goTypes = nil file_google_apps_card_v1_card_proto_depIdxs = nil }