use crate::mcp::ProgressToken;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GenericMeta {
#[serde(flatten)]
pub inner: Option<Map<String, Value>>,
}
impl GenericMeta {
pub fn append(mut self, name: impl Into<String>, value: impl Into<Value>) -> Self {
self.inner.get_or_insert_with(Map::new).insert(name.into(), value.into());
self
}
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestMeta {
pub progress_token: Option<ProgressToken>,
#[serde(flatten)]
pub extra: Option<Map<String, Value>>,
}
impl RequestMeta {
pub fn with_progress_token(mut self, token: impl Into<ProgressToken>) -> Self {
self.progress_token = Some(token.into());
self
}
pub fn with_extra(mut self, extra: Map<String, Value>) -> Self {
self.extra = Some(extra);
self
}
pub fn append(mut self, name: impl Into<String>, value: impl Into<Value>) -> Self {
self.extra.get_or_insert_with(Map::new).insert(name.into(), value.into());
self
}
}