pub use serde::{
Deserialize as __Deserialize,
Deserializer as __Deserializer,
de::DeserializeOwned as __DeserializeOwned,
};
pub use serde_derive::Deserialize as __DeriveDeserialize;
pub use __DeriveDeserialize as DeriveTable;
pub mod types {
use super::*;
pub type TomlString = String;
pub type TomlInt = i64;
pub type TomlFloat = f64;
pub type TomlBool = bool;
pub type TomlDate = toml::value::Datetime;
pub struct TomlArray<T: __DeserializeOwned> {
pub array: Vec<T>
}
impl<'de, T> __Deserialize<'de> for TomlArray<T>
where T: __DeserializeOwned
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: __Deserializer<'de>,
{
let f = Vec::<T>::deserialize(deserializer)?;
Ok(Self { array: f })
}
}
}
#[macro_export]
macro_rules! __generate_impl_deserialize {
($var_name_from: ident, $from_ty: ty, $for_ty: ty, $($body: tt)*) => {
impl From<$from_ty> for $for_ty {
fn from($var_name_from: $from_ty) -> Self {
{ $($body)* }
}
}
impl<'de> kat::__Deserialize<'de> for $for_ty {
fn deserialize<D>(deserializer: D) -> Result<$for_ty, D::Error>
where
D: kat::__Deserializer<'de>,
{
let f = <$from_ty>::deserialize(deserializer)?;
Ok(<$for_ty>::from(f))
}
}
};
}
#[macro_export]
macro_rules! impl_deserialize_from_deserializable {
(
|$var_name_from: ident: $from_ty: ty| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, $from_ty, $for_ty, $($body)*); };
}
#[macro_export]
macro_rules! impl_deserialize_from_toml_string {
(
|$var_name_from: ident| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, kat::types::TomlString, $for_ty, $($body)*); };
}
#[macro_export]
macro_rules! impl_deserialize_from_toml_int {
(
|$var_name_from: ident| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, kat::types::TomlInt, $for_ty, $($body)*); };
}
#[macro_export]
macro_rules! impl_deserialize_from_toml_float {
(
|$var_name_from: ident| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, kat::types::TomlFloat, $for_ty, $($body)*); };
}
#[macro_export]
macro_rules! impl_deserialize_from_toml_bool {
(
|$var_name_from: ident| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, kat::types::TomlBool, $for_ty, $($body)*); };
}
#[macro_export]
macro_rules! impl_deserialize_from_toml_date {
(
|$var_name_from: ident| -> $for_ty: ty {
$($body: tt)*
}
) => { kat::__generate_impl_deserialize!($var_name_from, kat::types::TomlDate, $for_ty, $($body)*); };
}