use alloc::string::{String, ToString};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ResourceDefinition {
#[serde(rename = "uriTemplate")]
pub uri_template: String,
pub name: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mime_type: Option<String>,
}
pub type ResourceTemplateDefinition = ResourceDefinition;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ResourceOutputContent {
#[serde(rename_all = "camelCase")]
Text {
uri: String,
#[serde(skip_serializing_if = "Option::is_none")]
mime_type: Option<String>,
text: String,
},
#[serde(rename_all = "camelCase")]
Blob {
uri: String,
#[serde(skip_serializing_if = "Option::is_none")]
mime_type: Option<String>,
blob: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResourceOutput {
pub contents: alloc::vec::Vec<ResourceOutputContent>,
}
impl ResourceOutput {
pub fn text(uri: impl Into<String>, mime_type: Option<&str>, text: impl Into<String>) -> Self {
Self {
contents: alloc::vec![ResourceOutputContent::Text {
uri: uri.into(),
mime_type: mime_type.map(ToString::to_string),
text: text.into(),
}],
}
}
pub fn blob(uri: impl Into<String>, mime_type: Option<&str>, blob: impl Into<String>) -> Self {
Self {
contents: alloc::vec![ResourceOutputContent::Blob {
uri: uri.into(),
mime_type: mime_type.map(ToString::to_string),
blob: blob.into(),
}],
}
}
}