2024-03-27 07:07:29 +00:00
|
|
|
# Host files
|
|
|
|
|
|
|
|
File path: `out/dir/api.rs`
|
|
|
|
|
|
|
|
```rust
|
|
|
|
// Host code
|
|
|
|
/* Rust API */
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum Commands {
|
|
|
|
Trinitrix(trinitrix::Trinitrix),
|
|
|
|
}
|
|
|
|
/**I
|
|
|
|
contain
|
|
|
|
multiple
|
|
|
|
lines*/
|
|
|
|
pub mod trinitrix {
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum Trinitrix {
|
|
|
|
///I \n also \n contain \n them
|
|
|
|
#[allow(non_camel_case_types)]
|
|
|
|
hi { trixy_output: trixy::oneshot::Sender<trixy::types::String>, name: String },
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* C API */
|
|
|
|
pub mod trinitrix_c {}
|
|
|
|
#[no_mangle]
|
|
|
|
pub extern "C" fn trinitrix_hi(
|
|
|
|
output: *mut trixy::types::String,
|
|
|
|
name: String,
|
|
|
|
) -> core::ffi::c_int {
|
|
|
|
let output_val: trixy::types::String = {
|
|
|
|
let (tx, rx) = trixy::oneshot::channel();
|
|
|
|
callback_function(trinitrix_hi);
|
|
|
|
let recv = rx
|
|
|
|
.recv()
|
|
|
|
.expect("The channel should not be closed until this value is received");
|
|
|
|
recv.into()
|
|
|
|
};
|
|
|
|
unsafe {
|
|
|
|
std::ptr::write(output, output_val);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
// vim: filetype=rust
|
|
|
|
```
|
|
|
|
|
|
|
|
# Auxiliary files
|
|
|
|
|
|
|
|
File path: `dist/interface.h`
|
|
|
|
|
|
|
|
```c
|
|
|
|
#if !defined TRIXY_MAIN_HEADER
|
|
|
|
#define TRIXY_MAIN_HEADER
|
|
|
|
|
|
|
|
#include "errno.h"
|
|
|
|
#include "string.h"
|
|
|
|
#include "vec.h"
|
|
|
|
|
|
|
|
/**
|
2024-03-27 09:51:39 +00:00
|
|
|
*I \n also \n contain \n them
|
|
|
|
*/
|
2024-03-27 07:07:29 +00:00
|
|
|
extern int trinitrix_hi (const char **trixy_output, const char *name);
|
|
|
|
|
|
|
|
/**
|
2024-03-27 09:51:39 +00:00
|
|
|
*I
|
|
|
|
*contain
|
|
|
|
* multiple
|
|
|
|
* lines
|
|
|
|
*/
|
2024-03-27 07:07:29 +00:00
|
|
|
struct trinitrix
|
|
|
|
{
|
|
|
|
int (*hi) (const char **, const char *);
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct trinitrix trinitrix = {
|
|
|
|
.hi = trinitrix_hi,
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // if !defined TRIXY_MAIN_HEADER
|
|
|
|
// vim: filetype=c
|
|
|
|
```
|