# Protocol Documentation

## Table of Contents

## Booking.proto

Top

Booking related messages.

This file is really just an example. The data model is completely

fictional.

### Booking

Represents the booking of a vehicle.

Vehicles are some cool shit. But drive carefully!

Field | Type | Label | Description
vehicle_id | int32 |  | ID of booked vehicle.
customer_id | int32 |  | Customer that booked the vehicle.
status | BookingStatus |  | Status of the booking.
confirmation_sent | bool |  | Has booking confirmation been sent?
payment_received | bool |  | Has payment been received?
color_preference | string |  | Deprecated. Color preference of the customer.

#### Fields with deprecated option

Name | Option
color_preference | true

### BookingStatus

Represents the status of a vehicle booking.

Field | Type | Label | Description
id | int32 |  | Unique booking status ID.
description | string |  | Booking status description. E.g. "Active".

#### Validated Fields

Field | Validations
description | string_not_empty: true length_lt: 255

### BookingStatusID

Represents the booking status ID.

Field | Type | Label | Description
id | int32 |  | Unique booking status ID.

### EmptyBookingMessage

An empty message for testing

### BookingService

Service for handling vehicle bookings.

Method Name | Request Type | Response Type | Description
BookVehicle | Booking | BookingStatus | Used to book a vehicle. Pass in a Booking and a BookingStatus will be returned.
BookingUpdates | BookingStatusID | BookingStatus stream | Used to subscribe to updates of the BookingStatus.

#### Methods with HTTP bindings

Method Name | Method | Pattern | Body
BookVehicle | POST | /api/bookings/vehicle/{vehicle_id} | *

## Customer.proto

Top

This file has messages for describing a customer.

### Address

Represents a mail address.

Field | Type | Label | Description
address_line_1 | string | required | First address line.
address_line_2 | string | optional | Second address line.
address_line_3 | string | optional | Second address line.
town | string | required | Address town.
county | string | optional | Address county, if applicable.
country | string | required | Address country.

### Customer

Represents a customer.

Field | Type | Label | Description
id | int32 | required | Unique customer ID.
first_name | string | required | Customer first name.
last_name | string | required | Customer last name.
details | string | optional | Customer details.
email_address | string | optional | Customer e-mail address.
phone_number | string | repeated | Customer phone numbers, primary first.
mail_addresses | Address | repeated | Customer mail addresses, primary first.

## Vehicle.proto

Top

Messages describing manufacturers / vehicles.

### Manufacturer

Represents a manufacturer of cars.

Field | Type | Label | Description
id | int32 | required | The unique manufacturer ID.
code | string | required | A manufacturer code, e.g. "DKL4P".
details | string | optional | Manufacturer details (minimum orders et.c.).
category | Manufacturer.Category | optional | Manufacturer category. Default: CATEGORY_EXTERNAL

### Model

Represents a vehicle model.

Field | Type | Label | Description
id | string | required | The unique model ID.
model_code | string | required | The car model code, e.g. "PZ003".
model_name | string | required | The car model name, e.g. "Z3".
daily_hire_rate_dollars | sint32 | required | Dollars per day.
daily_hire_rate_cents | sint32 | required | Cents per day.

### Vehicle

Represents a vehicle that can be hired.

Field | Type | Label | Description
id | int32 | required | Unique vehicle ID.
model | Model | required | Vehicle model.
reg_number | string | required | Vehicle registration number.
mileage | sint32 | optional | Current vehicle mileage, if known.
category | Vehicle.Category | optional | Vehicle category.
daily_hire_rate_dollars | sint32 | optional | Dollars per day. Default: 50
daily_hire_rate_cents | sint32 | optional | Cents per day.

Extension | Type | Base | Number | Description
series | string | Model | 100 | Vehicle model series.

### Vehicle.Category

Represents a vehicle category. E.g. "Sedan" or "Truck".

Field | Type | Label | Description
code | string | required | Category code. E.g. "S".
description | string | required | Category name. E.g. "Sedan".

### Manufacturer.Category

Manufacturer category. A manufacturer may be either inhouse or external.

Name | Number | Description
CATEGORY_INHOUSE | 0 | The manufacturer is inhouse.
CATEGORY_EXTERNAL | 1 | The manufacturer is external.

### File-level Extensions

Extension | Type | Base | Number | Description
country | string | Manufacturer | 100 | Manufacturer country. Default: China

## Scalar Value Types

.proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby
double |  | double | double | float | float64 | double | float | Float
float |  | float | float | float | float32 | float | float | Float
int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required)
int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum
uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required)
uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required)
sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required)
sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum
fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required)
fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum
sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required)
sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum
bool |  | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass
string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8)
bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT)