pub trait PluginConfig {
fn validate(&self) -> Result<(), String> {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
struct Cfg {
token: String,
}
impl PluginConfig for Cfg {
fn validate(&self) -> Result<(), String> {
if self.token.trim().is_empty() {
return Err("token is required.".to_string());
}
Ok(())
}
}
#[test]
fn blank_value_returns_verbatim_message() {
let msg = (Cfg { token: " ".into() })
.validate()
.expect_err("blank token must fail validation");
assert_eq!(msg, "token is required.");
}
#[test]
fn present_value_passes() {
assert!((Cfg { token: "abc".into() }).validate().is_ok());
}
#[test]
fn default_impl_accepts() {
struct Bare;
impl PluginConfig for Bare {}
assert!(Bare.validate().is_ok());
}
}