From 8299746911367a7b966ee0e71f3a74e56279cc97 Mon Sep 17 00:00:00 2001 From: Federico Lolli <federico.lolli@skywarder.eu> Date: Mon, 19 Feb 2024 00:24:28 +0100 Subject: [PATCH] added function dispatch --- src/error.rs | 2 +- src/lib.rs | 31 ++++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/error.rs b/src/error.rs index 29a57c7..c88808e 100644 --- a/src/error.rs +++ b/src/error.rs @@ -35,7 +35,7 @@ pub enum Error { MissingBaudrate, #[error("String contains invalid characters")] String(#[from] std::ffi::IntoStringError), - #[error("Invalid serial mode")] + #[error("Invalid serial mode (choose from 'Open', 'Close', 'Read', 'Write')")] InvalidMode, #[error("{0}")] Rustmex(#[from] rustmex::Error), diff --git a/src/lib.rs b/src/lib.rs index 9badc03..de878c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,31 +1,44 @@ -//! WARNING: panic is used as stated in the example at -//! [rustmex](https://gitlab.com/nielstermeer/rustmex/-/blob/master/examples/catch_panic/src/lib.rs?ref_type=heads). - mod error; mod types; use rustmex::{char::CharArray, prelude::*, MatlabClass}; use error::{Error, MapMexError}; +use types::Mode; #[rustmex::entrypoint] fn serialbridge(lhs: Lhs, rhs: Rhs) -> rustmex::Result<()> { let arg0 = rhs.first().mexerr(Error::MissingSerialMode)?; // Get the mode argument ("Open", "Close", "Read", "Write") - let mode = get_mode(arg0); + let mode = get_mode(arg0)?; - let arg1 = rhs.get(1).error_if_missing( - "serialbridge:missing_input", - "Missing serial mode (second argument)", - )?; + // Dispatch to the appropriate function + match mode { + Mode::Open => open_serial(rhs)?, + Mode::Close => todo!(), + Mode::Read => todo!(), + Mode::Write => todo!(), + } Ok(()) } -fn get_mode(arg: &mxArray) -> Result<types::Mode, Error> { +fn get_mode(arg: &mxArray) -> Result<Mode, Error> { CharArray::from_mx_array(arg)? .get_cstring() .into_string()? .parse() } + +fn open_serial(rhs: Rhs) -> Result<(), Error> { + let port = rhs.get(1).mexerr(Error::MissingPortName)?; + let baudrate = rhs.get(2).mexerr(Error::MissingBaudrate)?; + + // let port = CharArray::from_mx_array(port)?.get_cstring().into_string()?; + // let baudrate = CharArray::from_mx_array(baudrate)?.get_cstring().into_string()?; + + todo!(); + + Ok(()) +} -- GitLab