1use std::path::PathBuf;
4
5#[derive(Debug, thiserror::Error)]
7pub enum Error {
8 #[error("입출력 오류: {0}")]
9 Io(#[from] std::io::Error),
11 #[error("구문 오류 ({path}:{line}): {msg}")]
12 Parse {
14 path: PathBuf,
16 line: usize,
18 msg: String,
20 },
21 #[error("형식 오류: {0}")]
22 Format(String),
24 #[error("잘못된 인자: {0}")]
25 InvalidArgument(String),
27 #[error("찾을 수 없음: {0}")]
28 NotFound(String),
30 #[error("이미 존재: {0}")]
31 AlreadyExists(String),
33 #[error("불변식 위반: {0}")]
34 Invariant(String),
36 #[error("지원하지 않음: {0}")]
37 Unsupported(String),
39}
40
41pub type Result<T> = std::result::Result<T, Error>;
43
44impl Error {
45 pub(crate) fn parse(path: impl Into<PathBuf>, line: usize, msg: impl Into<String>) -> Self {
46 Error::Parse { path: path.into(), line, msg: msg.into() }
47 }
48}