# Copyright 2015 Google Inc.
#
# 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.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module AnalyticsadminV1alpha
      
      # A resource message representing a Google Analytics account.
      class GoogleAnalyticsAdminV1alphaAccount
        include Google::Apis::Core::Hashable
      
        # Country of business. Must be a non-deprecated code for a UN M.49 region. https:
        # //unicode.org/cldr/charts/latest/supplemental/territory_containment_un_m_49.
        # html
        # Corresponds to the JSON property `countryCode`
        # @return [String]
        attr_accessor :country_code
      
        # Output only. Time when this account was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Output only. Indicates whether this Account is soft-deleted or not. Deleted
        # accounts are excluded from List results unless specifically requested.
        # Corresponds to the JSON property `deleted`
        # @return [Boolean]
        attr_accessor :deleted
        alias_method :deleted?, :deleted
      
        # Required. Human-readable display name for this account.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. Resource name of this account. Format: accounts/`account` Example:
        # "accounts/100"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Time when account payload fields were last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @country_code = args[:country_code] if args.key?(:country_code)
          @create_time = args[:create_time] if args.key?(:create_time)
          @deleted = args[:deleted] if args.key?(:deleted)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # A virtual resource representing an overview of an account and all its child
      # GA4 properties.
      class GoogleAnalyticsAdminV1alphaAccountSummary
        include Google::Apis::Core::Hashable
      
        # Resource name of account referred to by this account summary Format: accounts/`
        # account_id` Example: "accounts/1000"
        # Corresponds to the JSON property `account`
        # @return [String]
        attr_accessor :account
      
        # Display name for the account referred to in this account summary.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Resource name for this account summary. Format: accountSummaries/`account_id`
        # Example: "accountSummaries/1000"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # List of summaries for child accounts of this account.
        # Corresponds to the JSON property `propertySummaries`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaPropertySummary>]
        attr_accessor :property_summaries
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account = args[:account] if args.key?(:account)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @property_summaries = args[:property_summaries] if args.key?(:property_summaries)
        end
      end
      
      # A resource message representing a Google Analytics Android app stream.
      class GoogleAnalyticsAdminV1alphaAndroidAppDataStream
        include Google::Apis::Core::Hashable
      
        # Output only. Time when this stream was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Human-readable display name for the Data Stream. The max allowed display name
        # length is 255 UTF-16 code units.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. ID of the corresponding Android app in Firebase, if any. This ID
        # can change if the Android app is deleted and recreated.
        # Corresponds to the JSON property `firebaseAppId`
        # @return [String]
        attr_accessor :firebase_app_id
      
        # Output only. Resource name of this Data Stream. Format: properties/`
        # property_id`/androidAppDataStreams/`stream_id` Example: "properties/1000/
        # androidAppDataStreams/2000"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Immutable. The package name for the app being measured. Example: "com.example.
        # myandroidapp"
        # Corresponds to the JSON property `packageName`
        # @return [String]
        attr_accessor :package_name
      
        # Output only. Time when stream payload fields were last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @display_name = args[:display_name] if args.key?(:display_name)
          @firebase_app_id = args[:firebase_app_id] if args.key?(:firebase_app_id)
          @name = args[:name] if args.key?(:name)
          @package_name = args[:package_name] if args.key?(:package_name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Read-only resource used to summarize a principal's effective roles.
      class GoogleAnalyticsAdminV1alphaAuditUserLink
        include Google::Apis::Core::Hashable
      
        # Roles directly assigned to this user for this entity. Format: predefinedRoles/
        # read Excludes roles that are inherited from an account (if this is for a
        # property), group, or organization admin role.
        # Corresponds to the JSON property `directRoles`
        # @return [Array<String>]
        attr_accessor :direct_roles
      
        # Union of all permissions a user has at this account or property (includes
        # direct permissions, group-inherited permissions, etc.). Format:
        # predefinedRoles/read
        # Corresponds to the JSON property `effectiveRoles`
        # @return [Array<String>]
        attr_accessor :effective_roles
      
        # Email address of the linked user
        # Corresponds to the JSON property `emailAddress`
        # @return [String]
        attr_accessor :email_address
      
        # Example format: properties/1234/userLinks/5678
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @direct_roles = args[:direct_roles] if args.key?(:direct_roles)
          @effective_roles = args[:effective_roles] if args.key?(:effective_roles)
          @email_address = args[:email_address] if args.key?(:email_address)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Request message for AuditUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaAuditUserLinksRequest
        include Google::Apis::Core::Hashable
      
        # The maximum number of user links to return. The service may return fewer than
        # this value. If unspecified, at most 1000 user links will be returned. The
        # maximum value is 5000; values above 5000 will be coerced to 5000.
        # Corresponds to the JSON property `pageSize`
        # @return [Fixnum]
        attr_accessor :page_size
      
        # A page token, received from a previous `AuditUserLinks` call. Provide this to
        # retrieve the subsequent page. When paginating, all other parameters provided
        # to `AuditUserLinks` must match the call that provided the page token.
        # Corresponds to the JSON property `pageToken`
        # @return [String]
        attr_accessor :page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @page_size = args[:page_size] if args.key?(:page_size)
          @page_token = args[:page_token] if args.key?(:page_token)
        end
      end
      
      # Response message for AuditUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaAuditUserLinksResponse
        include Google::Apis::Core::Hashable
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # List of AuditUserLinks. These will be ordered stably, but in an arbitrary
        # order.
        # Corresponds to the JSON property `userLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaAuditUserLink>]
        attr_accessor :user_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @user_links = args[:user_links] if args.key?(:user_links)
        end
      end
      
      # Request message for BatchCreateUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchCreateUserLinksRequest
        include Google::Apis::Core::Hashable
      
        # Optional. If notify_new_users is set, then email new users that they've been
        # given permissions on the resource.
        # Corresponds to the JSON property `notifyNewUsers`
        # @return [Boolean]
        attr_accessor :notify_new_users
        alias_method :notify_new_users?, :notify_new_users
      
        # The requests specifying the user links to create. A maximum of 1000 user links
        # can be created in a batch.
        # Corresponds to the JSON property `requests`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaCreateUserLinkRequest>]
        attr_accessor :requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @notify_new_users = args[:notify_new_users] if args.key?(:notify_new_users)
          @requests = args[:requests] if args.key?(:requests)
        end
      end
      
      # Response message for BatchCreateUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchCreateUserLinksResponse
        include Google::Apis::Core::Hashable
      
        # The user links created.
        # Corresponds to the JSON property `userLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink>]
        attr_accessor :user_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_links = args[:user_links] if args.key?(:user_links)
        end
      end
      
      # Request message for BatchDeleteUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchDeleteUserLinksRequest
        include Google::Apis::Core::Hashable
      
        # The requests specifying the user links to update. A maximum of 1000 user links
        # can be updated in a batch.
        # Corresponds to the JSON property `requests`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaDeleteUserLinkRequest>]
        attr_accessor :requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @requests = args[:requests] if args.key?(:requests)
        end
      end
      
      # Response message for BatchGetUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchGetUserLinksResponse
        include Google::Apis::Core::Hashable
      
        # The requested user links.
        # Corresponds to the JSON property `userLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink>]
        attr_accessor :user_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_links = args[:user_links] if args.key?(:user_links)
        end
      end
      
      # Request message for BatchUpdateUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchUpdateUserLinksRequest
        include Google::Apis::Core::Hashable
      
        # The requests specifying the user links to update. A maximum of 1000 user links
        # can be updated in a batch.
        # Corresponds to the JSON property `requests`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUpdateUserLinkRequest>]
        attr_accessor :requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @requests = args[:requests] if args.key?(:requests)
        end
      end
      
      # Response message for BatchUpdateUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaBatchUpdateUserLinksResponse
        include Google::Apis::Core::Hashable
      
        # The user links updated.
        # Corresponds to the JSON property `userLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink>]
        attr_accessor :user_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_links = args[:user_links] if args.key?(:user_links)
        end
      end
      
      # Request message for CreateUserLink RPC. Users can have multiple email
      # addresses associated with their Google account, and one of these email
      # addresses is the "primary" email address. Any of the email addresses
      # associated with a Google account may be used for a new UserLink, but the
      # returned UserLink will always contain the "primary" email address. As a result,
      # the input and output email address for this request may differ.
      class GoogleAnalyticsAdminV1alphaCreateUserLinkRequest
        include Google::Apis::Core::Hashable
      
        # Optional. If notify_new_user is set, then email new user that they've been
        # given permissions on the resource.
        # Corresponds to the JSON property `notifyNewUser`
        # @return [Boolean]
        attr_accessor :notify_new_user
        alias_method :notify_new_user?, :notify_new_user
      
        # Required. Example format: accounts/1234
        # Corresponds to the JSON property `parent`
        # @return [String]
        attr_accessor :parent
      
        # A resource message representing a user's permissions on an Account or Property
        # resource.
        # Corresponds to the JSON property `userLink`
        # @return [Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink]
        attr_accessor :user_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @notify_new_user = args[:notify_new_user] if args.key?(:notify_new_user)
          @parent = args[:parent] if args.key?(:parent)
          @user_link = args[:user_link] if args.key?(:user_link)
        end
      end
      
      # A resource message representing data sharing settings of a Google Analytics
      # account.
      class GoogleAnalyticsAdminV1alphaDataSharingSettings
        include Google::Apis::Core::Hashable
      
        # Output only. Resource name. Format: accounts/`account`/dataSharingSettings
        # Example: "accounts/1000/dataSharingSettings"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Allows any of Google sales to access the data in order to suggest
        # configuration changes to improve results.
        # Corresponds to the JSON property `sharingWithGoogleAnySalesEnabled`
        # @return [Boolean]
        attr_accessor :sharing_with_google_any_sales_enabled
        alias_method :sharing_with_google_any_sales_enabled?, :sharing_with_google_any_sales_enabled
      
        # Allows Google sales teams that are assigned to the customer to access the data
        # in order to suggest configuration changes to improve results. Sales team
        # restrictions still apply when enabled.
        # Corresponds to the JSON property `sharingWithGoogleAssignedSalesEnabled`
        # @return [Boolean]
        attr_accessor :sharing_with_google_assigned_sales_enabled
        alias_method :sharing_with_google_assigned_sales_enabled?, :sharing_with_google_assigned_sales_enabled
      
        # Allows Google to use the data to improve other Google products or services.
        # Corresponds to the JSON property `sharingWithGoogleProductsEnabled`
        # @return [Boolean]
        attr_accessor :sharing_with_google_products_enabled
        alias_method :sharing_with_google_products_enabled?, :sharing_with_google_products_enabled
      
        # Allows Google support to access the data in order to help troubleshoot issues.
        # Corresponds to the JSON property `sharingWithGoogleSupportEnabled`
        # @return [Boolean]
        attr_accessor :sharing_with_google_support_enabled
        alias_method :sharing_with_google_support_enabled?, :sharing_with_google_support_enabled
      
        # Allows Google to share the data anonymously in aggregate form with others.
        # Corresponds to the JSON property `sharingWithOthersEnabled`
        # @return [Boolean]
        attr_accessor :sharing_with_others_enabled
        alias_method :sharing_with_others_enabled?, :sharing_with_others_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @sharing_with_google_any_sales_enabled = args[:sharing_with_google_any_sales_enabled] if args.key?(:sharing_with_google_any_sales_enabled)
          @sharing_with_google_assigned_sales_enabled = args[:sharing_with_google_assigned_sales_enabled] if args.key?(:sharing_with_google_assigned_sales_enabled)
          @sharing_with_google_products_enabled = args[:sharing_with_google_products_enabled] if args.key?(:sharing_with_google_products_enabled)
          @sharing_with_google_support_enabled = args[:sharing_with_google_support_enabled] if args.key?(:sharing_with_google_support_enabled)
          @sharing_with_others_enabled = args[:sharing_with_others_enabled] if args.key?(:sharing_with_others_enabled)
        end
      end
      
      # Request message for DeleteUserLink RPC.
      class GoogleAnalyticsAdminV1alphaDeleteUserLinkRequest
        include Google::Apis::Core::Hashable
      
        # Required. Example format: accounts/1234/userLinks/5678
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Singleton resource under a WebDataStream, configuring measurement of
      # additional site interactions and content.
      class GoogleAnalyticsAdminV1alphaEnhancedMeasurementSettings
        include Google::Apis::Core::Hashable
      
        # Capture events when your visitors view content on your site that has articles
        # or blog posts.
        # Corresponds to the JSON property `articlesAndBlogsEnabled`
        # @return [Boolean]
        attr_accessor :articles_and_blogs_enabled
        alias_method :articles_and_blogs_enabled?, :articles_and_blogs_enabled
      
        # Capture events when your visitors view content on your site that has
        # structured data (eg, articles, blog posts, product details screens, etc.).
        # Corresponds to the JSON property `contentViewsEnabled`
        # @return [Boolean]
        attr_accessor :content_views_enabled
        alias_method :content_views_enabled?, :content_views_enabled
      
        # If enabled, capture a click event each time a visitor clicks a link or element
        # that has data attributes beginning with "data-ga".
        # Corresponds to the JSON property `dataTaggedElementClicksEnabled`
        # @return [Boolean]
        attr_accessor :data_tagged_element_clicks_enabled
        alias_method :data_tagged_element_clicks_enabled?, :data_tagged_element_clicks_enabled
      
        # Domains to exclude from measurement. Max length is 1024 characters.
        # Corresponds to the JSON property `excludedDomains`
        # @return [String]
        attr_accessor :excluded_domains
      
        # If enabled, capture a file download event each time a link is clicked with a
        # common document, compressed file, application, video, or audio extension.
        # Corresponds to the JSON property `fileDownloadsEnabled`
        # @return [Boolean]
        attr_accessor :file_downloads_enabled
        alias_method :file_downloads_enabled?, :file_downloads_enabled
      
        # If enabled, capture a view search results event each time a visitor interacts
        # with a form on your site.
        # Corresponds to the JSON property `formInteractionsEnabled`
        # @return [Boolean]
        attr_accessor :form_interactions_enabled
        alias_method :form_interactions_enabled?, :form_interactions_enabled
      
        # Output only. Resource name of this Data Stream. Format: properties/`
        # property_id`/webDataStreams/`stream_id`/enhancedMeasurementSettings Example: "
        # properties/1000/webDataStreams/2000/enhancedMeasurementSettings"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # If enabled, capture an outbound click event each time a visitor clicks a link
        # that leads them away from your domain.
        # Corresponds to the JSON property `outboundClicksEnabled`
        # @return [Boolean]
        attr_accessor :outbound_clicks_enabled
        alias_method :outbound_clicks_enabled?, :outbound_clicks_enabled
      
        # If enabled, capture a page view event each time the website changes the
        # browser history state.
        # Corresponds to the JSON property `pageChangesEnabled`
        # @return [Boolean]
        attr_accessor :page_changes_enabled
        alias_method :page_changes_enabled?, :page_changes_enabled
      
        # If enabled, capture a page view event each time a page loads.
        # Corresponds to the JSON property `pageLoadsEnabled`
        # @return [Boolean]
        attr_accessor :page_loads_enabled
        alias_method :page_loads_enabled?, :page_loads_enabled
      
        # Output only. If enabled, capture a page view event each time a page loads or
        # the website changes the browser history state.
        # Corresponds to the JSON property `pageViewsEnabled`
        # @return [Boolean]
        attr_accessor :page_views_enabled
        alias_method :page_views_enabled?, :page_views_enabled
      
        # Capture events when your visitors view content on your site that has product
        # details screens, etc.
        # Corresponds to the JSON property `productsAndEcommerceEnabled`
        # @return [Boolean]
        attr_accessor :products_and_ecommerce_enabled
        alias_method :products_and_ecommerce_enabled?, :products_and_ecommerce_enabled
      
        # If enabled, capture scroll events each time a visitor gets to the bottom of a
        # page.
        # Corresponds to the JSON property `scrollsEnabled`
        # @return [Boolean]
        attr_accessor :scrolls_enabled
        alias_method :scrolls_enabled?, :scrolls_enabled
      
        # Required. URL query parameters to interpret as site search parameters. Max
        # length is 1024 characters. Must not be empty.
        # Corresponds to the JSON property `searchQueryParameter`
        # @return [String]
        attr_accessor :search_query_parameter
      
        # If enabled, capture a view search results event each time a visitor performs a
        # search on your site (based on a query parameter).
        # Corresponds to the JSON property `siteSearchEnabled`
        # @return [Boolean]
        attr_accessor :site_search_enabled
        alias_method :site_search_enabled?, :site_search_enabled
      
        # Indicates whether Enhanced Measurement Settings will be used to automatically
        # measure interactions and content on this web stream. Changing this value does
        # not affect the settings themselves, but determines whether they are respected.
        # Corresponds to the JSON property `streamEnabled`
        # @return [Boolean]
        attr_accessor :stream_enabled
        alias_method :stream_enabled?, :stream_enabled
      
        # Additional URL query parameters. Max length is 1024 characters.
        # Corresponds to the JSON property `urlQueryParameter`
        # @return [String]
        attr_accessor :url_query_parameter
      
        # If enabled, capture video play, progress, and complete events as visitors view
        # embedded videos on your site.
        # Corresponds to the JSON property `videoEngagementEnabled`
        # @return [Boolean]
        attr_accessor :video_engagement_enabled
        alias_method :video_engagement_enabled?, :video_engagement_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @articles_and_blogs_enabled = args[:articles_and_blogs_enabled] if args.key?(:articles_and_blogs_enabled)
          @content_views_enabled = args[:content_views_enabled] if args.key?(:content_views_enabled)
          @data_tagged_element_clicks_enabled = args[:data_tagged_element_clicks_enabled] if args.key?(:data_tagged_element_clicks_enabled)
          @excluded_domains = args[:excluded_domains] if args.key?(:excluded_domains)
          @file_downloads_enabled = args[:file_downloads_enabled] if args.key?(:file_downloads_enabled)
          @form_interactions_enabled = args[:form_interactions_enabled] if args.key?(:form_interactions_enabled)
          @name = args[:name] if args.key?(:name)
          @outbound_clicks_enabled = args[:outbound_clicks_enabled] if args.key?(:outbound_clicks_enabled)
          @page_changes_enabled = args[:page_changes_enabled] if args.key?(:page_changes_enabled)
          @page_loads_enabled = args[:page_loads_enabled] if args.key?(:page_loads_enabled)
          @page_views_enabled = args[:page_views_enabled] if args.key?(:page_views_enabled)
          @products_and_ecommerce_enabled = args[:products_and_ecommerce_enabled] if args.key?(:products_and_ecommerce_enabled)
          @scrolls_enabled = args[:scrolls_enabled] if args.key?(:scrolls_enabled)
          @search_query_parameter = args[:search_query_parameter] if args.key?(:search_query_parameter)
          @site_search_enabled = args[:site_search_enabled] if args.key?(:site_search_enabled)
          @stream_enabled = args[:stream_enabled] if args.key?(:stream_enabled)
          @url_query_parameter = args[:url_query_parameter] if args.key?(:url_query_parameter)
          @video_engagement_enabled = args[:video_engagement_enabled] if args.key?(:video_engagement_enabled)
        end
      end
      
      # A link between an GA4 property and a Firebase project.
      class GoogleAnalyticsAdminV1alphaFirebaseLink
        include Google::Apis::Core::Hashable
      
        # Output only. Time when this FirebaseLink was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Maximum user access to the GA4 property allowed to admins of the linked
        # Firebase project.
        # Corresponds to the JSON property `maximumUserAccess`
        # @return [String]
        attr_accessor :maximum_user_access
      
        # Output only. Example format: properties/1234/firebaseLinks/5678
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Immutable. Firebase project resource name. When creating a FirebaseLink, you
        # may provide this resource name using either a project number or project ID.
        # Once this resource has been created, returned FirebaseLinks will always have a
        # project_name that contains a project number. Format: 'projects/`project number`
        # ' Example: 'projects/1234'
        # Corresponds to the JSON property `project`
        # @return [String]
        attr_accessor :project
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @maximum_user_access = args[:maximum_user_access] if args.key?(:maximum_user_access)
          @name = args[:name] if args.key?(:name)
          @project = args[:project] if args.key?(:project)
        end
      end
      
      # Read-only resource with the tag for sending data from a website to a
      # WebDataStream.
      class GoogleAnalyticsAdminV1alphaGlobalSiteTag
        include Google::Apis::Core::Hashable
      
        # Immutable. JavaScript code snippet to be pasted as the first item into the
        # head tag of every webpage to measure.
        # Corresponds to the JSON property `snippet`
        # @return [String]
        attr_accessor :snippet
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @snippet = args[:snippet] if args.key?(:snippet)
        end
      end
      
      # A link between an GA4 property and a Google Ads account.
      class GoogleAnalyticsAdminV1alphaGoogleAdsLink
        include Google::Apis::Core::Hashable
      
        # Enable personalized advertising features with this integration. Automatically
        # publish my Google Analytics audience lists and Google Analytics remarketing
        # events/parameters to the linked Google Ads account. If this field is not set
        # on create/update it will be defaulted to true.
        # Corresponds to the JSON property `adsPersonalizationEnabled`
        # @return [Boolean]
        attr_accessor :ads_personalization_enabled
        alias_method :ads_personalization_enabled?, :ads_personalization_enabled
      
        # Output only. If true, this link is for a Google Ads manager account.
        # Corresponds to the JSON property `canManageClients`
        # @return [Boolean]
        attr_accessor :can_manage_clients
        alias_method :can_manage_clients?, :can_manage_clients
      
        # Output only. Time when this link was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Immutable. Google Ads customer ID.
        # Corresponds to the JSON property `customerId`
        # @return [String]
        attr_accessor :customer_id
      
        # Output only. Email address of the user that created the link. An empty string
        # will be returned if the email address can't be retrieved.
        # Corresponds to the JSON property `emailAddress`
        # @return [String]
        attr_accessor :email_address
      
        # Output only. Format: properties/`propertyId`/googleAdsLinks/`googleAdsLinkId`
        # Note: googleAdsLinkId is not the Google Ads customer ID.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Immutable. Format: properties/`propertyId`
        # Corresponds to the JSON property `parent`
        # @return [String]
        attr_accessor :parent
      
        # Output only. Time when this link was last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ads_personalization_enabled = args[:ads_personalization_enabled] if args.key?(:ads_personalization_enabled)
          @can_manage_clients = args[:can_manage_clients] if args.key?(:can_manage_clients)
          @create_time = args[:create_time] if args.key?(:create_time)
          @customer_id = args[:customer_id] if args.key?(:customer_id)
          @email_address = args[:email_address] if args.key?(:email_address)
          @name = args[:name] if args.key?(:name)
          @parent = args[:parent] if args.key?(:parent)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # A resource message representing a Google Analytics IOS app stream.
      class GoogleAnalyticsAdminV1alphaIosAppDataStream
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. The Apple App Store Bundle ID for the app Example: "com.
        # example.myiosapp"
        # Corresponds to the JSON property `bundleId`
        # @return [String]
        attr_accessor :bundle_id
      
        # Output only. Time when this stream was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Human-readable display name for the Data Stream. The max allowed display name
        # length is 255 UTF-16 code units.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. ID of the corresponding iOS app in Firebase, if any. This ID can
        # change if the iOS app is deleted and recreated.
        # Corresponds to the JSON property `firebaseAppId`
        # @return [String]
        attr_accessor :firebase_app_id
      
        # Output only. Resource name of this Data Stream. Format: properties/`
        # property_id`/iosAppDataStreams/`stream_id` Example: "properties/1000/
        # iosAppDataStreams/2000"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Time when stream payload fields were last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bundle_id = args[:bundle_id] if args.key?(:bundle_id)
          @create_time = args[:create_time] if args.key?(:create_time)
          @display_name = args[:display_name] if args.key?(:display_name)
          @firebase_app_id = args[:firebase_app_id] if args.key?(:firebase_app_id)
          @name = args[:name] if args.key?(:name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Response message for ListAccountSummaries RPC.
      class GoogleAnalyticsAdminV1alphaListAccountSummariesResponse
        include Google::Apis::Core::Hashable
      
        # Account summaries of all accounts the caller has access to.
        # Corresponds to the JSON property `accountSummaries`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaAccountSummary>]
        attr_accessor :account_summaries
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_summaries = args[:account_summaries] if args.key?(:account_summaries)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Request message for ListAccounts RPC.
      class GoogleAnalyticsAdminV1alphaListAccountsResponse
        include Google::Apis::Core::Hashable
      
        # Results that were accessible to the caller.
        # Corresponds to the JSON property `accounts`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaAccount>]
        attr_accessor :accounts
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accounts = args[:accounts] if args.key?(:accounts)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Request message for ListAndroidDataStreams RPC.
      class GoogleAnalyticsAdminV1alphaListAndroidAppDataStreamsResponse
        include Google::Apis::Core::Hashable
      
        # Results that matched the filter criteria and were accessible to the caller.
        # Corresponds to the JSON property `androidAppDataStreams`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaAndroidAppDataStream>]
        attr_accessor :android_app_data_streams
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @android_app_data_streams = args[:android_app_data_streams] if args.key?(:android_app_data_streams)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for ListFirebaseLinks RPC
      class GoogleAnalyticsAdminV1alphaListFirebaseLinksResponse
        include Google::Apis::Core::Hashable
      
        # List of FirebaseLinks. This will have at most one value.
        # Corresponds to the JSON property `firebaseLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaFirebaseLink>]
        attr_accessor :firebase_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @firebase_links = args[:firebase_links] if args.key?(:firebase_links)
        end
      end
      
      # Response message for ListGoogleAdsLinks RPC.
      class GoogleAnalyticsAdminV1alphaListGoogleAdsLinksResponse
        include Google::Apis::Core::Hashable
      
        # List of GoogleAdsLinks.
        # Corresponds to the JSON property `googleAdsLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaGoogleAdsLink>]
        attr_accessor :google_ads_links
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @google_ads_links = args[:google_ads_links] if args.key?(:google_ads_links)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Request message for ListIosAppDataStreams RPC.
      class GoogleAnalyticsAdminV1alphaListIosAppDataStreamsResponse
        include Google::Apis::Core::Hashable
      
        # Results that matched the filter criteria and were accessible to the caller.
        # Corresponds to the JSON property `iosAppDataStreams`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaIosAppDataStream>]
        attr_accessor :ios_app_data_streams
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ios_app_data_streams = args[:ios_app_data_streams] if args.key?(:ios_app_data_streams)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for ListProperties RPC.
      class GoogleAnalyticsAdminV1alphaListPropertiesResponse
        include Google::Apis::Core::Hashable
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Results that matched the filter criteria and were accessible to the caller.
        # Corresponds to the JSON property `properties`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaProperty>]
        attr_accessor :properties
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @properties = args[:properties] if args.key?(:properties)
        end
      end
      
      # Response message for ListUserLinks RPC.
      class GoogleAnalyticsAdminV1alphaListUserLinksResponse
        include Google::Apis::Core::Hashable
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # List of UserLinks. These will be ordered stably, but in an arbitrary order.
        # Corresponds to the JSON property `userLinks`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink>]
        attr_accessor :user_links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @user_links = args[:user_links] if args.key?(:user_links)
        end
      end
      
      # Request message for ListWebDataStreams RPC.
      class GoogleAnalyticsAdminV1alphaListWebDataStreamsResponse
        include Google::Apis::Core::Hashable
      
        # A token, which can be sent as `page_token` to retrieve the next page. If this
        # field is omitted, there are no subsequent pages.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Results that matched the filter criteria and were accessible to the caller.
        # Corresponds to the JSON property `webDataStreams`
        # @return [Array<Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaWebDataStream>]
        attr_accessor :web_data_streams
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @web_data_streams = args[:web_data_streams] if args.key?(:web_data_streams)
        end
      end
      
      # A resource message representing a Google Analytics GA4 property.
      class GoogleAnalyticsAdminV1alphaProperty
        include Google::Apis::Core::Hashable
      
        # Output only. Time when the entity was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # The currency type used in reports involving monetary values. Format: https://
        # en.wikipedia.org/wiki/ISO_4217 Examples: "USD", "EUR", "JPY"
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Output only. Indicates whether this Property is soft-deleted or not. Deleted
        # properties are excluded from List results unless specifically requested.
        # Corresponds to the JSON property `deleted`
        # @return [Boolean]
        attr_accessor :deleted
        alias_method :deleted?, :deleted
      
        # Required. Human-readable display name for this property. The max allowed
        # display name length is 100 UTF-16 code units.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Industry associated with this property Example: AUTOMOTIVE, FOOD_AND_DRINK
        # Corresponds to the JSON property `industryCategory`
        # @return [String]
        attr_accessor :industry_category
      
        # Output only. Resource name of this property. Format: properties/`property_id`
        # Example: "properties/1000"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Immutable. Resource name of this property's logical parent. Note: The Property-
        # Moving UI can be used to change the parent. Format: accounts/`account` Example:
        # "accounts/100"
        # Corresponds to the JSON property `parent`
        # @return [String]
        attr_accessor :parent
      
        # Reporting Time Zone, used as the day boundary for reports, regardless of where
        # the data originates. If the time zone honors DST, Analytics will automatically
        # adjust for the changes. NOTE: Changing the time zone only affects data going
        # forward, and is not applied retroactively. Format: https://www.iana.org/time-
        # zones Example: "America/Los_Angeles"
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        # Output only. Time when entity payload fields were last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @deleted = args[:deleted] if args.key?(:deleted)
          @display_name = args[:display_name] if args.key?(:display_name)
          @industry_category = args[:industry_category] if args.key?(:industry_category)
          @name = args[:name] if args.key?(:name)
          @parent = args[:parent] if args.key?(:parent)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # A virtual resource representing metadata for an GA4 property.
      class GoogleAnalyticsAdminV1alphaPropertySummary
        include Google::Apis::Core::Hashable
      
        # Display name for the property referred to in this account summary.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Resource name of property referred to by this property summary Format:
        # properties/`property_id` Example: "properties/1000"
        # Corresponds to the JSON property `property`
        # @return [String]
        attr_accessor :property
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @property = args[:property] if args.key?(:property)
        end
      end
      
      # Request message for ProvisionAccountTicket RPC.
      class GoogleAnalyticsAdminV1alphaProvisionAccountTicketRequest
        include Google::Apis::Core::Hashable
      
        # A resource message representing a Google Analytics account.
        # Corresponds to the JSON property `account`
        # @return [Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaAccount]
        attr_accessor :account
      
        # Redirect URI where the user will be sent after accepting Terms of Service.
        # Must be configured in Developers Console as a Redirect URI
        # Corresponds to the JSON property `redirectUri`
        # @return [String]
        attr_accessor :redirect_uri
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account = args[:account] if args.key?(:account)
          @redirect_uri = args[:redirect_uri] if args.key?(:redirect_uri)
        end
      end
      
      # Response message for ProvisionAccountTicket RPC.
      class GoogleAnalyticsAdminV1alphaProvisionAccountTicketResponse
        include Google::Apis::Core::Hashable
      
        # The param to be passed in the ToS link.
        # Corresponds to the JSON property `accountTicketId`
        # @return [String]
        attr_accessor :account_ticket_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_ticket_id = args[:account_ticket_id] if args.key?(:account_ticket_id)
        end
      end
      
      # Request message for UpdateUserLink RPC.
      class GoogleAnalyticsAdminV1alphaUpdateUserLinkRequest
        include Google::Apis::Core::Hashable
      
        # A resource message representing a user's permissions on an Account or Property
        # resource.
        # Corresponds to the JSON property `userLink`
        # @return [Google::Apis::AnalyticsadminV1alpha::GoogleAnalyticsAdminV1alphaUserLink]
        attr_accessor :user_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_link = args[:user_link] if args.key?(:user_link)
        end
      end
      
      # A resource message representing a user's permissions on an Account or Property
      # resource.
      class GoogleAnalyticsAdminV1alphaUserLink
        include Google::Apis::Core::Hashable
      
        # Roles directly assigned to this user for this account or property. Valid
        # values: predefinedRoles/read predefinedRoles/collaborate predefinedRoles/edit
        # predefinedRoles/manage-users Excludes roles that are inherited from a higher-
        # level entity, group, or organization admin role. A UserLink that is updated to
        # have an empty list of direct_roles will be deleted.
        # Corresponds to the JSON property `directRoles`
        # @return [Array<String>]
        attr_accessor :direct_roles
      
        # Email address of the user to link
        # Corresponds to the JSON property `emailAddress`
        # @return [String]
        attr_accessor :email_address
      
        # Example format: properties/1234/userLinks/5678
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @direct_roles = args[:direct_roles] if args.key?(:direct_roles)
          @email_address = args[:email_address] if args.key?(:email_address)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # A resource message representing a Google Analytics web stream.
      class GoogleAnalyticsAdminV1alphaWebDataStream
        include Google::Apis::Core::Hashable
      
        # Output only. Time when this stream was originally created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Immutable. Domain name of the web app being measured, or empty. Example: "http:
        # //www.google.com", "https://www.google.com"
        # Corresponds to the JSON property `defaultUri`
        # @return [String]
        attr_accessor :default_uri
      
        # Required. Human-readable display name for the Data Stream. The max allowed
        # display name length is 100 UTF-16 code units.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. ID of the corresponding web app in Firebase, if any. This ID can
        # change if the web app is deleted and recreated.
        # Corresponds to the JSON property `firebaseAppId`
        # @return [String]
        attr_accessor :firebase_app_id
      
        # Output only. Analytics "Measurement ID", without the "G-" prefix. Example: "G-
        # 1A2BCD345E" would just be "1A2BCD345E"
        # Corresponds to the JSON property `measurementId`
        # @return [String]
        attr_accessor :measurement_id
      
        # Output only. Resource name of this Data Stream. Format: properties/`
        # property_id`/webDataStreams/`stream_id` Example: "properties/1000/
        # webDataStreams/2000"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Time when stream payload fields were last updated.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @default_uri = args[:default_uri] if args.key?(:default_uri)
          @display_name = args[:display_name] if args.key?(:display_name)
          @firebase_app_id = args[:firebase_app_id] if args.key?(:firebase_app_id)
          @measurement_id = args[:measurement_id] if args.key?(:measurement_id)
          @name = args[:name] if args.key?(:name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # A generic empty message that you can re-use to avoid defining duplicated empty
      # messages in your APIs. A typical example is to use it as the request or the
      # response type of an API method. For instance: service Foo ` rpc Bar(google.
      # protobuf.Empty) returns (google.protobuf.Empty); ` The JSON representation for
      # `Empty` is empty JSON object ````.
      class GoogleProtobufEmpty
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
    end
  end
end
