Skip to main content

dioxus_docs_kit/
error.rs

1//! Error types for registry construction.
2
3use dioxus_mdx::OpenApiError;
4
5/// Errors produced when building a [`DocsRegistry`](crate::DocsRegistry) or
6/// [`BlogRegistry`](crate::blog::BlogRegistry) from configuration.
7#[derive(Debug)]
8pub enum DocsKitError {
9    /// `_nav.json` failed to parse.
10    NavParse(serde_json::Error),
11    /// `_blog.json` failed to parse.
12    BlogManifestParse(serde_json::Error),
13    /// An OpenAPI spec failed to parse.
14    OpenApi {
15        /// URL prefix the spec was registered under.
16        prefix: String,
17        /// The underlying parse error.
18        error: OpenApiError,
19    },
20}
21
22impl std::fmt::Display for DocsKitError {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        match self {
25            Self::NavParse(e) => write!(f, "failed to parse _nav.json: {e}"),
26            Self::BlogManifestParse(e) => write!(f, "failed to parse _blog.json: {e}"),
27            Self::OpenApi { prefix, error } => write!(
28                f,
29                "failed to parse OpenAPI spec for prefix \"{prefix}\": {error}"
30            ),
31        }
32    }
33}
34
35impl std::error::Error for DocsKitError {
36    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
37        match self {
38            Self::NavParse(e) | Self::BlogManifestParse(e) => Some(e),
39            Self::OpenApi { error, .. } => Some(error),
40        }
41    }
42}