1use std::path::PathBuf;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum FlowError {
6 #[error("KDLパースエラー: {0}")]
7 KdlParse(#[from] kdl::KdlError),
8
9 #[error("ファイル読み込みエラー: {0}")]
10 Io(#[from] std::io::Error),
11
12 #[error("IO エラー: {path}\n理由: {message}")]
13 IoError { path: PathBuf, message: String },
14
15 #[error("無効な設定: {0}")]
16 InvalidConfig(String),
17
18 #[error("テンプレートエラー: {file}\n理由: {message}")]
19 TemplateError {
20 file: PathBuf,
21 line: Option<usize>,
22 message: String,
23 },
24
25 #[error("テンプレート展開エラー: {0}")]
26 TemplateRenderError(String),
27
28 #[error("ファイル発見エラー: {path}\n理由: {message}")]
29 DiscoveryError { path: PathBuf, message: String },
30
31 #[error(
32 "プロジェクトルートが見つかりません\n探索開始位置: {0}\nヒント: flow.kdl ファイルを含むディレクトリで実行してください"
33 )]
34 ProjectRootNotFound(PathBuf),
35
36 #[error("サービスが見つかりません: {0}")]
37 ServiceNotFound(String),
38
39 #[error("環境が見つかりません: {0}")]
40 EnvironmentNotFound(String),
41
42 #[error("循環依存が検出されました: {0}")]
43 CircularDependency(String),
44}
45
46pub type Result<T> = std::result::Result<T, FlowError>;