Skip to content

Commit 109311a

Browse files
authored
chore: improve supported services example (#3)
1 parent 2764b3b commit 109311a

File tree

23 files changed

+824
-125
lines changed

23 files changed

+824
-125
lines changed

examples/services/grpc/src/main.rs

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
1+
use std::sync::Arc;
2+
13
pub mod helloworld {
24
include!("generated/helloworld.rs"); // Include generated code
35
}
46

5-
use std::sync::Arc;
67
use mikros::features;
7-
use mikros::service::{builder::ServiceBuilder, context, lifecycle};
8+
use mikros::service::{builder::ServiceBuilder, context};
89
use tonic::{Request, Response, Status};
910

1011
use helloworld::greeter_server::{Greeter, GreeterServer};
1112
use helloworld::{HelloReply, HelloRequest};
1213

1314
#[derive(Clone)]
1415
pub struct MyGreeter {
15-
ctx: Arc<mikros::FutureMutex<Context>>
16+
ctx: Arc<mikros::FutureMutex<Context>>,
1617
}
1718

1819
impl MyGreeter {
1920
pub fn new(ctx: Arc<mikros::FutureMutex<Context>>) -> Self {
20-
Self {
21-
ctx: ctx.clone()
22-
}
21+
Self { ctx: ctx.clone() }
2322
}
2423
}
2524

2625
#[tonic::async_trait]
2726
impl Greeter for MyGreeter {
28-
async fn say_hello(&self, request: Request<HelloRequest>) -> Result<Response<HelloReply>, Status> {
27+
async fn say_hello(
28+
&self,
29+
request: Request<HelloRequest>,
30+
) -> Result<Response<HelloReply>, Status> {
2931
let ctx = context::from_request(&request);
3032
ctx.logger().info("say hello RPC called");
31-
ctx.logger().info(format!("the inner value is: {}", self.ctx.lock().await.value).as_str());
33+
ctx.logger()
34+
.info(format!("the inner value is: {}", self.ctx.lock().await.value).as_str());
3235

3336
let _ = features::example::retrieve(&ctx, |api| {
3437
api.do_something();
@@ -45,41 +48,25 @@ impl Greeter for MyGreeter {
4548

4649
#[derive(Clone)]
4750
pub struct Context {
48-
value: i32
49-
}
50-
51-
#[tonic::async_trait]
52-
impl lifecycle::Lifecycle for Context {
53-
async fn on_start(&mut self) -> mikros::errors::Result<()> {
54-
println!("grpc on_start called");
55-
self.value = 42;
56-
Ok(())
57-
}
58-
59-
async fn on_finish(&self) -> mikros::errors::Result<()> {
60-
Ok(())
61-
}
51+
value: i32,
6252
}
6353

6454
#[tokio::main]
6555
async fn main() -> Result<(), Box<dyn std::error::Error>> {
66-
let ctx = Arc::new(mikros::FutureMutex::new(Context{ value: 0 }));
56+
let ctx = Arc::new(mikros::FutureMutex::new(Context { value: 0 }));
6757
let greeter = Arc::new(MyGreeter::new(ctx.clone()));
6858
let greeter_service = GreeterServer::from_arc(greeter);
6959

70-
let svc = ServiceBuilder::default()
71-
// .grpc(greeter_service)
72-
.grpc_with_lifecycle(greeter_service, ctx.clone())
73-
.build();
60+
let svc = ServiceBuilder::default().grpc(greeter_service).build();
7461

7562
match svc {
7663
Ok(mut svc) => {
7764
if let Err(e) = svc.start().await {
7865
println!("application error: {}", e);
7966
}
80-
},
81-
Err(e) => panic!("{}", e.to_string())
67+
}
68+
Err(e) => panic!("{}", e.to_string()),
8269
}
8370

8471
Ok(())
85-
}
72+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "grpc_with_lifecycle"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
mikros = { path = "../../../" }
8+
prost = "0.13.3"
9+
tokio = { version = "1.41.1", features = ["full"] }
10+
tonic = "0.12.3"
11+
12+
[build-dependencies]
13+
tonic-build = "0.12.3"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
fn main() {
2+
tonic_build::configure()
3+
.out_dir("src/generated")
4+
.compile_protos(&["proto/helloworld.proto"], &["proto"])
5+
.unwrap_or_else(|e| panic!("Failed to compile protos: {:?}", e));
6+
7+
println!("cargo:rerun-if-changed=proto/helloworld.proto");
8+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// proto/helloworld.proto
2+
syntax = "proto3";
3+
4+
package helloworld;
5+
6+
// The greeting service definition.
7+
service Greeter {
8+
// Sends a greeting
9+
rpc SayHello (HelloRequest) returns (HelloReply);
10+
}
11+
12+
// The request message containing the user's name.
13+
message HelloRequest {
14+
string name = 1;
15+
}
16+
17+
// The response message containing the greetings.
18+
message HelloReply {
19+
string message = 1;
20+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
name = "grpc-example"
2+
version = "v0.1.0"
3+
language = "rust"
4+
product = "examples"
5+
types = ["grpc"]

0 commit comments

Comments
 (0)