FastWave2.0/src-tauri/src/component_manager.rs

44 lines
1.4 KiB
Rust
Raw Normal View History

2024-06-25 16:29:33 +00:00
use crate::{AddedDecodersCount, DecoderPath};
2024-07-03 22:30:13 +00:00
use wasmtime::component::{*, Component as WasmtimeComponent};
use wasmtime::{Engine, Store};
2024-06-25 16:29:33 +00:00
2024-07-03 22:30:13 +00:00
bindgen!();
struct LinkedState;
impl component::decoder::host::Host for LinkedState {
fn log(&mut self, message: String) -> () {
println!("Decoder: {message}");
}
}
// FW.add_decoders(["../test_files/components/rust_decoder/rust_decoder.wasm"])
// FW.add_decoders(["../test_files/components/javascript_decoder/javascript_decoder.wasm"])
// FW.add_decoders(["../test_files/components/python_decoder/python_decoder.wasm"])
2024-06-25 16:29:33 +00:00
pub fn add_decoders(decoder_paths: Vec<DecoderPath>) -> AddedDecodersCount {
println!("decoders in Tauri: {decoder_paths:#?}");
2024-07-03 22:30:13 +00:00
println!("{:#?}", std::env::current_dir());
2024-06-25 16:29:33 +00:00
2024-07-03 22:30:13 +00:00
if let Err(error) = add_decoder(&decoder_paths[0]) {
eprintln!("add_decoders error: {error:?}");
}
2024-06-25 16:29:33 +00:00
decoder_paths.len()
}
2024-07-03 22:30:13 +00:00
fn add_decoder(path: &str) -> wasmtime::Result<()> {
2024-06-25 16:29:33 +00:00
let engine = Engine::default();
2024-07-03 22:30:13 +00:00
let wasmtime_component = WasmtimeComponent::from_file(&engine, path)?;
let mut linker = Linker::new(&engine);
Component::add_to_linker(&mut linker, |state: &mut LinkedState| state)?;
2024-06-25 16:29:33 +00:00
2024-07-03 22:30:13 +00:00
let mut store = Store::new(&engine, LinkedState);
2024-06-25 16:29:33 +00:00
2024-07-03 22:30:13 +00:00
let (component, _instance) = Component::instantiate(&mut store, &wasmtime_component, &linker)?;
2024-06-25 16:29:33 +00:00
2024-07-03 22:30:13 +00:00
component.component_decoder_decoder().call_init(&mut store)?;
2024-06-25 16:29:33 +00:00
Ok(())
}