Skip to content

Commit ff4e30b

Browse files
authored
Merge pull request #34 from restatedev/docs
Documentation for Rust SDK
2 parents 391d841 + 41ee512 commit ff4e30b

File tree

9 files changed

+935
-32
lines changed

9 files changed

+935
-32
lines changed

examples/services/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub mod my_service;
2+
pub mod my_virtual_object;
3+
pub mod my_workflow;

examples/services/my_service.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use restate_sdk::prelude::*;
2+
3+
#[restate_sdk::service]
4+
pub trait MyService {
5+
async fn my_handler(greeting: String) -> Result<String, HandlerError>;
6+
}
7+
8+
pub struct MyServiceImpl;
9+
10+
impl MyService for MyServiceImpl {
11+
async fn my_handler(&self, _ctx: Context<'_>, greeting: String) -> Result<String, HandlerError> {
12+
Ok(format!("{greeting}!"))
13+
}
14+
}
15+
16+
#[tokio::main]
17+
async fn main() {
18+
tracing_subscriber::fmt::init();
19+
HttpServer::new(Endpoint::builder().bind(MyServiceImpl.serve()).build())
20+
.listen_and_serve("0.0.0.0:9080".parse().unwrap())
21+
.await;
22+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
use restate_sdk::prelude::*;
2+
3+
#[restate_sdk::object]
4+
pub trait MyVirtualObject {
5+
async fn my_handler(name: String) -> Result<String, HandlerError>;
6+
#[shared]
7+
async fn my_concurrent_handler(name: String) -> Result<String, HandlerError>;
8+
}
9+
10+
pub struct MyVirtualObjectImpl;
11+
12+
impl MyVirtualObject for MyVirtualObjectImpl {
13+
async fn my_handler(
14+
&self,
15+
ctx: ObjectContext<'_>,
16+
greeting: String,
17+
) -> Result<String, HandlerError> {
18+
Ok(format!("Greetings {} {}", greeting, ctx.key()))
19+
}
20+
async fn my_concurrent_handler(
21+
&self,
22+
ctx: SharedObjectContext<'_>,
23+
greeting: String,
24+
) -> Result<String, HandlerError> {
25+
Ok(format!("Greetings {} {}", greeting, ctx.key()))
26+
}
27+
}
28+
29+
#[tokio::main]
30+
async fn main() {
31+
tracing_subscriber::fmt::init();
32+
HttpServer::new(
33+
Endpoint::builder()
34+
.bind(MyVirtualObjectImpl.serve())
35+
.build(),
36+
)
37+
.listen_and_serve("0.0.0.0:9080".parse().unwrap())
38+
.await;
39+
}

examples/services/my_workflow.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use restate_sdk::prelude::*;
2+
3+
#[restate_sdk::workflow]
4+
pub trait MyWorkflow {
5+
async fn run(req: String) -> Result<String, HandlerError>;
6+
#[shared]
7+
async fn interact_with_workflow() -> Result<(), HandlerError>;
8+
}
9+
10+
pub struct MyWorkflowImpl;
11+
12+
impl MyWorkflow for MyWorkflowImpl {
13+
async fn run(&self, _ctx: WorkflowContext<'_>, _req: String) -> Result<String, HandlerError> {
14+
// implement workflow logic here
15+
16+
Ok(String::from("success"))
17+
}
18+
async fn interact_with_workflow(
19+
&self,
20+
_ctx: SharedWorkflowContext<'_>,
21+
) -> Result<(), HandlerError> {
22+
// implement interaction logic here
23+
// e.g. resolve a promise that the workflow is waiting on
24+
25+
Ok(())
26+
}
27+
}
28+
29+
#[tokio::main]
30+
async fn main() {
31+
tracing_subscriber::fmt::init();
32+
HttpServer::new(Endpoint::builder().bind(MyWorkflowImpl.serve()).build())
33+
.listen_and_serve("0.0.0.0:9080".parse().unwrap())
34+
.await;
35+
}

0 commit comments

Comments
 (0)