14次发布
0.3.4 | 2024年8月1日 |
---|---|
0.3.3 | 2024年8月1日 |
0.2.0 | 2024年2月26日 |
0.1.8 | 2024年1月4日 |
0.1.4 | 2023年8月10日 |
#305 在 数据结构
507 每月下载量
14KB
171 行
enum2egui
enum2egui
是一个Rust derive宏,可以从任意结构体和枚举创建egui UI。这对于生成可以在egui UI中修改和显示的数据绑定非常有用。
Default
和 Display
是必需的。推荐使用 enum2str 在枚举上派生 Display
。
用法
将以下内容添加到您的 Cargo.toml
enum2egui = "0.3.4" # supports egui 0.28.1
示例
声明您的数据
use enum2egui::{Gui, GuiInspect};
#[derive(Gui, EnumStr, Debug, Clone, Default, serde::Deserialize, serde::Serialize, PartialEq)]
pub enum Color {
#[default]
Red,
Green,
#[enum2str("Custom")]
Custom(u8, u8, u8),
NamedCustom {
red: u8,
blue: u8,
green: u8,
metadata: Metadata,
},
#[enum2egui(skip)]
SkippedGreen,
#[enum2egui(skip)]
#[enum2str("Skipped Custom")]
SkippedCustom(u8, u8, u8),
}
#[derive(Gui, Clone, serde::Deserialize, serde::Serialize, Default)]
pub struct Data {
string: String,
i8: i8,
i16: i16,
i32: i32,
i64: i64,
bool: bool,
u8: u8,
u16: u16,
u32: u32,
f32: f32,
f64: f64,
nested_struct: SubData,
unnamed_struct: TupleStruct,
primary_color: Color,
secondary_color: Color,
optional: Option<SubData>,
}
#[derive(Gui, Clone, serde::Deserialize, serde::Serialize, PartialEq)]
pub struct TupleStruct(u8, u32, String, SubData);
impl Default for TupleStruct {
fn default() -> Self {
Self(3, 24, "Hello!".to_string(), SubData::default())
}
}
#[derive(Gui, Clone, Default, serde::Deserialize, serde::Serialize, PartialEq, Debug)]
pub struct Metadata {
message: String,
}
#[derive(Gui, Clone, Default, serde::Deserialize, serde::Serialize, PartialEq)]
pub struct SubData {
value: String,
number: u32,
}
然后使用 GuiInspect::ui(..)
或 GuiInspect::ui_mut()
进行渲染。例如,使用 eframe
impl eframe::App for DemoApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
let Self { data } = self;
egui::CentralPanel::default().show(ctx, |ui| {
// Read-Only UI
data.ui(ui):
// Mutable UI
data.ui_mut(ui);
});
}
}
依赖关系
~6–11MB
~117K SLoC