use core::marker::PhantomData;
use super::return_variant::ReturnsError;
use super::{ArgumentError, FunctionMetadataTypeEntity, Returns, SqlMapping, SqlTranslatable};
pub trait PhantomDataExt {
fn type_name(&self) -> &'static str;
fn argument_sql(&self) -> Result<SqlMapping, ArgumentError>;
fn return_sql(&self) -> Result<Returns, ReturnsError>;
fn variadic(&self) -> bool;
fn optional(&self) -> bool;
fn entity(&self) -> FunctionMetadataTypeEntity;
}
impl<T> PhantomDataExt for PhantomData<T>
where
T: SqlTranslatable,
{
fn type_name(&self) -> &'static str {
T::type_name()
}
fn argument_sql(&self) -> Result<SqlMapping, ArgumentError> {
T::argument_sql()
}
fn return_sql(&self) -> Result<Returns, ReturnsError> {
T::return_sql()
}
fn variadic(&self) -> bool {
T::variadic()
}
fn optional(&self) -> bool {
T::optional()
}
fn entity(&self) -> FunctionMetadataTypeEntity {
T::entity()
}
}