use std::fmt::Debug;
use regex::Regex;
use serde::{Deserialize, Serialize};
use crate::link::Link;
use self::substitution::Substitution;
pub mod docs_rustlang_replacer;
pub mod docsrs_replacer;
pub mod substitution;
pub trait LinkTransformer: Debug + dyn_clone::DynClone {
fn apply(&self, link: &mut Link) -> anyhow::Result<()>;
fn tag(&self) -> String;
fn pattern(&self) -> Regex {
Regex::new(format!("{}(?<i>.+)", self.tag()).as_str()).expect("Invalid regex")
}
fn strip_tag(&self) -> bool {
true
}
}
dyn_clone::clone_trait_object!(LinkTransformer);
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Transformers {
pub regex: Vec<Substitution>,
}
impl Transformers {
#[must_use]
pub fn example() -> Self {
Self {
regex: vec![Substitution::example()],
}
}
}