Enum Val

Source
pub enum Val<S: State, T: 'static> {
    State {
        factory: Box<dyn Fn(&S) -> T>,
        value: Option<T>,
    },
    Val(T),
}
Expand description

A value that’s either dependent on the state or independent.

Use Val::new_state or the val!() macro from the maycoon-macros crate to create a new state dependent value.

Use Val::new_val or just YourValue.into() to create an independent value. You can also use val!(), because why not?

NOTE for Widget Developers: Inside the Widget::update method, all values must be invalidated using Val::invalidate.

Variants§

§

State

A state dependent value.

The inner value may need to be re-computed, when invalid.

Fields

§factory: Box<dyn Fn(&S) -> T>

The factory that produces the inner value.

This is called in order to “compute” the value T.

§value: Option<T>

The inner value.

If computed (valid), this is Some(T). If not computed (invalid), this is None.

§

Val(T)

An independent value.

The inner value will always be the same and does not need any re-computation.

More performant than state dependent values.

Implementations§

Source§

impl<S: State, T: 'static> Val<S, T>

Source

pub fn new_state(factory: impl Fn(&S) -> T + 'static) -> Self

Create a new state dependent value from the given closure.

Source

pub fn new_val(value: T) -> Self

Create a new state independent value.

Source

pub fn get(self, state: &S) -> T

Get the inner value of this Val.

This will compute the value if it’s state dependent and not yet computed, so it will always return something.

Source

pub fn get_ref(&mut self, state: &S) -> &T

Get a reference to the inner value of this Val.

This will compute the value if it’s state dependent and not yet computed, so it will always return something.

Source

pub fn get_mut(&mut self, state: &S) -> &mut T

Get a mutable reference to the inner value of this Val.

This will compute the value if it’s state dependent and not yet computed, so it will always return something.

Source

pub fn compute(&mut self, state: &S)

If the inner value is state dependent, compute it using the given state.

Source

pub fn invalid(&self) -> bool

Returns if the inner value is state dependent and not yet computed.

Source

pub fn invalidate(&mut self)

Invalidates the inner value, if it’s state dependent.

This makes Val::get and other methods re-compute the value (if it’s state dependent).

Source

pub fn value(self) -> Option<T>

Returns the inner value or None if it’s state dependent and not yet computed.

Source

pub fn value_ref(&self) -> Option<&T>

Returns a reference to the inner value or None if it’s state dependent and not yet computed.

Source

pub fn value_mut(&mut self) -> Option<&mut T>

Returns a mutable reference to the inner value or None if it’s state dependent and not yet computed.

Source

pub fn map<U, F: Fn(T) -> U + 'static>(self, f: F) -> Val<S, U>

Applies a function to the inner value, transforming it into another value.

Similar to the Option::map method.

Trait Implementations§

Source§

impl<S: State, T> From<T> for Val<S, T>

Source§

fn from(value: T) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<S, T> Freeze for Val<S, T>
where T: Freeze,

§

impl<S, T> !RefUnwindSafe for Val<S, T>

§

impl<S, T> !Send for Val<S, T>

§

impl<S, T> !Sync for Val<S, T>

§

impl<S, T> Unpin for Val<S, T>
where T: Unpin,

§

impl<S, T> !UnwindSafe for Val<S, T>

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
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<!> for T

Source§

fn from(t: !) -> T

Converts to this type from the input type.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more