Skip to main content

docs_mcp/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum DocsError {
5    #[error("HTTP error: {0}")]
6    Http(#[from] reqwest::Error),
7
8    #[error("HTTP middleware error: {0}")]
9    Middleware(#[from] reqwest_middleware::Error),
10
11    #[error("JSON error: {0}")]
12    Json(#[from] serde_json::Error),
13
14    #[error("IO error: {0}")]
15    Io(#[from] std::io::Error),
16
17    #[error("Crate not found: {0}")]
18    CrateNotFound(String),
19
20    #[error("Docs.rs build not found for {name} {version}")]
21    DocsNotFound { name: String, version: String },
22
23    #[error("No stable version found for {0}")]
24    NoStableVersion(String),
25
26    #[error("Semver error: {0}")]
27    Semver(#[from] semver::Error),
28
29    #[error("{0}")]
30    Other(String),
31}
32
33impl From<DocsError> for rmcp::ErrorData {
34    fn from(e: DocsError) -> Self {
35        rmcp::ErrorData::internal_error(e.to_string(), None)
36    }
37}
38
39pub type Result<T> = std::result::Result<T, DocsError>;