#panel #control #web #control-panel

tu
napanel

自动生成基于Web的实时控制面板

2个版本

使用旧的Rust 2015

0.1.1 2017年5月13日
0.1.0 2017年5月13日

#881 in HTTP服务器

MIT/Apache

21KB
401

tu
napanel: 自动生成基于Web的实时控制面板

crates.io badge Travis CI badge

API文档

tu
napanel 允许您快速轻松地生成基于Web的控制面板,以控制正在运行的Rust程序的行为,本地或通过网络。您只需声明一个表示面板状态的struct,以及一个用于更新的回调函数。

一个简单的示例,来自 examples/basic.rs

#[macro_use] extern crate serde_derive;
#[macro_use] extern crate tunapanel;

use tunapanel::widget::Button;

tunapanel! {
    #[title = "My awesome panel"]
    #[derive(Debug)]
    struct Panel {
        #[label = "A float"]
        x: f32 = 0.0,

        #[label = "A string"]
        y: String = String::new(),

        #[label = "A bool"]
        b: bool = true,

        #[label = "A button"]
        but1: Button = Button::new(),

        #[label = "Another button"]
        but2: Button = Button::new(),
    }
}

fn main() {
    tunapanel::serve::<Panel, _>(|p| {
        println!("Panel update: {:?}", p);
    }).unwrap();
}

构建并运行此示例,它将输出类似的内容

Listening on 127.0.0.1:1337

您现在可以打开您最喜欢的Web浏览器,导航到 http://127.0.0.1:1337,您将看到类似的内容

Example control panel

当您修改这些表单元素时,Rust程序将实时接收更新。这里我们只是打印它们

Panel update: Panel { x: 0.3, y: "Hello w", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello w", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello wor", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(true), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(false), but2: Button(true) }

如果任何字段解析失败,界面将显示“失败”提示。您可以立即再次尝试。

依赖项

~14MB
~311K SLoC