use super::jsonz::{self, Row, RowOperation};
#[derive(Clone)]
pub struct JsonStream {
rows: Vec<Row>,
position: usize,
}
impl JsonStream {
pub fn new<'a, I: IntoIterator<Item = &'a serde_json::Value>>(iter: I) -> Self {
Self {
rows: jsonz::create_rows(iter),
position: 0,
}
}
}
impl JsonStream {
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 = 0;
}
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
}
}