75 lines
1.4 KiB
C
75 lines
1.4 KiB
C
# Host files
|
|
|
|
File path: `out/dir/api.rs`
|
|
|
|
```rust
|
|
// Host code
|
|
/* Rust API */
|
|
#[derive(Debug)]
|
|
pub enum Commands {
|
|
/// Call out an outstanding person
|
|
#[allow(non_camel_case_types)]
|
|
call_me_back_outstanding { callback: fn(String) -> String },
|
|
One(one::One),
|
|
}
|
|
pub mod one {
|
|
#[derive(Debug)]
|
|
pub enum One {
|
|
/// Call out a person
|
|
#[allow(non_camel_case_types)]
|
|
call_me_back { callback: fn(u32) },
|
|
}
|
|
}
|
|
/* C API */
|
|
#[no_mangle]
|
|
pub extern "C" fn call_me_back_outstanding(
|
|
callback: fn(String) -> String,
|
|
) -> core::ffi::c_int {
|
|
callback_function(call_me_back_outstanding);
|
|
return 1;
|
|
}
|
|
pub mod one_c {}
|
|
#[no_mangle]
|
|
pub extern "C" fn one_call_me_back(callback: fn(u32)) -> core::ffi::c_int {
|
|
callback_function(one_call_me_back);
|
|
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"
|
|
|
|
/**
|
|
* Call out an outstanding person
|
|
*/
|
|
extern int
|
|
call_me_back_outstanding (const char *(*name) (const char *name)callback);
|
|
|
|
/**
|
|
* Call out a person
|
|
*/
|
|
extern int one_call_me_back (void (*name) (uint32_t age) callback);
|
|
|
|
struct one
|
|
{
|
|
int (*call_me_back) ();
|
|
};
|
|
|
|
const struct one one = {
|
|
.call_me_back = one_call_me_back,
|
|
};
|
|
|
|
#endif // if !defined TRIXY_MAIN_HEADER
|
|
// vim: filetype=c
|
|
```
|