diff --git a/Cargo.toml b/Cargo.toml index 8c98cbb5..58fce26a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ udp-stream = "0.0.12" uuid = { version = "1.8", features = ["serde"] } validator = "0.18.1" thiserror = "1.0.61" +ts-rs = { version = "9.0.1" , features = ["serde-compat", "uuid-impl"] } [build-dependencies] vergen-gix = { version = "1.0.0-beta.2", default-features = false, features = ["build", "cargo"] } diff --git a/src/device/devices.rs b/src/device/devices.rs index 2434902e..fb75a4ef 100644 --- a/src/device/devices.rs +++ b/src/device/devices.rs @@ -2,6 +2,7 @@ use bluerobotics_ping::device::PingDevice; use serde::{Deserialize, Serialize}; use tokio::sync::{mpsc, oneshot}; use tracing::{error, trace, warn}; +use ts_rs::TS; pub struct DeviceActor { pub receiver: mpsc::Receiver, @@ -272,6 +273,7 @@ pub enum UpgradeResult { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub enum PingRequest { Ping1D(Ping1DRequest), Ping360(Ping360Request), @@ -282,6 +284,7 @@ pub enum PingRequest { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub enum Ping1DRequest { DeviceID, ModeAuto, @@ -300,23 +303,35 @@ pub enum Ping1DRequest { GainSetting, PingEnable, DistanceSimple, + #[ts(skip)] SetDeviceId(bluerobotics_ping::ping1d::SetDeviceIdStruct), + #[ts(skip)] SetModeAuto(bluerobotics_ping::ping1d::SetModeAutoStruct), + #[ts(skip)] SetPingInterval(bluerobotics_ping::ping1d::SetPingIntervalStruct), + #[ts(skip)] SetPingEnable(bluerobotics_ping::ping1d::SetPingEnableStruct), + #[ts(skip)] SetSpeedOfSound(bluerobotics_ping::ping1d::SetSpeedOfSoundStruct), + #[ts(skip)] SetRange(bluerobotics_ping::ping1d::SetRangeStruct), + #[ts(skip)] SetGainSetting(bluerobotics_ping::ping1d::SetGainSettingStruct), + #[ts(skip)] ContinuousStart(bluerobotics_ping::ping1d::ContinuousStartStruct), + #[ts(skip)] ContinuousStop(bluerobotics_ping::ping1d::ContinuousStopStruct), + #[ts(skip)] GotoBootloader(bluerobotics_ping::ping1d::GotoBootloaderStruct), } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub enum Ping360Request { MotorOff, DeviceData, AutoDeviceData, + #[ts(skip)] SetDeviceId(bluerobotics_ping::ping1d::SetDeviceIdStruct), Transducer, Reset, @@ -324,9 +339,11 @@ pub enum Ping360Request { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub enum PingCommonRequest { DeviceInformation, ProtocolVersion, + #[ts(skip)] SetDeviceId(bluerobotics_ping::common::SetDeviceIdStruct), } diff --git a/src/device/manager.rs b/src/device/manager.rs index 2b0982b5..681f0c10 100644 --- a/src/device/manager.rs +++ b/src/device/manager.rs @@ -1,5 +1,6 @@ use paperclip::actix::Apiv2Schema; use serde::{Deserialize, Serialize}; +use ts_rs::TS; use std::{ collections::{hash_map::DefaultHasher, HashMap}, hash::{Hash, Hasher}, @@ -42,6 +43,7 @@ impl Device { } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(TS)] pub enum DeviceSelection { Common, Ping1D, @@ -50,6 +52,7 @@ pub enum DeviceSelection { } #[derive(Debug, Clone, Deserialize, Serialize, Hash)] +#[derive(TS)] pub enum SourceSelection { UdpStream(SourceUdpStruct), SerialStream(SourceSerialStruct), @@ -61,12 +64,14 @@ enum SourceType { } #[derive(Clone, Debug, Deserialize, Serialize, Hash, Apiv2Schema)] +#[derive(TS)] pub struct SourceUdpStruct { pub ip: Ipv4Addr, pub port: u16, } #[derive(Clone, Debug, Deserialize, Serialize, Hash, Apiv2Schema)] +#[derive(TS)] pub struct SourceSerialStruct { pub path: String, pub baudrate: u32, @@ -120,6 +125,9 @@ pub struct DeviceAnswer { } #[derive(Debug, Clone, Serialize, Deserialize, Apiv2Schema)] +#[derive(TS)] +// #[ts(rename_all = "lowercase")] +#[ts(export, export_to = "RequestModels.ts")] pub enum Request { Create(CreateStruct), Delete(Uuid), @@ -131,12 +139,14 @@ pub enum Request { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub struct CreateStruct { pub source: SourceSelection, pub device_selection: DeviceSelection, } #[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(TS)] pub struct DeviceRequestStruct { pub target: Uuid, pub request: crate::device::devices::PingRequest,