Struct perseus::state::RxResult

source ·
pub struct RxResult<T, E>(_)
where
         T: MakeRx + 'static,
         <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static,
         E: Clone + 'static;
Expand description

A wrapper for fallible reactive state.

This is intended for use with the suspense state feature and nested state. Imagine you have a struct Song that you derive ReactiveState on, having the album: Album field use nested reactivity, since Album has multiple fields itself. However, for some reason, you’d like to make the album field use #[rx(suspense = "your_handler_fn")]. If your_handler_fn() could lead to an error, then you have to be able to use the pattern song.album.get()?.name.get(), rather than just song.album.name.get(). The extra .get()? is needed since the Album is what is suspended state, and it could be an error of some sort. What you need is a reactive Result, and this is that. Any type can be placed in this that implements MakeRx, Serialize, and Deserialize. No restrictions are placed on the error type.

Note that this is intended for use with fallible, nested, suspended state, although it could be easily used in any case where you want to use reactive state that could be an error, conveniently enabling the pattern explained above.

If you want non-nested, fallible, suspended state, you can simply use Result<T, E> from the standard library.

Trait Implementations§

source§

impl<T, E> Clone for RxResult<T, E>where T: MakeRx + 'static + Clone, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Clone + 'static + Clone,

source§

fn clone(&self) -> RxResult<T, E>

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl<T, E> Debug for RxResult<T, E>where T: MakeRx + 'static + Debug, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Clone + 'static + Debug,

source§

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

Formats the value using the given formatter. Read more
source§

impl<'de, T, E> Deserialize<'de> for RxResult<T, E>where T: MakeRx + 'static + Deserialize<'de>, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Clone + 'static + Deserialize<'de>,

source§

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

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

impl<T, E> From<Result<T, E>> for RxResult<T, E>where T: MakeRx + Serialize + DeserializeOwned + 'static, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Serialize + DeserializeOwned + Clone + 'static,

source§

fn from(val: Result<T, E>) -> Self

Converts to this type from the input type.
source§

impl<T, E> MakeRx for RxResult<T, E>where T: MakeRx + Serialize + DeserializeOwned + 'static, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Serialize + DeserializeOwned + Clone + 'static,

§

type Rx = RxResultRx<T, E>

The type of the reactive version that we’ll convert to. By having this as an associated type, we can associate the reactive type with the unreactive, meaning greater inference and fewer arguments that the user needs to provide to macros.
source§

fn make_rx(self) -> Self::Rx

Transforms an instance of the struct into its reactive version.
source§

const HSR_IGNORE: bool = false

This should be set to true to have this type be ignored by the hot state reloading system, which can be useful when working with state that you will regularly update in development. Read more
source§

impl<T, E> Serialize for RxResult<T, E>where T: MakeRx + 'static + Serialize, <T as MakeRx>::Rx: MakeUnrx<Unrx = T> + Freeze + Clone + 'static, E: Clone + 'static + Serialize,

source§

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

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl<T, E> RefUnwindSafe for RxResult<T, E>where E: RefUnwindSafe, T: RefUnwindSafe,

§

impl<T, E> Send for RxResult<T, E>where E: Send, T: Send,

§

impl<T, E> Sync for RxResult<T, E>where E: Sync, T: Sync,

§

impl<T, E> Unpin for RxResult<T, E>where E: Unpin, T: Unpin,

§

impl<T, E> UnwindSafe for RxResult<T, E>where E: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,