use pdf_writer::types::ActionType;
use pdf_writer::{Name, Str};
use crate::error::KrillaResult;
use crate::interactive::destination::Destination;
use crate::serialize::SerializeContext;
pub enum Action {
Link(LinkAction),
Goto(Destination),
}
impl Action {
pub(crate) fn serialize(
&self,
sc: &mut SerializeContext,
mut action: pdf_writer::writers::Action,
) -> KrillaResult<()> {
match self {
Action::Link(link) => link.serialize(action),
Action::Goto(dest) => {
let dest_entry = action.action_type(ActionType::GoTo).insert(Name(b"D"));
dest.serialize(sc, dest_entry)?
}
};
Ok(())
}
}
pub struct LinkAction {
uri: String,
}
impl From<LinkAction> for Action {
fn from(value: LinkAction) -> Self {
Action::Link(value)
}
}
impl LinkAction {
pub fn new(uri: String) -> Self {
Self { uri }
}
}
impl LinkAction {
fn serialize(&self, mut action: pdf_writer::writers::Action) {
action
.action_type(ActionType::Uri)
.uri(Str(self.uri.as_bytes()));
}
}