diff --git a/forgejo-hooks/Cargo.toml b/forgejo-hooks/Cargo.toml
index 8bfee68..7341bae 100644
--- a/forgejo-hooks/Cargo.toml
+++ b/forgejo-hooks/Cargo.toml
@@ -7,7 +7,7 @@ license = "AGPL-3.0+"
[dependencies]
chrono = { version = "0.4", default-features = false, features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
[dev-dependencies]
-serde_json = "1.0"
serde_path_to_error = "0.1.16"
diff --git a/forgejo-hooks/src/error.rs b/forgejo-hooks/src/error.rs
new file mode 100644
index 0000000..78035fe
--- /dev/null
+++ b/forgejo-hooks/src/error.rs
@@ -0,0 +1,48 @@
+// Copyright (C) 2025-2099 The crate authors.
+//
+// This program is free software: you can redistribute it and/or modify it
+// under the terms of the GNU Affero General Public License as published by the
+// Free Software Foundation, either version 3 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+use std::error::Error as StdError;
+use std::io::Error as IoError;
+
+#[derive(Debug)]
+pub enum Error {
+ UnknownHookType,
+ Io(IoError),
+ SerdeJson(serde_json::Error),
+}
+
+impl StdError for Error {}
+
+impl std::fmt::Display for Error {
+ fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
+ match self {
+ Error::UnknownHookType => write!(fmt, "Unknown hook type"),
+ Error::Io(e) => write!(fmt, "Io error: {}", e),
+ Error::SerdeJson(e) => write!(fmt, "serde_json error: {}", e),
+ }
+ }
+}
+
+impl From for Error {
+ fn from(err: IoError) -> Error {
+ Error::Io(err)
+ }
+}
+
+impl From for Error {
+ fn from(err: serde_json::Error) -> Error {
+ Error::SerdeJson(err)
+ }
+}
diff --git a/forgejo-hooks/src/lib.rs b/forgejo-hooks/src/lib.rs
index 3eac78d..068910a 100644
--- a/forgejo-hooks/src/lib.rs
+++ b/forgejo-hooks/src/lib.rs
@@ -13,9 +13,12 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
+mod error;
#[cfg(test)]
mod tests;
+pub use error::Error;
+
use chrono::{DateTime, Utc};
use serde::Deserialize;
@@ -295,6 +298,18 @@ impl From for Hook {
}
}
+impl From for Hook {
+ fn from(branch: AddedBranch) -> Self {
+ Self::AddedBranch(branch)
+ }
+}
+
+impl From for Hook {
+ fn from(branch: RemovedBranch) -> Self {
+ Self::RemovedBranch(branch)
+ }
+}
+
impl From for Hook {
fn from(issue: Issue) -> Self {
Self::Issue(issue)
@@ -309,3 +324,27 @@ pub enum Hook {
RemovedBranch(RemovedBranch),
Issue(Issue),
}
+
+/// Deserializes the payload into a struct
+fn parse_payload