starbase_utils/
json_error.rs

1use crate::fs::FsError;
2use starbase_styles::{Style, Stylize};
3use std::path::PathBuf;
4use thiserror::Error;
5
6#[cfg(not(feature = "miette"))]
7#[derive(Error, Debug)]
8pub enum JsonError {
9    #[error(transparent)]
10    Fs(#[from] Box<FsError>),
11
12    #[error("Failed to clean comments and trailing commas from JSON.\n{error}")]
13    Clean {
14        #[source]
15        error: Box<std::io::Error>,
16    },
17
18    #[error("Failed to clean comments and trailing commas in JSON file {}.\n{error}", .path.style(Style::Path))]
19    CleanFile {
20        path: PathBuf,
21        #[source]
22        error: Box<std::io::Error>,
23    },
24
25    #[error("Failed to format JSON.\n{error}")]
26    Format {
27        #[source]
28        error: Box<serde_json::Error>,
29    },
30
31    #[error("Failed to parse JSON.\n{error}")]
32    Parse {
33        #[source]
34        error: Box<serde_json::Error>,
35    },
36
37    #[error("Failed to parse JSON file {}.\n{error}", .path.style(Style::Path))]
38    ReadFile {
39        path: PathBuf,
40        #[source]
41        error: Box<serde_json::Error>,
42    },
43
44    #[error("Failed to format JSON for file {}.\n{error}", .path.style(Style::Path))]
45    WriteFile {
46        path: PathBuf,
47        #[source]
48        error: Box<serde_json::Error>,
49    },
50}
51
52#[cfg(feature = "miette")]
53#[derive(Error, Debug, miette::Diagnostic)]
54pub enum JsonError {
55    #[diagnostic(transparent)]
56    #[error(transparent)]
57    Fs(#[from] Box<FsError>),
58
59    #[diagnostic(code(json::clean))]
60    #[error("Failed to clean comments and trailing commas from JSON.")]
61    Clean {
62        #[source]
63        error: Box<std::io::Error>,
64    },
65
66    #[diagnostic(code(json::clean_file))]
67    #[error("Failed to clean comments and trailing commas in JSON file {}.", .path.style(Style::Path))]
68    CleanFile {
69        path: PathBuf,
70        #[source]
71        error: Box<std::io::Error>,
72    },
73
74    #[diagnostic(code(json::format))]
75    #[error("Failed to format JSON.")]
76    Format {
77        #[source]
78        error: Box<serde_json::Error>,
79    },
80
81    #[diagnostic(code(json::parse))]
82    #[error("Failed to parse JSON.")]
83    Parse {
84        #[source]
85        error: Box<serde_json::Error>,
86    },
87
88    #[diagnostic(code(json::parse_file))]
89    #[error("Failed to parse JSON file {}.", .path.style(Style::Path))]
90    ReadFile {
91        path: PathBuf,
92        #[source]
93        error: Box<serde_json::Error>,
94    },
95
96    #[diagnostic(code(json::format_file))]
97    #[error("Failed to format JSON for file {}.", .path.style(Style::Path))]
98    WriteFile {
99        path: PathBuf,
100        #[source]
101        error: Box<serde_json::Error>,
102    },
103}
104
105impl From<FsError> for JsonError {
106    fn from(e: FsError) -> JsonError {
107        JsonError::Fs(Box::new(e))
108    }
109}