pub trait AccessControl: Send + Sync {
// Required methods
fn authorize_connect<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn on_renderer_connected<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn filter_visible<'life0, 'life1, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderers: Vec<RendererInfo>,
) -> Pin<Box<dyn Future<Output = Vec<RendererInfo>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn can_target<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderer_name: &'life2 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
// Provided methods
fn filter_graphics<'life0, 'life1, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
graphics: Vec<Graphic>,
) -> Pin<Box<dyn Future<Output = Vec<Graphic>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn can_load_graphic<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
_renderer_name: &'life2 str,
_graphic_id: &'life3 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait { ... }
}Required Methods§
Authorizes a renderer’s WebSocket connection before it’s upgraded.
query is the connect URL’s raw query string, unparsed and
unvalidated by Core — an implementation decides what it means (a
zone name + token for ZoneAccessControl, ignored entirely here).
Sourcefn on_renderer_connected<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn on_renderer_connected<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Called once a renderer’s hello names it, after authorize_connect
already approved the connection — a chance to record durable identity
for tracking or failover purposes. Best-effort: Core doesn’t drop the
connection if this does nothing.
Sourcefn filter_visible<'life0, 'life1, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderers: Vec<RendererInfo>,
) -> Pin<Box<dyn Future<Output = Vec<RendererInfo>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn filter_visible<'life0, 'life1, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderers: Vec<RendererInfo>,
) -> Pin<Box<dyn Future<Output = Vec<RendererInfo>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Filters renderers down to what api_key may see — GET /renderers.
Sourcefn can_target<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderer_name: &'life2 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn can_target<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
api_key: &'life1 str,
renderer_name: &'life2 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Whether api_key may target the renderer named renderer_name —
checked before every renderer-scoped call (get/target/load/play/
stop/update/customAction/clear). Keyed on the stable name, not the
per-session id.
Provided Methods§
Sourcefn filter_graphics<'life0, 'life1, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
graphics: Vec<Graphic>,
) -> Pin<Box<dyn Future<Output = Vec<Graphic>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn filter_graphics<'life0, 'life1, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
graphics: Vec<Graphic>,
) -> Pin<Box<dyn Future<Output = Vec<Graphic>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Filters graphics down to what api_key may see — GET /graphics.
Default implementation returns all graphics (no filtering), maintaining
backward compatibility and the original “unscoped by design” behavior.
Sourcefn can_load_graphic<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
_renderer_name: &'life2 str,
_graphic_id: &'life3 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn can_load_graphic<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_api_key: &'life1 str,
_renderer_name: &'life2 str,
_graphic_id: &'life3 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Whether api_key may load graphic_id onto renderer_name — checked
before load() sends a LoadMessage. Default implementation allows all
loads (maintaining backward compatibility), but implementations can
enforce zone/renderer-specific graphic restrictions.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".