1use std::path::PathBuf;
4use thiserror::Error;
5
6pub type Result<T> = std::result::Result<T, Error>;
8
9#[derive(Error, Debug)]
11pub enum Error {
12 #[error("Git error: {0}")]
14 Git(#[from] GitError),
15
16 #[error("Helix DB error: {0}")]
18 Helix(#[from] HelixError),
19
20 #[error("Configuration error: {0}")]
22 Config(#[from] ConfigError),
23
24 #[error("JSON error: {0}")]
26 Json(#[from] serde_json::Error),
27}
28
29#[derive(Error, Debug)]
31pub enum GitError {
32 #[error("Failed to discover git repository at {path}: {message}")]
34 RepositoryNotFound { path: PathBuf, message: String },
35
36 #[error("Failed to read references: {0}")]
38 ReferencesError(String),
39
40 #[error("Failed to read commit {commit_id}: {message}")]
42 CommitReadError { commit_id: String, message: String },
43
44 #[error("Failed to read tree: {0}")]
46 TreeReadError(String),
47
48 #[error("Failed to read blob {blob_id}: {message}")]
50 BlobReadError { blob_id: String, message: String },
51
52 #[error("Git operation failed: {0}")]
54 OperationFailed(String),
55}
56
57#[derive(Error, Debug)]
59pub enum HelixError {
60 #[error("Failed to connect to Helix DB at {endpoint}: {message}")]
62 ConnectionFailed { endpoint: String, message: String },
63
64 #[error("Failed to create {node_type} node: {message}")]
66 NodeCreationFailed { node_type: String, message: String },
67
68 #[error("Failed to create edge from {from_id} to {to_id}: {message}")]
70 EdgeCreationFailed {
71 from_id: String,
72 to_id: String,
73 message: String,
74 },
75
76 #[error("Query failed: {0}")]
78 QueryFailed(String),
79
80 #[error("Helix DB integration not yet implemented: {0}")]
82 NotImplemented(String),
83}
84
85#[derive(Error, Debug)]
87pub enum ConfigError {
88 #[error("Missing required configuration: {0}")]
90 MissingField(String),
91
92 #[error("Invalid configuration value for {field}: {message}")]
94 InvalidValue { field: String, message: String },
95
96 #[error("Invalid endpoint URL: {0}")]
98 InvalidEndpoint(String),
99}