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}