polykit_core/
error.rs

1//! Error types and result aliases.
2
3use std::path::PathBuf;
4
5use thiserror::Error;
6
7#[derive(Error, Debug)]
8pub enum Error {
9    #[error("IO error")]
10    Io(#[from] std::io::Error),
11
12    #[error("TOML parse error in {context}")]
13    Toml {
14        #[source]
15        error: toml::de::Error,
16        context: String,
17    },
18
19    #[error("TOML serialize error")]
20    TomlSerialize(#[from] toml::ser::Error),
21
22    #[error("Package not found: {name}")]
23    PackageNotFound { name: String, available: String },
24
25    #[error("Invalid package name: {0}")]
26    InvalidPackageName(String),
27
28    #[error("Invalid language: {lang}. Supported languages: js, ts, python, go, rust")]
29    InvalidLanguage { lang: String },
30
31    #[error("Circular dependency detected: {0}. Use 'polykit graph' to visualize dependencies.")]
32    CircularDependency(String),
33
34    #[error("Config file not found. Expected 'polykit.toml' in package directory.")]
35    ConfigNotFound(PathBuf),
36
37    #[error("Adapter error for {package}: {message}")]
38    Adapter { package: String, message: String },
39
40    #[error("Graph error: {0}")]
41    Graph(String),
42
43    #[error("Task execution failed for {package}::{task}")]
44    TaskExecution {
45        package: String,
46        task: String,
47        message: String,
48    },
49
50    #[error("Release error: {0}")]
51    Release(String),
52
53    #[error("Mutex lock error")]
54    MutexLock(String),
55}
56
57impl From<toml::de::Error> for Error {
58    fn from(error: toml::de::Error) -> Self {
59        Error::Toml {
60            error,
61            context: "polykit.toml".to_string(),
62        }
63    }
64}
65
66pub type Result<T> = std::result::Result<T, Error>;