use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[serde_with::skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Asset {
pub href: String,
pub title: Option<String>,
pub description: Option<String>,
pub r#type: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub roles: Vec<String>,
#[serde(flatten, default, skip_serializing_if = "Map::is_empty")]
pub additional_properties: Map<String, Value>,
}
impl Asset {
pub fn new(href: impl ToString) -> Self {
Asset {
href: href.to_string(),
title: Default::default(),
description: Default::default(),
r#type: Default::default(),
roles: Default::default(),
additional_properties: Default::default(),
}
}
pub fn title(mut self, title: impl ToString) -> Self {
self.title = Some(title.to_string());
self
}
pub fn description(mut self, description: impl ToString) -> Self {
self.description = Some(description.to_string());
self
}
pub fn media_type(mut self, media_type: impl ToString) -> Self {
self.r#type = Some(media_type.to_string());
self
}
pub fn roles(mut self, roles: &[impl ToString]) -> Self {
self.roles = roles.iter().map(|r| r.to_string()).collect();
self
}
}