Skip to main content

Presentation

Struct Presentation 

pub struct Presentation {
    pub elements: Vec<ElementSpec>,
    pub theme: Option<Theme>,
    pub messages: BTreeMap<String, LocalizedText>,
}
Expand description

How a profile presents itself on the dashboard: its custom elements and theme.

A Profile carries an optional presentation, so a deployment’s dashboard offers exactly the sensor types its profiles introduce and renders them the way the profile intends. The dashboard turns these declarations into the catalog it serves to the page.

Fields§

§elements: Vec<ElementSpec>

The custom sensors and node stats this profile contributes.

§theme: Option<Theme>

An optional theme that tints the dashboard.

§messages: BTreeMap<String, LocalizedText>

Localized text for the stable codes this profile introduces, keyed by the page’s message key (a discrete state such as "state.flushing" or an event such as "event.filter_clog"). The dashboard ships no translation for a code it never knew, so a profile that emits a custom state or event supplies its wording here.

Implementations§

§

impl Presentation

pub fn new() -> Presentation

Starts an empty presentation.

§Returns

A presentation with no elements and no theme.

pub fn from_json(text: &str) -> Result<Presentation, Error>

Loads a presentation from its JSON text, the presentation object of a manifest.

§Arguments
  • text - the JSON object.
§Returns

The presentation.

§Errors

Returns Error::Codec if the text is not a presentation.

pub fn to_json(&self) -> Result<String, Error>

Serializes this presentation to the JSON object a manifest carries.

§Returns

The pretty-printed JSON text.

§Errors

Returns Error::Codec if the presentation cannot be serialized.

pub fn with_element(self, element: ElementSpec) -> Presentation

Adds a custom element.

§Arguments
  • element - the sensor or stat to contribute.
§Returns

The presentation, for chaining.

pub fn with_elements( self, elements: impl IntoIterator<Item = ElementSpec>, ) -> Presentation

Declares several custom elements at once.

§Arguments
  • elements - the elements to declare, in the order they should be offered.
§Returns

The presentation, for chaining.

§Examples
use pamoja_profile::{ElementSpec, Presentation, Viz};

let presentation = Presentation::new().with_elements([
    ElementSpec::new("ph", "ph", "Acidity", Viz::Dial).with_band(6.0, 8.0),
    ElementSpec::new("water_turbidity", "ntu", "Turbidity", Viz::Gauge),
]);
assert_eq!(presentation.elements.len(), 2);

pub fn with_theme(self, theme: Theme) -> Presentation

Sets the theme that tints the dashboard.

§Arguments
  • theme - the theme tokens to apply.
§Returns

The presentation, for chaining.

pub fn with_message( self, key: impl Into<String>, text: impl Into<LocalizedText>, ) -> Presentation

Supplies localized text for a stable code this profile introduces.

Use this for a custom discrete state or event the dashboard ships no wording for, so the page renders it as words rather than the raw code.

§Arguments
  • key - the page message key, such as "state.flushing" or "event.filter_clog".
  • text - the text, one string for every locale or a per-locale map.
§Returns

The presentation, for chaining.

pub fn check(&self) -> Result<(), Error>

Checks the presentation for what the dashboard could not draw.

Profile::check runs this on the presentation a profile carries.

§Returns

Nothing when every element, message, and theme color is usable.

§Errors

Returns Error::Codec naming the first problem: an element with no key, unit, or label, a key declared twice, a band whose low end is not below its high end, a starting value that is not a finite number, both a starting value and a state, or a state that is not a state. code; a message whose code is neither a state. nor an event. code, that is empty, or that gives no en text; or a theme color that is empty.

§Examples
use pamoja_profile::{ElementSpec, Presentation, Viz};

let upside_down = Presentation::new().with_element(
    ElementSpec::new("water_turbidity", "ntu", "Turbidity", Viz::Gauge).with_band(5.0, 0.0),
);
let refused = upside_down.check().unwrap_err().to_string();
assert!(refused.contains("the low end comes first"));

Trait Implementations§

§

impl Clone for Presentation

§

fn clone(&self) -> Presentation

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for Presentation

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Default for Presentation

§

fn default() -> Presentation

Returns the “default value” for a type. Read more
§

impl<'de> Deserialize<'de> for Presentation

§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Presentation, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl PartialEq for Presentation

§

fn eq(&self, other: &Presentation) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
§

impl Serialize for Presentation

§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
§

impl StructuralPartialEq for Presentation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.