pub mod filter;
pub mod transform;
pub mod regex;
use self::transform::Transform;
use crate::{entry::Entry, error::transform::Error as TransformError};
#[derive(Debug)]
#[allow(clippy::large_enum_variant)]
pub enum Action {
Filter(filter::Kind),
Transform(Transform),
}
impl Action {
pub async fn process(&self, mut entries: Vec<Entry>) -> Result<Vec<Entry>, TransformError> {
match self {
Action::Filter(f) => {
f.filter(&mut entries).await;
Ok(entries)
}
Action::Transform(tr) => {
let mut fully_transformed = Vec::new();
for entry in entries {
tr.transform(entry, &mut fully_transformed).await?;
}
Ok(fully_transformed)
}
}
}
}
impl From<filter::Kind> for Action {
fn from(filter: filter::Kind) -> Self {
Action::Filter(filter)
}
}
impl<T: Into<Transform>> From<T> for Action {
fn from(transform: T) -> Self {
Action::Transform(transform.into())
}
}