38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use std::fmt;
|
|
|
|
use thiserror::Error;
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum Error {
|
|
#[error("'{}' is not a valid project name: {}", name, reason.to_string())]
|
|
InvalidProjectName {
|
|
name: String,
|
|
reason: InvalidProjectNameReason,
|
|
},
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum InvalidProjectNameReason {
|
|
AikenPrefix,
|
|
AikenReservedModule,
|
|
Format,
|
|
}
|
|
|
|
impl fmt::Display for InvalidProjectNameReason {
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
match self {
|
|
InvalidProjectNameReason::AikenPrefix => write!(f, "it's a reserved word in Aiken."),
|
|
InvalidProjectNameReason::AikenReservedModule => {
|
|
write!(f, "it's a reserved module name in Aiken.")
|
|
}
|
|
InvalidProjectNameReason::Format => write!(
|
|
f,
|
|
"it is malformed.\n\nProjects must be named as:\n\n\t\
|
|
{{repository}}/{{project}}\n\nEach part must start with a lowercase letter \
|
|
and may only contain lowercase letters, numbers, hyphens or underscores.\
|
|
\nFor example,\n\n\taiken-lang/stdlib"
|
|
),
|
|
}
|
|
}
|
|
}
|