Skip to main content

fre_sys/
lib.rs

1//!
2//! # fre-sys
3//! 
4//! Rust bindings for the AIR Native Extension (ANE) C API (`FlashRuntimeExtensions.h`).
5//! 
6//! ## Example
7//!
8//! ```rust
9//! use fre_sys::prelude::*;
10//! #[allow(unsafe_op_in_unsafe_fn, non_snake_case, unused_variables)]
11//! #[unsafe(no_mangle)]
12//! pub unsafe extern "C" fn Initializer (
13//!     ext_data_to_set: *mut FREData,
14//!     ctx_initializer_to_set: *mut FREContextInitializer,
15//!     ctx_finalizer_to_set: *mut FREContextFinalizer,
16//! ) {
17//!     *ctx_initializer_to_set = ctx_initializer;
18//! }
19//! #[allow(unsafe_op_in_unsafe_fn, unused_variables)]
20//! unsafe extern "C" fn ctx_initializer (
21//!     ext_data: FREData,
22//!     ctx_type: FREStr,
23//!     ctx: FREContext,
24//!     num_funcs_to_set: *mut u32,
25//!     funcs_to_set: *mut *const FRENamedFunction,
26//! ) {
27//!     *num_funcs_to_set = 1;
28//!     *funcs_to_set = std::mem::transmute(&FUNC);
29//! }
30//! #[repr(transparent)]
31//! struct Function (FRENamedFunction);
32//! unsafe impl Sync for Function {}
33//! static FUNC: Function = Function(FRENamedFunction {
34//!     name: c"hello_extension".as_ptr() as FREStr,
35//!     functionData: std::ptr::null_mut(),
36//!     function: hello,
37//! });
38//! unsafe extern "C" fn hello(_: FREContext, _: FREData, _: u32, _: *const FREObject) -> FREObject {
39//!     let bytes = "Hello! Flash Runtime".as_bytes();
40//!     let mut str_obj = std::ptr::null_mut();
41//!     _ = unsafe {FRENewObjectFromUTF8(bytes.len() as u32, bytes.as_ptr(), &mut str_obj)};
42//!     str_obj
43//! }
44//! ```
45//! 
46
47pub mod ffi;
48pub mod markers;
49pub mod types;
50pub mod prelude {
51    pub use crate::{
52        ffi::*,
53        markers::*,
54    };
55}