Added support for ticket type ids at the availability level.
diff --git a/feeds/feeds.pb.go b/feeds/feeds.pb.go
index 9902bb9..e9fa181 100644
--- a/feeds/feeds.pb.go
+++ b/feeds/feeds.pb.go
@@ -77,7 +77,7 @@
return proto.EnumName(PriceType_name, int32(x))
}
func (PriceType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
}
// Defines whether a credit card is required in order to book an appointment.
@@ -113,7 +113,7 @@
return proto.EnumName(RequireCreditCard_name, int32(x))
}
func (RequireCreditCard) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{1}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
}
// The platform that the action is performed on. Web application is the general
@@ -154,7 +154,7 @@
return proto.EnumName(ActionPlatform_name, int32(x))
}
func (ActionPlatform) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{2}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
}
type FeedMetadata_ProcessingInstruction int32
@@ -186,7 +186,7 @@
return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x))
}
func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{0, 0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{0, 0}
}
// Enum to indicate the prepayment type.
@@ -221,7 +221,7 @@
return proto.EnumName(Service_PrepaymentType_name, int32(x))
}
func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{7, 0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 0}
}
type Service_ServiceType int32
@@ -253,7 +253,7 @@
return proto.EnumName(Service_ServiceType_name, int32(x))
}
func (Service_ServiceType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{7, 1}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 1}
}
// Enum to indicate the type of field.
@@ -299,7 +299,7 @@
return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x))
}
func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{11, 0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{11, 0}
}
// Enum to indicate the type of this media source. Only photos are supported.
@@ -327,13 +327,13 @@
return proto.EnumName(RelatedMedia_MediaType_name, int32(x))
}
func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{17, 0}
+ 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,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"`
+ 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.
@@ -342,8 +342,8 @@
//
// 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" json:"shard_number,omitempty"`
- TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards" json:"total_shards,omitempty"`
+ 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.
//
@@ -355,11 +355,11 @@
// total_shards).
//
// Feeds that span multiple shards must set this nonce to the same value.
- Nonce uint64 `protobuf:"varint,5,opt,name=nonce" json:"nonce,omitempty"`
+ 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" json:"generation_timestamp,omitempty"`
+ 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:"-"`
@@ -369,7 +369,7 @@
func (m *FeedMetadata) String() string { return proto.CompactTextString(m) }
func (*FeedMetadata) ProtoMessage() {}
func (*FeedMetadata) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
}
func (m *FeedMetadata) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FeedMetadata.Unmarshal(m, b)
@@ -425,8 +425,8 @@
}
type AvailabilityFeed struct {
- Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
- ServiceAvailability []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability" json:"service_availability,omitempty"`
+ 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:"-"`
@@ -436,7 +436,7 @@
func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) }
func (*AvailabilityFeed) ProtoMessage() {}
func (*AvailabilityFeed) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{1}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
}
func (m *AvailabilityFeed) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AvailabilityFeed.Unmarshal(m, b)
@@ -494,8 +494,8 @@
// 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" json:"start_timestamp_restrict,omitempty"`
- EndTimestampRestrict int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict" json:"end_timestamp_restrict,omitempty"`
+ 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.
//
@@ -505,13 +505,13 @@
//
// 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" json:"merchant_id_restrict,omitempty"`
- ServiceIdRestrict string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict" json:"service_id_restrict,omitempty"`
+ 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" json:"resources_restrict,omitempty"`
- Availability []*Availability `protobuf:"bytes,5,rep,name=availability" json:"availability,omitempty"`
+ 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:"-"`
@@ -521,7 +521,7 @@
func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) }
func (*ServiceAvailability) ProtoMessage() {}
func (*ServiceAvailability) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{2}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
}
func (m *ServiceAvailability) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceAvailability.Unmarshal(m, b)
@@ -597,15 +597,17 @@
// availability {start_sec: 9am, duration: 180 minutes, ...}
//
type Availability struct {
- // An opaque string from an aggregator to identify a merchant.
- MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+ // 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.
- ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
- // Start time of this availability, using epoch time in seconds.
- StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+ // 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.
- DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+ // (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 ...}
@@ -616,11 +618,13 @@
// 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.
- SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal" json:"spots_total,omitempty"`
- SpotsOpen int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
+ // (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.
- AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+ // (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.
@@ -630,8 +634,9 @@
// spots_total: 10 spots_open: 7 }
// availability { resources { staff_id: "2" staff_name: "John" }
// spots_total: 5 spots_open: 2 }
- Resources *Resources `protobuf:"bytes,8,opt,name=resources" json:"resources,omitempty"`
- // A list of ids referencing the payment options which can be used to pay
+ // (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.
//
@@ -639,23 +644,72 @@
// 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.
- PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+ // 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.
- Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence" json:"recurrence,omitempty"`
- // When this service cannot be scheduled. To limit the number of
- // schedule_exception messages consider joining adjacent exceptions.
- ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException" json:"schedule_exception,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ // (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_0b3f05d3b8d0e7eb, []int{3}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{3}
}
func (m *Availability) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability.Unmarshal(m, b)
@@ -752,6 +806,34 @@
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.
@@ -768,14 +850,15 @@
// merchants/services with regularly scheduled classes.
type Availability_Recurrence struct {
// The inclusive maximum UTC timestamp the availability repeats until.
- RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec" json:"repeat_until_sec,omitempty"`
+ // (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.
//
- // E.g. An availability with a duration of 20 min, a repeat_every_sec of
+ // 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.
- RepeatEverySec int32 `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec" json:"repeat_every_sec,omitempty"`
+ // 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:"-"`
@@ -785,7 +868,7 @@
func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) }
func (*Availability_Recurrence) ProtoMessage() {}
func (*Availability_Recurrence) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{3, 0}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 0}
}
func (m *Availability_Recurrence) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability_Recurrence.Unmarshal(m, b)
@@ -819,13 +902,24 @@
return 0
}
-// ScheduleException messages are used to represent booked/unavailable time
-// ranges within the work day. As time slots are booked, the list of
-// exceptions should grow to reflect the newly unavailable time ranges.
-// The recurrence itself shouldn't be modified.
+// 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.
- TimeRange *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange" json:"time_range,omitempty"`
+ // 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:"-"`
@@ -835,7 +929,7 @@
func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) }
func (*Availability_ScheduleException) ProtoMessage() {}
func (*Availability_ScheduleException) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{3, 1}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 1}
}
func (m *Availability_ScheduleException) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Availability_ScheduleException.Unmarshal(m, b)
@@ -872,28 +966,28 @@
// 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" json:"staff_id,omitempty"`
+ 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" json:"staff_name,omitempty"`
+ 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" json:"room_id,omitempty"`
+ 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" json:"room_name,omitempty"`
+ 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" json:"party_size,omitempty"`
+ 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:"-"`
@@ -903,7 +997,7 @@
func (m *Resources) String() string { return proto.CompactTextString(m) }
func (*Resources) ProtoMessage() {}
func (*Resources) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{4}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{4}
}
func (m *Resources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Resources.Unmarshal(m, b)
@@ -959,8 +1053,8 @@
}
type TimeRange struct {
- BeginSec int64 `protobuf:"varint,1,opt,name=begin_sec,json=beginSec" json:"begin_sec,omitempty"`
- EndSec int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec" json:"end_sec,omitempty"`
+ 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:"-"`
@@ -970,7 +1064,7 @@
func (m *TimeRange) String() string { return proto.CompactTextString(m) }
func (*TimeRange) ProtoMessage() {}
func (*TimeRange) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{5}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{5}
}
func (m *TimeRange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TimeRange.Unmarshal(m, b)
@@ -1005,8 +1099,8 @@
}
type ServiceFeed struct {
- Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
- Service []*Service `protobuf:"bytes,2,rep,name=service" json:"service,omitempty"`
+ 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:"-"`
@@ -1016,7 +1110,7 @@
func (m *ServiceFeed) String() string { return proto.CompactTextString(m) }
func (*ServiceFeed) ProtoMessage() {}
func (*ServiceFeed) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{6}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{6}
}
func (m *ServiceFeed) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceFeed.Unmarshal(m, b)
@@ -1054,13 +1148,13 @@
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" json:"merchant_id,omitempty"`
+ 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" json:"service_id,omitempty"`
+ 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" json:"name,omitempty"`
+ 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
@@ -1129,49 +1223,49 @@
// approach for you.
//
// (required)
- Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
+ 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" json:"price,omitempty"`
+ 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" json:"rules,omitempty"`
+ 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" json:"form,omitempty"`
+ 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,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
+ 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" json:"tax_rate,omitempty"`
+ 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" json:"payment_option_id,omitempty"`
+ 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" json:"deposit,omitempty"`
+ 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" json:"no_show_fee,omitempty"`
+ 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,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
+ 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" json:"action_link,omitempty"`
+ 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,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"`
+ 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" json:"ticket_type,omitempty"`
+ 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" json:"related_media,omitempty"`
+ 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" json:"service_attribute_value_id,omitempty"`
+ 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:"-"`
@@ -1181,7 +1275,7 @@
func (m *Service) String() string { return proto.CompactTextString(m) }
func (*Service) ProtoMessage() {}
func (*Service) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{7}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{7}
}
func (m *Service) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Service.Unmarshal(m, b)
@@ -1334,12 +1428,12 @@
// 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" json:"price_micros,omitempty"`
+ 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" json:"currency_code,omitempty"`
+ 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" json:"pricing_option_tag,omitempty"`
+ 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:"-"`
@@ -1349,7 +1443,7 @@
func (m *Price) String() string { return proto.CompactTextString(m) }
func (*Price) ProtoMessage() {}
func (*Price) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{8}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{8}
}
func (m *Price) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Price.Unmarshal(m, b)
@@ -1394,14 +1488,14 @@
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" json:"min_advance_booking,omitempty"`
+ 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" json:"min_advance_online_canceling,omitempty"`
+ 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" json:"late_cancellation_fee,omitempty"` // Deprecated: Do not use.
+ 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" json:"noshow_fee,omitempty"` // Deprecated: Do not use.
+ 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:"-"`
@@ -1411,7 +1505,7 @@
func (m *SchedulingRules) String() string { return proto.CompactTextString(m) }
func (*SchedulingRules) ProtoMessage() {}
func (*SchedulingRules) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{9}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{9}
}
func (m *SchedulingRules) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SchedulingRules.Unmarshal(m, b)
@@ -1480,7 +1574,7 @@
// 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" json:"micro_percent,omitempty"`
+ 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:"-"`
@@ -1490,7 +1584,7 @@
func (m *TaxRate) String() string { return proto.CompactTextString(m) }
func (*TaxRate) ProtoMessage() {}
func (*TaxRate) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{10}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{10}
}
func (m *TaxRate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaxRate.Unmarshal(m, b)
@@ -1520,14 +1614,14 @@
// 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,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
+ 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" json:"label,omitempty"`
+ 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" json:"value,omitempty"`
+ 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" json:"is_required,omitempty"`
+ 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:"-"`
@@ -1537,7 +1631,7 @@
func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) }
func (*ServiceIntakeFormField) ProtoMessage() {}
func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{11}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{11}
}
func (m *ServiceIntakeFormField) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceIntakeFormField.Unmarshal(m, b)
@@ -1588,13 +1682,13 @@
// 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" json:"field,omitempty"`
+ 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" json:"first_time_customers,omitempty"`
+ 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" json:"returning_customers,omitempty"`
+ 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:"-"`
@@ -1604,7 +1698,7 @@
func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) }
func (*ServiceIntakeForm) ProtoMessage() {}
func (*ServiceIntakeForm) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{12}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{12}
}
func (m *ServiceIntakeForm) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceIntakeForm.Unmarshal(m, b)
@@ -1649,11 +1743,11 @@
// for.
type Deposit struct {
// Deposit amount.
- Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
+ 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" json:"min_advance_cancellation_sec,omitempty"`
+ 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,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
+ 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:"-"`
@@ -1663,7 +1757,7 @@
func (m *Deposit) String() string { return proto.CompactTextString(m) }
func (*Deposit) ProtoMessage() {}
func (*Deposit) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{13}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{13}
}
func (m *Deposit) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Deposit.Unmarshal(m, b)
@@ -1709,9 +1803,9 @@
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" json:"fee,omitempty"`
+ 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,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"`
+ 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:"-"`
@@ -1721,7 +1815,7 @@
func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
func (*NoShowFee) ProtoMessage() {}
func (*NoShowFee) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{14}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{14}
}
func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
@@ -1760,15 +1854,15 @@
// performed on.
type ActionLink struct {
// The entry point URL for this action link.
- Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
+ 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" json:"language,omitempty"`
+ 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" json:"restricted_country,omitempty"`
+ 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,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
+ 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:"-"`
@@ -1778,7 +1872,7 @@
func (m *ActionLink) String() string { return proto.CompactTextString(m) }
func (*ActionLink) ProtoMessage() {}
func (*ActionLink) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{15}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{15}
}
func (m *ActionLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActionLink.Unmarshal(m, b)
@@ -1833,12 +1927,12 @@
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" json:"ticket_type_id,omitempty"`
+ 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" json:"short_description,omitempty"`
+ 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" json:"price,omitempty"`
+ Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1848,7 +1942,7 @@
func (m *TicketType) String() string { return proto.CompactTextString(m) }
func (*TicketType) ProtoMessage() {}
func (*TicketType) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{16}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{16}
}
func (m *TicketType) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TicketType.Unmarshal(m, b)
@@ -1894,11 +1988,11 @@
// 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" json:"url,omitempty"`
+ 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,enum=maps.booking.feeds.RelatedMedia_MediaType" json:"type,omitempty"`
+ 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" json:"caption,omitempty"`
+ Caption string `protobuf:"bytes,3,opt,name=caption,proto3" json:"caption,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1908,7 +2002,7 @@
func (m *RelatedMedia) String() string { return proto.CompactTextString(m) }
func (*RelatedMedia) ProtoMessage() {}
func (*RelatedMedia) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{17}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{17}
}
func (m *RelatedMedia) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RelatedMedia.Unmarshal(m, b)
@@ -1954,10 +2048,10 @@
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" json:"attribute_id,omitempty"`
+ 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" json:"value_id,omitempty"`
+ 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:"-"`
@@ -1967,7 +2061,7 @@
func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) }
func (*ServiceAttributeValueId) ProtoMessage() {}
func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) {
- return fileDescriptor_feeds_0b3f05d3b8d0e7eb, []int{18}
+ return fileDescriptor_feeds_fc30b4ddff65807e, []int{18}
}
func (m *ServiceAttributeValueId) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ServiceAttributeValueId.Unmarshal(m, b)
@@ -2033,149 +2127,151 @@
proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value)
}
-func init() { proto.RegisterFile("feeds.proto", fileDescriptor_feeds_0b3f05d3b8d0e7eb) }
+func init() { proto.RegisterFile("feeds.proto", fileDescriptor_feeds_fc30b4ddff65807e) }
-var fileDescriptor_feeds_0b3f05d3b8d0e7eb = []byte{
- // 2250 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4f, 0x73, 0xdb, 0xc6,
- 0x15, 0x0f, 0x48, 0xd1, 0x24, 0x1f, 0x69, 0x19, 0x5c, 0xc9, 0x12, 0x2c, 0xc7, 0xb1, 0x0a, 0x37,
- 0x53, 0x55, 0x4e, 0x99, 0x56, 0x4e, 0x32, 0xc9, 0xc4, 0x4d, 0x42, 0x81, 0x90, 0x85, 0x31, 0x45,
- 0xc0, 0x4b, 0xc8, 0x8e, 0x7b, 0xd9, 0x40, 0xc0, 0x4a, 0xc2, 0x98, 0x04, 0xd8, 0x05, 0xa8, 0x58,
- 0x99, 0xc9, 0xa5, 0xa7, 0x1e, 0x3b, 0xd3, 0x5b, 0x3f, 0x41, 0x3b, 0xf5, 0x07, 0xe8, 0xf4, 0xd6,
- 0x53, 0x3f, 0x4e, 0x3f, 0x40, 0x2f, 0x9d, 0x5d, 0x80, 0x00, 0x28, 0x41, 0x96, 0x3b, 0xed, 0x85,
- 0xc2, 0xbe, 0xf7, 0x7e, 0xfb, 0xe7, 0xbd, 0x7d, 0xbf, 0xf7, 0x56, 0xd0, 0x3a, 0xa6, 0xd4, 0x8b,
- 0xba, 0x53, 0x16, 0xc6, 0x21, 0x42, 0x13, 0x67, 0x1a, 0x75, 0x8f, 0xc2, 0xf0, 0x95, 0x1f, 0x9c,
- 0x74, 0x85, 0x46, 0xfd, 0x57, 0x05, 0xda, 0x7b, 0x94, 0x7a, 0x07, 0x34, 0x76, 0x3c, 0x27, 0x76,
- 0xd0, 0x04, 0xd6, 0xa6, 0x2c, 0x74, 0x69, 0x14, 0xf9, 0xc1, 0x09, 0xf1, 0x83, 0x28, 0x66, 0x33,
- 0x37, 0xf6, 0xc3, 0x40, 0x91, 0x36, 0xa5, 0xad, 0xe5, 0x9d, 0xcf, 0xba, 0x97, 0x67, 0xe9, 0x16,
- 0x67, 0xe8, 0x5a, 0x19, 0xdc, 0xc8, 0xd1, 0xf8, 0xf6, 0xb4, 0x4c, 0x8c, 0x7e, 0x02, 0xed, 0xe8,
- 0xd4, 0x61, 0x1e, 0x09, 0x66, 0x93, 0x23, 0xca, 0x94, 0xca, 0xa6, 0xb4, 0x55, 0xc3, 0x2d, 0x21,
- 0x1b, 0x0a, 0x11, 0x37, 0x89, 0xc3, 0xd8, 0x19, 0x13, 0x21, 0x8c, 0x94, 0x6a, 0x62, 0x22, 0x64,
- 0x23, 0x21, 0x42, 0xab, 0x50, 0x0b, 0xc2, 0xc0, 0xa5, 0x4a, 0x6d, 0x53, 0xda, 0x5a, 0xc2, 0xc9,
- 0x00, 0xfd, 0x0a, 0x56, 0x4f, 0x68, 0x40, 0x99, 0xc3, 0x57, 0x22, 0xb1, 0x3f, 0xa1, 0x51, 0xec,
- 0x4c, 0xa6, 0xca, 0xd2, 0xa6, 0xb4, 0x55, 0xc5, 0x2b, 0xb9, 0xce, 0x9e, 0xab, 0x54, 0x07, 0x6e,
- 0x97, 0x6e, 0x1f, 0xad, 0xc0, 0x2d, 0x0b, 0x9b, 0x9a, 0x3e, 0x1a, 0x91, 0xc3, 0xe1, 0xd3, 0xa1,
- 0xf9, 0x62, 0x28, 0xbf, 0x87, 0xd6, 0x61, 0x65, 0x2e, 0xec, 0x8d, 0x88, 0x66, 0x1e, 0x58, 0x03,
- 0xdd, 0xd6, 0x65, 0x09, 0x6d, 0xc0, 0x5a, 0x41, 0x61, 0x0c, 0x35, 0xac, 0x1f, 0xe8, 0x43, 0xbb,
- 0x37, 0x90, 0x2b, 0xea, 0x1b, 0x09, 0xe4, 0xde, 0x99, 0xe3, 0x8f, 0x9d, 0x23, 0x7f, 0xec, 0xc7,
- 0xe7, 0xdc, 0x77, 0xe8, 0x31, 0x34, 0x26, 0xa9, 0xff, 0x84, 0x9f, 0x5b, 0x3b, 0x9b, 0xd7, 0xf9,
- 0x19, 0x67, 0x08, 0xf4, 0x1b, 0x58, 0x8d, 0x28, 0x3b, 0xf3, 0x5d, 0x4a, 0x9c, 0xc2, 0xcc, 0x4a,
- 0x65, 0xb3, 0xba, 0xd5, 0xda, 0xf9, 0x59, 0xd9, 0x4c, 0xa3, 0xc4, 0xbe, 0xb8, 0x11, 0xbc, 0x12,
- 0x5d, 0x16, 0xaa, 0xff, 0xae, 0xc0, 0x4a, 0x89, 0x31, 0xfa, 0x1c, 0x94, 0x28, 0x76, 0x58, 0x9c,
- 0xfb, 0x95, 0x30, 0x1a, 0xc5, 0xcc, 0x77, 0x63, 0x71, 0x82, 0x2a, 0x5e, 0x13, 0xfa, 0xcc, 0xb7,
- 0x38, 0xd5, 0xa2, 0x4f, 0x60, 0x8d, 0x06, 0x5e, 0x19, 0xae, 0x22, 0x70, 0xab, 0x34, 0xf0, 0x2e,
- 0xa3, 0x7e, 0x09, 0xab, 0x13, 0xca, 0xdc, 0x53, 0x27, 0x88, 0x89, 0xef, 0xe5, 0x18, 0x7e, 0x1b,
- 0x9a, 0x18, 0xcd, 0x75, 0x86, 0x97, 0x21, 0xba, 0x30, 0x3f, 0xd0, 0x02, 0x60, 0x49, 0x00, 0x3a,
- 0xa9, 0xaa, 0x60, 0x3f, 0x00, 0xc4, 0x68, 0x14, 0xce, 0x98, 0x4b, 0xa3, 0xdc, 0xfc, 0x86, 0x88,
- 0xc6, 0xbd, 0x32, 0x1f, 0xe2, 0xb9, 0x35, 0xee, 0x64, 0xc0, 0x6c, 0xb6, 0x3e, 0xb4, 0x17, 0x62,
- 0x51, 0x13, 0xb1, 0x28, 0x8d, 0xea, 0x42, 0x10, 0x16, 0x50, 0xea, 0x3f, 0x6b, 0xd0, 0x5e, 0x70,
- 0xfb, 0x7d, 0x68, 0x15, 0xdc, 0x20, 0x3c, 0xdd, 0xc4, 0x90, 0x9f, 0x1e, 0xdd, 0x03, 0xc8, 0x4f,
- 0x2d, 0x3c, 0xda, 0xc4, 0xcd, 0xec, 0xb0, 0xe8, 0x2e, 0x34, 0x93, 0xb0, 0x45, 0xd4, 0x15, 0xbe,
- 0xab, 0xe2, 0x86, 0x10, 0x8c, 0xa8, 0xcb, 0x33, 0xcd, 0x9b, 0xa5, 0xe9, 0xc2, 0xf5, 0x49, 0xa2,
- 0xb4, 0xe6, 0x32, 0x6e, 0x72, 0x1f, 0x5a, 0xd1, 0x34, 0x8c, 0x23, 0x22, 0xd2, 0x4f, 0xe4, 0x5b,
- 0x15, 0x83, 0x10, 0xd9, 0x5c, 0x22, 0xd6, 0x17, 0x06, 0xe1, 0x94, 0x06, 0xc2, 0x7b, 0x55, 0xdc,
- 0x14, 0x12, 0x73, 0x4a, 0x03, 0xf4, 0x73, 0x90, 0x8b, 0x07, 0x24, 0xb1, 0x73, 0xa2, 0xd4, 0xc5,
- 0x26, 0x6f, 0x15, 0xe5, 0xb6, 0x73, 0x82, 0xbe, 0x84, 0x66, 0xe6, 0x56, 0xa5, 0xf1, 0x2e, 0x61,
- 0xc8, 0xed, 0xd1, 0x36, 0x74, 0xa6, 0xce, 0xf9, 0x84, 0x06, 0x31, 0x09, 0xa7, 0xe2, 0x40, 0xbe,
- 0xa7, 0x34, 0x37, 0xab, 0x7c, 0xa1, 0x54, 0x61, 0x0a, 0xb9, 0xe1, 0xa1, 0xa7, 0x00, 0x8c, 0xba,
- 0x33, 0xc6, 0x28, 0xa7, 0x10, 0x10, 0x2b, 0x3d, 0xbc, 0x2e, 0x50, 0x5d, 0x9c, 0x41, 0x70, 0x01,
- 0x8e, 0x1c, 0x40, 0x91, 0x7b, 0x4a, 0xbd, 0xd9, 0x98, 0x12, 0xfa, 0xda, 0xa5, 0x62, 0x11, 0xa5,
- 0x25, 0xa2, 0xbf, 0x73, 0xed, 0xa4, 0xa3, 0x14, 0xaa, 0xcf, 0x91, 0xb8, 0x13, 0x5d, 0x14, 0x6d,
- 0x7c, 0x07, 0x90, 0x2f, 0x8e, 0xb6, 0x40, 0x66, 0x74, 0x4a, 0x9d, 0x98, 0xcc, 0x82, 0xd8, 0x1f,
- 0x8b, 0xc0, 0x25, 0x09, 0xb8, 0x9c, 0xc8, 0x0f, 0xb9, 0x98, 0xc7, 0x2e, 0xb7, 0xa4, 0x67, 0x94,
- 0x9d, 0x0b, 0xcb, 0x84, 0x6f, 0x53, 0x4b, 0x9d, 0x8b, 0x47, 0xd4, 0xdd, 0x78, 0x06, 0x9d, 0x4b,
- 0x3b, 0x41, 0x8f, 0x01, 0x78, 0xce, 0x12, 0xe6, 0x04, 0x27, 0x34, 0x65, 0xa9, 0xd2, 0x80, 0xf0,
- 0xe4, 0xc5, 0xdc, 0x08, 0x37, 0xe3, 0xf9, 0xa7, 0xfa, 0x27, 0x09, 0x9a, 0x59, 0xa4, 0xd0, 0x1d,
- 0xe0, 0xb7, 0xee, 0xf8, 0x38, 0xbf, 0xc3, 0x75, 0x31, 0x4e, 0x2f, 0xb0, 0x50, 0x05, 0xce, 0x84,
- 0x66, 0x17, 0x98, 0x4b, 0x86, 0xce, 0x84, 0xa2, 0x75, 0xa8, 0xb3, 0x30, 0x9c, 0x70, 0x60, 0x92,
- 0xfa, 0x37, 0xf8, 0x30, 0xb9, 0xd9, 0x42, 0x21, 0x60, 0x49, 0x92, 0x37, 0xb8, 0x40, 0xa0, 0xee,
- 0x01, 0x4c, 0x1d, 0x16, 0x9f, 0x93, 0xc8, 0xff, 0x21, 0xa9, 0x12, 0x35, 0xdc, 0x14, 0x92, 0x91,
- 0xff, 0x03, 0x55, 0x7b, 0xd0, 0xcc, 0x36, 0xcd, 0x27, 0x3a, 0xa2, 0x27, 0x7e, 0x50, 0xf0, 0x64,
- 0x43, 0x08, 0xb8, 0x0f, 0xd7, 0xa1, 0xce, 0xc9, 0x6b, 0xee, 0xba, 0x2a, 0xbe, 0x41, 0x03, 0x6f,
- 0x44, 0x5d, 0xf5, 0x77, 0x12, 0xb4, 0x52, 0x9e, 0xfc, 0x3f, 0x30, 0xfa, 0xa7, 0x50, 0x4f, 0x73,
- 0x36, 0x25, 0xf1, 0xbb, 0x6f, 0x21, 0x71, 0x3c, 0xb7, 0x55, 0xdf, 0x00, 0xd4, 0x53, 0xe1, 0xff,
- 0xcc, 0x14, 0x08, 0x96, 0x84, 0x2b, 0x13, 0x2f, 0x8b, 0x6f, 0xb4, 0x09, 0x2d, 0x8f, 0x46, 0x2e,
- 0xf3, 0x93, 0x5b, 0x9d, 0x78, 0xb9, 0x28, 0x42, 0x1f, 0x43, 0x6d, 0xca, 0xfc, 0xb4, 0x12, 0xb7,
- 0x76, 0xee, 0x94, 0x6d, 0xdb, 0xe2, 0x06, 0x38, 0xb1, 0x43, 0x5f, 0x40, 0x8d, 0xcd, 0xc6, 0x34,
- 0x4a, 0x89, 0xf6, 0x41, 0xe9, 0x39, 0x93, 0xbb, 0xe8, 0x07, 0x27, 0x98, 0x9b, 0xe2, 0x04, 0x81,
- 0xbe, 0x80, 0xa5, 0xe3, 0x90, 0x4d, 0x94, 0xba, 0xf0, 0xd0, 0x87, 0x6f, 0xf1, 0x90, 0x11, 0xc4,
- 0xce, 0x2b, 0xba, 0x17, 0xb2, 0x09, 0x16, 0x10, 0x34, 0x82, 0x5b, 0x53, 0x46, 0xe7, 0x0c, 0x11,
- 0x9f, 0x4f, 0xa9, 0x60, 0x98, 0xe5, 0x9d, 0xed, 0xb7, 0xcc, 0xd2, 0xb5, 0x32, 0x88, 0x7d, 0x3e,
- 0xa5, 0x78, 0x79, 0xba, 0x30, 0x46, 0x9f, 0x41, 0x23, 0x76, 0x5e, 0x13, 0xe6, 0xc4, 0x54, 0x69,
- 0x8a, 0xd3, 0x94, 0x46, 0xcd, 0x76, 0x5e, 0x63, 0x27, 0xa6, 0xb8, 0x1e, 0x27, 0x1f, 0xe5, 0x5c,
- 0x05, 0xe5, 0x5c, 0xf5, 0x29, 0xd4, 0x3d, 0x3a, 0x0d, 0x23, 0x3f, 0x56, 0x5a, 0x57, 0x2f, 0xd1,
- 0x4f, 0x4c, 0xf0, 0xdc, 0x16, 0xfd, 0x1a, 0x5a, 0x41, 0x48, 0xa2, 0xd3, 0xf0, 0x7b, 0x72, 0x4c,
- 0xa9, 0xd2, 0xbe, 0x3a, 0x79, 0x87, 0xe1, 0xe8, 0x34, 0xfc, 0x7e, 0x8f, 0x52, 0xdc, 0x0c, 0xe6,
- 0x9f, 0xe8, 0x10, 0x56, 0x18, 0xfd, 0xed, 0xcc, 0x67, 0x94, 0xb8, 0x8c, 0x7a, 0x7e, 0x4c, 0x5c,
- 0x87, 0x79, 0xca, 0x4d, 0xe1, 0xb2, 0x0f, 0xcb, 0x49, 0x59, 0x98, 0x6b, 0xc2, 0x5a, 0x73, 0x98,
- 0xc7, 0x6b, 0xe4, 0x05, 0x11, 0xfa, 0x1a, 0x5a, 0x8e, 0x68, 0xaf, 0xc8, 0xd8, 0x0f, 0x5e, 0x29,
- 0xcb, 0x22, 0x8e, 0x1f, 0x94, 0x92, 0xa4, 0x30, 0x1b, 0xf8, 0xc1, 0x2b, 0x0c, 0x4e, 0xf6, 0x8d,
- 0xbe, 0x84, 0x25, 0x11, 0xbb, 0x5b, 0x62, 0x23, 0x6f, 0x6b, 0x74, 0xe6, 0x7f, 0x45, 0xe0, 0x04,
- 0x88, 0xaf, 0x1e, 0xfb, 0xee, 0x2b, 0x9a, 0xc6, 0x5f, 0xbe, 0x7a, 0x75, 0x5b, 0x98, 0x09, 0x28,
- 0xc4, 0xd9, 0x37, 0xd2, 0xe1, 0x26, 0xa3, 0x63, 0x27, 0xa6, 0x1e, 0x99, 0x50, 0xcf, 0x77, 0x94,
- 0xce, 0xd5, 0x35, 0x1e, 0x27, 0x86, 0x07, 0xdc, 0x0e, 0xb7, 0x59, 0x61, 0x84, 0x4e, 0x61, 0x23,
- 0xeb, 0xde, 0xe2, 0x98, 0xf9, 0x47, 0xb3, 0x98, 0x92, 0x33, 0x67, 0x3c, 0x13, 0x79, 0x89, 0xc4,
- 0x9c, 0x0f, 0xdf, 0xd6, 0xc3, 0xcd, 0x41, 0xcf, 0x39, 0xc6, 0xf0, 0xf0, 0x7a, 0x54, 0xae, 0x50,
- 0xbf, 0x83, 0xe5, 0xc5, 0x2b, 0x8c, 0xee, 0xc3, 0x5d, 0x0b, 0xeb, 0x56, 0xef, 0x25, 0x6f, 0x4f,
- 0x89, 0xfd, 0xd2, 0xd2, 0xc9, 0xe1, 0x70, 0x64, 0xe9, 0x9a, 0xb1, 0x67, 0xe8, 0x7d, 0xf9, 0x3d,
- 0xd4, 0x86, 0x06, 0xd6, 0x9f, 0x1d, 0x1a, 0x58, 0xef, 0xcb, 0x12, 0x1f, 0x99, 0x96, 0x6d, 0x98,
- 0x43, 0xde, 0xc9, 0xa2, 0x0e, 0xdc, 0x1c, 0x9a, 0x36, 0x19, 0x1d, 0x5a, 0x96, 0x89, 0x6d, 0xbd,
- 0x2f, 0x57, 0xd5, 0xbf, 0xe6, 0x2c, 0x28, 0xe6, 0x7f, 0x1f, 0x94, 0x91, 0x8e, 0x9f, 0x1b, 0x9a,
- 0x5e, 0x36, 0xf9, 0x03, 0xb8, 0xbf, 0xa0, 0xed, 0x1b, 0x43, 0x63, 0xf8, 0x84, 0x60, 0x9d, 0x4b,
- 0x7b, 0x7c, 0x1d, 0x59, 0x42, 0x1f, 0xc0, 0xc6, 0x82, 0xd1, 0x9e, 0x69, 0xf6, 0x89, 0x89, 0xfb,
- 0x3a, 0x36, 0x86, 0x4f, 0xe4, 0x0a, 0xba, 0x07, 0x77, 0x16, 0xf4, 0xfa, 0x73, 0x71, 0x14, 0x43,
- 0x7b, 0xaa, 0xdb, 0x72, 0x95, 0xb7, 0xe2, 0x0b, 0x6a, 0x1b, 0x1b, 0x16, 0xb1, 0xcd, 0x43, 0x2c,
- 0x2f, 0xa9, 0x3f, 0x42, 0x4d, 0x70, 0x11, 0x6f, 0x7c, 0x04, 0x1b, 0x91, 0x89, 0xef, 0xb2, 0x30,
- 0x4a, 0x59, 0xbf, 0x25, 0x64, 0x07, 0x42, 0x84, 0x1e, 0xc0, 0xcd, 0xb4, 0xe4, 0x9e, 0x13, 0x37,
- 0xf4, 0xe6, 0x95, 0xa9, 0x3d, 0x17, 0x6a, 0xa1, 0x47, 0xd1, 0x47, 0x80, 0x38, 0x86, 0xbf, 0x9c,
- 0xd2, 0x4c, 0xe6, 0xfd, 0x4d, 0xc2, 0xa0, 0x72, 0xaa, 0x49, 0x52, 0xd9, 0x76, 0x4e, 0xd4, 0x3f,
- 0x56, 0xe0, 0xd6, 0x05, 0x6a, 0xe3, 0x4d, 0xeb, 0xc4, 0x0f, 0x88, 0xe3, 0x9d, 0x39, 0x81, 0x4b,
- 0x49, 0x1a, 0xf0, 0x74, 0x43, 0x9d, 0x89, 0x1f, 0xf4, 0x12, 0xcd, 0x6e, 0xa2, 0x40, 0x5f, 0xc3,
- 0xfb, 0x45, 0xfb, 0x30, 0x18, 0xfb, 0x01, 0x25, 0x2e, 0x1f, 0xf0, 0x49, 0xd3, 0x22, 0x75, 0x27,
- 0x07, 0x9a, 0xc2, 0x42, 0x9b, 0x1b, 0xa0, 0x67, 0x70, 0x9b, 0xdf, 0xc5, 0x14, 0x32, 0x4e, 0x9a,
- 0x3f, 0xce, 0x11, 0xd5, 0x6b, 0x08, 0x7c, 0xb7, 0xa2, 0x48, 0x78, 0x85, 0x63, 0xb5, 0x02, 0x94,
- 0xb3, 0xc5, 0x63, 0x80, 0x20, 0xcc, 0xb8, 0x66, 0xe9, 0x5d, 0xe6, 0x69, 0x26, 0x80, 0x3d, 0x4a,
- 0xd5, 0x2e, 0xd4, 0x53, 0x86, 0xe4, 0x3e, 0x17, 0x01, 0x21, 0x53, 0xca, 0x5c, 0x1a, 0x24, 0x0f,
- 0x8b, 0x1a, 0x6e, 0x0b, 0xa1, 0x95, 0xc8, 0xd4, 0xbf, 0x57, 0x60, 0xed, 0x12, 0xcd, 0xef, 0xf9,
- 0x74, 0xec, 0xa1, 0xfd, 0x94, 0x1e, 0x92, 0x97, 0xeb, 0x27, 0xef, 0x54, 0x20, 0x04, 0xb2, 0x2b,
- 0x7e, 0x0b, 0x5c, 0xb1, 0x0a, 0xb5, 0xb1, 0x73, 0x44, 0xc7, 0x69, 0xd4, 0x93, 0x01, 0x97, 0x8a,
- 0x3c, 0x55, 0xaa, 0x82, 0xac, 0x93, 0x01, 0x2f, 0xbc, 0x3e, 0x7f, 0x40, 0x08, 0xb6, 0xf3, 0xc4,
- 0xf9, 0x1b, 0x18, 0xfc, 0x28, 0xa5, 0x44, 0x4f, 0xfd, 0xbd, 0x04, 0xcd, 0x6c, 0x01, 0x7e, 0x41,
- 0xf7, 0x0c, 0x7d, 0xd0, 0x2f, 0x4b, 0x10, 0x19, 0xda, 0xa3, 0x7d, 0x13, 0xdb, 0xa4, 0x37, 0x1c,
- 0xbd, 0xd0, 0xb1, 0x2c, 0xa1, 0x9b, 0xd0, 0xb4, 0x7a, 0xb8, 0xf7, 0x04, 0xf7, 0xac, 0x7d, 0xb9,
- 0xc2, 0x9f, 0xa5, 0x07, 0x87, 0x03, 0xdb, 0xb0, 0x06, 0x3a, 0xd1, 0xf6, 0x4d, 0x43, 0xd3, 0xe5,
- 0x2a, 0x5a, 0x06, 0xd0, 0xf6, 0x75, 0xed, 0xe9, 0xae, 0xf9, 0xad, 0x3e, 0x92, 0x97, 0x78, 0xd6,
- 0xf6, 0xb1, 0x69, 0xf5, 0xf9, 0xa3, 0xb5, 0x86, 0x5a, 0x50, 0xdf, 0x35, 0xcd, 0x81, 0xde, 0x1b,
- 0xca, 0x37, 0xd4, 0xbf, 0x49, 0xd0, 0xb9, 0xe4, 0x02, 0xf4, 0x0d, 0xd4, 0x8e, 0xf9, 0xfe, 0x14,
- 0x49, 0x90, 0xcf, 0xf6, 0xbb, 0x3b, 0x0e, 0x27, 0x40, 0xfe, 0x5a, 0x3b, 0xf6, 0x59, 0x94, 0xbc,
- 0x0e, 0x89, 0x3b, 0x8b, 0xe2, 0x70, 0x42, 0x59, 0x24, 0xdc, 0xd7, 0xc0, 0x48, 0xe8, 0x78, 0xc7,
- 0xa5, 0xcd, 0x35, 0xe8, 0x63, 0x5e, 0x62, 0xe2, 0x19, 0x0b, 0x78, 0xf2, 0xe4, 0x80, 0x6a, 0x02,
- 0xc8, 0x54, 0x19, 0x40, 0xfd, 0x87, 0x04, 0xf5, 0xb4, 0xce, 0xa1, 0x47, 0x79, 0x55, 0x94, 0xae,
- 0xeb, 0x3b, 0xb2, 0x9a, 0x78, 0x21, 0x75, 0x16, 0x12, 0x20, 0xef, 0xef, 0x0a, 0xa9, 0x53, 0xbc,
- 0xe7, 0xbc, 0x17, 0xfc, 0x06, 0xda, 0xe9, 0x5c, 0x49, 0x05, 0xa9, 0x8a, 0x6b, 0x76, 0xef, 0xca,
- 0xa5, 0xc5, 0x7d, 0x6a, 0xa5, 0x10, 0x3e, 0x50, 0x19, 0x34, 0xb3, 0x7a, 0x8b, 0x1e, 0x42, 0x95,
- 0xe7, 0xcb, 0xb5, 0x07, 0xe0, 0x56, 0xe8, 0x73, 0x68, 0x1c, 0x53, 0xfa, 0x5f, 0xac, 0x5b, 0x3f,
- 0xa6, 0xe2, 0x43, 0xfd, 0x8b, 0x04, 0x90, 0x97, 0x53, 0x24, 0x43, 0x75, 0xc6, 0xc6, 0x69, 0x7b,
- 0xc8, 0x3f, 0xd1, 0x06, 0x34, 0xc6, 0x4e, 0x70, 0x32, 0x73, 0x4e, 0xe6, 0x24, 0x97, 0x8d, 0xd1,
- 0x2f, 0xc4, 0x1b, 0x59, 0xbc, 0x70, 0xa9, 0x47, 0xdc, 0x70, 0x16, 0xc4, 0xec, 0x3c, 0xbd, 0xfe,
- 0x9d, 0x5c, 0xa3, 0x25, 0x0a, 0xf4, 0x15, 0x34, 0xa6, 0x63, 0x27, 0x16, 0x5d, 0xda, 0x92, 0xd8,
- 0xa5, 0x7a, 0x75, 0x75, 0xb7, 0x52, 0x4b, 0x9c, 0x61, 0xd4, 0x3f, 0x48, 0x00, 0x79, 0xf1, 0x45,
- 0x3f, 0x85, 0xe5, 0x42, 0xc5, 0xce, 0xbb, 0xda, 0x76, 0x5e, 0x94, 0x0d, 0x0f, 0x3d, 0x84, 0x4e,
- 0x74, 0x1a, 0xb2, 0x98, 0x14, 0x5b, 0xd5, 0xe4, 0x20, 0xb2, 0x50, 0xf4, 0xcb, 0xfa, 0xd5, 0xea,
- 0xbb, 0xf5, 0xab, 0xea, 0x9f, 0x25, 0x68, 0x17, 0x8b, 0x79, 0x89, 0x03, 0xbf, 0x4a, 0x69, 0xa7,
- 0x72, 0x75, 0x47, 0x59, 0x9c, 0xa1, 0x2b, 0x7e, 0x0b, 0x64, 0xa3, 0x40, 0xdd, 0x75, 0x92, 0x6d,
- 0x27, 0xa5, 0x63, 0x3e, 0x54, 0x3f, 0x82, 0x66, 0x66, 0x8c, 0x56, 0x41, 0x2e, 0xa1, 0x8c, 0x26,
- 0xd4, 0xac, 0x7d, 0xd3, 0x36, 0x65, 0x49, 0x7d, 0x01, 0xeb, 0x57, 0xb4, 0x08, 0xbc, 0xe0, 0xe5,
- 0xbd, 0x46, 0xe6, 0xc7, 0x56, 0x26, 0x33, 0x3c, 0xfe, 0x44, 0xcb, 0x9a, 0x90, 0xc4, 0x7b, 0xf5,
- 0xb3, 0x04, 0xbd, 0xfd, 0x08, 0x9a, 0xd9, 0xc5, 0x42, 0x6b, 0x80, 0xf6, 0x8c, 0x6f, 0xf5, 0x3e,
- 0xc1, 0x3d, 0x5b, 0x27, 0x7d, 0x7d, 0xaf, 0x77, 0x38, 0xb0, 0xe5, 0xf7, 0x38, 0x0b, 0x59, 0x3a,
- 0x26, 0x96, 0x8e, 0x47, 0xbc, 0x8e, 0x6f, 0xff, 0x08, 0x9d, 0x4b, 0x4d, 0x21, 0xef, 0x00, 0xd2,
- 0xf6, 0x82, 0x68, 0x58, 0xef, 0x1b, 0x36, 0xd1, 0x7a, 0xb8, 0x7f, 0xb9, 0x4d, 0x28, 0x33, 0xd2,
- 0xcc, 0x61, 0xdf, 0x48, 0x9b, 0x11, 0xd1, 0x26, 0x94, 0x19, 0xf5, 0x06, 0x2f, 0x7a, 0x2f, 0x47,
- 0x72, 0x65, 0xfb, 0x8d, 0x04, 0xcb, 0x8b, 0xf7, 0x8c, 0x37, 0x3f, 0x3d, 0x8d, 0x4f, 0x40, 0xac,
- 0x41, 0xcf, 0xde, 0x33, 0xf1, 0xc1, 0xe5, 0x85, 0x2f, 0x1a, 0xbc, 0xd0, 0x77, 0x49, 0xcf, 0xb2,
- 0x06, 0x86, 0x56, 0xe8, 0x4f, 0x2e, 0x1a, 0x1d, 0x98, 0xbb, 0xc6, 0x40, 0xe7, 0xb6, 0x72, 0x05,
- 0xdd, 0x85, 0xf5, 0x8b, 0xfa, 0xde, 0xb0, 0x8f, 0x4d, 0xa3, 0x2f, 0x57, 0xd1, 0x3a, 0xac, 0x5c,
- 0x54, 0x1a, 0xe6, 0x48, 0x5e, 0x3a, 0xba, 0x21, 0xfe, 0x65, 0xfb, 0xe8, 0x3f, 0x01, 0x00, 0x00,
- 0xff, 0xff, 0xcc, 0x96, 0x13, 0xc4, 0xc1, 0x15, 0x00, 0x00,
+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,
}
diff --git a/feeds/feeds.proto b/feeds/feeds.proto
index 55e946e..d714f46 100644
--- a/feeds/feeds.proto
+++ b/feeds/feeds.proto
@@ -117,14 +117,16 @@
// availability {start_sec: 9am, duration: 180 minutes, ...}
//
message Availability {
- // An opaque string from an aggregator to identify a merchant.
+ // An opaque string from an aggregator to identify a merchant. (required)
string merchant_id = 1;
// An opaque string from aggregator to identify a service of the
- // merchant.
+ // merchant. (required)
string service_id = 2;
- // Start time of this availability, using epoch time in seconds.
+ // Start time of this availability, using epoch time in seconds in UTC.
+ //(required)
int64 start_sec = 3;
// Duration of the service in seconds, e.g. 30 minutes for a chair massage.
+ // (required)
int64 duration_sec = 4;
// Number of total spots and open spots of this availability.
// E.g. a Yoga class of 10 spots with 3 booked.
@@ -136,10 +138,12 @@
// 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)
int64 spots_total = 5;
int64 spots_open = 6;
// An optional opaque string to identify this availability slot. If set, it
// will be included in the requests that book/update/cancel appointments.
+ // (optional)
string availability_tag = 7;
// Optional resources used to disambiguate this availability slot from
@@ -151,9 +155,10 @@
// spots_total: 10 spots_open: 7 }
// availability { resources { staff_id: "2" staff_name: "John" }
// spots_total: 5 spots_open: 2 }
+ // (optional)
Resources resources = 8;
- // A list of ids referencing the payment options which can be used to pay
+ // 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.
//
@@ -161,6 +166,10 @@
// 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)
repeated string payment_option_id = 9;
// Recurrence messages are optional, but allow for a more compact
@@ -179,30 +188,91 @@
// merchants/services with regularly scheduled classes.
message Recurrence {
// The inclusive maximum UTC timestamp the availability repeats until.
+ // (required)
int64 repeat_until_sec = 1;
// Defines the time between successive availability slots.
//
- // E.g. An availability with a duration of 20 min, a repeat_every_sec of
+ // 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.
+ // 11-11:20am. (required)
int32 repeat_every_sec = 2;
}
// The recurrence information for the availability, representing more than one
// start time. A recurrence should contain appointments for one working day.
+ // (optional)
Recurrence recurrence = 10;
- // ScheduleException messages are used to represent booked/unavailable time
- // ranges within the work day. As time slots are booked, the list of
- // exceptions should grow to reflect the newly unavailable time ranges.
- // The recurrence itself shouldn't be modified.
+ // 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.
message ScheduleException {
- // The time range of the exception.
+ // 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 time_range = 1;
}
- // When this service cannot be scheduled. To limit the number of
- // schedule_exception messages consider joining adjacent exceptions.
+ // Times when this service cannot be scheduled. To limit the number of
+ // schedule_exception messages, consider joining adjacent exceptions.
+ // (optional)
repeated ScheduleException schedule_exception = 11;
+
+ // 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 = 12;
+
+ // 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 no_show_fee = 13;
+
+ // 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 require_credit_card = 14;
+
+ // 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)
+ repeated string ticket_type_id = 15;
}
// A resource is used to disambiguate availability slots from one another when
diff --git a/utils/utils.go b/utils/utils.go
index 6e4d65d..c95e198 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -77,30 +77,57 @@
}
func buildLineItem(availability *fpb.Availability, tickets []*fpb.TicketType) *mpb.LineItem {
+ // If no ticket types return nil as there is nothing to build.
+ if len(tickets) == 0 {
+ return nil
+ }
+
+ // Treated as a set.
+ ticketMap := make(map[string]*fpb.TicketType)
+ for _, ticketType := range tickets {
+ if _, ok := ticketMap[ticketType.GetTicketTypeId()]; !ok {
+ // Ticket type ids should be unique to a merchant service pair.
+ // If they're not unique they will get dropped silently here.
+ // We enforce minimal feed validation in the test client so it's
+ // up to you to ensure UIDs.
+ ticketMap[ticketType.GetTicketTypeId()] = ticketType
+ }
+ }
+
+ filteredTickets := tickets
+ if len(availability.GetTicketTypeId()) != 0 {
+ // Clear slice but preserve allocated memory.
+ filteredTickets = filteredTickets[:0]
+ for _, ticketTypeID := range availability.GetTicketTypeId() {
+ if ticketType, ok := ticketMap[ticketTypeID]; ok {
+ filteredTickets = append(filteredTickets, ticketType)
+ }
+ }
+ }
+
+ // If no ticket types return nil as there is nothing to build.
+ if len(filteredTickets) == 0 {
+ return nil
+ }
+
lineItem := &mpb.LineItem{
ServiceId: availability.GetServiceId(),
StartSec: availability.GetStartSec(),
DurationSec: availability.GetDurationSec(),
Price: &mpb.Price{},
}
-
- // If not ticket types return nil as there is nothing to build.
- if len(tickets) == 0 {
- return nil
- }
-
for i := 0; i < int(availability.GetSpotsOpen()); i++ {
// This is deterministic which is fine given that we just want to get a mix of ticket types.
- ticketTypeIndex := rand.Intn(len(tickets))
+ ticketTypeIndex := rand.Intn(len(filteredTickets))
// Calculate price of line item.
- if lineItem.GetPrice().GetCurrencyCode() == "" && tickets[ticketTypeIndex].GetPrice().GetCurrencyCode() != "" {
- lineItem.Price.CurrencyCode = tickets[ticketTypeIndex].GetPrice().GetCurrencyCode()
+ if lineItem.GetPrice().GetCurrencyCode() == "" && filteredTickets[ticketTypeIndex].GetPrice().GetCurrencyCode() != "" {
+ lineItem.Price.CurrencyCode = filteredTickets[ticketTypeIndex].GetPrice().GetCurrencyCode()
}
- lineItem.Price.PriceMicros += tickets[ticketTypeIndex].GetPrice().GetPriceMicros()
+ lineItem.Price.PriceMicros += filteredTickets[ticketTypeIndex].GetPrice().GetPriceMicros()
// Add ticket to line item.
lineItem.Tickets = append(lineItem.Tickets, &mpb.LineItem_OrderedTickets{
- TicketId: tickets[ticketTypeIndex].GetTicketTypeId(),
+ TicketId: filteredTickets[ticketTypeIndex].GetTicketTypeId(),
Count: 1,
})
}