use std::future::Future;
use crate::{DataType, DefOpts, ExportError, Type};
pub trait SpectaFunctionResult<TMarker> {
fn to_datatype(opts: DefOpts) -> Result<DataType, ExportError>;
}
#[cfg(feature = "serde")]
#[doc(hidden)]
pub enum SpectaFunctionResultSerialize {}
#[cfg(feature = "serde")]
impl<T: serde::Serialize + Type> SpectaFunctionResult<SpectaFunctionResultSerialize> for T {
fn to_datatype(opts: DefOpts) -> Result<DataType, ExportError> {
T::reference(opts, &[])
}
}
#[doc(hidden)]
pub struct SpectaFunctionResultResult<TMarker>(TMarker);
impl<TMarker, T: SpectaFunctionResult<TMarker>, E>
SpectaFunctionResult<SpectaFunctionResultResult<TMarker>> for Result<T, E>
{
fn to_datatype(opts: DefOpts) -> Result<DataType, ExportError> {
T::to_datatype(opts)
}
}
#[doc(hidden)]
pub struct SpectaFunctionResultFuture<TMarker>(TMarker);
impl<TMarker, T: SpectaFunctionResult<TMarker>, TFut: Future<Output = T>>
SpectaFunctionResult<SpectaFunctionResultFuture<TMarker>> for TFut
{
fn to_datatype(opts: DefOpts) -> Result<DataType, ExportError> {
T::to_datatype(opts)
}
}