use mime::Mime;
use tinystr::tinystr;
use crate::templating::HumusFormatIdentifier;
pub trait HumusApiFormat: Clone + Send {
fn get_name(&self) -> HumusFormatIdentifier;
fn get_media_type(&self) -> Mime;
fn from_name(name: &HumusFormatIdentifier) -> Option<Self>;
fn get_all() -> Vec<Self>;
}
#[derive(Clone)]
pub struct JsonOnlyApiFormat;
impl HumusApiFormat for JsonOnlyApiFormat {
fn get_name(&self) -> HumusFormatIdentifier {
tinystr!(16, "json")
}
fn get_media_type(&self) -> Mime {
mime::APPLICATION_JSON
}
fn from_name(name: &HumusFormatIdentifier) -> Option<Self> {
match name.as_str() {
"json" => Some(Self),
_ => None,
}
}
fn get_all() -> Vec<Self> {
vec![Self]
}
}