use crate::error::Result;
use crate::link_context::LinkContext;
use crate::traits::contract::Entity;
use crate::traits::contract_family::ContractFamily;
use crate::traits::entity_category::EntityCategory;
use crate::{IntraLink, LinkTarget, ResolvedManual};
pub trait LinkExtractor: Send + Sync {
type Family: ContractFamily;
fn name(&self) -> &'static str;
fn extract<C: EntityCategory>(
&self,
entity: &Entity<C>,
manual: &ResolvedManual,
) -> Vec<IntraLink>;
}
pub trait AsyncLinkExtractor: Send + Sync {
type Family: ContractFamily;
async fn extract<C: EntityCategory>(
&self,
entity: &Entity<C>,
manual: &ResolvedManual,
) -> Result<Vec<IntraLink>>;
}
pub trait LinkFormatter: Send + Sync {
fn name(&self) -> &'static str;
fn format(&self, target: &LinkTarget, ctx: &LinkContext) -> String;
}