use crate::newtypes::libcnb_newtype;
libcnb_newtype!(
buildpack,
buildpack_id,
BuildpackId,
BuildpackIdError,
r"^(?!(app|config|sbom)$)[[:alnum:]./-]+$"
);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn buildpack_id_validation_valid() {
assert!("heroku/jvm".parse::<BuildpackId>().is_ok());
assert!("Abc123./-".parse::<BuildpackId>().is_ok());
assert!("app-foo".parse::<BuildpackId>().is_ok());
assert!("foo-app".parse::<BuildpackId>().is_ok());
}
#[test]
fn buildpack_id_validation_invalid() {
assert_eq!(
"heroku_jvm".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("heroku_jvm")))
);
assert_eq!(
"heroku:jvm".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("heroku:jvm")))
);
assert_eq!(
"heroku jvm".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("heroku jvm")))
);
assert_eq!(
"app".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("app")))
);
assert_eq!(
"config".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("config")))
);
assert_eq!(
"sbom".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::from("sbom")))
);
assert_eq!(
"".parse::<BuildpackId>(),
Err(BuildpackIdError::InvalidValue(String::new()))
);
}
}