1use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9use super::{
10    content::ResourceContent,
11    core::{Annotations, Cursor, MimeType, Uri},
12};
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct Resource {
17    pub name: String,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
22    pub title: Option<String>,
23
24    pub uri: Uri,
26
27    #[serde(skip_serializing_if = "Option::is_none")]
30    pub description: Option<String>,
31
32    #[serde(rename = "mimeType", skip_serializing_if = "Option::is_none")]
34    pub mime_type: Option<MimeType>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
38    pub annotations: Option<Annotations>,
39
40    #[serde(skip_serializing_if = "Option::is_none")]
43    pub size: Option<u64>,
44
45    #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
47    pub meta: Option<HashMap<String, serde_json::Value>>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct ResourceContents {
53    pub uri: Uri,
55    #[serde(rename = "mimeType", skip_serializing_if = "Option::is_none")]
57    pub mime_type: Option<MimeType>,
58    #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
60    pub meta: Option<HashMap<String, serde_json::Value>>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct ResourceTemplate {
66    pub name: String,
68
69    #[serde(skip_serializing_if = "Option::is_none")]
71    pub title: Option<String>,
72
73    #[serde(rename = "uriTemplate")]
75    pub uri_template: String,
76
77    #[serde(skip_serializing_if = "Option::is_none")]
79    pub description: Option<String>,
80
81    #[serde(rename = "mimeType", skip_serializing_if = "Option::is_none")]
83    pub mime_type: Option<MimeType>,
84
85    #[serde(skip_serializing_if = "Option::is_none")]
87    pub annotations: Option<Annotations>,
88
89    #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
91    pub meta: Option<HashMap<String, serde_json::Value>>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct ListResourcesRequest {
97    #[serde(skip_serializing_if = "Option::is_none")]
99    pub cursor: Option<Cursor>,
100    #[serde(skip_serializing_if = "Option::is_none")]
102    pub _meta: Option<serde_json::Value>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct ListResourcesResult {
108    pub resources: Vec<Resource>,
110    #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
112    pub next_cursor: Option<Cursor>,
113    #[serde(skip_serializing_if = "Option::is_none")]
115    pub _meta: Option<serde_json::Value>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct ListResourceTemplatesRequest {
121    #[serde(skip_serializing_if = "Option::is_none")]
123    pub cursor: Option<Cursor>,
124    #[serde(skip_serializing_if = "Option::is_none")]
126    pub _meta: Option<serde_json::Value>,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct ListResourceTemplatesResult {
132    #[serde(rename = "resourceTemplates")]
134    pub resource_templates: Vec<ResourceTemplate>,
135    #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
137    pub next_cursor: Option<Cursor>,
138    #[serde(skip_serializing_if = "Option::is_none")]
140    pub _meta: Option<serde_json::Value>,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct ReadResourceRequest {
146    pub uri: Uri,
148    #[serde(skip_serializing_if = "Option::is_none")]
150    pub _meta: Option<serde_json::Value>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct ReadResourceResult {
156    pub contents: Vec<ResourceContent>,
158    #[serde(skip_serializing_if = "Option::is_none")]
160    pub _meta: Option<serde_json::Value>,
161}
162
163#[derive(Debug, Clone, Serialize, Deserialize)]
165pub struct SubscribeRequest {
166    pub uri: Uri,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172pub struct UnsubscribeRequest {
173    pub uri: Uri,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
179pub struct ResourceUpdatedNotification {
180    pub uri: Uri,
182}