use crate::api_objects::ApiObject;
use crate::ServerInfo;
use df_st_core::SchemaExample;
#[allow(unused_imports)]
use log::{debug, error, info, trace, warn};
use rocket::State;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
#[schemars(example = "Self::example")]
pub struct ApiMinimalItem<D>
where
D: ApiObject + Serialize + SchemaExample,
{
#[serde(rename = "_type")]
pub type_: String,
#[serde(flatten)]
pub data: D,
#[serde(skip)]
pub base_url: String,
}
impl<D> SchemaExample for ApiMinimalItem<D>
where
D: SchemaExample + Serialize + ApiObject,
{
fn example() -> Self {
Self {
type_: D::get_type(),
data: D::example(),
base_url: "".to_owned(),
}
}
}
impl<D> ApiMinimalItem<D>
where
D: ApiObject + Default + Serialize + SchemaExample,
{
pub fn new(server_info: &State<ServerInfo>) -> Self {
let server_info = server_info.inner().clone();
Self {
base_url: server_info.base_url,
..Default::default()
}
}
pub fn wrap(&mut self, item: D) {
self.data = item;
self.type_ = D::get_type();
}
pub fn wrap_new(item: D, base_url: &str) -> ApiMinimalItem<D> {
let mut return_object = ApiMinimalItem {
base_url: base_url.to_string(),
..Default::default()
};
return_object.wrap(item);
return_object
}
}