feat: Création de la crate fsv, couche de haut niveau pour l'usage des librairies FSV
This commit is contained in:
parent
c9b1895e0c
commit
af92e316da
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -1523,6 +1523,15 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fsv"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"fsv-sys",
|
||||||
|
"thiserror",
|
||||||
|
"utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fsv-sys"
|
name = "fsv-sys"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -4,6 +4,7 @@ members = [
|
|||||||
"crates/backend",
|
"crates/backend",
|
||||||
"crates/desktop",
|
"crates/desktop",
|
||||||
"crates/sesam-vitale",
|
"crates/sesam-vitale",
|
||||||
|
"crates/fsv",
|
||||||
"crates/fsv-sys",
|
"crates/fsv-sys",
|
||||||
"crates/utils",
|
"crates/utils",
|
||||||
]
|
]
|
||||||
|
10
crates/fsv/Cargo.toml
Normal file
10
crates/fsv/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "fsv"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
thiserror = "1.0.64"
|
||||||
|
|
||||||
|
fsv-sys = { path = "../fsv-sys" }
|
||||||
|
utils = { path = "../utils" }
|
1
crates/fsv/src/lib.rs
Normal file
1
crates/fsv/src/lib.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
mod ssv;
|
83
crates/fsv/src/ssv.rs
Normal file
83
crates/fsv/src/ssv.rs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
use fsv_sys::{get_library_path, Error as FsvError, SSVLibrary, SSVLibrary_Common, SUPPORTED_FSV_VERSIONS, V1_40_13, V1_40_14};
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
pub enum Error {
|
||||||
|
#[error(transparent)]
|
||||||
|
SysLibrary(#[from] FsvError)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Enum to hold the different versions of the SSV library
|
||||||
|
enum SsvLibraryVersion {
|
||||||
|
V1_40_13(SSVLibrary<V1_40_13>),
|
||||||
|
V1_40_14(SSVLibrary<V1_40_14>),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Struct to hold the SSV library and access its functions
|
||||||
|
pub struct SSV {
|
||||||
|
library: SsvLibraryVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SSV {
|
||||||
|
fn new(version: SUPPORTED_FSV_VERSIONS) -> Result<Self, Error> {
|
||||||
|
let library = match version {
|
||||||
|
SUPPORTED_FSV_VERSIONS::V1_40_13 => {
|
||||||
|
let lib_path = get_library_path(&version);
|
||||||
|
let library = SSVLibrary::<V1_40_13>::new(&lib_path)?;
|
||||||
|
SsvLibraryVersion::V1_40_13(library)
|
||||||
|
},
|
||||||
|
SUPPORTED_FSV_VERSIONS::V1_40_14 => {
|
||||||
|
let lib_path = get_library_path(&version);
|
||||||
|
let library = SSVLibrary::<V1_40_14>::new(&lib_path)?;
|
||||||
|
SsvLibraryVersion::V1_40_14(library)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
Ok(Self {
|
||||||
|
library,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Initialize the SSV library
|
||||||
|
/// Implement: SSV_InitLIB2
|
||||||
|
pub fn init_library(&self, sesam_ini_path: &str) -> Result<(), Error> {
|
||||||
|
let sesam_ini_path = std::ffi::CString::new(sesam_ini_path).expect("CString::new failed");
|
||||||
|
match &self.library {
|
||||||
|
SsvLibraryVersion::V1_40_13(library) => {
|
||||||
|
let result = unsafe { library.ssv_init_lib2(sesam_ini_path.as_ptr()) }?;
|
||||||
|
println!("SSV_InitLIB2 result: {}", result);
|
||||||
|
},
|
||||||
|
SsvLibraryVersion::V1_40_14(library) => {
|
||||||
|
let result = unsafe { library.ssv_init_lib2(sesam_ini_path.as_ptr()) }?;
|
||||||
|
println!("SSV_InitLIB2 result: {}", result);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
use utils::config::load_config;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
fn init() -> SSV {
|
||||||
|
load_config().unwrap();
|
||||||
|
SSV::new(SUPPORTED_FSV_VERSIONS::V1_40_13).expect("SSV::new failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_init_library() {
|
||||||
|
let lib = init();
|
||||||
|
let sesam_ini_path = env::var("SESAM_INI_PATH").expect("SESAM_INI_PATH must be set");
|
||||||
|
lib.init_library(&sesam_ini_path).expect("init_library failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_ssv() {
|
||||||
|
assert_eq!("ssv", "ssv");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user