use std::marker::PhantomData;
#[doc(hidden)]
pub trait Schema {
type Dimensions;
}
pub struct Schemas;
impl Schemas {
pub fn one<T>(dimension_0: impl Into<String>) -> Schema1<T> {
Schema1 {
phantom_0: PhantomData,
dimension_0: dimension_0.into(),
}
}
pub fn two<T, U>(
dimension_0: impl Into<String>,
dimension_1: impl Into<String>,
) -> Schema2<T, U> {
Schema2 {
phantom_0: PhantomData,
dimension_0: dimension_0.into(),
phantom_1: PhantomData,
dimension_1: dimension_1.into(),
}
}
pub fn three<T, U, V>(
dimension_0: impl Into<String>,
dimension_1: impl Into<String>,
dimension_2: impl Into<String>,
) -> Schema3<T, U, V> {
Schema3 {
phantom_0: PhantomData,
dimension_0: dimension_0.into(),
phantom_1: PhantomData,
dimension_1: dimension_1.into(),
phantom_2: PhantomData,
dimension_2: dimension_2.into(),
}
}
pub fn four<T, U, V, W>(
dimension_0: impl Into<String>,
dimension_1: impl Into<String>,
dimension_2: impl Into<String>,
dimension_3: impl Into<String>,
) -> Schema4<T, U, V, W> {
Schema4 {
phantom_0: PhantomData,
dimension_0: dimension_0.into(),
phantom_1: PhantomData,
dimension_1: dimension_1.into(),
phantom_2: PhantomData,
dimension_2: dimension_2.into(),
phantom_3: PhantomData,
dimension_3: dimension_3.into(),
}
}
}
#[doc(hidden)]
pub struct Schema1<T> {
pub(crate) phantom_0: PhantomData<T>,
pub(crate) dimension_0: String,
}
impl<T> Schema for Schema1<T> {
type Dimensions = (T,);
}
#[doc(hidden)]
pub struct Schema2<T, U> {
pub(crate) phantom_0: PhantomData<T>,
pub(crate) dimension_0: String,
pub(crate) phantom_1: PhantomData<U>,
pub(crate) dimension_1: String,
}
impl<T, U> Schema for Schema2<T, U> {
type Dimensions = (T, U);
}
#[doc(hidden)]
pub struct Schema3<T, U, V> {
pub(crate) phantom_0: PhantomData<T>,
pub(crate) dimension_0: String,
pub(crate) phantom_1: PhantomData<U>,
pub(crate) dimension_1: String,
pub(crate) phantom_2: PhantomData<V>,
pub(crate) dimension_2: String,
}
impl<T, U, V> Schema for Schema3<T, U, V> {
type Dimensions = (T, U, V);
}
#[doc(hidden)]
#[allow(unused)]
pub struct Schema4<T, U, V, W> {
pub(crate) phantom_0: PhantomData<T>,
pub(crate) dimension_0: String,
pub(crate) phantom_1: PhantomData<U>,
pub(crate) dimension_1: String,
pub(crate) phantom_2: PhantomData<V>,
pub(crate) dimension_2: String,
pub(crate) phantom_3: PhantomData<W>,
pub(crate) dimension_3: String,
}
impl<T, U, V, W> Schema for Schema4<T, U, V, W> {
type Dimensions = (T, U, V, W);
}