use crate::AppError;
use serde::de::DeserializeOwned;
use std::marker::PhantomData;
pub trait ResponseParser<T> {
fn parse(body: &str) -> Result<T, AppError>;
}
pub struct StringParser;
impl<T: From<String>> ResponseParser<T> for StringParser {
fn parse(body: &str) -> Result<T, AppError> {
Ok(body.to_string().into())
}
}
pub struct JsonParser<T>(pub PhantomData<T>);
impl<T: DeserializeOwned> ResponseParser<T> for JsonParser<T> {
fn parse(body: &str) -> Result<T, AppError> {
serde_json::from_str(body).map_err(|e| e.into())
}
}