use std::collections::{HashMap, HashSet};
use serde::{Deserialize, Serialize};
use crate::{
error::{ApiErrorItem, ApiErrors},
ty::{ApiModel, ApiTy},
};
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ApiResponse {
pub header: Vec<ApiTy>,
pub content_type: Option<String>,
pub body: Option<ApiTy>,
pub error: HashSet<ApiErrorItem>,
}
pub trait ApiResultExtractor {
fn api_response(models: &mut HashMap<String, Option<ApiModel>>) -> ApiResponse;
}
impl<T: ApiResultExtractor, E: ApiErrors> ApiResultExtractor for Result<T, E> {
fn api_response(models: &mut HashMap<String, Option<ApiModel>>) -> ApiResponse {
let mut response = T::api_response(models);
response.error.extend(E::api_errors());
response
}
}
impl ApiResultExtractor for () {
fn api_response(_models: &mut HashMap<String, Option<ApiModel>>) -> ApiResponse {
ApiResponse::default()
}
}