mod capture;
mod context;
mod op;
mod program;
mod runtime;
pub use capture::*;
pub use context::*;
pub use op::*;
pub use program::*;
pub use runtime::*;
use crate::error::Error;
use crate::value::{RefValue, Value};
#[derive(Debug, Clone)]
pub enum Accept {
Next, Hold, Push(Capture), Repeat(Option<RefValue>), Return(Option<RefValue>), }
impl From<RefValue> for Result<Accept, Reject> {
fn from(value: RefValue) -> Self {
Ok(Accept::Push(value.into()))
}
}
impl From<Value> for Result<Accept, Reject> {
fn from(value: Value) -> Self {
Ok(Accept::Push(RefValue::from(value).into()))
}
}
#[derive(Debug, Clone)]
pub enum Reject {
Next, Skip, Return, Main, Error(Box<Error>), }
impl From<Error> for Reject {
fn from(error: Error) -> Self {
Reject::Error(Box::new(error))
}
}
impl From<String> for Reject {
fn from(error: String) -> Self {
Error::new(None, error).into()
}
}
impl From<Error> for Result<Accept, Reject> {
fn from(error: Error) -> Self {
Err(error.into())
}
}