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
44pub mod as3 {
45 use super::*;
46 pub use crate::types::{
47 classes::{Array, Vector, ByteArray, BitmapData, Context3D, ErrorObject as Error},
48 object::{Object},
49 primitive::{int, uint, Number, Boolean, StringObject as String}
50 };
51
52 /// Although `'static`, it must not be used outside the Flash runtime main thread,
53 /// or related APIs may return errors or panic due to failed assertions.
54 #[allow(non_upper_case_globals)]
55 pub const null: Object = unsafe {transmute(std::ptr::null_mut::<FREObject>())};
56}
57/// [`fre-sys`](https://crates.io/crates/fre-sys)
58pub mod c {pub use fre_sys::*;}
59pub mod prelude {
60 pub use crate::{
61 as3,
62 types::{Type, object::{AsObject, TryAs}},
63 context::{Context, CurrentContext},
64 data::Data,
65 event::*,
66 function::FunctionSet,
67 validated::*,
68 };
69 pub use std::any::Any;
70}
71pub mod context;
72pub mod data;
73pub mod error;
74pub mod event;
75pub mod function;
76mod macros;
77pub mod misc;
78pub mod types;
79pub mod validated;
80pub mod utils;
81pub mod _internal;
82
83use {
84 prelude::*,
85 c::prelude::*,
86 data::ExtensionData,
87 error::*,
88 function::*,
89 utils::*,
90 _internal::Sealed,
91};
92use std::{
93 cell::{RefCell},
94 collections::HashMap,
95 error::Error,
96 ffi::{CStr, CString, NulError, c_void, c_char},
97 fmt::{self, Debug, Display},
98 marker::PhantomData,
99 mem::{transmute, size_of, size_of_val},
100 ptr::{NonNull},
101 str::Utf8Error,
102 sync::{Arc, Mutex},
103};