4 个版本
使用旧的 Rust 2015
0.2.0 | 2017年1月26日 |
---|---|
0.1.2 | 2016年12月1日 |
0.1.1 | 2016年11月28日 |
0.1.0 | 2016年2月19日 |
#13 in #github-webhook
19KB
252 行
afterparty
您的提交在 GitHub 后去的地方
Afterparty 是一个用于在 Rust 中构建 GitHub webhook 集成的库。
文档
请在此处查找:http://softprops.github.io/afterparty
安装
将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
afterparty = "0.1"
用法
Afterparty 有两个关键抽象:一个 Hook
:一个处理程序接口,用于 webhook 交付,以及一个 Hub
:一个钩子注册表。一个 Hub
为感兴趣的钩子提供 Delivery
实例。
Delivery
编码所有相关的 webhook 请求信息,包括交付的唯一标识符、事件名称以及表示为 Event
枚举类型的静态类型有效载荷。
钩子通过 Hub
的 handle
和 handle_authenticated
函数订阅 事件。要订阅多个事件,请使用 "*" 订阅,并对提供的交付的有效载荷值进行模式匹配。
要注册您的 webhook 至 GitHub,请访问您仓库的钩子配置表单 https://github.com/{login}/{repo}/settings/hooks/new
并选择您希望 GitHub 通知您的服务器的事件。
Hubs 实现了 Hyper 的 Server Handler 特性,以便它可以挂载到任何 Hyper 服务器。
extern crate afterparty;
extern crate hyper;
use hyper::Server;
use afterparty::{Delivery, Event, Hub};
fn main() {
let mut hub = Hub::new();
hub.handle("*", |delivery: &Delivery| {
println!("rec delivery {:#?}", delivery)
});
hub.handle_authenticated("pull_request", "secret", |delivery: &Delivery| {
println!("rec authenticated delivery");
match delivery.payload {
Event::PullRequest { ref action, ref sender, .. } => {
println!("sender {} action {}", sender.login, action)
},
_ => ()
}
});
let svc = Server::http("0.0.0.0:4567")
.unwrap()
.handle(hub);
println!("hub is up");
svc.unwrap();
}
关于 UFCS 的说明
如果您的作用域中同时有 hyper::server::Handler 和 hubcaps::Hub,您可能需要使用 UFCS 来在 HUB 实例上调用 handle 方法。
例如...
extern crate afterparty;
extern crate hyper;
use hyper::server::Handle;
use afterparty::{Delivery, Hub};
fn main() {
let mut hub = Hub::new();
hubcaps::Hub::handle(&mut hub, "*", |delivery: &Delivery| { });
}
构建
就 Rust 项目的构建而言,这个库有些特别。此库使用 serde 进行 json 编码/解码,并专注于稳定的 Rust 发布版本,因此采用了在构建时进行代码生成的策略。在此之前,会尝试根据存储在数据目录中的 GitHub api 文档 json 生成结构体。存在一个已知问题,即使用新的 json 集合时省略了 repo deployments_url
字段。由于这个原因,serde 在反序列化时将报错。目前,已手动在存储的 json 数据集中添加了此字段。预计 Serde 0.7 将很快发布,这将使此库能够避免这类运行时反序列化错误。
Doug Tangren (softprops) 2015-2016
依赖关系
~12MB
~250K SLoC