use crate::{request::Validation, AvroValue, JsonValue, Map, Record};
use serde::{de::DeserializeOwned, Serialize};
#[doc(no_inline)]
pub use apache_avro::schema;
mod column;
mod mutation;
mod query;
mod reference;
mod row;
pub use column::{Column, EncodeColumn};
pub use mutation::Mutation;
pub use query::Query;
pub use reference::Reference;
pub use row::DecodeRow;
pub trait Model: Default + Serialize + DeserializeOwned {
fn new() -> Self;
#[must_use]
fn read_map(&mut self, data: &Map) -> Validation;
#[inline]
fn try_from_map(data: Map) -> Result<Self, serde_json::Error> {
serde_json::from_value(JsonValue::from(data))
}
#[inline]
fn try_from_avro_record(data: Record) -> Result<Self, apache_avro::Error> {
apache_avro::from_value(&AvroValue::Record(data))
}
#[must_use]
fn into_map(self) -> Map {
match serde_json::to_value(self) {
Ok(JsonValue::Object(map)) => map,
_ => panic!("the model cann't be converted to a json object"),
}
}
#[must_use]
fn into_avro_record(self) -> Record {
match apache_avro::to_value(self) {
Ok(AvroValue::Record(record)) => record,
_ => panic!("the model cann't be converted to an Avro record"),
}
}
}