mod hyper_link;
mod image_link;
mod other;
mod rd;
mod reference;
mod two_way;
pub use self::{
hyper_link::{HyperLink, HyperLinkTarget},
image_link::{ImageLayout, ImageLink},
other::EmailLink,
rd::ResourceDescriptor,
reference::TagReference,
two_way::TwoWayLink,
};
use super::*;
use crate::{command::CommandOptions, NoteError, Value};
use num::{Signed, Zero};
#[derive(Clone, Eq, PartialEq, Hash)]
pub enum SmartLink {
ExternalResource(Box<ResourceDescriptor>),
EMail(Box<EmailLink>),
Normal(Box<HyperLink>),
Image(Box<ImageLink>),
Reference(Box<TagReference>),
TwoWay(Box<TwoWayLink>),
}
impl SmartLink {
#[inline]
pub fn into_node(self, range: MaybeRanged) -> ASTNode {
ASTNode { value: ASTKind::LinkNode(self), range }
}
}
impl ASTKind {
#[inline]
pub fn image_link(src: impl Into<String>, range: MaybeRanged) -> ASTNode {
ImageLink { source: src.into(), ..Default::default() }.into_node(range)
}
#[inline]
pub fn image_link_alt(src: impl Into<String>, alt: impl Into<String>, range: MaybeRanged) -> ASTNode {
ImageLink { source: src.into(), description: Some(alt.into()), ..Default::default() }.into_node(range)
}
#[inline]
pub fn hyper_link(src: impl Into<String>, range: MaybeRanged) -> ASTNode {
HyperLink { src: src.into(), is_bare: false, ..Default::default() }.into_node(range)
}
#[inline]
pub fn hyper_link_text(src: impl Into<String>, text: impl Into<String>, range: MaybeRanged) -> ASTNode {
HyperLink { src: src.into(), is_bare: false, text: Some(text.into()), ..Default::default() }.into_node(range)
}
#[inline]
pub fn bare_link(src: impl Into<String>, range: MaybeRanged) -> ASTNode {
HyperLink { src: src.into(), is_bare: true, ..Default::default() }.into_node(range)
}
}