caretta-sync/core/src/utils/async_convert.rs
2025-08-05 08:17:35 +09:00

29 lines
No EOL
733 B
Rust

pub trait AsyncFrom<T> {
async fn async_from(source: T) -> Self;
}
pub trait AsyncInto<T> {
async fn async_into(self) -> T;
}
impl<T, U> AsyncInto<T> for U
where T: AsyncFrom<U> {
async fn async_into(self) -> T {
T::async_from(self).await
}
}
pub trait AsyncTryFrom<T>: Sized {
type Error: Sized;
async fn async_try_from(source: T) -> Result<Self, Self::Error>;
}
pub trait AsyncTryInto<T>: Sized{
type Error: Sized;
async fn async_try_into(self) -> Result<T, Self::Error>;
}
impl<T, U> AsyncTryInto<T> for U
where T: AsyncTryFrom<U> {
type Error = <T as AsyncTryFrom<U>>::Error;
async fn async_try_into(self) -> Result<T, Self::Error> {
T::async_try_from(self).await
}
}