use ::http::Uri;
use futures::future::BoxFuture;
use crate::Result;
pub trait Document: Send + Sync {
fn links<'a>(&'a self, selector: Option<&'a str>) -> BoxFuture<'a, Result<DocumentLinks>>;
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Visibility {
Visible,
Hidden,
#[default]
Unknown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum LinkKind {
Anchor,
Area,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DocumentLink {
pub href: String,
pub rel: Vec<String>,
pub text: String,
pub kind: LinkKind,
pub visibility: Visibility,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DocumentLinks {
pub uri: Uri,
pub base_uri: String,
pub links: Vec<DocumentLink>,
}