# NOTE: This file is auto generated by googly. Do not edit it manually. defmodule Googly.CloudVision.Model.Product do @moduledoc """ A Product contains ReferenceImages. ## Attributes * `description` (*type:* `String.t()`) - User-provided metadata to be stored with this product. Must be at most 4096 characters long. * `display_name` (*type:* `String.t()`) - The user-provided name for this Product. Must not be empty. Must be at most 4096 characters long. * `name` (*type:* `String.t()`) - The resource name of the product. Format is: `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`. This field is ignored when creating a product. * `product_category` (*type:* `String.t()`) - Immutable. The category for the product identified by the reference image. This should be one of "homegoods-v2", "apparel-v2", "toys-v2", "packagedgoods-v1" or "general-v1". The legacy categories "homegoods", "apparel", and "toys" are still supported, but these should not be used for new products. * `product_labels` (*type:* `list(Googly.CloudVision.Model.KeyValue.t())`) - Key-value pairs that can be attached to a product. At query time, constraints can be specified based on the product_labels. Note that integer values can be provided as strings, e.g. "1199". Only strings with integer values can match a range-based restriction which is to be supported soon. Multiple values can be assigned to the same key. One product may have up to 500 product_labels. Notice that the total number of distinct product_labels over all products in one ProductSet cannot exceed 1M, otherwise the product search pipeline will refuse to work for that ProductSet. """ defstruct [:description, :display_name, :name, :product_category, :product_labels] @type t :: %__MODULE__{ description: String.t() | nil, display_name: String.t() | nil, name: String.t() | nil, product_category: String.t() | nil, product_labels: list(Googly.CloudVision.Model.KeyValue.t()) | nil } @wire %{ display_name: "displayName", product_category: "productCategory", product_labels: "productLabels" } @doc false def __wire__, do: @wire @doc false def decode(nil), do: nil def decode(list) when is_list(list), do: Enum.map(list, &decode/1) def decode(m) do %__MODULE__{ description: m["description"], display_name: m["displayName"], name: m["name"], product_category: m["productCategory"], product_labels: Googly.CloudVision.Model.KeyValue.decode(m["productLabels"]) } end end