mod image;
mod line;
pub use image::*;
pub use line::*;
#[allow(unused)]
use crate::core::{Page, PageId, game_state::PageKey};
pub type RenderData = &'static str;
#[derive(Debug, Clone)]
pub enum Object {
Text(Line, RenderData),
Paragraph(Line),
Choice(PageKey, Vec<(u8, Line)>),
Image(Image),
Heading(Span, u8),
Break,
Empty(u8),
Note(Line, (u8, u8)),
Quote(Line, RenderData),
Custom(RenderData),
}
#[derive(Default, Debug, Clone)]
pub struct View {
pub inner: Vec<Object>,
pub pageid: PageId,
pub tags: Vec<PageId>,
}
impl View {
pub fn new(name: PageId) -> Self {
Self {
inner: vec![],
pageid: name,
tags: vec![],
}
}
pub fn name(&self) -> PageId {
self.pageid.clone()
}
}
impl std::ops::Deref for View {
type Target = Vec<Object>;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl std::ops::DerefMut for View {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.inner
}
}
impl IntoIterator for View {
type Item = Object;
type IntoIter = std::vec::IntoIter<Object>;
fn into_iter(self) -> Self::IntoIter {
self.inner.into_iter()
}
}
impl<'a> IntoIterator for &'a View {
type Item = &'a Object;
type IntoIter = std::slice::Iter<'a, Object>;
fn into_iter(self) -> Self::IntoIter {
self.inner.iter()
}
}
impl<'a> IntoIterator for &'a mut View {
type Item = &'a mut Object;
type IntoIter = std::slice::IterMut<'a, Object>;
fn into_iter(self) -> Self::IntoIter {
self.inner.iter_mut()
}
}