Skip to main content

Facet

Trait Facet 

Source
pub trait Facet {
Show 14 methods // 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)> { ... } fn kind(&self) -> &'static str { ... } fn portable_state(&self) -> Option<Value> { ... } fn load_state(&mut self, _state: &Value) -> bool { ... }
}
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:

  1. a title (tab label / panel heading),
  2. how to draw itself into egui,
  3. its observable state as JSON — dumped to $APP_STATE for headless assertions. Rule: every visible list/status/count goes in state_json.

Required Methods§

Source

fn title(&self) -> &str

Source

fn ui(&mut self, ui: &mut Ui)

Source

fn state_json(&self) -> Value

Provided Methods§

Source

fn caps(&self) -> FacetCaps

What this facet can do. Override to opt into capabilities.

Source

fn scale(&self) -> f32

Current uniform scale (1.0 = native). Override if caps().scalable.

Source

fn set_scale(&mut self, _scale: f32)

Set the uniform scale; clamp internally. Default no-op (not scalable).

Source

fn selection_json(&self) -> Value

The current selection as JSON (also folded into state_json by convention). Null when nothing/none selectable.

Source

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).

Source

fn cut(&mut self) -> Option<String>

Like copy, but also removes the selection. Default delegates to copy.

Source

fn paste(&mut self, _text: &str) -> bool

Accept pasted text. Returns true if consumed.

Source

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).

Source

fn kind(&self) -> &'static str

Stable component-type id (e.g. "jobview", "graphpan", "table"). Two instances with the same kind can exchange portable state; the empty default "" means opted out of cross-instance clone.

Source

fn portable_state(&self) -> Option<Value>

The portable subset of this facet’s state — the fields a same-kind sibling can adopt. None = not cloneable. Kept SEPARATE from state_json (the introspection dump, which may carry derived / render-only data) so this stays round-trippable through load_state.

Source

fn load_state(&mut self, _state: &Value) -> bool

Adopt a portable state produced by portable_state on a same-kind sibling. Returns true if accepted. Default false (opt-in per component).

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§