6个版本
使用旧的Rust 2015
0.4.2 | 2019年1月22日 |
---|---|
0.4.1 | 2019年1月22日 |
0.2.2 | 2019年1月16日 |
#1226 在 HTTP服务器
每月 35 次下载
31KB
252 行
afterparty
您的提交在GitHub之后的去向
Afterparty是一个用于在Rust中构建GitHub webhook集成的库。
文档
请在此处查看:这里
安装
将以下内容添加到您的Cargo.toml
文件中
[dependencies]
afterparty = "0.1"
用法
Afterparty有两个关键抽象,一个是Hook
:一个用于处理webhook投递的处理程序接口,另一个是Hub
:一个用于注册hook的注册表。一个Hub
为感兴趣的hook提供Delivery
实例。
Delivery
编码了所有相关的webhook请求信息,包括投递的唯一标识符、事件名称以及以Event
枚举类型表示的静态类型有效载荷。
hook通过Hub
的handle
和handle_authenticated
函数订阅事件。要订阅多个事件,可以使用"*"并匹配提供的投递的有效载荷值。
要将您的webhook注册到GitHub,请访问您的仓库钩子配置表单https://github.com/{login}/{repo}/settings/hooks/new
并选择您希望GitHub通知您的服务器的事件。
Hubs实现了Hyper的Server Handler trait,因此它可以挂载到任何Hyper Server。
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
依赖项
~10-19MB
~269K SLoC