Skip to main content

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};