restate-sdk 0.10.0

Restate SDK for Rust
Documentation
use rand::Rng;
use restate_sdk::prelude::*;

#[restate_sdk::service]
trait FailureExample {
    #[name = "doRun"]
    async fn do_run() -> Result<(), TerminalError>;
}

struct FailureExampleImpl;

#[derive(Debug, thiserror::Error)]
#[error("I'm very bad, retry me")]
struct MyError;

impl FailureExample for FailureExampleImpl {
    async fn do_run(&self, context: Context<'_>) -> Result<(), TerminalError> {
        context
            .run::<_, _, ()>(|| async move {
                if rand::rng().next_u32().is_multiple_of(4) {
                    Err(TerminalError::new("Failed!!!"))?
                }

                Err(MyError)?
            })
            .await?;

        Ok(())
    }
}

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt::init();
    HttpServer::new(Endpoint::builder().bind(FailureExampleImpl.serve()).build())
        .listen_and_serve("0.0.0.0:9080".parse().unwrap())
        .await;
}