use serde::Serialize;
use ts_rs::TS;
use super::marker::*;
pub trait ResponseValue<MValue: ResponseMarker> {
type Value: 'static + TS + Clone + Serialize;
fn transform(self) -> Self::Value;
fn debug() -> String;
}
impl<T> ResponseValue<MTs> for T
where
T: 'static + TS + Clone + Serialize,
{
type Value = Self;
fn transform(self) -> Self::Value {
self
}
fn debug() -> String {
"TS".to_string()
}
}
impl<T, MItem> ResponseValue<MIter<MItem>> for T
where
T: Iterator,
T::Item: ResponseValue<MItem>,
MItem: ResponseMarker,
{
type Value = Vec<<T::Item as ResponseValue<MItem>>::Value>;
fn transform(self) -> Self::Value {
self.map(|value| value.transform()).collect()
}
fn debug() -> String {
format!("Iter<{}>", T::Item::debug())
}
}