mod capture;
mod context;
mod op;
mod program;
mod runtime;
use crate::error::Error;
use crate::value::{RefValue, Value};
pub use capture::*;
pub use context::*;
pub(crate) use op::*;
pub use program::*;
pub use runtime::*;
extern crate self as tokay;
#[derive(Debug, Clone)]
pub enum Accept {
Next, Hold, Push(Capture), Repeat(Option<RefValue>), Return(Option<RefValue>), }
impl Accept {
pub fn into_refvalue(self) -> RefValue {
match self {
Self::Push(capture) => capture.get_value(),
Self::Repeat(Some(value)) | Self::Return(Some(value)) => value,
_ => tokay::value!(void),
}
}
}
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())
}
}