2个版本
使用旧的Rust 2015
0.1.1 | 2017年5月13日 |
---|---|
0.1.0 | 2017年5月13日 |
#881 in HTTP服务器
21KB
401 行
tunapanel: 自动生成基于Web的实时控制面板
tunapanel 允许您快速轻松地生成基于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
,您将看到类似的内容
当您修改这些表单元素时,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