Skip to main content

cumulus3d_core/
error.rs

1//! 오류 타입.
2
3use std::path::PathBuf;
4
5/// core 전반의 오류.
6#[derive(Debug, thiserror::Error)]
7pub enum Error {
8    #[error("입출력 오류: {0}")]
9    /// 입출력 실패.
10    Io(#[from] std::io::Error),
11    #[error("구문 오류 ({path}:{line}): {msg}")]
12    /// 텍스트 파일 구문 오류(위치 포함).
13    Parse {
14        /// 파일 경로.
15        path: PathBuf,
16        /// 줄 번호(1부터).
17        line: usize,
18        /// 오류 설명.
19        msg: String,
20    },
21    #[error("형식 오류: {0}")]
22    /// 파일 형식 위반.
23    Format(String),
24    #[error("잘못된 인자: {0}")]
25    /// 잘못된 인자.
26    InvalidArgument(String),
27    #[error("찾을 수 없음: {0}")]
28    /// 대상(id·이름)을 찾지 못함.
29    NotFound(String),
30    #[error("이미 존재: {0}")]
31    /// 이미 존재하는 대상을 다시 추가함.
32    AlreadyExists(String),
33    #[error("불변식 위반: {0}")]
34    /// 자료 구조 불변식 위반.
35    Invariant(String),
36    #[error("지원하지 않음: {0}")]
37    /// 지원하지 않는 기능·모델.
38    Unsupported(String),
39}
40
41/// core 전반의 `Result` 별칭.
42pub 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}