1 个不稳定版本
0.1.0 | 2021 年 8 月 25 日 |
---|
#13 在 #failed
22KB
797 行
Starling Webhooks
Rust 类型用于处理来自 Starling 银行 webhook API 的数据。
用法
以下示例展示了使用 hyper
和 tokio
构建的基本 HTTP 服务器,该服务器将 /feed-item
上的有效载荷数据反序列化为 WebhookFeedItem
类型,并以调试格式显示。其他所有路由都返回 404。
此示例的源代码位于 /examples/hyper-server
,其中包含依赖项和版本。
use std::convert::Infallible;
use std::net::{Ipv4Addr, SocketAddrV4};
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response, Server};
use starling_webhooks::WebhookFeedItem;
async fn router(req: Request<Body>) -> Result<Response<Body>, Infallible> {
let response = match req.uri().path() {
"/feed-item" => handle_feed_item(req).await,
_ => Response::builder().status(404).body(Body::empty()).unwrap(),
};
Ok(response)
}
async fn handle_feed_item(mut req: Request<Body>) -> Response<Body> {
// Get the body itself
let body = hyper::body::to_bytes(req.body_mut())
.await
.expect("Failed to get the body");
// Deserialize it and display it
let webhook: WebhookFeedItem =
serde_json::from_slice(&body).expect("Failed to deserialize the content");
dbg!(&webhook);
Response::default()
}
#[tokio::main]
async fn main() {
let service = make_service_fn(|_| async { Ok::<_, Infallible>(service_fn(router)) });
let addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 4000).into();
let server = Server::bind(&addr).serve(service);
server.await.expect("Failed to handle errors");
}
依赖项
~1.6–2.4MB
~45K SLoC