// Copyright 2019 Cargill Incorporated
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// -----------------------------------------------------------------------------
syntax = "proto3";
message PropertyDefinition {
enum DataType {
UNSET_DATA_TYPE = 0;
BYTES = 1;
BOOLEAN = 2;
NUMBER = 3;
STRING = 4;
ENUM = 5;
STRUCT = 6;
LAT_LONG = 7;
}
// The name of the property
string name = 1;
// The data type of the value; must not be set to UNSET_DATA_TYPE.
DataType data_type = 2;
// Indicates that this is a required property in the Schema
bool required = 3;
// An optional description of the field.
string description = 4;
// The exponent for a NUMBER property
sint32 number_exponent = 10;
// The list of values for an ENUM property; must not be empty/ for
// properties of that type.
repeated string enum_options = 11;
// The list of property definitions for a STRUCT property; must not be
// empty for properties of that type.
repeated PropertyDefinition struct_properties = 12;
}
message Schema {
// The name of the Schema. This is also the unique identifier for the
// Schema.
string name = 1;
// An optional description of the schema.
string description = 2;
// The Pike organization that has rights to modify the schema.
string owner = 3;
// The property definitions that make up the Schema; must not be empty.
repeated PropertyDefinition properties = 10;
}
message SchemaList {
// Schemas are stored in a list to handle any hash collisions
repeated Schema schemas = 1;
}
message LatLong {
// Coordinates are expected to be in millionths of a degree
sint64 latitude = 1;
sint64 longitude = 2;
}
message PropertyValue {
// The name of the property value. Used to validate the property against a
// Schema.
string name = 1;
// The data type of the property. Indicates which value field the actual
// value may be found. Must not be set to `UNSET_DATA_TYPE`.
PropertyDefinition.DataType data_type = 2;
// The value fields for the possible data types. Only one of these will
// contain a value, determined by the value of `data_type`
bytes bytes_value = 10;
bool boolean_value = 11;
sint64 number_value = 12;
string string_value = 13;
uint32 enum_value = 14;
repeated PropertyValue struct_values = 15;
LatLong lat_long_value = 16;
}