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>;