[][src]Crate unsegen_jsonviewer

View structured data (i.e., json::JsonValues) in an unsegen widget.

Example:

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());

    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));
                // Notice that foo is highlighted when pressing 'n' after 's'!
                json_viewer.update(JsonValue::Object(object));
            }));
        // Put more application logic here...

        {
            let win = term.create_root_window();
            json_viewer.draw(win, RenderingHints::default());
        }
        term.present();
    }
}

Modules

json_ext

Convenience reexport of json types.

Structs

JsonViewer

A widget for viewing json data.