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;
fn api_error() -> Vec<ApiErrorItem>;
}
impl<T: ApiResultExtractor, E: ApiErrors> ApiResultExtractor for Result<T, E> {
fn api_response(models: &mut HashMap<String, Option<ApiModel>>) -> ApiResponse {
T::api_response(models)
}
fn api_error() -> Vec<ApiErrorItem> {
E::api_errors()
}
}