use crate::data::PageRef;
use crate::tree::VariableMap;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub struct IncludeRef<'t> {
page_ref: PageRef,
variables: VariableMap<'t>,
}
impl<'t> IncludeRef<'t> {
#[inline]
pub fn new(page_ref: PageRef, variables: VariableMap<'t>) -> Self {
IncludeRef {
page_ref,
variables,
}
}
#[inline]
pub fn page_only(page_ref: PageRef) -> Self {
IncludeRef::new(page_ref, VariableMap::new())
}
#[inline]
pub fn page_ref(&self) -> &PageRef {
&self.page_ref
}
#[inline]
pub fn variables(&self) -> &VariableMap<'t> {
&self.variables
}
}
impl<'t> From<IncludeRef<'t>> for (PageRef, VariableMap<'t>) {
#[inline]
fn from(include: IncludeRef<'t>) -> (PageRef, VariableMap<'t>) {
let IncludeRef {
page_ref,
variables,
} = include;
(page_ref, variables)
}
}
#[test]
fn to_owned() {
let page_ref_1 = PageRef::page_only("scp-001");
let page_ref_2 = page_ref_1.clone();
assert_eq!(page_ref_1, page_ref_2);
let include_ref_1 = IncludeRef::new(page_ref_1, VariableMap::new());
let include_ref_2: IncludeRef<'static> = include_ref_1.to_owned();
assert_eq!(include_ref_1, include_ref_2);
assert_eq!(include_ref_1.page_ref(), &page_ref_2);
assert!(include_ref_1.variables.is_empty());
let (page_ref, variables) = include_ref_2.into();
assert_eq!(page_ref, page_ref_2);
assert!(variables.is_empty());
}