// use git_next_core::{git, webhook, BranchName, WebhookId}; use std::collections::HashMap; mod list; mod parser; mod register; mod unregister; pub use list::list; pub use parser::parse_body; pub use register::register; pub use unregister::unregister; #[derive(Debug, serde::Deserialize)] struct Hook { id: i64, config: HashMap, } impl Hook { fn id(&self) -> WebhookId { WebhookId::new(format!("{}", self.id)) } } #[derive(Debug, serde::Deserialize)] pub struct Push { #[serde(rename = "ref")] reference: String, after: String, head_commit: HeadCommit, } impl TryFrom for webhook::Push { type Error = git::forge::webhook::Error; fn try_from(push: Push) -> Result { let branch = push .reference .splitn(3, '/') // should be of the form 'refs/heads/branchname' .nth(2) .map(BranchName::new) .ok_or(git::forge::webhook::Error::UnknownBranch(push.reference))?; Ok(Self::new(branch, push.after, push.head_commit.message)) } } #[derive(Debug, serde::Deserialize)] struct HeadCommit { message: String, }