feat: tauri serial polyfill

This commit is contained in:
2023-08-03 00:27:03 +02:00
parent 5014e1e8e8
commit 9c1918e683
280 changed files with 262 additions and 3222564 deletions

View File

@@ -1,8 +1,11 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
mod serial;
fn main() {
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
tauri::Builder::default()
.plugin(serial::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

39
src-tauri/src/serial.rs Normal file
View File

@@ -0,0 +1,39 @@
use serde::Serialize;
use serialport::{available_ports, SerialPortType};
use tauri::plugin::{Builder, TauriPlugin};
use tauri::{command, generate_handler, Runtime};
pub fn init<R: Runtime>() -> TauriPlugin<R> {
Builder::new("serial")
.invoke_handler(generate_handler![get_serial_ports])
.build()
}
#[derive(Serialize)]
struct WebSerialPortInfo {
pub name: String,
pub product_id: u16,
pub vendor_id: u16,
pub serial_number: Option<String>,
pub manufacturer: Option<String>,
pub product: Option<String>,
}
#[command]
fn get_serial_ports() -> Vec<WebSerialPortInfo> {
available_ports()
.unwrap()
.iter()
.filter_map(|port| match &port.port_type {
SerialPortType::UsbPort(usb) => Some(WebSerialPortInfo {
name: port.port_name.clone(),
vendor_id: usb.vid,
product_id: usb.pid,
serial_number: usb.serial_number.clone(),
manufacturer: usb.manufacturer.clone(),
product: usb.product.clone(),
}),
_ => None,
})
.collect()
}