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