forked from NewEriduPubSec/JaneDoe-ZS
Implement OpenUI interacts (currently configs only for Yorozuya and Archive) Fully working Archive (battles and cutscenes)
42 lines
1.1 KiB
Rust
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;
|
|
}
|