// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v0/enums/flight_placeholder_field.proto

package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package

// Possible values for Flight placeholder fields.
type FlightPlaceholderFieldEnum_FlightPlaceholderField int32

const (
	// Not specified.
	FlightPlaceholderFieldEnum_UNSPECIFIED FlightPlaceholderFieldEnum_FlightPlaceholderField = 0
	// Used for return value only. Represents value unknown in this version.
	FlightPlaceholderFieldEnum_UNKNOWN FlightPlaceholderFieldEnum_FlightPlaceholderField = 1
	// Data Type: STRING. Required. Destination id. Example: PAR, LON.
	// For feed items that only have destination id, destination id must be a
	// unique key. For feed items that have both destination id and origin id,
	// then the combination must be a unique key.
	FlightPlaceholderFieldEnum_DESTINATION_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 2
	// Data Type: STRING. Origin id. Example: PAR, LON.
	// Optional. Combination of destination id and origin id must be unique per
	// offer.
	FlightPlaceholderFieldEnum_ORIGIN_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 3
	// Data Type: STRING. Required. Main headline with product name to be shown
	// in dynamic ad.
	FlightPlaceholderFieldEnum_FLIGHT_DESCRIPTION FlightPlaceholderFieldEnum_FlightPlaceholderField = 4
	// Data Type: STRING. Shorter names are recommended.
	FlightPlaceholderFieldEnum_ORIGIN_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 5
	// Data Type: STRING. Shorter names are recommended.
	FlightPlaceholderFieldEnum_DESTINATION_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 6
	// Data Type: STRING. Price to be shown in the ad.
	// Example: "100.00 USD"
	FlightPlaceholderFieldEnum_FLIGHT_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 7
	// Data Type: STRING. Formatted price to be shown in the ad.
	// Example: "Starting at $100.00 USD", "$80 - $100"
	FlightPlaceholderFieldEnum_FORMATTED_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 8
	// Data Type: STRING. Sale price to be shown in the ad.
	// Example: "80.00 USD"
	FlightPlaceholderFieldEnum_FLIGHT_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 9
	// Data Type: STRING. Formatted sale price to be shown in the ad.
	// Example: "On sale for $80.00", "$60 - $80"
	FlightPlaceholderFieldEnum_FORMATTED_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 10
	// Data Type: URL. Image to be displayed in the ad.
	FlightPlaceholderFieldEnum_IMAGE_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 11
	// Data Type: URL_LIST. Required. Final URLs for the ad when using Upgraded
	// URLs. User will be redirected to these URLs when they click on an ad, or
	// when they click on a specific flight for ads that show multiple
	// flights.
	FlightPlaceholderFieldEnum_FINAL_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 12
	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
	// URLs.
	FlightPlaceholderFieldEnum_FINAL_MOBILE_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 13
	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
	FlightPlaceholderFieldEnum_TRACKING_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 14
	// Data Type: STRING. Android app link. Must be formatted as:
	// android-app://{package_id}/{scheme}/{host_path}.
	// The components are defined as follows:
	// package_id: app ID as specified in Google Play.
	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
	//   scheme.
	// host_path: identifies the specific content within your application.
	FlightPlaceholderFieldEnum_ANDROID_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 15
	// Data Type: STRING_LIST. List of recommended destination IDs to show
	// together with this item.
	FlightPlaceholderFieldEnum_SIMILAR_DESTINATION_IDS FlightPlaceholderFieldEnum_FlightPlaceholderField = 16
	// Data Type: STRING. iOS app link.
	FlightPlaceholderFieldEnum_IOS_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 17
	// Data Type: INT64. iOS app store ID.
	FlightPlaceholderFieldEnum_IOS_APP_STORE_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 18
)

var FlightPlaceholderFieldEnum_FlightPlaceholderField_name = map[int32]string{
	0:  "UNSPECIFIED",
	1:  "UNKNOWN",
	2:  "DESTINATION_ID",
	3:  "ORIGIN_ID",
	4:  "FLIGHT_DESCRIPTION",
	5:  "ORIGIN_NAME",
	6:  "DESTINATION_NAME",
	7:  "FLIGHT_PRICE",
	8:  "FORMATTED_PRICE",
	9:  "FLIGHT_SALE_PRICE",
	10: "FORMATTED_SALE_PRICE",
	11: "IMAGE_URL",
	12: "FINAL_URLS",
	13: "FINAL_MOBILE_URLS",
	14: "TRACKING_URL",
	15: "ANDROID_APP_LINK",
	16: "SIMILAR_DESTINATION_IDS",
	17: "IOS_APP_LINK",
	18: "IOS_APP_STORE_ID",
}
var FlightPlaceholderFieldEnum_FlightPlaceholderField_value = map[string]int32{
	"UNSPECIFIED":             0,
	"UNKNOWN":                 1,
	"DESTINATION_ID":          2,
	"ORIGIN_ID":               3,
	"FLIGHT_DESCRIPTION":      4,
	"ORIGIN_NAME":             5,
	"DESTINATION_NAME":        6,
	"FLIGHT_PRICE":            7,
	"FORMATTED_PRICE":         8,
	"FLIGHT_SALE_PRICE":       9,
	"FORMATTED_SALE_PRICE":    10,
	"IMAGE_URL":               11,
	"FINAL_URLS":              12,
	"FINAL_MOBILE_URLS":       13,
	"TRACKING_URL":            14,
	"ANDROID_APP_LINK":        15,
	"SIMILAR_DESTINATION_IDS": 16,
	"IOS_APP_LINK":            17,
	"IOS_APP_STORE_ID":        18,
}

func (x FlightPlaceholderFieldEnum_FlightPlaceholderField) String() string {
	return proto.EnumName(FlightPlaceholderFieldEnum_FlightPlaceholderField_name, int32(x))
}
func (FlightPlaceholderFieldEnum_FlightPlaceholderField) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c, []int{0, 0}
}

// Values for Flight placeholder fields.
// For more information about dynamic remarketing feeds, see
// https://support.google.com/google-ads/answer/6053288.
type FlightPlaceholderFieldEnum struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FlightPlaceholderFieldEnum) Reset()         { *m = FlightPlaceholderFieldEnum{} }
func (m *FlightPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
func (*FlightPlaceholderFieldEnum) ProtoMessage()    {}
func (*FlightPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
	return fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c, []int{0}
}
func (m *FlightPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FlightPlaceholderFieldEnum.Unmarshal(m, b)
}
func (m *FlightPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FlightPlaceholderFieldEnum.Marshal(b, m, deterministic)
}
func (dst *FlightPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FlightPlaceholderFieldEnum.Merge(dst, src)
}
func (m *FlightPlaceholderFieldEnum) XXX_Size() int {
	return xxx_messageInfo_FlightPlaceholderFieldEnum.Size(m)
}
func (m *FlightPlaceholderFieldEnum) XXX_DiscardUnknown() {
	xxx_messageInfo_FlightPlaceholderFieldEnum.DiscardUnknown(m)
}

var xxx_messageInfo_FlightPlaceholderFieldEnum proto.InternalMessageInfo

func init() {
	proto.RegisterType((*FlightPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.FlightPlaceholderFieldEnum")
	proto.RegisterEnum("google.ads.googleads.v0.enums.FlightPlaceholderFieldEnum_FlightPlaceholderField", FlightPlaceholderFieldEnum_FlightPlaceholderField_name, FlightPlaceholderFieldEnum_FlightPlaceholderField_value)
}

func init() {
	proto.RegisterFile("google/ads/googleads/v0/enums/flight_placeholder_field.proto", fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c)
}

var fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c = []byte{
	// 459 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
	0x10, 0x26, 0x09, 0xb4, 0x74, 0xd2, 0x26, 0xdb, 0xa5, 0x14, 0x04, 0xf4, 0x40, 0x1f, 0xc0, 0x8e,
	0xc4, 0x11, 0x2e, 0x9b, 0x78, 0x6d, 0x46, 0xb1, 0xd7, 0xd6, 0xae, 0x53, 0x24, 0x14, 0xc9, 0x0a,
	0xb5, 0xeb, 0x46, 0x72, 0xe2, 0x28, 0x6e, 0xfb, 0x22, 0xbc, 0x01, 0x47, 0x8e, 0x3c, 0x06, 0x12,
	0xef, 0x84, 0x76, 0xed, 0x34, 0x01, 0x41, 0x2f, 0xd6, 0xcc, 0x7c, 0x3f, 0x1e, 0xed, 0x7c, 0xf0,
	0x21, 0x2f, 0xcb, 0xbc, 0xc8, 0xec, 0x59, 0x5a, 0xd9, 0x75, 0xa9, 0xab, 0xbb, 0x81, 0x9d, 0x2d,
	0x6f, 0x17, 0x95, 0x7d, 0x55, 0xcc, 0xf3, 0xeb, 0x9b, 0x64, 0x55, 0xcc, 0x2e, 0xb3, 0xeb, 0xb2,
	0x48, 0xb3, 0x75, 0x72, 0x35, 0xcf, 0x8a, 0xd4, 0x5a, 0xad, 0xcb, 0x9b, 0x92, 0x9e, 0xd5, 0x12,
	0x6b, 0x96, 0x56, 0xd6, 0xbd, 0xda, 0xba, 0x1b, 0x58, 0x46, 0x7d, 0xfe, 0xa3, 0x03, 0xaf, 0x5c,
	0xe3, 0x10, 0x6d, 0x0d, 0x5c, 0xad, 0xe7, 0xcb, 0xdb, 0xc5, 0xf9, 0xd7, 0x0e, 0x9c, 0xfe, 0x1b,
	0xa6, 0x7d, 0xe8, 0x4e, 0x84, 0x8a, 0xf8, 0x08, 0x5d, 0xe4, 0x0e, 0x79, 0x44, 0xbb, 0xb0, 0x3f,
	0x11, 0x63, 0x11, 0x7e, 0x12, 0xa4, 0x45, 0x29, 0xf4, 0x1c, 0xae, 0x62, 0x14, 0x2c, 0xc6, 0x50,
	0x24, 0xe8, 0x90, 0x36, 0x3d, 0x82, 0x83, 0x50, 0xa2, 0x87, 0xa6, 0xed, 0xd0, 0x53, 0xa0, 0xae,
	0x8f, 0xde, 0xc7, 0x38, 0x71, 0xb8, 0x1a, 0x49, 0x8c, 0x34, 0x93, 0x3c, 0xd6, 0xc6, 0x0d, 0x4d,
	0xb0, 0x80, 0x93, 0x27, 0xf4, 0x04, 0xc8, 0xae, 0x97, 0x99, 0xee, 0x51, 0x02, 0x87, 0x8d, 0x3c,
	0x92, 0x38, 0xe2, 0x64, 0x9f, 0x3e, 0x83, 0xbe, 0x1b, 0xca, 0x80, 0xc5, 0x31, 0x77, 0x9a, 0xe1,
	0x53, 0xfa, 0x1c, 0x8e, 0x1b, 0x9a, 0x62, 0x3e, 0x6f, 0xc6, 0x07, 0xf4, 0x25, 0x9c, 0x6c, 0xb9,
	0x3b, 0x08, 0xe8, 0x2d, 0x31, 0x60, 0x1e, 0x4f, 0x26, 0xd2, 0x27, 0x5d, 0xda, 0x03, 0x70, 0x51,
	0x30, 0x5f, 0xb7, 0x8a, 0x1c, 0x1a, 0x3f, 0xd3, 0x07, 0xe1, 0x10, 0x7d, 0x5e, 0x8f, 0x8f, 0xf4,
	0x36, 0xb1, 0x64, 0xa3, 0x31, 0x0a, 0xcf, 0x08, 0x7b, 0x7a, 0x6b, 0x26, 0x1c, 0x19, 0xa2, 0x93,
	0xb0, 0x28, 0x4a, 0x7c, 0x14, 0x63, 0xd2, 0xa7, 0xaf, 0xe1, 0x85, 0xc2, 0x00, 0x7d, 0x26, 0x93,
	0x3f, 0xdf, 0x47, 0x11, 0xa2, 0x4d, 0x30, 0x54, 0x5b, 0xfa, 0xb1, 0x36, 0xd9, 0x4c, 0x54, 0x1c,
	0x4a, 0xae, 0x5f, 0x8e, 0x0e, 0x7f, 0xb5, 0xe0, 0xed, 0x65, 0xb9, 0xb0, 0x1e, 0x3c, 0xed, 0xf0,
	0x4d, 0x7d, 0xb8, 0xea, 0xef, 0xcb, 0x45, 0x3a, 0x17, 0x51, 0xeb, 0xf3, 0xb0, 0x91, 0xe7, 0x65,
	0x31, 0x5b, 0xe6, 0x56, 0xb9, 0xce, 0xed, 0x3c, 0x5b, 0x9a, 0xd4, 0x6c, 0x72, 0xb6, 0x9a, 0x57,
	0xff, 0x89, 0xdd, 0x7b, 0xf3, 0xfd, 0xd6, 0xee, 0x78, 0x8c, 0x7d, 0x6f, 0x9f, 0x79, 0xb5, 0x15,
	0x4b, 0x2b, 0xab, 0x2e, 0x75, 0x75, 0x31, 0xb0, 0x74, 0x88, 0xaa, 0x9f, 0x1b, 0x7c, 0xca, 0xd2,
	0x6a, 0x7a, 0x8f, 0x4f, 0x2f, 0x06, 0x53, 0x83, 0x7f, 0xd9, 0x33, 0x3f, 0x7d, 0xf7, 0x3b, 0x00,
	0x00, 0xff, 0xff, 0xad, 0x22, 0x49, 0x9f, 0xea, 0x02, 0x00, 0x00,
}
