use crate::error::ClientError;
use crate::protocol::schema::state::DataType as StateDataType;
use super::Client;
#[derive(Debug, PartialEq)]
pub struct Schema {
pub name: String,
pub description: String,
pub owner: String,
pub properties: Vec<PropertyDefinition>,
}
#[derive(Debug, PartialEq)]
pub struct PropertyDefinition {
pub name: String,
pub schema_name: String,
pub data_type: DataType,
pub required: bool,
pub description: String,
pub number_exponent: i64,
pub enum_options: Vec<String>,
pub struct_properties: Vec<PropertyDefinition>,
}
#[derive(Debug, Deserialize, PartialEq, Eq)]
pub enum DataType {
Bytes,
Boolean,
Number,
String,
Enum,
Struct,
LatLong,
}
impl From<DataType> for StateDataType {
fn from(data_type: DataType) -> Self {
match data_type {
DataType::Bytes => StateDataType::Bytes,
DataType::Boolean => StateDataType::Boolean,
DataType::Number => StateDataType::Number,
DataType::String => StateDataType::String,
DataType::Enum => StateDataType::Enum,
DataType::Struct => StateDataType::Struct,
DataType::LatLong => StateDataType::LatLong,
}
}
}
pub trait SchemaClient: Client {
fn get_schema(&self, name: String, service_id: Option<&str>) -> Result<Schema, ClientError>;
fn list_schemas(&self, service_id: Option<&str>) -> Result<Vec<Schema>, ClientError>;
}