An open API service indexing awesome lists of open source software.

https://github.com/rmw-lib/tonic_catch


https://github.com/rmw-lib/tonic_catch

Last synced: 3 days ago
JSON representation

Awesome Lists containing this project

README

          

# tonic_catch

catch any tonic await error convert into Status

for issue https://github.com/hyperium/tonic/discussions/716#discussioncomment-991404

use example:

```rust
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,
}

#[tonic_catch]
impl Rmw for RmwSrv {
async fn head(&self, request: Request) -> 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) -> 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(())
}
```

## About

This project is part of the **[rmw.link](//rmw.link)** Code Project .

## 关于

本项目隶属于**人民网络([rmw.link](//rmw.link))** 代码计划。

![人民网络](https://raw.githubusercontent.com/rmw-link/logo/master/rmw.red.bg.svg)