(
&self,
msg: &mut SessionMessage,
raw_url: &str,
filename: Option<&str>,
mime: Option<&str>,
project_root: &str,
)
| 261 | } |
| 262 | |
| 263 | async fn add_file_part( |
| 264 | &self, |
| 265 | msg: &mut SessionMessage, |
| 266 | raw_url: &str, |
| 267 | filename: Option<&str>, |
| 268 | mime: Option<&str>, |
| 269 | project_root: &str, |
| 270 | ) { |
| 271 | let filename = filename |
| 272 | .filter(|name| !name.is_empty()) |
| 273 | .map(ToString::to_string) |
| 274 | .unwrap_or_else(|| Self::filename_from_url(raw_url)); |
| 275 | let mime = mime |
| 276 | .filter(|m| !m.is_empty()) |
| 277 | .unwrap_or("application/octet-stream") |
| 278 | .to_string(); |
| 279 | |
| 280 | if raw_url.starts_with("mcp://") { |
| 281 | self.add_mcp_resource_part(msg, raw_url, &filename, &mime) |
| 282 | .await; |
| 283 | return; |
| 284 | } |
| 285 | |
| 286 | if raw_url.starts_with("data:") { |
| 287 | self.add_data_url_part(msg, raw_url, &filename, &mime).await; |
| 288 | return; |
| 289 | } |
| 290 | |
| 291 | if raw_url.starts_with("file://") { |
| 292 | self.add_file_url_part(msg, raw_url, &filename, &mime, project_root) |
| 293 | .await; |
| 294 | return; |
| 295 | } |
| 296 | |
| 297 | msg.add_file(raw_url.to_string(), filename, mime); |
| 298 | } |
| 299 | |
| 300 | async fn add_mcp_resource_part( |
| 301 | &self, |
no test coverage detected