add VmcThru message
This commit is contained in:
parent
979b9cd87d
commit
290dc17d3e
45
src/lib.rs
45
src/lib.rs
|
@ -1163,3 +1163,48 @@ impl MessageBehavior for VmcExtConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
enum ThruType {
|
||||||
|
Float(f32),
|
||||||
|
Int(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
struct VmcThru {
|
||||||
|
addr: String,
|
||||||
|
arg1: String,
|
||||||
|
arg2: Option<ThruType>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MessageBehavior for VmcThru {
|
||||||
|
fn to_osc_message(&self) -> OscMessage {
|
||||||
|
let mut args = vec![OscType::from(self.arg1.to_owned()
|
||||||
|
)];
|
||||||
|
if self.arg2.is_some() {
|
||||||
|
match self.arg2.unwrap() {
|
||||||
|
ThruType::Float(val) => args.push(OscType::from(val)),
|
||||||
|
ThruType::Int(val) => args.push(OscType::from(val)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return OscMessage { addr: self.addr.to_owned(), args}
|
||||||
|
}
|
||||||
|
fn from_osc_message(msg: OscMessage) -> Result<Self, String> {
|
||||||
|
if msg.args.len() > 2 || msg.args.len() < 1 {
|
||||||
|
return Err(String::from("arg count invalid"));
|
||||||
|
}
|
||||||
|
let arg1: String;
|
||||||
|
match &msg.args[0] {
|
||||||
|
OscType::String(s) => arg1 = s.to_owned(),
|
||||||
|
_ => return Err(String::from("arg type invalid"))
|
||||||
|
}
|
||||||
|
let mut arg2: Option<ThruType> = None;
|
||||||
|
if msg.args.len() == 2 {
|
||||||
|
match msg.args[1] {
|
||||||
|
OscType::Int(i) => arg2 = Some(ThruType::Int(i)),
|
||||||
|
OscType::Float(f) => arg2 = Some(ThruType::Float(f)),
|
||||||
|
_ => return Err(String::from("arg type invalid"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Ok(VmcThru { addr: msg.addr, arg1 , arg2 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user