1
0
mirror of https://github.com/medigor/example-native-api-rs.git synced 2025-07-03 00:58:13 +02:00
Files
example-native-api-rs/src/lib.rs
2022-12-11 16:52:11 +03:00

61 lines
1.4 KiB
Rust

mod addin1;
mod addin2;
mod ffi;
use std::{
ffi::{c_int, c_long, c_void},
sync::atomic::{AtomicI32, Ordering},
};
use addin1::Addin1;
use ffi::{destroy_component, AttachType};
use utf16_lit::utf16_null;
use crate::{addin2::Addin2, ffi::create_component};
pub static mut PLATFORM_CAPABILITIES: AtomicI32 = AtomicI32::new(-1);
#[allow(non_snake_case)]
#[no_mangle]
pub unsafe extern "C" fn GetClassObject(name: *const u16, component: *mut *mut c_void) -> c_long {
match *name as u8 {
b'1' => {
let addin = Addin1::new();
create_component(component, addin)
}
b'2' => {
let addin = Addin2::new();
create_component(component, addin)
}
_ => 0,
}
}
#[allow(non_snake_case)]
#[no_mangle]
pub unsafe extern "C" fn DestroyObject(component: *mut *mut c_void) -> c_long {
destroy_component(component)
}
#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn GetClassNames() -> *const u16 {
// small strings for performance
utf16_null!("1|2").as_ptr()
}
#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn SetPlatformCapabilities(capabilities: c_int) -> c_int {
unsafe {
PLATFORM_CAPABILITIES.store(capabilities, Ordering::Relaxed);
}
3
}
#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn GetAttachType() -> AttachType {
AttachType::CanAttachAny
}