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

MIT 许可证

19KB
252

afterparty

Build Status Coverage Status Software License

您的提交在 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 枚举类型的静态类型有效载荷。

钩子通过 Hubhandlehandle_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