Move build_push_event to PushEvent::new
Assisted-by: GLM-5.1 via pi
change rpxvvryqmryyouuznluoltwtzpouqtul
commit 60232516e4853e0b8f97af81190cda1e6594e285
author Alpha Chen <alpha@kejadlen.dev>
date
parent xxqlqvsw
diff --git a/src/bin/quire/commands/hook.rs b/src/bin/quire/commands/hook.rs
index b20a417..76a5c27 100644
--- a/src/bin/quire/commands/hook.rs
+++ b/src/bin/quire/commands/hook.rs
@@ -91,7 +91,7 @@ fn post_receive(quire: &Quire) -> Result<()> {
         .to_string_lossy()
         .to_string();
 
-    let event = quire::event::build_push_event(repo_name, refs);
+    let event = quire::event::PushEvent::new(repo_name, refs);
     let mut line = serde_json::to_string(&event)
         .into_diagnostic()
         .context("failed to serialize push event")?;
diff --git a/src/event.rs b/src/event.rs
index b5ee1e3..5c2da06 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -164,21 +164,22 @@ async fn dispatch_mirror(quire: &crate::Quire, repo: crate::quire::Repo, event:
     }
 }
 
-/// Build a push event from parsed refs.
-///
-/// `repo` is the repo name relative to the repos dir (e.g. "foo.git").
-/// `pushed_at` is seconds since Unix epoch as a string.
-pub fn build_push_event(repo: String, refs: Vec<PushRef>) -> PushEvent {
-    let pushed_at = std::time::SystemTime::now()
-        .duration_since(std::time::UNIX_EPOCH)
-        .map(|d| d.as_secs().to_string())
-        .unwrap_or_else(|_| "0".to_string());
-
-    PushEvent {
-        r#type: "push".to_string(),
-        repo,
-        pushed_at,
-        refs,
+impl PushEvent {
+    /// Build a push event from the repo name and updated refs.
+    ///
+    /// `repo` is the repo name relative to the repos dir (e.g. "foo.git").
+    pub fn new(repo: String, refs: Vec<PushRef>) -> Self {
+        let pushed_at = std::time::SystemTime::now()
+            .duration_since(std::time::UNIX_EPOCH)
+            .map(|d| d.as_secs().to_string())
+            .unwrap_or_else(|_| "0".to_string());
+
+        Self {
+            r#type: "push".to_string(),
+            repo,
+            pushed_at,
+            refs,
+        }
     }
 }
 
@@ -187,13 +188,13 @@ mod tests {
     use super::*;
 
     #[test]
-    fn build_push_event_populates_fields() {
+    fn push_event_new_populates_fields() {
         let refs = vec![PushRef {
             old_sha: "a".to_string(),
             new_sha: "b".to_string(),
             r#ref: "refs/heads/main".to_string(),
         }];
-        let event = build_push_event("foo.git".to_string(), refs.clone());
+        let event = PushEvent::new("foo.git".to_string(), refs.clone());
 
         assert_eq!(event.r#type, "push");
         assert_eq!(event.repo, "foo.git");
@@ -215,7 +216,7 @@ mod tests {
                 r#ref: "refs/heads/feature".to_string(),
             },
         ];
-        let event = build_push_event("work/foo.git".to_string(), refs);
+        let event = PushEvent::new("work/foo.git".to_string(), refs);
 
         let json = serde_json::to_string(&event).expect("serialize");
         let parsed: PushEvent = serde_json::from_str(&json).expect("deserialize");