6个版本

使用旧的Rust 2015

0.4.2 2019年1月22日
0.4.1 2019年1月22日
0.2.2 2019年1月16日

#1226HTTP服务器

每月 35 次下载

MIT 许可证

31KB
252

afterparty

Build Status Coverage Status Software License

您的提交在GitHub之后的去向

Afterparty是一个用于在Rust中构建GitHub webhook集成的库。

文档

请在此处查看:这里

安装

将以下内容添加到您的Cargo.toml文件中

[dependencies]
afterparty = "0.1"

用法

Afterparty有两个关键抽象,一个是Hook:一个用于处理webhook投递的处理程序接口,另一个是Hub:一个用于注册hook的注册表。一个Hub为感兴趣的hook提供Delivery实例。

Delivery编码了所有相关的webhook请求信息,包括投递的唯一标识符、事件名称以及以Event枚举类型表示的静态类型有效载荷。

hook通过Hubhandlehandle_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