fre_rs/lib.rs
1//!
2//! Safe, ergonomic Rust abstraction over the AIR Native Extension (ANE) C API ([`fre-sys`](https://crates.io/crates/fre-sys)) for native-side development.
3//!
4//! ## Getting Started
5//!
6//! The primary entry points of this crate are the macros [`extension!`] and [`function!`].
7//! Refer to their documentation for details and examples.
8//!
9//! # Flash Runtime Extension Lifecycle
10//!
11//! ```text
12//! Flash Runtime ━━━━┓
13//! ┃
14//! ExtensionContext.loadExtension ━━━━━━━━━━━━┫
15//! ↓ ┃
16//! ┏━━━━ Extension Load ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
17//! ┃ ↓ ┃
18//! ┃ Initializer → Extension Data ┃
19//! ┃ ↓ ┃
20//! ┃ ┏━━ ExtensionContext.createExtensionContext ━━┫
21//! ┃ ┃ ↓ ┃
22//! ┃ ┃ Context Initializer → Context Data ┃
23//! ┃ ┃ ↓ ↓ ↓ ↓ ┃
24//! ┃ ┃ Function Data → Function Extension Data ┃
25//! ┃ ┃ ↑ ┃
26//! ┃ ┣━━ ExtensionContext.call ━━━━━━━━━━━━━━━━━━━━┫
27//! ┃ ┃ ┃
28//! ┃ ┃ Extension Data ┃
29//! ┃ ┃ ↑ ┃
30//! ┃ ┃ Context Data = `ContextRegistry` ┃
31//! ┃ ┃ ↓ ↑ ┃
32//! ┃ ┃ Context Finalizer Function Data ┃
33//! ┃ ┃ ↑ ┃
34//! ┃ ┗━━ ExtensionContext.dispose ━━━━━━━━━━━━━━━━━┫
35//! ┃ ┃
36//! ┃ Extension Data → Finalizer ┃
37//! ┃ ↑ ┃
38//! ┗━━━━━━━━━━━━━━━━━━━━━━━━━━ Extension Unload ━━━━┛
39//! ```
40//!
41
42
43/// [`fre-sys`](https://crates.io/crates/fre-sys)
44pub mod c {
45 pub use fre_sys::*;
46}
47pub mod prelude {
48 pub use crate::{
49 context::*,
50 data::Data,
51 event::*,
52 function::FunctionSet,
53 types::*,
54 validated::*,
55 };
56 pub use std::any::Any;
57}
58pub mod context;
59pub mod data;
60pub mod error;
61pub mod event;
62pub mod function;
63mod macros;
64pub mod misc;
65pub mod types;
66pub mod validated;
67pub mod utils;
68pub mod _internal;
69
70use {
71 prelude::*,
72 c::prelude::*,
73 error::*,
74 function::*,
75 utils::*,
76};
77use std::{
78 cell::Cell,
79 collections::HashMap,
80 error::Error,
81 ffi::{CStr, CString, NulError, c_void, c_char},
82 fmt::{self, Debug, Display},
83 marker::PhantomData,
84 mem::transmute,
85 ptr::NonNull,
86 str::Utf8Error,
87 sync::Arc,
88};