use crate::structured::yaml::yamlz::{self, Row, RowOperation};
#[derive(Clone)]
pub struct Document {
rows: Vec<Row>,
position: usize,
}
impl Document {
pub fn new<'a, I: IntoIterator<Item = &'a serde_yaml::Value>>(iter: I) -> Self {
let rows = yamlz::create_rows(iter);
let position = rows.head();
Self { rows, position }
}
}
impl Document {
pub fn rows(&self) -> &[Row] {
&self.rows
}
pub fn extract_rows_from_current(&self, n: usize) -> Vec<Row> {
self.rows.extract(self.position, n)
}
pub fn toggle(&mut self) {
let index = self.rows.toggle(self.position);
self.position = index;
}
pub fn set_nodes_visibility(&mut self, collapsed: bool) {
self.rows.set_rows_visibility(collapsed);
self.position = self.rows.head();
}
pub fn up(&mut self) -> bool {
let index = self.rows.up(self.position);
let ret = index != self.position;
self.position = index;
ret
}
pub fn head(&mut self) -> bool {
self.position = self.rows.head();
true
}
pub fn down(&mut self) -> bool {
let index = self.rows.down(self.position);
let ret = index != self.position;
self.position = index;
ret
}
pub fn tail(&mut self) -> bool {
self.position = self.rows.tail();
true
}
}