1use std::path::PathBuf;
4
5#[derive(Debug, thiserror::Error)]
7pub enum Error {
8 #[error("I/O error reading '{path}': {source}")]
10 Io {
11 path: PathBuf,
12 #[source]
13 source: std::io::Error,
14 },
15
16 #[error("YAML parse error: {0}")]
18 Yaml(#[from] serde_yaml::Error),
19
20 #[error("Policy validation failed:\n{0}")]
22 Schema(String),
23
24 #[error("Invalid glob pattern '{pattern}': {source}")]
26 Glob {
27 pattern: String,
28 #[source]
29 source: globset::Error,
30 },
31
32 #[error("Invalid role name '{name}': use only lowercase letters, digits, and underscores")]
34 InvalidRoleName { name: String },
35
36 #[error("Render error for target '{target}': {source}")]
38 Render {
39 target: String,
40 #[source]
41 source: minijinja::Error,
42 },
43
44 #[error("Stale generated file: {}", path.display())]
46 CheckFailed { path: PathBuf },
47
48 #[error(
50 "No outputs are enabled. Add at least one target ID to `outputs` (e.g. `outputs: [agents-md]`)."
51 )]
52 NoOutputs,
53
54 #[error(
56 "Unknown output target '{id}'. Run `agent-policy list-targets` to see all supported targets."
57 )]
58 UnknownTarget { id: String },
59}
60
61pub type Result<T> = std::result::Result<T, Error>;