pub trait EditorBridge: Send + Sync {
// Required methods
fn begin_edit(&self, id: u32);
fn set_param(&self, id: u32, normalized: f64);
fn end_edit(&self, id: u32);
fn request_resize(&self, w: u32, h: u32) -> bool;
fn get_param(&self, id: u32) -> f64;
fn get_param_plain(&self, id: u32) -> f64;
fn format_param(&self, id: u32) -> String;
fn get_meter(&self, id: u32) -> f32;
fn get_state(&self) -> Vec<u8> ⓘ;
fn set_state(&self, data: Vec<u8>);
fn transport(&self) -> Option<TransportInfo>;
// Provided method
fn format_param_into(&self, id: u32, out: &mut String) { ... }
}Expand description
Bridge between the editor and the host / plugin. Format wrappers
(CLAP / VST3 / VST2 / AU / AAX / LV2) implement this trait - or
build a ClosureBridge from per-method closures - and pass an
Arc<dyn EditorBridge> to the editor through PluginContext.
Editors call into the bridge for everything they can’t do
directly: starting / ending an automation gesture, reading or
writing parameters in normalized or plain form, requesting a
window resize, exchanging custom state, sampling the host’s
transport. Implementations carry whatever per-format pointers
the work needs (clap_host*, AEffect*, an Arc<P> for the
param store, etc.).
Send + Sync is required so editors can clone the
Arc<dyn EditorBridge> and hand it to UI worker threads or
background animation timers without forcing every implementor to
rederive thread-safety bounds.
Required Methods§
Sourcefn begin_edit(&self, id: u32)
fn begin_edit(&self, id: u32)
Start an automation gesture for id. Hosts that show “touched”
state in the automation lane use this to render the
in-progress edit.
Sourcefn set_param(&self, id: u32, normalized: f64)
fn set_param(&self, id: u32, normalized: f64)
Set parameter id to normalized (clamped to 0.0..=1.0).
Format wrappers usually plumb this through both the plugin’s
own param store and the host’s automation channel.
Sourcefn end_edit(&self, id: u32)
fn end_edit(&self, id: u32)
End the automation gesture started by Self::begin_edit.
Sourcefn request_resize(&self, w: u32, h: u32) -> bool
fn request_resize(&self, w: u32, h: u32) -> bool
Ask the host to resize the editor window to (w, h) logical
points. Returns true if the host accepted the request.
Sourcefn get_param(&self, id: u32) -> f64
fn get_param(&self, id: u32) -> f64
Read the parameter’s current normalized value from the plugin (host→GUI sync path).
Sourcefn get_param_plain(&self, id: u32) -> f64
fn get_param_plain(&self, id: u32) -> f64
Read the parameter’s current plain (denormalized) value.
Sourcefn format_param(&self, id: u32) -> String
fn format_param(&self, id: u32) -> String
Format the parameter’s current value as a display string,
applying the plugin’s format_value impl + unit suffix.
Sourcefn get_meter(&self, id: u32) -> f32
fn get_meter(&self, id: u32) -> f32
Read a meter value (0.0–1.0) by meter ID. Returns 0.0 if the meter ID isn’t registered.
Sourcefn get_state(&self) -> Vec<u8> ⓘ
fn get_state(&self) -> Vec<u8> ⓘ
Read the plugin’s custom state (everything outside the
parameter system). Returns an empty Vec when the plugin has
no custom state.
Sourcefn transport(&self) -> Option<TransportInfo>
fn transport(&self) -> Option<TransportInfo>
Most-recently-reported host transport state, or None if the
host does not expose transport to plugin editors or the plugin
has not yet received a process block.
Format wrappers populate a shared TransportSlot
from their process callback; this method reads from it.
Provided Methods§
Sourcefn format_param_into(&self, id: u32, out: &mut String)
fn format_param_into(&self, id: u32, out: &mut String)
Format into a caller-provided buffer instead of returning a
fresh String. The default impl calls
Self::format_param and copies, so the bridge-internal
allocation still happens; the win for the caller is that the
out buffer’s capacity is reused across calls (e.g.
ParamCache::sync polls one label per changed param per
frame and would otherwise drop+reallocate the cached
String slot every time). Bridges that produce the formatted
string from raw value bytes can override to drop the
internal allocation too.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".