use narsese::{conversion::string::impl_lexical::format_instances::FORMAT_ASCII, lexical::Narsese};
use navm::{cmd::Cmd, output::Operation};
use std::{fmt::Display, time::Duration};
use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NALInput {
Put(Cmd),
Sleep(Duration),
Await(OutputExpectation),
ExpectContains(OutputExpectation),
ExpectCycle(usize, usize, Option<Duration>, OutputExpectation),
SaveOutputs(String),
Terminate {
if_not_user: bool,
result: std::result::Result<(), String>,
},
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct OutputExpectation {
pub output_type: Option<String>,
pub narsese: Option<Narsese>,
pub operation: Option<Operation>,
}
impl Display for OutputExpectation {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"OutputExpectation {{ {} {} {} }}",
self.output_type.as_deref().unwrap_or("*"),
match &self.narsese {
Some(narsese) => FORMAT_ASCII.format_narsese(narsese),
None => "*".to_string(),
},
self.operation
.as_ref()
.map(|op| op.to_string())
.unwrap_or("*".to_string()),
)
}
}
#[derive(Error, Debug, Clone, PartialEq, Eq)]
pub enum OutputExpectationError {
#[error("输出内容中不存在符合预期的输出:{0}")]
ExpectedNotExists(OutputExpectation),
}