use std::mem;
use bytestring::ByteString;
use tui_tree_widget::TreeItem;
#[derive(Debug, Default)]
pub struct BookmarkTree {
_raw: ByteString,
items: Vec<TreeItem<'static, ByteString>>,
}
impl BookmarkTree {
pub fn new(raw: String) -> Self {
let raw: ByteString = raw.into();
let mut items = vec![];
for line in raw.lines() {
let span = line.trim_end();
match span.strip_prefix(" ") {
None => {
let bookmark = TreeItem::new(raw.slice_ref(span), line.trim_end(), vec![])
.expect("must be valid");
items.push(bookmark);
}
Some(remote) => {
let remote = TreeItem::new_leaf(raw.slice_ref(remote), remote);
items
.last_mut()
.expect("must be bookmark")
.add_child(remote)
.expect("must be valid");
}
}
}
let items =
unsafe { mem::transmute::<Vec<TreeItem<'_, _>>, Vec<TreeItem<'static, _>>>(items) };
Self { _raw: raw, items }
}
pub fn get(&self) -> &[TreeItem<'static, ByteString>] {
&self.items
}
}