use super::Request;
use crate::error::FrameworkError;
use async_trait::async_trait;
#[async_trait]
pub trait FromRequest: Sized + Send {
async fn from_request(req: Request) -> Result<Self, FrameworkError>;
}
#[async_trait]
impl FromRequest for Request {
async fn from_request(req: Request) -> Result<Self, FrameworkError> {
Ok(req)
}
}
pub trait FromParam: Sized {
fn from_param(value: &str) -> Result<Self, FrameworkError>;
}
impl FromParam for String {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
Ok(value.to_string())
}
}
impl FromParam for i32 {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
value
.parse()
.map_err(|_| FrameworkError::param_parse(value, "i32"))
}
}
impl FromParam for i64 {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
value
.parse()
.map_err(|_| FrameworkError::param_parse(value, "i64"))
}
}
impl FromParam for u32 {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
value
.parse()
.map_err(|_| FrameworkError::param_parse(value, "u32"))
}
}
impl FromParam for u64 {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
value
.parse()
.map_err(|_| FrameworkError::param_parse(value, "u64"))
}
}
impl FromParam for usize {
fn from_param(value: &str) -> Result<Self, FrameworkError> {
value
.parse()
.map_err(|_| FrameworkError::param_parse(value, "usize"))
}
}