blob: e9fa181d7601206d31780f477dd770d8c6be477d [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: feeds.proto
/*
Package maps_booking_feeds is a generated protocol buffer package.
It is generated from these files:
feeds.proto
It has these top-level messages:
FeedMetadata
AvailabilityFeed
ServiceAvailability
Availability
Resources
TimeRange
ServiceFeed
Service
Price
SchedulingRules
TaxRate
ServiceIntakeFormField
ServiceIntakeForm
Deposit
NoShowFee
PriceType
RequireCreditCard
ActionLink
ActionPlatform
TicketType
RelatedMedia
ServiceAttributeValueId
*/
package maps_booking_feeds
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
// Defines how a total price is determined from an availability.
type PriceType int32
const (
// The price is for a fixed amount. This is the default value if the field is
// not set.
PriceType_FIXED_RATE_DEFAULT PriceType = 0
// The price specified is per person, and the total price is calculated
// according to the party size specified in Resources as
// price_micros * party_size. A PER_PERSON price must be accompanied by a
// party size in the availability resources. If it is not, a party size of one
// is used.
PriceType_PER_PERSON PriceType = 1
)
var PriceType_name = map[int32]string{
0: "FIXED_RATE_DEFAULT",
1: "PER_PERSON",
}
var PriceType_value = map[string]int32{
"FIXED_RATE_DEFAULT": 0,
"PER_PERSON": 1,
}
func (x PriceType) String() string {
return proto.EnumName(PriceType_name, int32(x))
}
func (PriceType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
}
// Defines whether a credit card is required in order to book an appointment.
type RequireCreditCard int32
const (
// The credit card requirement is not explicitly specified and the
// behaviour is identical to the one specified for CONDITIONAL.
RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED RequireCreditCard = 0
// Google will require a credit card for the booking if any of the following
// conditions are met:
// * the availability has a price and the prepayment_type is REQUIRED
// * the no_show_fee is set
// * the deposit field is set.
RequireCreditCard_REQUIRE_CREDIT_CARD_CONDITIONAL RequireCreditCard = 1
// A credit card is always required in order to book this availability
// regardless of other field values.
RequireCreditCard_REQUIRE_CREDIT_CARD_ALWAYS RequireCreditCard = 2
)
var RequireCreditCard_name = map[int32]string{
0: "REQUIRE_CREDIT_CARD_UNSPECIFIED",
1: "REQUIRE_CREDIT_CARD_CONDITIONAL",
2: "REQUIRE_CREDIT_CARD_ALWAYS",
}
var RequireCreditCard_value = map[string]int32{
"REQUIRE_CREDIT_CARD_UNSPECIFIED": 0,
"REQUIRE_CREDIT_CARD_CONDITIONAL": 1,
"REQUIRE_CREDIT_CARD_ALWAYS": 2,
}
func (x RequireCreditCard) String() string {
return proto.EnumName(RequireCreditCard_name, int32(x))
}
func (RequireCreditCard) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
}
// The platform that the action is performed on. Web application is the general
// fallback. It is recommended to have at least one ActionLink with
// ACTION_PLATFORM_WEB_APPLICATION. Links with Android and iOS as platform are
// only used on the respective system.
type ActionPlatform int32
const (
// The platform is unspecified.
ActionPlatform_ACTION_PLATFORM_UNSPECIFIED ActionPlatform = 0
// The action platform is web in general.
ActionPlatform_ACTION_PLATFORM_WEB_APPLICATION ActionPlatform = 1
// The action platform is web on mobile devices.
ActionPlatform_ACTION_PLATFORM_MOBILE_WEB ActionPlatform = 2
// The action platform is Android OS.
ActionPlatform_ACTION_PLATFORM_ANDROID ActionPlatform = 3
// The action platform is iOS.
ActionPlatform_ACTION_PLATFORM_IOS ActionPlatform = 4
)
var ActionPlatform_name = map[int32]string{
0: "ACTION_PLATFORM_UNSPECIFIED",
1: "ACTION_PLATFORM_WEB_APPLICATION",
2: "ACTION_PLATFORM_MOBILE_WEB",
3: "ACTION_PLATFORM_ANDROID",
4: "ACTION_PLATFORM_IOS",
}
var ActionPlatform_value = map[string]int32{
"ACTION_PLATFORM_UNSPECIFIED": 0,
"ACTION_PLATFORM_WEB_APPLICATION": 1,
"ACTION_PLATFORM_MOBILE_WEB": 2,
"ACTION_PLATFORM_ANDROID": 3,
"ACTION_PLATFORM_IOS": 4,
}
func (x ActionPlatform) String() string {
return proto.EnumName(ActionPlatform_name, int32(x))
}
func (ActionPlatform) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
}
type FeedMetadata_ProcessingInstruction int32
const (
// By default we will assume that this feed is an incremental feed.
FeedMetadata_PROCESS_UNKNOWN FeedMetadata_ProcessingInstruction = 0
// This Feed message is one shard of a complete feed. Anything previously
// supplied by this partner will be deleted; the contents of this feed
// represent the entire state of the world.
FeedMetadata_PROCESS_AS_COMPLETE FeedMetadata_ProcessingInstruction = 1
// This Feed message is one shard of an incremental feed. Existing entities
// will be left untouched except as modified in this feed.
FeedMetadata_PROCESS_AS_INCREMENTAL FeedMetadata_ProcessingInstruction = 2
)
var FeedMetadata_ProcessingInstruction_name = map[int32]string{
0: "PROCESS_UNKNOWN",
1: "PROCESS_AS_COMPLETE",
2: "PROCESS_AS_INCREMENTAL",
}
var FeedMetadata_ProcessingInstruction_value = map[string]int32{
"PROCESS_UNKNOWN": 0,
"PROCESS_AS_COMPLETE": 1,
"PROCESS_AS_INCREMENTAL": 2,
}
func (x FeedMetadata_ProcessingInstruction) String() string {
return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x))
}
func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{0, 0}
}
// Enum to indicate the prepayment type.
type Service_PrepaymentType int32
const (
// By default we will assume that the prepayment is NOT_SUPPORTED.
Service_PREPAYMENT_TYPE_UNSPECIFIED Service_PrepaymentType = 0
// The user has to pay this service at the booking time.
Service_REQUIRED Service_PrepaymentType = 1
// The user can choose to pre-pay this service at the booking time or later,
// but it is not required in order to book.
Service_OPTIONAL Service_PrepaymentType = 2
// The prepayment is not supported for this service.
Service_NOT_SUPPORTED Service_PrepaymentType = 3
)
var Service_PrepaymentType_name = map[int32]string{
0: "PREPAYMENT_TYPE_UNSPECIFIED",
1: "REQUIRED",
2: "OPTIONAL",
3: "NOT_SUPPORTED",
}
var Service_PrepaymentType_value = map[string]int32{
"PREPAYMENT_TYPE_UNSPECIFIED": 0,
"REQUIRED": 1,
"OPTIONAL": 2,
"NOT_SUPPORTED": 3,
}
func (x Service_PrepaymentType) String() string {
return proto.EnumName(Service_PrepaymentType_name, int32(x))
}
func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 0}
}
type Service_ServiceType int32
const (
Service_SERVICE_TYPE_UNSPECIFIED Service_ServiceType = 0
Service_SERVICE_TYPE_DINING_RESERVATION Service_ServiceType = 1
Service_SERVICE_TYPE_FOOD_ORDERING Service_ServiceType = 2
Service_SERVICE_TYPE_EVENT_TICKET Service_ServiceType = 3
Service_SERVICE_TYPE_TRIP_TOUR Service_ServiceType = 4
)
var Service_ServiceType_name = map[int32]string{
0: "SERVICE_TYPE_UNSPECIFIED",
1: "SERVICE_TYPE_DINING_RESERVATION",
2: "SERVICE_TYPE_FOOD_ORDERING",
3: "SERVICE_TYPE_EVENT_TICKET",
4: "SERVICE_TYPE_TRIP_TOUR",
}
var Service_ServiceType_value = map[string]int32{
"SERVICE_TYPE_UNSPECIFIED": 0,
"SERVICE_TYPE_DINING_RESERVATION": 1,
"SERVICE_TYPE_FOOD_ORDERING": 2,
"SERVICE_TYPE_EVENT_TICKET": 3,
"SERVICE_TYPE_TRIP_TOUR": 4,
}
func (x Service_ServiceType) String() string {
return proto.EnumName(Service_ServiceType_name, int32(x))
}
func (Service_ServiceType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 1}
}
// Enum to indicate the type of field.
type ServiceIntakeFormField_FieldType int32
const (
// Fields of unspecified or unknown type will be ignored.
ServiceIntakeFormField_FIELD_TYPE_UNSPECIFIED ServiceIntakeFormField_FieldType = 0
// A one-line input field for text.
ServiceIntakeFormField_SHORT_ANSWER ServiceIntakeFormField_FieldType = 1
// A multi-line input field for text.
ServiceIntakeFormField_PARAGRAPH ServiceIntakeFormField_FieldType = 2
// A set of radio buttons that requires one choice from many options.
ServiceIntakeFormField_MULTIPLE_CHOICE ServiceIntakeFormField_FieldType = 3
// One or more enumerated items with checkboxes.
ServiceIntakeFormField_CHECKBOXES ServiceIntakeFormField_FieldType = 4
// A selection from a dropdown.
ServiceIntakeFormField_DROPDOWN ServiceIntakeFormField_FieldType = 5
// A yes/no button.
ServiceIntakeFormField_BOOLEAN ServiceIntakeFormField_FieldType = 6
)
var ServiceIntakeFormField_FieldType_name = map[int32]string{
0: "FIELD_TYPE_UNSPECIFIED",
1: "SHORT_ANSWER",
2: "PARAGRAPH",
3: "MULTIPLE_CHOICE",
4: "CHECKBOXES",
5: "DROPDOWN",
6: "BOOLEAN",
}
var ServiceIntakeFormField_FieldType_value = map[string]int32{
"FIELD_TYPE_UNSPECIFIED": 0,
"SHORT_ANSWER": 1,
"PARAGRAPH": 2,
"MULTIPLE_CHOICE": 3,
"CHECKBOXES": 4,
"DROPDOWN": 5,
"BOOLEAN": 6,
}
func (x ServiceIntakeFormField_FieldType) String() string {
return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x))
}
func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{11, 0}
}
// Enum to indicate the type of this media source. Only photos are supported.
// Please reach out to Google if supporting animations or videos is
// important to your feature and we will find the best solution for you.
type RelatedMedia_MediaType int32
const (
// Unused.
RelatedMedia_TYPE_UNSPECIFIED RelatedMedia_MediaType = 0
// Indicates the media provided by the url is a photo.
RelatedMedia_PHOTO RelatedMedia_MediaType = 1
)
var RelatedMedia_MediaType_name = map[int32]string{
0: "TYPE_UNSPECIFIED",
1: "PHOTO",
}
var RelatedMedia_MediaType_value = map[string]int32{
"TYPE_UNSPECIFIED": 0,
"PHOTO": 1,
}
func (x RelatedMedia_MediaType) String() string {
return proto.EnumName(RelatedMedia_MediaType_name, int32(x))
}
func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{17, 0}
}
type FeedMetadata struct {
// Instructs us how to process the feed: either as a shard of a complete feed,
// or as a shard of an incremental update.
ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,proto3,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"`
// The current shard and total number of shards for this feed.
//
// Shard number is assumed to be zero-based.
//
// There does not need to be any relationship to the file name.
//
// Shards do not need to be transferred in order, and they may not be
// processed in order.
ShardNumber int32 `protobuf:"varint,2,opt,name=shard_number,json=shardNumber,proto3" json:"shard_number,omitempty"`
TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards,proto3" json:"total_shards,omitempty"`
// An identifier that must be consistent across all shards in a feed.
// This value must be globally unique across each feed type.
//
// This value ensures that complete feeds spanning multiple shards are
// processed together correctly.
//
// Clients only need to set this value when the processing_instruction is set
// to PROCESS_AS_COMPLETE and the feed spans multiple shards (defined by
// total_shards).
//
// Feeds that span multiple shards must set this nonce to the same value.
Nonce uint64 `protobuf:"varint,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
// The timestamp at which this feed shard was generated.
//
// In Unix time format (seconds since the epoch).
GenerationTimestamp int64 `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp,proto3" json:"generation_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FeedMetadata) Reset() { *m = FeedMetadata{} }
func (m *FeedMetadata) String() string { return proto.CompactTextString(m) }
func (*FeedMetadata) ProtoMessage() {}
func (*FeedMetadata) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
}
func (m *FeedMetadata) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FeedMetadata.Unmarshal(m, b)
}
func (m *FeedMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FeedMetadata.Marshal(b, m, deterministic)
}
func (dst *FeedMetadata) XXX_Merge(src proto.Message) {
xxx_messageInfo_FeedMetadata.Merge(dst, src)
}
func (m *FeedMetadata) XXX_Size() int {
return xxx_messageInfo_FeedMetadata.Size(m)
}
func (m *FeedMetadata) XXX_DiscardUnknown() {
xxx_messageInfo_FeedMetadata.DiscardUnknown(m)
}
var xxx_messageInfo_FeedMetadata proto.InternalMessageInfo
func (m *FeedMetadata) GetProcessingInstruction() FeedMetadata_ProcessingInstruction {
if m != nil {
return m.ProcessingInstruction
}
return FeedMetadata_PROCESS_UNKNOWN
}
func (m *FeedMetadata) GetShardNumber() int32 {
if m != nil {
return m.ShardNumber
}
return 0
}
func (m *FeedMetadata) GetTotalShards() int32 {
if m != nil {
return m.TotalShards
}
return 0
}
func (m *FeedMetadata) GetNonce() uint64 {
if m != nil {
return m.Nonce
}
return 0
}
func (m *FeedMetadata) GetGenerationTimestamp() int64 {
if m != nil {
return m.GenerationTimestamp
}
return 0
}
type AvailabilityFeed struct {
Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
ServiceAvailability []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability,proto3" json:"service_availability,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *AvailabilityFeed) Reset() { *m = AvailabilityFeed{} }
func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) }
func (*AvailabilityFeed) ProtoMessage() {}
func (*AvailabilityFeed) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
}
func (m *AvailabilityFeed) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AvailabilityFeed.Unmarshal(m, b)
}
func (m *AvailabilityFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_AvailabilityFeed.Marshal(b, m, deterministic)
}
func (dst *AvailabilityFeed) XXX_Merge(src proto.Message) {
xxx_messageInfo_AvailabilityFeed.Merge(dst, src)
}
func (m *AvailabilityFeed) XXX_Size() int {
return xxx_messageInfo_AvailabilityFeed.Size(m)
}
func (m *AvailabilityFeed) XXX_DiscardUnknown() {
xxx_messageInfo_AvailabilityFeed.DiscardUnknown(m)
}
var xxx_messageInfo_AvailabilityFeed proto.InternalMessageInfo
func (m *AvailabilityFeed) GetMetadata() *FeedMetadata {
if m != nil {
return m.Metadata
}
return nil
}
func (m *AvailabilityFeed) GetServiceAvailability() []*ServiceAvailability {
if m != nil {
return m.ServiceAvailability
}
return nil
}
type ServiceAvailability struct {
// If provided, we will consider the Availability entities provided to be a
// complete snapshot from [start_timestamp_restrict, end_timestamp_restrict).
// That is, all existing availability will be deleted if the following
// condition holds true:
//
// start_timestamp_restrict <= Availability.start_sec &&
// Availability.start_sec < end_timestamp_restrict
//
// If a resource_restrict message is set, the condition is further restricted:
//
// Availability.resource.staff_id == resource_restrict.staff_id &&
// Availability.resource.room_id == resource_restrict.room_id
//
// These fields are typically used to provide a complete update of
// availability in a given time range.
//
// Setting start_timestamp_restrict while leaving end_timestamp_restrict unset
// is interpreted to mean all time beginning at start_timestamp_restrict.
//
// Setting end_timestamp_restrict while leaving start_timestamp_restrict unset
// is interpreted to mean all time up to the end_timestamp_restrict.
//
// In Unix time format (seconds since the epoch).
StartTimestampRestrict int64 `protobuf:"varint,1,opt,name=start_timestamp_restrict,json=startTimestampRestrict,proto3" json:"start_timestamp_restrict,omitempty"`
EndTimestampRestrict int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict,proto3" json:"end_timestamp_restrict,omitempty"`
// If provided, the timestamp restricts will be applied only to the given
// merchant or service.
//
// These fields are typically used to provide complete snapshot of
// availability in a given range (defined above) for a specific merchant or
// service.
//
// Leaving these fields unset, or setting these to the empty string or null,
// is interpreted to mean that no restrict is intended.
MerchantIdRestrict string `protobuf:"bytes,3,opt,name=merchant_id_restrict,json=merchantIdRestrict,proto3" json:"merchant_id_restrict,omitempty"`
ServiceIdRestrict string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict,proto3" json:"service_id_restrict,omitempty"`
// Setting resources_restrict further restricts the scope of the update to
// just this set of resources. All id fields of the resources must match
// exactly.
ResourcesRestrict *Resources `protobuf:"bytes,6,opt,name=resources_restrict,json=resourcesRestrict,proto3" json:"resources_restrict,omitempty"`
Availability []*Availability `protobuf:"bytes,5,rep,name=availability,proto3" json:"availability,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceAvailability) Reset() { *m = ServiceAvailability{} }
func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) }
func (*ServiceAvailability) ProtoMessage() {}
func (*ServiceAvailability) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
}
func (m *ServiceAvailability) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceAvailability.Unmarshal(m, b)
}
func (m *ServiceAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ServiceAvailability.Marshal(b, m, deterministic)
}
func (dst *ServiceAvailability) XXX_Merge(src proto.Message) {
xxx_messageInfo_ServiceAvailability.Merge(dst, src)
}
func (m *ServiceAvailability) XXX_Size() int {
return xxx_messageInfo_ServiceAvailability.Size(m)
}
func (m *ServiceAvailability) XXX_DiscardUnknown() {
xxx_messageInfo_ServiceAvailability.DiscardUnknown(m)
}
var xxx_messageInfo_ServiceAvailability proto.InternalMessageInfo
func (m *ServiceAvailability) GetStartTimestampRestrict() int64 {
if m != nil {
return m.StartTimestampRestrict
}
return 0
}
func (m *ServiceAvailability) GetEndTimestampRestrict() int64 {
if m != nil {
return m.EndTimestampRestrict
}
return 0
}
func (m *ServiceAvailability) GetMerchantIdRestrict() string {
if m != nil {
return m.MerchantIdRestrict
}
return ""
}
func (m *ServiceAvailability) GetServiceIdRestrict() string {
if m != nil {
return m.ServiceIdRestrict
}
return ""
}
func (m *ServiceAvailability) GetResourcesRestrict() *Resources {
if m != nil {
return m.ResourcesRestrict
}
return nil
}
func (m *ServiceAvailability) GetAvailability() []*Availability {
if m != nil {
return m.Availability
}
return nil
}
// An availability of the merchant's service, indicating time and number
// of spots.
// The availability feed should be a list of this message.
// Please note that it's up to the partner to call out all the possible
// availabilities.
// If a massage therapist is available 9am-12pm, and they provide
// one-hour massage sessions, the aggregator should provide the feed as
// availability {start_sec: 9am, duration: 60 minutes, ...}
// availability {start_sec: 10am, duration: 60 minutes, ...}
// availability {start_sec: 11am, duration: 60 minutes, ...}
// instead of
// availability {start_sec: 9am, duration: 180 minutes, ...}
//
type Availability struct {
// An opaque string from an aggregator to identify a merchant. (required)
MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
// An opaque string from aggregator to identify a service of the
// merchant. (required)
ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
// Start time of this availability, using epoch time in seconds in UTC.
// (required)
StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
// Duration of the service in seconds, e.g. 30 minutes for a chair massage.
// (required)
DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
// Number of total spots and open spots of this availability.
// E.g. a Yoga class of 10 spots with 3 booked.
// availability {spots_total: 10, spots_open: 7 ...}
// E.g. a chair massage session which was already booked.
// availability {spots_total: 1, spots_open: 0 ...}
//
// Note: If sending requests using the availability compression format defined
// below, these two fields will be inferred. A Recurrence
// implies spots_total=1 and spots_open=1. A ScheduleException implies
// spots_total=1 and spots_open=0.
// (both required if recurrence not set)
SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal,proto3" json:"spots_total,omitempty"`
SpotsOpen int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
// An optional opaque string to identify this availability slot. If set, it
// will be included in the requests that book/update/cancel appointments.
// (optional)
AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
// Optional resources used to disambiguate this availability slot from
// others when different staff, room, or party_size values are part
// of the service.
//
// E.g. the same Yoga class with two 2 instructors.
// availability { resources { staff_id: "1" staff_name: "Amy" }
// spots_total: 10 spots_open: 7 }
// availability { resources { staff_id: "2" staff_name: "John" }
// spots_total: 5 spots_open: 2 }
// (optional)
Resources *Resources `protobuf:"bytes,8,opt,name=resources,proto3" json:"resources,omitempty"`
// A list of IDs referencing the payment options which can be used to pay
// for this slot. The actual payment options are defined at the Merchant
// level, and can also be shared among multiple Merchants.
//
// This field overrides any payment_option_ids specified in the service
// message. Similarly payment_option_ids specified here do NOT have to be
// present in the service message, though must be defined at the
// Merchant level.
// Our current implementation limits the number of entries in this array to
// one element. Multiple payment_option_id are still allowed at the Service
// level, but an override at the availability slot level, is limited to a
// single payment_option_id. (optional)
PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
// The recurrence information for the availability, representing more than one
// start time. A recurrence should contain appointments for one working day.
// (optional)
Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence,proto3" json:"recurrence,omitempty"`
// Times when this service cannot be scheduled. To limit the number of
// schedule_exception messages, consider joining adjacent exceptions.
// (optional)
ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException,proto3" json:"schedule_exception,omitempty"`
// Defines how a deposit may be charged to the user. Overrides the service
// deposit if one was specified. Setting this to an empty Deposit message
// removes any service-level deposit. (optional)
Deposit *Deposit `protobuf:"bytes,12,opt,name=deposit,proto3" json:"deposit,omitempty"`
// Defines a no show fee that may be charged to the user. Overrides the
// service no show fee if one was specified. Setting this to an empty
// NoShowFee message removes any service-level no show fee. (optional)
NoShowFee *NoShowFee `protobuf:"bytes,13,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
// Indicates whether the user must provide a credit card in order to book this
// availability slot.
// If the value is not set, it is inherited from the service level if it's set
// there. (optional)
RequireCreditCard RequireCreditCard `protobuf:"varint,14,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
// Indicates a list of supported ticket types for this availability slot. If
// unset, all ticket types in the parent service are available for this slot.
// Note that the values of this field must be defined in the parent service.
// Examples:
//
// * Service with four ticket types:
// TicketType {ticket_type_id: "adult_1" short_description: "Adult weekdays"}
// TicketType {ticket_type_id: "adult_2" short_description: "Adult weekends"}
// TicketType {ticket_type_id: "youth_1" short_description: "Youth weekdays"}
// TicketType {ticket_type_id: "youth_2" short_description: "Youth weekends"}
//
// To represent the inventory during the weekdays:
// `availability {ticket_type_id: "adult_1" ticket_type_id: "youth_1"...}`.
// To represent the inventory during the holidays:
// `availability {ticket_type_id: "adult_2" ticket_type_id: "youth_2"...}`.
//
// * Service with three ticket types:
// TicketType {ticket_type_id: "adult" short_description: "Adult"}
// TicketType {ticket_type_id: "youth" short_description: "Youth"}
// TicketType {ticket_type_id: "senior" short_description: "Senior"}
//
// To indicate that all three ticket types are available for this time
// slot, use either
// `availability {ticket_type_id: "adult" ticket_type_id: "youth"
// ticket_type_id: "senior" ...}`
// or
// `availability {...}' (do not set ticket_type_id in this slot).
//
// (optional)
TicketTypeId []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Availability) Reset() { *m = Availability{} }
func (m *Availability) String() string { return proto.CompactTextString(m) }
func (*Availability) ProtoMessage() {}
func (*Availability) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{3}
}
func (m *Availability) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability.Unmarshal(m, b)
}
func (m *Availability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Availability.Marshal(b, m, deterministic)
}
func (dst *Availability) XXX_Merge(src proto.Message) {
xxx_messageInfo_Availability.Merge(dst, src)
}
func (m *Availability) XXX_Size() int {
return xxx_messageInfo_Availability.Size(m)
}
func (m *Availability) XXX_DiscardUnknown() {
xxx_messageInfo_Availability.DiscardUnknown(m)
}
var xxx_messageInfo_Availability proto.InternalMessageInfo
func (m *Availability) GetMerchantId() string {
if m != nil {
return m.MerchantId
}
return ""
}
func (m *Availability) GetServiceId() string {
if m != nil {
return m.ServiceId
}
return ""
}
func (m *Availability) GetStartSec() int64 {
if m != nil {
return m.StartSec
}
return 0
}
func (m *Availability) GetDurationSec() int64 {
if m != nil {
return m.DurationSec
}
return 0
}
func (m *Availability) GetSpotsTotal() int64 {
if m != nil {
return m.SpotsTotal
}
return 0
}
func (m *Availability) GetSpotsOpen() int64 {
if m != nil {
return m.SpotsOpen
}
return 0
}
func (m *Availability) GetAvailabilityTag() string {
if m != nil {
return m.AvailabilityTag
}
return ""
}
func (m *Availability) GetResources() *Resources {
if m != nil {
return m.Resources
}
return nil
}
func (m *Availability) GetPaymentOptionId() []string {
if m != nil {
return m.PaymentOptionId
}
return nil
}
func (m *Availability) GetRecurrence() *Availability_Recurrence {
if m != nil {
return m.Recurrence
}
return nil
}
func (m *Availability) GetScheduleException() []*Availability_ScheduleException {
if m != nil {
return m.ScheduleException
}
return nil
}
func (m *Availability) GetDeposit() *Deposit {
if m != nil {
return m.Deposit
}
return nil
}
func (m *Availability) GetNoShowFee() *NoShowFee {
if m != nil {
return m.NoShowFee
}
return nil
}
func (m *Availability) GetRequireCreditCard() RequireCreditCard {
if m != nil {
return m.RequireCreditCard
}
return RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED
}
func (m *Availability) GetTicketTypeId() []string {
if m != nil {
return m.TicketTypeId
}
return nil
}
// Recurrence messages are optional, but allow for a more compact
// representation of consistently repeating availability slots. They typically
// represent a day's working schedule.
// ScheduleException messages are then used to represent booked/unavailable
// time ranges within the work day.
//
// Requirements:
// 1. The expansion of availability slots or recurrences must NOT create
// identical slots. If the ids, start_sec, duration_sec, and resources
// match, slots are considered identical.
// 2. Do NOT mix the standard availability format and recurrence within the
// slots of a single service. Recurrence benefits merchants/services that
// offer appointments. The standard format is geared towards
// merchants/services with regularly scheduled classes.
type Availability_Recurrence struct {
// The inclusive maximum UTC timestamp the availability repeats until.
// (required)
RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec,proto3" json:"repeat_until_sec,omitempty"`
// Defines the time between successive availability slots.
//
// Example: An availability with a duration of 20 min, a repeat_every_sec of
// 30 min, a start_sec of 9:00am, and a repeat_until_sec of 11:00am will
// yield slots at 9-9:20am, 9:30-9:50am, 10-10:20am, 10:30-10:50am,
// 11-11:20am. (required)
RepeatEverySec int32 `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec,proto3" json:"repeat_every_sec,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Availability_Recurrence) Reset() { *m = Availability_Recurrence{} }
func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) }
func (*Availability_Recurrence) ProtoMessage() {}
func (*Availability_Recurrence) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 0}
}
func (m *Availability_Recurrence) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability_Recurrence.Unmarshal(m, b)
}
func (m *Availability_Recurrence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Availability_Recurrence.Marshal(b, m, deterministic)
}
func (dst *Availability_Recurrence) XXX_Merge(src proto.Message) {
xxx_messageInfo_Availability_Recurrence.Merge(dst, src)
}
func (m *Availability_Recurrence) XXX_Size() int {
return xxx_messageInfo_Availability_Recurrence.Size(m)
}
func (m *Availability_Recurrence) XXX_DiscardUnknown() {
xxx_messageInfo_Availability_Recurrence.DiscardUnknown(m)
}
var xxx_messageInfo_Availability_Recurrence proto.InternalMessageInfo
func (m *Availability_Recurrence) GetRepeatUntilSec() int64 {
if m != nil {
return m.RepeatUntilSec
}
return 0
}
func (m *Availability_Recurrence) GetRepeatEverySec() int32 {
if m != nil {
return m.RepeatEverySec
}
return 0
}
// ScheduleException messages represent booked/unavailable time ranges within
// the workday, which are exceptions to the recurrence described above. As
// time slots are booked, the list of exceptions should be updated to reflect
// the newly unavailable time ranges. The recurrence itself shouldn't be
// modified.
type Availability_ScheduleException struct {
// The time range of the exception. Any slots described by the recurrence
// which overlap this closed-open time range will be considered unavailable.
//
// Example: If the recurrence specifies a duration of 20 min, a
// repeat_every_sec of 30 min, a start_time of 9:00am, and a
// repeat_until_sec of 11:00am, then a ScheduleException with a time_range
// of 9:45am-11:00am would make unavailable the slots at 9:30-9:50am,
// 10-10:20am, and 10:30-10:50am.
//
// Note that because the time range is closed-open, the slot beginning at
// 11am slot would not be impacted.
TimeRange *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange,proto3" json:"time_range,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Availability_ScheduleException) Reset() { *m = Availability_ScheduleException{} }
func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) }
func (*Availability_ScheduleException) ProtoMessage() {}
func (*Availability_ScheduleException) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 1}
}
func (m *Availability_ScheduleException) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability_ScheduleException.Unmarshal(m, b)
}
func (m *Availability_ScheduleException) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Availability_ScheduleException.Marshal(b, m, deterministic)
}
func (dst *Availability_ScheduleException) XXX_Merge(src proto.Message) {
xxx_messageInfo_Availability_ScheduleException.Merge(dst, src)
}
func (m *Availability_ScheduleException) XXX_Size() int {
return xxx_messageInfo_Availability_ScheduleException.Size(m)
}
func (m *Availability_ScheduleException) XXX_DiscardUnknown() {
xxx_messageInfo_Availability_ScheduleException.DiscardUnknown(m)
}
var xxx_messageInfo_Availability_ScheduleException proto.InternalMessageInfo
func (m *Availability_ScheduleException) GetTimeRange() *TimeRange {
if m != nil {
return m.TimeRange
}
return nil
}
// A resource is used to disambiguate availability slots from one another when
// different staff, room or party_size values are part of the service.
// Multiple slots for the same service and time interval can co-exist when they
// have different resources.
type Resources struct {
// Optional id for a staff member providing the service. This field identifies
// the staff member across all merchants, services, and availability records.
// It also needs to be stable over time to allow correlation with past
// bookings.
// This field must be present if staff_name is present.
StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
// Optional name of a staff member providing the service. This field will be
// displayed to users making a booking, and should be human readable, as
// opposed to an opaque identifier.
// This field must be present if staff_id is present.
StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName,proto3" json:"staff_name,omitempty"`
// An optional id for the room the service is located in. This field
// identifies the room across all merchants, services, and availability
// records. It also needs to be stable over time to allow correlation with
// past bookings.
// This field must be present if room_name is present.
RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
// An optional name for the room the service is located in. This
// field will be displayed to users making a booking, and should be human
// readable, as opposed to an opaque identifier.
// This field must be present if room_id is present.
RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"`
// Applicable only for Dining: The party size which can be accommodated
// during this time slot. A restaurant can be associated with multiple Slots
// for the same time, each specifying a different party_size, if for instance
// 2, 3, or 4 people can be seated with a reservation.
PartySize int32 `protobuf:"varint,5,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Resources) Reset() { *m = Resources{} }
func (m *Resources) String() string { return proto.CompactTextString(m) }
func (*Resources) ProtoMessage() {}
func (*Resources) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{4}
}
func (m *Resources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Resources.Unmarshal(m, b)
}
func (m *Resources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Resources.Marshal(b, m, deterministic)
}
func (dst *Resources) XXX_Merge(src proto.Message) {
xxx_messageInfo_Resources.Merge(dst, src)
}
func (m *Resources) XXX_Size() int {
return xxx_messageInfo_Resources.Size(m)
}
func (m *Resources) XXX_DiscardUnknown() {
xxx_messageInfo_Resources.DiscardUnknown(m)
}
var xxx_messageInfo_Resources proto.InternalMessageInfo
func (m *Resources) GetStaffId() string {
if m != nil {
return m.StaffId
}
return ""
}
func (m *Resources) GetStaffName() string {
if m != nil {
return m.StaffName
}
return ""
}
func (m *Resources) GetRoomId() string {
if m != nil {
return m.RoomId
}
return ""
}
func (m *Resources) GetRoomName() string {
if m != nil {
return m.RoomName
}
return ""
}
func (m *Resources) GetPartySize() int32 {
if m != nil {
return m.PartySize
}
return 0
}
type TimeRange struct {
BeginSec int64 `protobuf:"varint,1,opt,name=begin_sec,json=beginSec,proto3" json:"begin_sec,omitempty"`
EndSec int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec,proto3" json:"end_sec,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TimeRange) Reset() { *m = TimeRange{} }
func (m *TimeRange) String() string { return proto.CompactTextString(m) }
func (*TimeRange) ProtoMessage() {}
func (*TimeRange) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{5}
}
func (m *TimeRange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TimeRange.Unmarshal(m, b)
}
func (m *TimeRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TimeRange.Marshal(b, m, deterministic)
}
func (dst *TimeRange) XXX_Merge(src proto.Message) {
xxx_messageInfo_TimeRange.Merge(dst, src)
}
func (m *TimeRange) XXX_Size() int {
return xxx_messageInfo_TimeRange.Size(m)
}
func (m *TimeRange) XXX_DiscardUnknown() {
xxx_messageInfo_TimeRange.DiscardUnknown(m)
}
var xxx_messageInfo_TimeRange proto.InternalMessageInfo
func (m *TimeRange) GetBeginSec() int64 {
if m != nil {
return m.BeginSec
}
return 0
}
func (m *TimeRange) GetEndSec() int64 {
if m != nil {
return m.EndSec
}
return 0
}
type ServiceFeed struct {
Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Service []*Service `protobuf:"bytes,2,rep,name=service,proto3" json:"service,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceFeed) Reset() { *m = ServiceFeed{} }
func (m *ServiceFeed) String() string { return proto.CompactTextString(m) }
func (*ServiceFeed) ProtoMessage() {}
func (*ServiceFeed) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{6}
}
func (m *ServiceFeed) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceFeed.Unmarshal(m, b)
}
func (m *ServiceFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ServiceFeed.Marshal(b, m, deterministic)
}
func (dst *ServiceFeed) XXX_Merge(src proto.Message) {
xxx_messageInfo_ServiceFeed.Merge(dst, src)
}
func (m *ServiceFeed) XXX_Size() int {
return xxx_messageInfo_ServiceFeed.Size(m)
}
func (m *ServiceFeed) XXX_DiscardUnknown() {
xxx_messageInfo_ServiceFeed.DiscardUnknown(m)
}
var xxx_messageInfo_ServiceFeed proto.InternalMessageInfo
func (m *ServiceFeed) GetMetadata() *FeedMetadata {
if m != nil {
return m.Metadata
}
return nil
}
func (m *ServiceFeed) GetService() []*Service {
if m != nil {
return m.Service
}
return nil
}
// The definition of a service provided by a merchant.
type Service struct {
// An opaque string from an aggregator partner which uniquely identifies a
// merchant. (required)
MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
// An opaque string from an aggregator partner which uniquely identifies the
// service. (required)
ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
// The name of the service, suitable for display to users, e.g. "Men's
// haircut". (required)
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
// The description of the service, suitable for display to users.
//
// This field now supports both plain text and HTML-like formatting rules to
// display structural contents to end-users. Unlike plain text sections,
// customized layouts can be created here using headings, paragraphs, lists
// and some phrase tags. Please read the following instructions and notes
// carefully to create better user-experience.
//
// Supported HTML-like formatting tags:
//
// Heading tags: <h1>, <h2>, <h3>, <h4>, <h5>, <h6>
// Heading tags can be used to display titles and sub-titles. For example,
// <h1>Itinerary</h1> will display the inline text as the most important
// heading of the section. Note that any inner HTML tags, styles or
// attributes will be ignored. For example, <h1 style=".."> will be treated
// the same as <h1>. Only pure text wil be preserved.
//
// Paragraph tag: <p>:
// Paragraph tag can be used to wrap detailed introduction or contents. Any
// inner tags, styles or attributes will be ignored with a few exceptions:
// <br>, <strong> and <em>. Please see the phrase tag section below for more
// details.
//
// List tags: <ul>, <ol>, <li>
// <ul> tag can be used with <li> tag to display unordered lists, and <ol>
// tag can be used with <li> to display ordered lists. This is a good tool
// to display checklists, highlights or any other lists that fit your
// use-cases.
// Example: To show a list of features of a cruise trip:
// <ol>
// <li>Wonderful ocean view and chances to play with wildlife.</li>
// <li>Carefully designed travel arrangements and services.</li>
// <li>Gauranteed lowest price.</li>
// </ol>
// Note that only <li> children under <ul> or <ol> tags will be converted. All
// other children will be dropped. Also any inner tags, attributes and styles
// will be ignored, only pure text contents are preserved.
//
// Division tag: <div>
// All supported inner tags of the <div> tag will be parsed with the rules
// stated above. But <div> tag itself does not mean any grouping or
// indenting here. Also any inner attributes and styles will be ignored.
//
// Phrase tags: <br>, <strong>, <em>:
// Only the three tags mentioned above are supported. <br> can be used to
// break lines in paragraphs, and <strong>/<em> can be used to highlight
// important text. Any other phrase tags will be ignored.
//
// Unsupported tags:
// * <html>, <header> and <body> tags are not allowed.
// * Any URLs, anchors, links will be striped, and will never be displayed
// to end-users. If you want to use photos to create a rich user experience,
// please use the "related_media" field below to send your photo urls
// * Any other tags not mentioned above are not supported (for example
// <table>, <td> ...).
//
// Important notes:
// * Try not to use other tags except for the supported ones mentioned
// above, because contents within unsupported tags will be excluded from UI
// rendering and may lead to undesired user experience.
// * Try avoid deep nested structures like more than 3 different heading
// levels or nested lists. Keeping the structure flat, simple and
// straightforward helps to create a better user experience.
// * If the currently supported layouts are not enough for your use cases,
// please contact Google with your requests and we will find the best
// approach for you.
//
// (required)
Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
// The price of the service. (optional, overridden when payment options or
// ticket types present)
Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
// Rules to book/cancel an appointment. (optional)
Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules,proto3" json:"rules,omitempty"`
// Intake forms to customize the service. (optional)
Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form,proto3" json:"form,omitempty"`
// Whether a prepayment is required, optional or not supported. (optional)
PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,proto3,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
// The service's tax rate. If present this field overrides any tax_rate set at
// the merchant level. An empty message (i.e. tax_rate { }) will reset the
// applied tax rate to zero. (optional)
TaxRate *TaxRate `protobuf:"bytes,9,opt,name=tax_rate,json=taxRate,proto3" json:"tax_rate,omitempty"`
// A list of ids referencing the payment options which can be used to pay
// for this service. The actual payment options are defined at the Merchant
// level, and can also be shared among multiple Merchants. (optional)
PaymentOptionId []string `protobuf:"bytes,10,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
// Defines how a deposit may be charged to the user. Can be overridden at the
// availability level. (optional)
Deposit *Deposit `protobuf:"bytes,11,opt,name=deposit,proto3" json:"deposit,omitempty"`
// Defines a no show fee that may be charged to the user. Can be overridden
// at the availability level. (optional)
NoShowFee *NoShowFee `protobuf:"bytes,12,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
// Indicates whether the user must provide a credit card in order to book this
// service.
// This value can be overridden at the availability level. (optional)
RequireCreditCard RequireCreditCard `protobuf:"varint,13,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
// An action link related to this service.
ActionLink []*ActionLink `protobuf:"bytes,14,rep,name=action_link,json=actionLink,proto3" json:"action_link,omitempty"`
// The predefined type of this service. Currently, only used with action_link.
Type Service_ServiceType `protobuf:"varint,15,opt,name=type,proto3,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"`
// Types of tickets that can be booked/purchased for this service, if tickets
// are supported. (optional)
TicketType []*TicketType `protobuf:"bytes,16,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
// Photos related to this service. Google will crawl these media to
// ensure that they are displayed to end-users in the most efficient way.
// (optional)
RelatedMedia []*RelatedMedia `protobuf:"bytes,17,rep,name=related_media,json=relatedMedia,proto3" json:"related_media,omitempty"`
// Service attribute values that apply to this service (optional).
// Each Service may have zero or more values for each service attribute
// defined in the corresponding Merchant.
ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId,proto3" json:"service_attribute_value_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Service) Reset() { *m = Service{} }
func (m *Service) String() string { return proto.CompactTextString(m) }
func (*Service) ProtoMessage() {}
func (*Service) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{7}
}
func (m *Service) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Service.Unmarshal(m, b)
}
func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Service.Marshal(b, m, deterministic)
}
func (dst *Service) XXX_Merge(src proto.Message) {
xxx_messageInfo_Service.Merge(dst, src)
}
func (m *Service) XXX_Size() int {
return xxx_messageInfo_Service.Size(m)
}
func (m *Service) XXX_DiscardUnknown() {
xxx_messageInfo_Service.DiscardUnknown(m)
}
var xxx_messageInfo_Service proto.InternalMessageInfo
func (m *Service) GetMerchantId() string {
if m != nil {
return m.MerchantId
}
return ""
}
func (m *Service) GetServiceId() string {
if m != nil {
return m.ServiceId
}
return ""
}
func (m *Service) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Service) GetDescription() string {
if m != nil {
return m.Description
}
return ""
}
func (m *Service) GetPrice() *Price {
if m != nil {
return m.Price
}
return nil
}
func (m *Service) GetRules() *SchedulingRules {
if m != nil {
return m.Rules
}
return nil
}
func (m *Service) GetForm() []*ServiceIntakeForm {
if m != nil {
return m.Form
}
return nil
}
func (m *Service) GetPrepaymentType() Service_PrepaymentType {
if m != nil {
return m.PrepaymentType
}
return Service_PREPAYMENT_TYPE_UNSPECIFIED
}
func (m *Service) GetTaxRate() *TaxRate {
if m != nil {
return m.TaxRate
}
return nil
}
func (m *Service) GetPaymentOptionId() []string {
if m != nil {
return m.PaymentOptionId
}
return nil
}
func (m *Service) GetDeposit() *Deposit {
if m != nil {
return m.Deposit
}
return nil
}
func (m *Service) GetNoShowFee() *NoShowFee {
if m != nil {
return m.NoShowFee
}
return nil
}
func (m *Service) GetRequireCreditCard() RequireCreditCard {
if m != nil {
return m.RequireCreditCard
}
return RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED
}
func (m *Service) GetActionLink() []*ActionLink {
if m != nil {
return m.ActionLink
}
return nil
}
func (m *Service) GetType() Service_ServiceType {
if m != nil {
return m.Type
}
return Service_SERVICE_TYPE_UNSPECIFIED
}
func (m *Service) GetTicketType() []*TicketType {
if m != nil {
return m.TicketType
}
return nil
}
func (m *Service) GetRelatedMedia() []*RelatedMedia {
if m != nil {
return m.RelatedMedia
}
return nil
}
func (m *Service) GetServiceAttributeValueId() []*ServiceAttributeValueId {
if m != nil {
return m.ServiceAttributeValueId
}
return nil
}
// The price of a service or a fee.
type Price struct {
// The price in micro-units of the currency.
// Fractions of smallest currency unit will be rounded using nearest even
// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
// (required)
PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"`
// The currency of the price that is defined in ISO 4217. (required)
CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
// An optional and opaque string that identifies the pricing option that is
// associated with the extended price. (optional)
PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Price) Reset() { *m = Price{} }
func (m *Price) String() string { return proto.CompactTextString(m) }
func (*Price) ProtoMessage() {}
func (*Price) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{8}
}
func (m *Price) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Price.Unmarshal(m, b)
}
func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Price.Marshal(b, m, deterministic)
}
func (dst *Price) XXX_Merge(src proto.Message) {
xxx_messageInfo_Price.Merge(dst, src)
}
func (m *Price) XXX_Size() int {
return xxx_messageInfo_Price.Size(m)
}
func (m *Price) XXX_DiscardUnknown() {
xxx_messageInfo_Price.DiscardUnknown(m)
}
var xxx_messageInfo_Price proto.InternalMessageInfo
func (m *Price) GetPriceMicros() int64 {
if m != nil {
return m.PriceMicros
}
return 0
}
func (m *Price) GetCurrencyCode() string {
if m != nil {
return m.CurrencyCode
}
return ""
}
func (m *Price) GetPricingOptionTag() string {
if m != nil {
return m.PricingOptionTag
}
return ""
}
// The scheduling rules for a service.
type SchedulingRules struct {
// The minimum advance notice in seconds required to book an appointment.
// (optional)
MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,proto3" json:"min_advance_booking,omitempty"`
// The minimum advance notice in seconds required to cancel a booked
// appointment online. (optional)
MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling,proto3" json:"min_advance_online_canceling,omitempty"`
// The fee for canceling within the minimum advance notice period.
LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee,proto3" json:"late_cancellation_fee,omitempty"` // Deprecated: Do not use.
// The fee for no-show without canceling.
NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee,proto3" json:"noshow_fee,omitempty"` // Deprecated: Do not use.
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SchedulingRules) Reset() { *m = SchedulingRules{} }
func (m *SchedulingRules) String() string { return proto.CompactTextString(m) }
func (*SchedulingRules) ProtoMessage() {}
func (*SchedulingRules) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{9}
}
func (m *SchedulingRules) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SchedulingRules.Unmarshal(m, b)
}
func (m *SchedulingRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SchedulingRules.Marshal(b, m, deterministic)
}
func (dst *SchedulingRules) XXX_Merge(src proto.Message) {
xxx_messageInfo_SchedulingRules.Merge(dst, src)
}
func (m *SchedulingRules) XXX_Size() int {
return xxx_messageInfo_SchedulingRules.Size(m)
}
func (m *SchedulingRules) XXX_DiscardUnknown() {
xxx_messageInfo_SchedulingRules.DiscardUnknown(m)
}
var xxx_messageInfo_SchedulingRules proto.InternalMessageInfo
func (m *SchedulingRules) GetMinAdvanceBooking() int64 {
if m != nil {
return m.MinAdvanceBooking
}
return 0
}
func (m *SchedulingRules) GetMinAdvanceOnlineCanceling() int64 {
if m != nil {
return m.MinAdvanceOnlineCanceling
}
return 0
}
// Deprecated: Do not use.
func (m *SchedulingRules) GetLateCancellationFee() *Price {
if m != nil {
return m.LateCancellationFee
}
return nil
}
// Deprecated: Do not use.
func (m *SchedulingRules) GetNoshowFee() *Price {
if m != nil {
return m.NoshowFee
}
return nil
}
// A tax rate applied when charging the user for a service, and which can be set
// on either a per merchant, or per service basis.
type TaxRate struct {
// A tax rate in millionths of one percent, effectively giving 6 decimals of
// precision. For example, if the tax rate is 7.253%, this field should be set
// to 7253000.
//
// If this field is left unset or set to 0, the total price charged to a user
// for any service provided by this merchant is the exact price specified by
// Service.price. The service price is assumed to be exempt from or already
// inclusive of applicable taxes. Taxes will not be shown to the user as a
// separate line item.
//
// If this field is set to any nonzero value, the total price charged to a
// user for any service provided by this merchant will include the service
// price plus the tax assessed using the tax rate provided here. Fractions of
// the smallest currency unit (for example, fractions of one cent) will be
// rounded using nearest even rounding. Taxes will be shown to the user as a
// separate line item. (required)
MicroPercent int32 `protobuf:"varint,1,opt,name=micro_percent,json=microPercent,proto3" json:"micro_percent,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaxRate) Reset() { *m = TaxRate{} }
func (m *TaxRate) String() string { return proto.CompactTextString(m) }
func (*TaxRate) ProtoMessage() {}
func (*TaxRate) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{10}
}
func (m *TaxRate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaxRate.Unmarshal(m, b)
}
func (m *TaxRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaxRate.Marshal(b, m, deterministic)
}
func (dst *TaxRate) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaxRate.Merge(dst, src)
}
func (m *TaxRate) XXX_Size() int {
return xxx_messageInfo_TaxRate.Size(m)
}
func (m *TaxRate) XXX_DiscardUnknown() {
xxx_messageInfo_TaxRate.DiscardUnknown(m)
}
var xxx_messageInfo_TaxRate proto.InternalMessageInfo
func (m *TaxRate) GetMicroPercent() int32 {
if m != nil {
return m.MicroPercent
}
return 0
}
// Defines a field that is included in a ServiceIntakeForm.
type ServiceIntakeFormField struct {
// The type of this field. (required)
Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,proto3,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
// The text shown to the user for this field. (required)
Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
// For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate.
// (optional)
Value []string `protobuf:"bytes,3,rep,name=value,proto3" json:"value,omitempty"`
// Indicates whether an answer to this field is required by a user. (optional)
IsRequired bool `protobuf:"varint,4,opt,name=is_required,json=isRequired,proto3" json:"is_required,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceIntakeFormField) Reset() { *m = ServiceIntakeFormField{} }
func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) }
func (*ServiceIntakeFormField) ProtoMessage() {}
func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{11}
}
func (m *ServiceIntakeFormField) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceIntakeFormField.Unmarshal(m, b)
}
func (m *ServiceIntakeFormField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ServiceIntakeFormField.Marshal(b, m, deterministic)
}
func (dst *ServiceIntakeFormField) XXX_Merge(src proto.Message) {
xxx_messageInfo_ServiceIntakeFormField.Merge(dst, src)
}
func (m *ServiceIntakeFormField) XXX_Size() int {
return xxx_messageInfo_ServiceIntakeFormField.Size(m)
}
func (m *ServiceIntakeFormField) XXX_DiscardUnknown() {
xxx_messageInfo_ServiceIntakeFormField.DiscardUnknown(m)
}
var xxx_messageInfo_ServiceIntakeFormField proto.InternalMessageInfo
func (m *ServiceIntakeFormField) GetType() ServiceIntakeFormField_FieldType {
if m != nil {
return m.Type
}
return ServiceIntakeFormField_FIELD_TYPE_UNSPECIFIED
}
func (m *ServiceIntakeFormField) GetLabel() string {
if m != nil {
return m.Label
}
return ""
}
func (m *ServiceIntakeFormField) GetValue() []string {
if m != nil {
return m.Value
}
return nil
}
func (m *ServiceIntakeFormField) GetIsRequired() bool {
if m != nil {
return m.IsRequired
}
return false
}
// Defines an intake form that customizes the service provided by a merchant.
type ServiceIntakeForm struct {
// Fields that will be displayed to the user. (required)
Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"`
// If true, this form will be shown to first time customers.
// (one of first_time_customers or returning_customers required)
FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers,proto3" json:"first_time_customers,omitempty"`
// If true, this form will be shown to repeat customers.
// (one of first_time_customers or returning_customers required)
ReturningCustomers bool `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers,proto3" json:"returning_customers,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceIntakeForm) Reset() { *m = ServiceIntakeForm{} }
func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) }
func (*ServiceIntakeForm) ProtoMessage() {}
func (*ServiceIntakeForm) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{12}
}
func (m *ServiceIntakeForm) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceIntakeForm.Unmarshal(m, b)
}
func (m *ServiceIntakeForm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ServiceIntakeForm.Marshal(b, m, deterministic)
}
func (dst *ServiceIntakeForm) XXX_Merge(src proto.Message) {
xxx_messageInfo_ServiceIntakeForm.Merge(dst, src)
}
func (m *ServiceIntakeForm) XXX_Size() int {
return xxx_messageInfo_ServiceIntakeForm.Size(m)
}
func (m *ServiceIntakeForm) XXX_DiscardUnknown() {
xxx_messageInfo_ServiceIntakeForm.DiscardUnknown(m)
}
var xxx_messageInfo_ServiceIntakeForm proto.InternalMessageInfo
func (m *ServiceIntakeForm) GetField() []*ServiceIntakeFormField {
if m != nil {
return m.Field
}
return nil
}
func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool {
if m != nil {
return m.FirstTimeCustomers
}
return false
}
func (m *ServiceIntakeForm) GetReturningCustomers() bool {
if m != nil {
return m.ReturningCustomers
}
return false
}
// A deposit that the user may be charged or have a hold on their credit card
// for.
type Deposit struct {
// Deposit amount.
Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
// Minimum advance cancellation for the deposit.
MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
// Defines how the deposit is determined from the availability.
DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Deposit) Reset() { *m = Deposit{} }
func (m *Deposit) String() string { return proto.CompactTextString(m) }
func (*Deposit) ProtoMessage() {}
func (*Deposit) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{13}
}
func (m *Deposit) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Deposit.Unmarshal(m, b)
}
func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Deposit.Marshal(b, m, deterministic)
}
func (dst *Deposit) XXX_Merge(src proto.Message) {
xxx_messageInfo_Deposit.Merge(dst, src)
}
func (m *Deposit) XXX_Size() int {
return xxx_messageInfo_Deposit.Size(m)
}
func (m *Deposit) XXX_DiscardUnknown() {
xxx_messageInfo_Deposit.DiscardUnknown(m)
}
var xxx_messageInfo_Deposit proto.InternalMessageInfo
func (m *Deposit) GetDeposit() *Price {
if m != nil {
return m.Deposit
}
return nil
}
func (m *Deposit) GetMinAdvanceCancellationSec() int64 {
if m != nil {
return m.MinAdvanceCancellationSec
}
return 0
}
func (m *Deposit) GetDepositType() PriceType {
if m != nil {
return m.DepositType
}
return PriceType_FIXED_RATE_DEFAULT
}
// A fee that a user may be charged if they have made a booking but do not
// show up.
type NoShowFee struct {
// The amount the user may be charged if they do not show up for their
// reservation.
Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"`
// Defines how the fee is determined from the availability.
FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NoShowFee) Reset() { *m = NoShowFee{} }
func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
func (*NoShowFee) ProtoMessage() {}
func (*NoShowFee) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{14}
}
func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
}
func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic)
}
func (dst *NoShowFee) XXX_Merge(src proto.Message) {
xxx_messageInfo_NoShowFee.Merge(dst, src)
}
func (m *NoShowFee) XXX_Size() int {
return xxx_messageInfo_NoShowFee.Size(m)
}
func (m *NoShowFee) XXX_DiscardUnknown() {
xxx_messageInfo_NoShowFee.DiscardUnknown(m)
}
var xxx_messageInfo_NoShowFee proto.InternalMessageInfo
func (m *NoShowFee) GetFee() *Price {
if m != nil {
return m.Fee
}
return nil
}
func (m *NoShowFee) GetFeeType() PriceType {
if m != nil {
return m.FeeType
}
return PriceType_FIXED_RATE_DEFAULT
}
// An action URL with associated language, list of countries restricted to, and
// optional platform that indicates which platform this action should be
// performed on.
type ActionLink struct {
// The entry point URL for this action link.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// The BCP-47 language tag identifying the language in which the content
// from this URI is available.
Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"`
// ISO 3166-1 alpha-2 country code. Leave empty for unrestricted visibility.
RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry,proto3" json:"restricted_country,omitempty"`
// The platform that this action should be performed on. If this field is
// unset, ACTION_PLATFORM_WEB_APPLICATION will be used as fallback.
Platform ActionPlatform `protobuf:"varint,4,opt,name=platform,proto3,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ActionLink) Reset() { *m = ActionLink{} }
func (m *ActionLink) String() string { return proto.CompactTextString(m) }
func (*ActionLink) ProtoMessage() {}
func (*ActionLink) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{15}
}
func (m *ActionLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActionLink.Unmarshal(m, b)
}
func (m *ActionLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ActionLink.Marshal(b, m, deterministic)
}
func (dst *ActionLink) XXX_Merge(src proto.Message) {
xxx_messageInfo_ActionLink.Merge(dst, src)
}
func (m *ActionLink) XXX_Size() int {
return xxx_messageInfo_ActionLink.Size(m)
}
func (m *ActionLink) XXX_DiscardUnknown() {
xxx_messageInfo_ActionLink.DiscardUnknown(m)
}
var xxx_messageInfo_ActionLink proto.InternalMessageInfo
func (m *ActionLink) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
func (m *ActionLink) GetLanguage() string {
if m != nil {
return m.Language
}
return ""
}
func (m *ActionLink) GetRestrictedCountry() []string {
if m != nil {
return m.RestrictedCountry
}
return nil
}
func (m *ActionLink) GetPlatform() ActionPlatform {
if m != nil {
return m.Platform
}
return ActionPlatform_ACTION_PLATFORM_UNSPECIFIED
}
// TicketType is used to differentiate among tickets (where a ticket can be a
// spot on a raft trip, an admission to a museum, etc.) with different prices
// and/or availabilities due to different user types or different service
// attributes.
type TicketType struct {
// The ticket id is used to differentiate among different ticket types of the
// same service, and is only expected to be unique within a service.
TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
// The price of a single ticket of this type, exclusive of any taxes. The tax
// rate of Service is applied to its tickets.
Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TicketType) Reset() { *m = TicketType{} }
func (m *TicketType) String() string { return proto.CompactTextString(m) }
func (*TicketType) ProtoMessage() {}
func (*TicketType) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{16}
}
func (m *TicketType) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketType.Unmarshal(m, b)
}
func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TicketType.Marshal(b, m, deterministic)
}
func (dst *TicketType) XXX_Merge(src proto.Message) {
xxx_messageInfo_TicketType.Merge(dst, src)
}
func (m *TicketType) XXX_Size() int {
return xxx_messageInfo_TicketType.Size(m)
}
func (m *TicketType) XXX_DiscardUnknown() {
xxx_messageInfo_TicketType.DiscardUnknown(m)
}
var xxx_messageInfo_TicketType proto.InternalMessageInfo
func (m *TicketType) GetTicketTypeId() string {
if m != nil {
return m.TicketTypeId
}
return ""
}
func (m *TicketType) GetShortDescription() string {
if m != nil {
return m.ShortDescription
}
return ""
}
func (m *TicketType) GetPrice() *Price {
if m != nil {
return m.Price
}
return nil
}
// Defines a media source. This field only contains the URL of this media source
// (only photos are supported for now). Google will crawl the media data to
// ensure that they are displayed to end-users in the most efficient way.
type RelatedMedia struct {
// URL of this media source.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// Type of this media source.
Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,proto3,enum=maps.booking.feeds.RelatedMedia_MediaType" json:"type,omitempty"`
// Caption of the media, only plain text is supported. (optional)
Caption string `protobuf:"bytes,3,opt,name=caption,proto3" json:"caption,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RelatedMedia) Reset() { *m = RelatedMedia{} }
func (m *RelatedMedia) String() string { return proto.CompactTextString(m) }
func (*RelatedMedia) ProtoMessage() {}
func (*RelatedMedia) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{17}
}
func (m *RelatedMedia) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RelatedMedia.Unmarshal(m, b)
}
func (m *RelatedMedia) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RelatedMedia.Marshal(b, m, deterministic)
}
func (dst *RelatedMedia) XXX_Merge(src proto.Message) {
xxx_messageInfo_RelatedMedia.Merge(dst, src)
}
func (m *RelatedMedia) XXX_Size() int {
return xxx_messageInfo_RelatedMedia.Size(m)
}
func (m *RelatedMedia) XXX_DiscardUnknown() {
xxx_messageInfo_RelatedMedia.DiscardUnknown(m)
}
var xxx_messageInfo_RelatedMedia proto.InternalMessageInfo
func (m *RelatedMedia) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
func (m *RelatedMedia) GetType() RelatedMedia_MediaType {
if m != nil {
return m.Type
}
return RelatedMedia_TYPE_UNSPECIFIED
}
func (m *RelatedMedia) GetCaption() string {
if m != nil {
return m.Caption
}
return ""
}
// Identifies a particular value of a service attribute to be applied to a
// Service.
type ServiceAttributeValueId struct {
// ID of an attribute as defined in Merchant.service_attribute, e.g.
// "service-type".
AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"`
// ID of the value for this attribute, e.g. "haircut". Must match a value_id
// in the service attribute definition.
ValueId string `protobuf:"bytes,2,opt,name=value_id,json=valueId,proto3" json:"value_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceAttributeValueId) Reset() { *m = ServiceAttributeValueId{} }
func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) }
func (*ServiceAttributeValueId) ProtoMessage() {}
func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) {
return fileDescriptor_feeds_fc30b4ddff65807e, []int{18}
}
func (m *ServiceAttributeValueId) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceAttributeValueId.Unmarshal(m, b)
}
func (m *ServiceAttributeValueId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ServiceAttributeValueId.Marshal(b, m, deterministic)
}
func (dst *ServiceAttributeValueId) XXX_Merge(src proto.Message) {
xxx_messageInfo_ServiceAttributeValueId.Merge(dst, src)
}
func (m *ServiceAttributeValueId) XXX_Size() int {
return xxx_messageInfo_ServiceAttributeValueId.Size(m)
}
func (m *ServiceAttributeValueId) XXX_DiscardUnknown() {
xxx_messageInfo_ServiceAttributeValueId.DiscardUnknown(m)
}
var xxx_messageInfo_ServiceAttributeValueId proto.InternalMessageInfo
func (m *ServiceAttributeValueId) GetAttributeId() string {
if m != nil {
return m.AttributeId
}
return ""
}
func (m *ServiceAttributeValueId) GetValueId() string {
if m != nil {
return m.ValueId
}
return ""
}
func init() {
proto.RegisterType((*FeedMetadata)(nil), "maps.booking.feeds.FeedMetadata")
proto.RegisterType((*AvailabilityFeed)(nil), "maps.booking.feeds.AvailabilityFeed")
proto.RegisterType((*ServiceAvailability)(nil), "maps.booking.feeds.ServiceAvailability")
proto.RegisterType((*Availability)(nil), "maps.booking.feeds.Availability")
proto.RegisterType((*Availability_Recurrence)(nil), "maps.booking.feeds.Availability.Recurrence")
proto.RegisterType((*Availability_ScheduleException)(nil), "maps.booking.feeds.Availability.ScheduleException")
proto.RegisterType((*Resources)(nil), "maps.booking.feeds.Resources")
proto.RegisterType((*TimeRange)(nil), "maps.booking.feeds.TimeRange")
proto.RegisterType((*ServiceFeed)(nil), "maps.booking.feeds.ServiceFeed")
proto.RegisterType((*Service)(nil), "maps.booking.feeds.Service")
proto.RegisterType((*Price)(nil), "maps.booking.feeds.Price")
proto.RegisterType((*SchedulingRules)(nil), "maps.booking.feeds.SchedulingRules")
proto.RegisterType((*TaxRate)(nil), "maps.booking.feeds.TaxRate")
proto.RegisterType((*ServiceIntakeFormField)(nil), "maps.booking.feeds.ServiceIntakeFormField")
proto.RegisterType((*ServiceIntakeForm)(nil), "maps.booking.feeds.ServiceIntakeForm")
proto.RegisterType((*Deposit)(nil), "maps.booking.feeds.Deposit")
proto.RegisterType((*NoShowFee)(nil), "maps.booking.feeds.NoShowFee")
proto.RegisterType((*ActionLink)(nil), "maps.booking.feeds.ActionLink")
proto.RegisterType((*TicketType)(nil), "maps.booking.feeds.TicketType")
proto.RegisterType((*RelatedMedia)(nil), "maps.booking.feeds.RelatedMedia")
proto.RegisterType((*ServiceAttributeValueId)(nil), "maps.booking.feeds.ServiceAttributeValueId")
proto.RegisterEnum("maps.booking.feeds.PriceType", PriceType_name, PriceType_value)
proto.RegisterEnum("maps.booking.feeds.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value)
proto.RegisterEnum("maps.booking.feeds.ActionPlatform", ActionPlatform_name, ActionPlatform_value)
proto.RegisterEnum("maps.booking.feeds.FeedMetadata_ProcessingInstruction", FeedMetadata_ProcessingInstruction_name, FeedMetadata_ProcessingInstruction_value)
proto.RegisterEnum("maps.booking.feeds.Service_PrepaymentType", Service_PrepaymentType_name, Service_PrepaymentType_value)
proto.RegisterEnum("maps.booking.feeds.Service_ServiceType", Service_ServiceType_name, Service_ServiceType_value)
proto.RegisterEnum("maps.booking.feeds.ServiceIntakeFormField_FieldType", ServiceIntakeFormField_FieldType_name, ServiceIntakeFormField_FieldType_value)
proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value)
}
func init() { proto.RegisterFile("feeds.proto", fileDescriptor_feeds_fc30b4ddff65807e) }
var fileDescriptor_feeds_fc30b4ddff65807e = []byte{
// 2281 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdf, 0x72, 0xdb, 0xc6,
0xd5, 0x0f, 0x48, 0xd1, 0x24, 0x0f, 0x29, 0x09, 0x5c, 0x29, 0x12, 0x2c, 0xc7, 0xb1, 0x3e, 0xf8,
0xcb, 0x54, 0x95, 0x53, 0xa6, 0x95, 0x93, 0x4c, 0x32, 0x71, 0x93, 0x50, 0x20, 0x64, 0x61, 0x4c,
0x11, 0xf0, 0x12, 0xb2, 0xe3, 0xde, 0x6c, 0x20, 0x60, 0x45, 0x61, 0x4c, 0x02, 0xec, 0x02, 0x54,
0xac, 0xcc, 0xe4, 0xa6, 0x57, 0xbd, 0xec, 0x4c, 0xef, 0xfa, 0x04, 0xed, 0xd4, 0x0f, 0xd0, 0xc9,
0x5d, 0x9f, 0xa8, 0x0f, 0xd0, 0x9b, 0xce, 0x2e, 0x40, 0x10, 0x94, 0x20, 0xcb, 0x6d, 0x72, 0x23,
0x61, 0xcf, 0x39, 0xbf, 0xfd, 0x73, 0xce, 0x9e, 0xdf, 0x39, 0x4b, 0x68, 0x9c, 0x52, 0xea, 0x45,
0xed, 0x09, 0x0b, 0xe3, 0x10, 0xa1, 0xb1, 0x33, 0x89, 0xda, 0x27, 0x61, 0xf8, 0xd2, 0x0f, 0x86,
0x6d, 0xa1, 0x51, 0xff, 0x55, 0x82, 0xe6, 0x01, 0xa5, 0xde, 0x11, 0x8d, 0x1d, 0xcf, 0x89, 0x1d,
0x34, 0x86, 0x8d, 0x09, 0x0b, 0x5d, 0x1a, 0x45, 0x7e, 0x30, 0x24, 0x7e, 0x10, 0xc5, 0x6c, 0xea,
0xc6, 0x7e, 0x18, 0x28, 0xd2, 0xb6, 0xb4, 0xb3, 0xb2, 0xf7, 0x69, 0xfb, 0xea, 0x2c, 0xed, 0xfc,
0x0c, 0x6d, 0x2b, 0x83, 0x1b, 0x73, 0x34, 0x7e, 0x77, 0x52, 0x24, 0x46, 0xff, 0x07, 0xcd, 0xe8,
0xcc, 0x61, 0x1e, 0x09, 0xa6, 0xe3, 0x13, 0xca, 0x94, 0xd2, 0xb6, 0xb4, 0x53, 0xc1, 0x0d, 0x21,
0xeb, 0x0b, 0x11, 0x37, 0x89, 0xc3, 0xd8, 0x19, 0x11, 0x21, 0x8c, 0x94, 0x72, 0x62, 0x22, 0x64,
0x03, 0x21, 0x42, 0xeb, 0x50, 0x09, 0xc2, 0xc0, 0xa5, 0x4a, 0x65, 0x5b, 0xda, 0x59, 0xc2, 0xc9,
0x00, 0xfd, 0x06, 0xd6, 0x87, 0x34, 0xa0, 0xcc, 0xe1, 0x2b, 0x91, 0xd8, 0x1f, 0xd3, 0x28, 0x76,
0xc6, 0x13, 0x65, 0x69, 0x5b, 0xda, 0x29, 0xe3, 0xb5, 0xb9, 0xce, 0x9e, 0xa9, 0x54, 0x07, 0xde,
0x2d, 0xdc, 0x3e, 0x5a, 0x83, 0x55, 0x0b, 0x9b, 0x9a, 0x3e, 0x18, 0x90, 0xe3, 0xfe, 0x93, 0xbe,
0xf9, 0xbc, 0x2f, 0xbf, 0x83, 0x36, 0x61, 0x6d, 0x26, 0xec, 0x0c, 0x88, 0x66, 0x1e, 0x59, 0x3d,
0xdd, 0xd6, 0x65, 0x09, 0x6d, 0xc1, 0x46, 0x4e, 0x61, 0xf4, 0x35, 0xac, 0x1f, 0xe9, 0x7d, 0xbb,
0xd3, 0x93, 0x4b, 0xea, 0x6b, 0x09, 0xe4, 0xce, 0xb9, 0xe3, 0x8f, 0x9c, 0x13, 0x7f, 0xe4, 0xc7,
0x17, 0xdc, 0x77, 0xe8, 0x11, 0xd4, 0xc6, 0xa9, 0xff, 0x84, 0x9f, 0x1b, 0x7b, 0xdb, 0x37, 0xf9,
0x19, 0x67, 0x08, 0xf4, 0x3b, 0x58, 0x8f, 0x28, 0x3b, 0xf7, 0x5d, 0x4a, 0x9c, 0xdc, 0xcc, 0x4a,
0x69, 0xbb, 0xbc, 0xd3, 0xd8, 0xfb, 0x45, 0xd1, 0x4c, 0x83, 0xc4, 0x3e, 0xbf, 0x11, 0xbc, 0x16,
0x5d, 0x15, 0xaa, 0xff, 0x2e, 0xc1, 0x5a, 0x81, 0x31, 0xfa, 0x0c, 0x94, 0x28, 0x76, 0x58, 0x3c,
0xf7, 0x2b, 0x61, 0x34, 0x8a, 0x99, 0xef, 0xc6, 0xe2, 0x04, 0x65, 0xbc, 0x21, 0xf4, 0x99, 0x6f,
0x71, 0xaa, 0x45, 0x1f, 0xc3, 0x06, 0x0d, 0xbc, 0x22, 0x5c, 0x49, 0xe0, 0xd6, 0x69, 0xe0, 0x5d,
0x45, 0xfd, 0x1a, 0xd6, 0xc7, 0x94, 0xb9, 0x67, 0x4e, 0x10, 0x13, 0xdf, 0x9b, 0x63, 0xf8, 0x6d,
0xa8, 0x63, 0x34, 0xd3, 0x19, 0x5e, 0x86, 0x68, 0xc3, 0xec, 0x40, 0x0b, 0x80, 0x25, 0x01, 0x68,
0xa5, 0xaa, 0x9c, 0x7d, 0x0f, 0x10, 0xa3, 0x51, 0x38, 0x65, 0x2e, 0x8d, 0xe6, 0xe6, 0xb7, 0x44,
0x34, 0xee, 0x16, 0xf9, 0x10, 0xcf, 0xac, 0x71, 0x2b, 0x03, 0x66, 0xb3, 0x75, 0xa1, 0xb9, 0x10,
0x8b, 0x8a, 0x88, 0x45, 0x61, 0x54, 0x17, 0x82, 0xb0, 0x80, 0x52, 0x7f, 0xac, 0x42, 0x73, 0xc1,
0xed, 0xf7, 0xa0, 0x91, 0x73, 0x83, 0xf0, 0x74, 0x1d, 0xc3, 0xfc, 0xf4, 0xe8, 0x2e, 0xc0, 0xfc,
0xd4, 0xc2, 0xa3, 0x75, 0x5c, 0xcf, 0x0e, 0x8b, 0xee, 0x40, 0x3d, 0x09, 0x5b, 0x44, 0x5d, 0xe1,
0xbb, 0x32, 0xae, 0x09, 0xc1, 0x80, 0xba, 0x3c, 0xd3, 0xbc, 0x69, 0x9a, 0x2e, 0x5c, 0x9f, 0x24,
0x4a, 0x63, 0x26, 0xe3, 0x26, 0xf7, 0xa0, 0x11, 0x4d, 0xc2, 0x38, 0x22, 0x22, 0xfd, 0x44, 0xbe,
0x95, 0x31, 0x08, 0x91, 0xcd, 0x25, 0x62, 0x7d, 0x61, 0x10, 0x4e, 0x68, 0x20, 0xbc, 0x57, 0xc6,
0x75, 0x21, 0x31, 0x27, 0x34, 0x40, 0xbf, 0x04, 0x39, 0x7f, 0x40, 0x12, 0x3b, 0x43, 0xa5, 0x2a,
0x36, 0xb9, 0x9a, 0x97, 0xdb, 0xce, 0x10, 0x7d, 0x01, 0xf5, 0xcc, 0xad, 0x4a, 0xed, 0x6d, 0xc2,
0x30, 0xb7, 0x47, 0xbb, 0xd0, 0x9a, 0x38, 0x17, 0x63, 0x1a, 0xc4, 0x24, 0x9c, 0x88, 0x03, 0xf9,
0x9e, 0x52, 0xdf, 0x2e, 0xf3, 0x85, 0x52, 0x85, 0x29, 0xe4, 0x86, 0x87, 0x9e, 0x00, 0x30, 0xea,
0x4e, 0x19, 0xa3, 0x9c, 0x42, 0x40, 0xac, 0xf4, 0xe0, 0xa6, 0x40, 0xb5, 0x71, 0x06, 0xc1, 0x39,
0x38, 0x72, 0x00, 0x45, 0xee, 0x19, 0xf5, 0xa6, 0x23, 0x4a, 0xe8, 0x2b, 0x97, 0x8a, 0x45, 0x94,
0x86, 0x88, 0xfe, 0xde, 0x8d, 0x93, 0x0e, 0x52, 0xa8, 0x3e, 0x43, 0xe2, 0x56, 0x74, 0x59, 0x84,
0x3e, 0x81, 0xaa, 0x47, 0x27, 0x61, 0xe4, 0xc7, 0x4a, 0x53, 0x6c, 0xf6, 0x4e, 0xd1, 0xbc, 0xdd,
0xc4, 0x04, 0xcf, 0x6c, 0xd1, 0x6f, 0xa1, 0x11, 0x84, 0x24, 0x3a, 0x0b, 0xbf, 0x23, 0xa7, 0x94,
0x2a, 0xcb, 0xd7, 0x7b, 0xb4, 0x1f, 0x0e, 0xce, 0xc2, 0xef, 0x0e, 0x28, 0xc5, 0xf5, 0x60, 0xf6,
0x89, 0x8e, 0x61, 0x8d, 0xd1, 0xdf, 0x4f, 0x7d, 0x46, 0x89, 0xcb, 0xa8, 0xe7, 0xc7, 0xc4, 0x75,
0x98, 0xa7, 0xac, 0x88, 0xaa, 0xf0, 0x41, 0x71, 0x60, 0x84, 0xb9, 0x26, 0xac, 0x35, 0x87, 0x79,
0x3c, 0x4f, 0x2e, 0x89, 0xd0, 0xff, 0xc3, 0x4a, 0xec, 0xbb, 0x2f, 0x69, 0x4c, 0xe2, 0x8b, 0x89,
0xb8, 0xb3, 0xab, 0x22, 0x4a, 0xcd, 0x44, 0x6a, 0x5f, 0x4c, 0xa8, 0xe1, 0x6d, 0x7d, 0x0b, 0x30,
0xf7, 0x37, 0xda, 0x01, 0x99, 0xd1, 0x09, 0x75, 0x62, 0x32, 0x0d, 0x62, 0x7f, 0x24, 0xee, 0x6a,
0xc2, 0x39, 0x2b, 0x89, 0xfc, 0x98, 0x8b, 0xf9, 0x75, 0x9d, 0x5b, 0xd2, 0x73, 0xca, 0x2e, 0x84,
0x65, 0x52, 0x62, 0x52, 0x4b, 0x9d, 0x8b, 0x07, 0xd4, 0xdd, 0x7a, 0x0a, 0xad, 0x2b, 0xce, 0x47,
0x8f, 0x00, 0x38, 0x4d, 0x11, 0xe6, 0x04, 0x43, 0x9a, 0x12, 0x73, 0xa1, 0xc7, 0x38, 0x5f, 0x61,
0x6e, 0x84, 0xeb, 0xf1, 0xec, 0x53, 0xfd, 0x8b, 0x04, 0xf5, 0xec, 0x72, 0xa2, 0xdb, 0xc0, 0x13,
0xed, 0xf4, 0x74, 0x9e, 0xb6, 0x55, 0x31, 0x4e, 0x73, 0x56, 0xa8, 0x02, 0x67, 0x4c, 0xb3, 0x9c,
0xe5, 0x92, 0xbe, 0x33, 0xa6, 0x68, 0x13, 0xaa, 0x2c, 0x0c, 0xc7, 0x1c, 0x98, 0xb0, 0xdd, 0x2d,
0x3e, 0x4c, 0x92, 0x59, 0x28, 0x04, 0x2c, 0xe1, 0xb5, 0x1a, 0x17, 0x08, 0xd4, 0x5d, 0x80, 0x89,
0xc3, 0xe2, 0x0b, 0x12, 0xf9, 0xdf, 0x27, 0x85, 0xb1, 0x82, 0xeb, 0x42, 0x32, 0xf0, 0xbf, 0xa7,
0x6a, 0x07, 0xea, 0xd9, 0xa6, 0xf9, 0x44, 0x27, 0x74, 0xe8, 0x07, 0x39, 0x4f, 0xd6, 0x84, 0x80,
0xfb, 0x70, 0x13, 0xaa, 0x9c, 0xaf, 0x67, 0xae, 0x2b, 0xe3, 0x5b, 0x34, 0xf0, 0x06, 0xd4, 0x55,
0xff, 0x20, 0x41, 0x23, 0x2d, 0x0d, 0x3f, 0x43, 0x11, 0xfb, 0x04, 0xaa, 0x29, 0x4d, 0xa5, 0x75,
0xeb, 0xce, 0x1b, 0xea, 0x16, 0x9e, 0xd9, 0xaa, 0xaf, 0x01, 0xaa, 0xa9, 0xf0, 0x27, 0x93, 0x23,
0x82, 0x25, 0xe1, 0xca, 0xc4, 0xcb, 0xe2, 0x1b, 0x6d, 0x43, 0xc3, 0xa3, 0x91, 0xcb, 0xfc, 0x24,
0x91, 0x13, 0x2f, 0xe7, 0x45, 0xe8, 0x23, 0xa8, 0x4c, 0x98, 0x9f, 0x36, 0x1f, 0x8d, 0xbd, 0xdb,
0x45, 0xdb, 0xb6, 0xb8, 0x01, 0x4e, 0xec, 0xd0, 0xe7, 0x50, 0x61, 0xd3, 0x11, 0x8d, 0xd2, 0xda,
0x72, 0xbf, 0xf0, 0x9c, 0xc9, 0x5d, 0xf4, 0x83, 0x21, 0xe6, 0xa6, 0x38, 0x41, 0xa0, 0xcf, 0x61,
0xe9, 0x34, 0x64, 0x63, 0xa5, 0x2a, 0x3c, 0xf4, 0xc1, 0x1b, 0x3c, 0x64, 0x04, 0xb1, 0xf3, 0x92,
0x1e, 0x84, 0x6c, 0x8c, 0x05, 0x04, 0x0d, 0x60, 0x75, 0xc2, 0xe8, 0x8c, 0x14, 0x79, 0xb2, 0x09,
0x52, 0x5d, 0xd9, 0xdb, 0x7d, 0xc3, 0x2c, 0x6d, 0x2b, 0x83, 0xf0, 0x4c, 0xc4, 0x2b, 0x93, 0x85,
0x31, 0xfa, 0x14, 0x6a, 0xb1, 0xf3, 0x8a, 0x30, 0x27, 0xa6, 0x4a, 0xfd, 0x7a, 0x2e, 0xb2, 0x9d,
0x57, 0xd8, 0x89, 0x29, 0xae, 0xc6, 0xc9, 0x47, 0x31, 0x3d, 0x43, 0x31, 0x3d, 0xe7, 0xe8, 0xae,
0xf1, 0xbf, 0xd3, 0x5d, 0xf3, 0xe7, 0xa1, 0xbb, 0xe5, 0x9f, 0x48, 0x77, 0x5f, 0x41, 0xc3, 0x11,
0x1d, 0x25, 0x19, 0xf9, 0xc1, 0x4b, 0x65, 0x45, 0xc4, 0xf1, 0xfd, 0xc2, 0xba, 0x20, 0xcc, 0x7a,
0x7e, 0xf0, 0x12, 0x83, 0x93, 0x7d, 0xa3, 0x2f, 0x60, 0x49, 0xc4, 0x6e, 0x55, 0x6c, 0xe4, 0x4d,
0xbd, 0xdd, 0xec, 0xbf, 0x08, 0x9c, 0x00, 0xf1, 0xd5, 0x73, 0x64, 0xab, 0xc8, 0xd7, 0xaf, 0x6e,
0x67, 0xec, 0x8b, 0x61, 0xce, 0xc4, 0x48, 0x87, 0x65, 0x46, 0x47, 0x4e, 0x4c, 0x3d, 0x32, 0xa6,
0x9e, 0xef, 0x28, 0xad, 0xeb, 0xdb, 0x1a, 0x9c, 0x18, 0x1e, 0x71, 0x3b, 0xdc, 0x64, 0xb9, 0x11,
0x3a, 0x83, 0xad, 0xac, 0x61, 0x8d, 0x63, 0xe6, 0x9f, 0x4c, 0x63, 0x4a, 0xce, 0x9d, 0xd1, 0x54,
0xe4, 0x25, 0x12, 0x73, 0x3e, 0x78, 0x53, 0xdb, 0x3a, 0x03, 0x3d, 0xe3, 0x18, 0xc3, 0xc3, 0x9b,
0x51, 0xb1, 0x42, 0xfd, 0x16, 0x56, 0x16, 0xaf, 0x30, 0xba, 0x07, 0x77, 0x2c, 0xac, 0x5b, 0x9d,
0x17, 0xbc, 0x23, 0x27, 0xf6, 0x0b, 0x4b, 0x27, 0xc7, 0xfd, 0x81, 0xa5, 0x6b, 0xc6, 0x81, 0xa1,
0x77, 0xe5, 0x77, 0x50, 0x13, 0x6a, 0x58, 0x7f, 0x7a, 0x6c, 0x60, 0xbd, 0x2b, 0x4b, 0x7c, 0x64,
0x5a, 0xb6, 0x61, 0xf6, 0x79, 0xf3, 0x8e, 0x5a, 0xb0, 0xdc, 0x37, 0x6d, 0x32, 0x38, 0xb6, 0x2c,
0x13, 0xdb, 0x7a, 0x57, 0x2e, 0xab, 0x7f, 0x9f, 0xb3, 0xa0, 0x98, 0xff, 0x3d, 0x50, 0x06, 0x3a,
0x7e, 0x66, 0x68, 0x7a, 0xd1, 0xe4, 0xf7, 0xe1, 0xde, 0x82, 0xb6, 0x6b, 0xf4, 0x8d, 0xfe, 0x63,
0x82, 0x75, 0x2e, 0xed, 0xf0, 0x75, 0x64, 0x09, 0xbd, 0x0f, 0x5b, 0x0b, 0x46, 0x07, 0xa6, 0xd9,
0x25, 0x26, 0xee, 0xea, 0xd8, 0xe8, 0x3f, 0x96, 0x4b, 0xe8, 0x2e, 0xdc, 0x5e, 0xd0, 0xeb, 0xcf,
0xc4, 0x51, 0x0c, 0xed, 0x89, 0x6e, 0xcb, 0x65, 0xfe, 0xfa, 0x58, 0x50, 0xdb, 0xd8, 0xb0, 0x88,
0x6d, 0x1e, 0x63, 0x79, 0x49, 0xfd, 0x01, 0x2a, 0x82, 0x8b, 0x78, 0xaf, 0x27, 0xd8, 0x88, 0x8c,
0x7d, 0x97, 0x85, 0x51, 0xca, 0xfa, 0x0d, 0x21, 0x3b, 0x12, 0x22, 0x74, 0x1f, 0x96, 0xd3, 0x92,
0x7b, 0x41, 0xdc, 0xd0, 0x9b, 0x55, 0xa6, 0xe6, 0x4c, 0xa8, 0x85, 0x1e, 0x45, 0x1f, 0x02, 0xe2,
0x18, 0xfe, 0x58, 0x4c, 0x33, 0x99, 0xb7, 0x74, 0x09, 0x83, 0xca, 0xa9, 0x26, 0x49, 0x65, 0xdb,
0x19, 0xaa, 0x7f, 0x2e, 0xc1, 0xea, 0x25, 0x6a, 0xe3, 0x7d, 0xfa, 0xd8, 0x0f, 0x88, 0xe3, 0x9d,
0x3b, 0x81, 0x4b, 0x49, 0x1a, 0xf0, 0x74, 0x43, 0xad, 0xb1, 0x1f, 0x74, 0x12, 0xcd, 0x7e, 0xa2,
0x40, 0x5f, 0xc1, 0x7b, 0x79, 0xfb, 0x30, 0x18, 0xf9, 0x01, 0x25, 0x2e, 0x1f, 0xf0, 0x49, 0xd3,
0x22, 0x75, 0x7b, 0x0e, 0x34, 0x85, 0x85, 0x36, 0x33, 0x40, 0x4f, 0xe1, 0x5d, 0x7e, 0x17, 0x53,
0xc8, 0x28, 0xe9, 0x77, 0x39, 0x47, 0x94, 0x6f, 0x20, 0xf0, 0xfd, 0x92, 0x22, 0xe1, 0x35, 0x8e,
0xd5, 0x72, 0x50, 0xce, 0x16, 0x8f, 0x00, 0x82, 0x30, 0xe3, 0x9a, 0xa5, 0xb7, 0x99, 0xa7, 0x9e,
0x00, 0x0e, 0x28, 0x55, 0xdb, 0x50, 0x4d, 0x19, 0x92, 0xfb, 0x5c, 0x04, 0x84, 0x4c, 0x28, 0x73,
0x69, 0x90, 0xbc, 0xa5, 0x2a, 0xb8, 0x29, 0x84, 0x56, 0x22, 0x53, 0x7f, 0x2c, 0xc1, 0xc6, 0x15,
0x9a, 0x3f, 0xf0, 0xe9, 0xc8, 0x43, 0x87, 0x29, 0x3d, 0x24, 0x8f, 0xf5, 0x8f, 0xdf, 0xaa, 0x40,
0x08, 0x64, 0x5b, 0xfc, 0xcd, 0x71, 0xc5, 0x3a, 0x54, 0x46, 0xce, 0x09, 0x1d, 0xa5, 0x51, 0x4f,
0x06, 0x5c, 0x2a, 0xf2, 0x54, 0x29, 0x0b, 0xb2, 0x4e, 0x06, 0xbc, 0xf0, 0xfa, 0xfc, 0xcd, 0x24,
0xd8, 0xce, 0x13, 0xe7, 0xaf, 0x61, 0xf0, 0xa3, 0x94, 0x12, 0x3d, 0xf5, 0x8f, 0x12, 0xd4, 0xb3,
0x05, 0xf8, 0x05, 0x3d, 0x30, 0xf4, 0x5e, 0xb7, 0x28, 0x41, 0x64, 0x68, 0x0e, 0x0e, 0x4d, 0x6c,
0x93, 0x4e, 0x7f, 0xf0, 0x5c, 0xc7, 0xb2, 0x84, 0x96, 0xa1, 0x6e, 0x75, 0x70, 0xe7, 0x31, 0xee,
0x58, 0x87, 0x72, 0x89, 0xbf, 0xc4, 0x8f, 0x8e, 0x7b, 0xb6, 0x61, 0xf5, 0x74, 0xa2, 0x1d, 0x9a,
0x86, 0xa6, 0xcb, 0x65, 0xb4, 0x02, 0xa0, 0x1d, 0xea, 0xda, 0x93, 0x7d, 0xf3, 0x1b, 0x7d, 0x20,
0x2f, 0xf1, 0xac, 0xed, 0x62, 0xd3, 0xea, 0xf2, 0x77, 0x7a, 0x05, 0x35, 0xa0, 0xba, 0x6f, 0x9a,
0x3d, 0xbd, 0xd3, 0x97, 0x6f, 0xa9, 0xff, 0x90, 0xa0, 0x75, 0xc5, 0x05, 0xe8, 0x6b, 0xa8, 0x9c,
0xf2, 0xfd, 0x29, 0x92, 0x20, 0x9f, 0xdd, 0xb7, 0x77, 0x1c, 0x4e, 0x80, 0xfc, 0x81, 0x7a, 0xea,
0xb3, 0x28, 0x79, 0x10, 0x13, 0x77, 0x1a, 0xc5, 0xe1, 0x98, 0xb2, 0x48, 0xb8, 0xaf, 0x86, 0x91,
0xd0, 0xf1, 0x8e, 0x4b, 0x9b, 0x69, 0xd0, 0x47, 0xbc, 0xc4, 0xc4, 0x53, 0x16, 0xf0, 0xe4, 0x99,
0x03, 0xca, 0x09, 0x20, 0x53, 0x65, 0x00, 0xf5, 0x9f, 0x12, 0x54, 0xd3, 0x3a, 0x87, 0x1e, 0xce,
0xab, 0xa2, 0x74, 0x53, 0xdf, 0x91, 0xd5, 0xc4, 0x4b, 0xa9, 0xb3, 0x90, 0x00, 0xf3, 0xfe, 0x2e,
0x97, 0x3a, 0xf9, 0x7b, 0xce, 0x7b, 0xc1, 0xaf, 0xa1, 0x99, 0xce, 0x95, 0x54, 0x90, 0xb2, 0xb8,
0x66, 0x77, 0xaf, 0x5d, 0x5a, 0xdc, 0xa7, 0x46, 0x0a, 0xe1, 0x03, 0x95, 0x41, 0x3d, 0xab, 0xb7,
0xe8, 0x01, 0x94, 0x79, 0xbe, 0xdc, 0x78, 0x00, 0x6e, 0x85, 0x3e, 0x83, 0xda, 0x29, 0xa5, 0xff,
0xc5, 0xba, 0xd5, 0x53, 0x2a, 0x3e, 0xd4, 0xbf, 0x49, 0x00, 0xf3, 0x72, 0x8a, 0x64, 0x28, 0x4f,
0xd9, 0x28, 0x6d, 0x0f, 0xf9, 0x27, 0xda, 0x82, 0xda, 0xc8, 0x09, 0x86, 0x53, 0x67, 0x38, 0x23,
0xb9, 0x6c, 0x8c, 0x7e, 0x25, 0x7e, 0x16, 0x10, 0x8f, 0x7a, 0xea, 0x11, 0x37, 0x9c, 0x06, 0x31,
0xbb, 0x48, 0xaf, 0x7f, 0x6b, 0xae, 0xd1, 0x12, 0x05, 0xfa, 0x12, 0x6a, 0x93, 0x91, 0x13, 0x8b,
0x2e, 0x6d, 0x49, 0xec, 0x52, 0xbd, 0xbe, 0xba, 0x5b, 0xa9, 0x25, 0xce, 0x30, 0xea, 0x9f, 0x24,
0x80, 0x79, 0xf1, 0x2d, 0x78, 0x1e, 0x25, 0xdb, 0x5e, 0x78, 0x1e, 0xa1, 0x07, 0xd0, 0x8a, 0xce,
0x42, 0x16, 0x93, 0x7c, 0xab, 0x9a, 0x1c, 0x44, 0x16, 0x8a, 0x6e, 0x51, 0xbf, 0x5a, 0x7e, 0xbb,
0x7e, 0x55, 0xfd, 0xab, 0x04, 0xcd, 0x7c, 0x31, 0x2f, 0x70, 0xe0, 0x97, 0x29, 0xed, 0x94, 0xae,
0xef, 0x28, 0xf3, 0x33, 0xb4, 0xc5, 0xdf, 0x1c, 0xd9, 0x28, 0x50, 0x75, 0x9d, 0x64, 0xdb, 0x49,
0xe9, 0x98, 0x0d, 0xd5, 0x0f, 0xa1, 0x9e, 0x19, 0xa3, 0x75, 0x90, 0x0b, 0x28, 0xa3, 0x0e, 0x15,
0xeb, 0xd0, 0xb4, 0x4d, 0x59, 0x52, 0x9f, 0xc3, 0xe6, 0x35, 0x2d, 0x02, 0x2f, 0x78, 0xf3, 0x5e,
0x23, 0xf3, 0x63, 0x23, 0x93, 0x19, 0x1e, 0x7f, 0xa2, 0x65, 0x4d, 0x48, 0xe2, 0xbd, 0xea, 0x79,
0x82, 0xde, 0x7d, 0x08, 0xf5, 0xec, 0x62, 0xa1, 0x0d, 0x40, 0x07, 0xc6, 0x37, 0x7a, 0x97, 0xe0,
0x8e, 0xad, 0x93, 0xae, 0x7e, 0xd0, 0x39, 0xee, 0xd9, 0xf2, 0x3b, 0x9c, 0x85, 0x2c, 0x1d, 0x13,
0x4b, 0xc7, 0x03, 0x5e, 0xc7, 0x77, 0x7f, 0x80, 0xd6, 0x95, 0xa6, 0x90, 0x77, 0x00, 0x69, 0x7b,
0x41, 0x34, 0xac, 0x77, 0x0d, 0x9b, 0x68, 0x1d, 0xdc, 0xbd, 0xda, 0x26, 0x14, 0x19, 0x69, 0x66,
0xbf, 0x6b, 0xa4, 0xcd, 0x88, 0x68, 0x13, 0x8a, 0x8c, 0x3a, 0xbd, 0xe7, 0x9d, 0x17, 0x03, 0xb9,
0xb4, 0xfb, 0x5a, 0x82, 0x95, 0xc5, 0x7b, 0xc6, 0x9b, 0x9f, 0x8e, 0xc6, 0x27, 0x20, 0x56, 0xaf,
0x63, 0x1f, 0x98, 0xf8, 0xe8, 0xea, 0xc2, 0x97, 0x0d, 0x9e, 0xeb, 0xfb, 0xa4, 0x63, 0x59, 0x3d,
0x43, 0xcb, 0xf5, 0x27, 0x97, 0x8d, 0x8e, 0xcc, 0x7d, 0xa3, 0xa7, 0x73, 0x5b, 0xb9, 0x84, 0xee,
0xc0, 0xe6, 0x65, 0x7d, 0xa7, 0xdf, 0xc5, 0xa6, 0xd1, 0x95, 0xcb, 0x68, 0x13, 0xd6, 0x2e, 0x2b,
0x0d, 0x73, 0x20, 0x2f, 0x9d, 0xdc, 0x12, 0xbf, 0x52, 0x3f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff,
0xff, 0x1b, 0x9f, 0x88, 0x50, 0xb4, 0x16, 0x00, 0x00,
}