main.rsannotatedmain.rssource47 lines · 1.6 KB · raw

Prevents additional console window on Windows in release, DO NOT REMOVE!!

2#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
4mod midibridge;
5mod oscbridge;
6mod loggerbridge;
7use std::sync::Arc;
8
9use loggerbridge::Logger;
10use tauri::Manager;
11use tokio::sync::mpsc;
12use tokio::sync::Mutex;

the payload type must implement Serialize and Clone.

14#[derive(Clone, serde::Serialize)]
15struct Payload {
16  message: String,
17  message_type: String,
18}
19fn main() {
20  let (async_input_transmitter_midi, async_input_receiver_midi) = mpsc::channel(1);
21  let (async_output_transmitter_midi, async_output_receiver_midi) = mpsc::channel(1);
22  let (async_input_transmitter_osc, async_input_receiver_osc) = mpsc::channel(1);
23  let (async_output_transmitter_osc, async_output_receiver_osc) = mpsc::channel(1);
24  tauri::Builder
25    ::default()
26    .manage(midibridge::AsyncInputTransmit {
27      inner: Mutex::new(async_input_transmitter_midi),
28    })
29    .manage(oscbridge::AsyncInputTransmit {
30      inner: Mutex::new(async_input_transmitter_osc),
31    })
32    .invoke_handler(tauri::generate_handler![midibridge::sendmidi, oscbridge::sendosc])
33    .setup(|app| {
34      let window = Arc::new(app.get_window("main").unwrap());
35      let logger = Logger { window };
36      midibridge::init(
37        logger.clone(),
38        async_input_receiver_midi,
39        async_output_receiver_midi,
40        async_output_transmitter_midi
41      );
42      oscbridge::init(logger, async_input_receiver_osc, async_output_receiver_osc, async_output_transmitter_osc);
43      Ok(())
44    })
45    .run(tauri::generate_context!())
46    .expect("error while running tauri application");
47}