JaneDoe-ZS/nap_data/src/action/mod.rs
xeon 970dde020a Working OpenUI interacts and Archive battles
Implement OpenUI interacts (currently configs only for Yorozuya and Archive)
Fully working Archive (battles and cutscenes)
2024-07-30 03:04:55 +03:00

42 lines
1.1 KiB
Rust

use paste::paste;
use serde::Deserialize;
macro_rules! actions {
($($name:ident;)*) => {
paste! {
$(
mod [<$name:snake>];
pub use [<$name:snake>]::[<Config $name>];
)*
#[derive(Deserialize, Debug)]
#[serde(tag = "$type")]
pub enum ActionConfig {
$(
$name([<Config $name>]),
)*
}
impl ActionConfig {
pub fn to_protocol(&self) -> ::proto::ActionInfo {
use ::prost::Message;
match self {
$(
Self::$name(config) => ::proto::ActionInfo {
body: config.to_protocol().encode_to_vec(),
action_type: ::proto::ActionType::$name.into(),
..Default::default()
},
)*
}
}
}
}
};
}
actions! {
SwitchSection;
OpenUi;
}