starbase_utils/
json_error.rs1use 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}