use anyhow::Result;
use regex::Regex;
use crate::{
models::action::{ActionMode, ActionModel, ExpectMode},
validate::ValidateTrait,
};
impl ValidateTrait for ActionModel {
fn validate(&self) -> Result<()> {
if self.action.is_empty() || self.action.chars().all(|c| c.is_whitespace()) {
anyhow::bail!("Action '{}' has empty command/prompt.", self.tag);
}
if self.r#type == ActionMode::Llm && self.expect == ExpectMode::Void {
anyhow::bail!(
"LLM action '{}' cannot have expect: void. Specify what to expect.",
self.tag
);
}
if let Some(pattern) = &self.check {
regex::Regex::new(pattern).map_err(|e| {
anyhow::anyhow!("Action '{}' has invalid check regex: {}", self.tag, e)
})?;
}
if let Some(pattern) = &self.check {
Regex::new(pattern).map_err(|e| {
anyhow::anyhow!("Action '{}' has invalid check regex: {}", self.tag, e)
})?;
}
Ok(())
}
}