pub enum ConfigError {
FileNotFound {
path: PathBuf,
suggestion: Option<String>,
},
UnsupportedFormat {
extension: String,
suggestion: Option<String>,
},
YamlParse {
source: Error,
line: Option<usize>,
column: Option<usize>,
},
JsonParse {
source: Error,
line: usize,
column: usize,
},
InvalidSchema {
reason: String,
path: Option<String>,
suggestion: Option<String>,
},
DuplicateCommand {
name: String,
suggestion: Option<String>,
},
UnknownType {
type_name: String,
context: String,
suggestion: Option<String>,
},
Inconsistency {
details: String,
suggestion: Option<String>,
},
}Expand description
Errors related to loading and parsing the configuration file
These errors occur when loading the commands.yaml or commands.json
file and its structural validation.
Variants§
FileNotFound
Configuration file not found
§Example
use dynamic_cli::error::ConfigError;
use std::path::PathBuf;
let error = ConfigError::FileNotFound {
path: PathBuf::from("missing.yaml"),
suggestion: Some("Verify the path and file permissions.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains("missing.yaml"));Fields
UnsupportedFormat
Unsupported file extension
Only .yaml, .yml and .json are supported.
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::UnsupportedFormat {
extension: ".toml".to_string(),
suggestion: Some("Rename the file with a .yaml, .yml or .json extension.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains(".toml"));Fields
YamlParse
YAML parsing error
JsonParse
JSON parsing error
InvalidSchema
Invalid configuration schema
The file structure doesn’t match the expected format.
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::InvalidSchema {
reason: "Missing required field 'name'".to_string(),
path: Some("commands[0]".to_string()),
suggestion: Some("Add a 'name' field to each command entry.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains("Missing required field"));Fields
DuplicateCommand
Duplicate command (same name or alias)
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::DuplicateCommand {
name: "run".to_string(),
suggestion: Some("Rename one of the conflicting commands or aliases.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains("run"));Fields
UnknownType
Unknown argument type
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::UnknownType {
type_name: "datetime".to_string(),
context: "commands[1].options[0]".to_string(),
suggestion: Some(
"Supported types: string, integer, float, boolean, file.".to_string()
),
};
let msg = format!("{}", error);
assert!(msg.contains("datetime"));Fields
Inconsistency
Inconsistent configuration
For example, a default value that’s not in the allowed choices.
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::Inconsistency {
details: "Default value 'fast' is not in choices: slow, medium".to_string(),
suggestion: Some("Ensure the default value matches one of the allowed choices.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains("Default value"));Implementations§
Source§impl ConfigError
impl ConfigError
Sourcepub fn file_not_found(path: PathBuf) -> Self
pub fn file_not_found(path: PathBuf) -> Self
Create a file-not-found error with a standard suggestion
§Example
use dynamic_cli::error::ConfigError;
use std::path::PathBuf;
let error = ConfigError::file_not_found(PathBuf::from("commands.yaml"));
match error {
ConfigError::FileNotFound { suggestion, .. } => {
assert!(suggestion.is_some());
}
_ => panic!("wrong variant"),
}Sourcepub fn unsupported_format(extension: &str) -> Self
pub fn unsupported_format(extension: &str) -> Self
Create an unsupported-format error with a standard suggestion
§Example
use dynamic_cli::error::ConfigError;
let error = ConfigError::unsupported_format(".toml");
match error {
ConfigError::UnsupportedFormat { suggestion, .. } => {
assert!(suggestion.is_some());
}
_ => panic!("wrong variant"),
}Sourcepub fn yaml_parse_with_location(source: Error) -> Self
pub fn yaml_parse_with_location(source: Error) -> Self
Create a YAML parse error with position extracted from the serde error
Sourcepub fn json_parse_with_location(source: Error) -> Self
pub fn json_parse_with_location(source: Error) -> Self
Create a JSON parse error with position extracted from the serde error
Trait Implementations§
Source§impl Debug for ConfigError
impl Debug for ConfigError
Source§impl Display for ConfigError
impl Display for ConfigError
Source§impl Error for ConfigError
impl Error for ConfigError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()