extern crate unsegen;
use std::io::{stdin, stdout};
use unsegen::base::Terminal;
use unsegen::input::{Input, Key, ScrollBehavior};
use unsegen::widget::{RenderingHints, Widget};
use unsegen_jsonviewer::json_ext::{JsonValue, Object};
use unsegen_jsonviewer::JsonViewer;
fn main() {
let stdout = stdout();
let stdin = stdin();
let stdin = stdin.lock();
let mut json_viewer = JsonViewer::new(&JsonValue::Null);
let mut term = Terminal::new(stdout.lock()).unwrap();
for input in Input::read_all(stdin) {
let input = input.unwrap();
input
.chain(
ScrollBehavior::new(&mut json_viewer)
.forwards_on(Key::Down)
.forwards_on(Key::Char('j'))
.backwards_on(Key::Up)
.backwards_on(Key::Char('k'))
.to_beginning_on(Key::Home)
.to_end_on(Key::End),
)
.chain((Key::Char('s'), || {
let mut object = Object::new();
object.insert("foo", JsonValue::String("String!".to_owned()));
object.insert("bar", JsonValue::Boolean(true));
json_viewer.update(&JsonValue::Object(object));
}))
.chain((Key::Char('n'), || {
let mut object = Object::new();
object.insert("foo", JsonValue::Number((27 * 37).into()));
object.insert("bar", JsonValue::Boolean(true));
json_viewer.update(&JsonValue::Object(object));
}));
{
let win = term.create_root_window();
json_viewer.as_widget().draw(win, RenderingHints::default());
}
term.present();
}
}