Crates.io | tonic_catch |
lib.rs | tonic_catch |
version | 0.1.3 |
source | src |
created_at | 2022-01-13 04:33:58.869379 |
updated_at | 2023-06-06 15:14:16.143087 |
description | catch any tonic await error convert into Status |
homepage | |
repository | https://github.com/rmw-lib/tonic_catch |
max_upload_size | |
id | 513177 |
size | 3,783 |
catch any tonic await error convert into Status
for issue https://github.com/hyperium/tonic/discussions/716#discussioncomment-991404
use example:
use crate::var::evt::Evt;
use async_std::channel::Sender;
use tonic_catch::{tonic_catch, Result, Error};
use log::info;
use std::net::SocketAddr;
use tonic::{transport::Server, Request, Response};
pub mod proto {
tonic::include_proto!("proto");
}
use proto::rmw_server::{Rmw, RmwServer};
use proto::Url;
pub struct RmwSrv {
sender: Sender<Evt>,
}
#[tonic_catch]
impl Rmw for RmwSrv {
async fn head(&self, request: Request<Url>) -> Result<()> {
let addr = match request.remote_addr() {
Some(addr) => addr.to_string(),
None => String::new(),
};
let url = request.into_inner();
println!("{:?} {}/{}", addr, url.addr, url.path);
self
.sender
.send(Evt::Head(url.addr.parse()?, url.path))
.await?;
Ok(Response::new(()))
}
}
pub async fn run(addr: SocketAddr, sender: Sender<Evt>) -> anyhow::Result<()> {
let rmw = RmwServer::new(RmwSrv { sender });
info!("grpc://{}", addr);
Server::builder()
.accept_http1(true)
.add_service(tonic_web::enable(rmw))
.serve(addr)
.await?;
Ok(())
}
This project is part of the rmw.link Code Project .
本项目隶属于人民网络(rmw.link) 代码计划。