CombineErrors

Trait CombineErrors 

Source
pub trait CombineErrors {
    type Ok;
    type Error;

    // Required method
    fn combine_errors(self) -> Result<Self::Ok, ErrorStream<Self::Error>>;
}
Expand description

A trait for converting a tuple of Result<_, ErrorStream<_>>s into a Result of a tuple or combined ErrorStream.

Required Associated Types§

Source

type Ok

The type of the output if all results are Ok.

Source

type Error

The type of the output if any result is Err.

Required Methods§

Source

fn combine_errors(self) -> Result<Self::Ok, ErrorStream<Self::Error>>

Combine errors from multiple places into one. This can be thought of as a kind of parallel ?.

If your goal is to show the user as many errors as possible, you should call this as late as possible, on as wide a tuple as you can.

Example usage:

use spacetimedb_data_structures::error_stream::{ErrorStream, CombineErrors};

struct MyError { cause: String };

fn age() -> Result<i32, ErrorStream<MyError>> {
    //...
}

fn name() -> Result<String, ErrorStream<MyError>> {
    // ...
}

fn likes_dogs() -> Result<bool, ErrorStream<MyError>> {
    // ...
}

fn description() -> Result<String, ErrorStream<MyError>> {
    // A typical usage of the API:
    // Collect multiple `Result`s in parallel, only using
    // `.combine_errors()?` once no more progress can be made.
    let (age, name, likes_dogs) =
        (age(), name(), likes_dogs()).combine_errors()?;

    Ok(format!(
        "{} is {} years old and {}",
        name,
        age,
        if likes_dogs { "likes dogs" } else { "does not like dogs" }
    ))
}

Implementations on Foreign Types§

Source§

impl<T1, T2, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>)

Source§

impl<T1, T2, T3, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, T8, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>, Result<T8, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>, Result<T8, ErrorStream<E>>, Result<T9, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>, Result<T8, ErrorStream<E>>, Result<T9, ErrorStream<E>>, Result<T10, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>, Result<T8, ErrorStream<E>>, Result<T9, ErrorStream<E>>, Result<T10, ErrorStream<E>>, Result<T11, ErrorStream<E>>)

Source§

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, E> CombineErrors for (Result<T1, ErrorStream<E>>, Result<T2, ErrorStream<E>>, Result<T3, ErrorStream<E>>, Result<T4, ErrorStream<E>>, Result<T5, ErrorStream<E>>, Result<T6, ErrorStream<E>>, Result<T7, ErrorStream<E>>, Result<T8, ErrorStream<E>>, Result<T9, ErrorStream<E>>, Result<T10, ErrorStream<E>>, Result<T11, ErrorStream<E>>, Result<T12, ErrorStream<E>>)

Implementors§