pub trait Facet {
// Required methods
fn title(&self) -> &str;
fn ui(&mut self, ui: &mut Ui);
fn state_json(&self) -> Value;
// Provided methods
fn caps(&self) -> FacetCaps { ... }
fn scale(&self) -> f32 { ... }
fn set_scale(&mut self, _scale: f32) { ... }
fn selection_json(&self) -> Value { ... }
fn copy(&mut self) -> Option<String> { ... }
fn cut(&mut self) -> Option<String> { ... }
fn paste(&mut self, _text: &str) -> bool { ... }
fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)> { ... }
}Expand description
The facett component contract. Every facet — graph, map, pipeline, table, the ported nornir viewers — implements this, so consumers (korp, nornir, …) compose them uniformly and get headless robot-testing for free.
The three things a component owes its host:
- a title (tab label / panel heading),
- how to draw itself into egui,
- its observable state as JSON — dumped to
$APP_STATEfor headless assertions. Rule: every visible list/status/count goes instate_json.
Required Methods§
Provided Methods§
Sourcefn set_scale(&mut self, _scale: f32)
fn set_scale(&mut self, _scale: f32)
Set the uniform scale; clamp internally. Default no-op (not scalable).
Sourcefn selection_json(&self) -> Value
fn selection_json(&self) -> Value
The current selection as JSON (also folded into state_json by
convention). Null when nothing/none selectable.
Sourcefn copy(&mut self) -> Option<String>
fn copy(&mut self) -> Option<String>
Clipboard hooks — see clipboard.rs. Defaults: nothing to give/take. Returns the text to place on the clipboard (None = nothing copyable now).
Sourcefn cut(&mut self) -> Option<String>
fn cut(&mut self) -> Option<String>
Like copy, but also removes the selection. Default delegates to copy.
Sourcefn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
Optional downcast handle for hosts that need typed access to a specific
facet living inside a FacetDeck (e.g. a robot-UI driver clicking an
app-level control that must forward to a concrete component’s own API).
Defaulted to None so no existing facet has to change; a component opts in
by returning Some(self).
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".