use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::Metadata;
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct RunAttachments {
#[serde(default, flatten)]
pub values: Metadata,
}
impl RunAttachments {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub const fn from_metadata(values: Metadata) -> Self {
Self { values }
}
#[must_use]
pub fn into_metadata(self) -> Metadata {
self.values
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.values.is_empty()
}
#[must_use]
pub fn len(&self) -> usize {
self.values.len()
}
#[must_use]
pub fn get(&self, key: &str) -> Option<&Value> {
self.values.get(key)
}
pub fn insert(&mut self, key: impl Into<String>, value: Value) -> Option<Value> {
self.values.insert(key.into(), value)
}
pub fn merge(&mut self, other: impl Into<Metadata>) {
self.values.extend(other.into());
}
}
impl From<Metadata> for RunAttachments {
fn from(values: Metadata) -> Self {
Self::from_metadata(values)
}
}
impl From<RunAttachments> for Metadata {
fn from(attachments: RunAttachments) -> Self {
attachments.into_metadata()
}
}
impl AsRef<Metadata> for RunAttachments {
fn as_ref(&self) -> &Metadata {
&self.values
}
}
impl AsMut<Metadata> for RunAttachments {
fn as_mut(&mut self) -> &mut Metadata {
&mut self.values
}
}