1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//
use crate::config::{BranchName, RepoBranches};
use derive_more::Constructor;

#[derive(Debug, Constructor, derive_with::With)]
pub struct Push {
    branch: BranchName,
    sha: String,
    message: String,
}
impl Push {
    pub fn branch(&self, repo_branches: &RepoBranches) -> Option<Branch> {
        if self.branch == repo_branches.main() {
            return Some(Branch::Main);
        }
        if self.branch == repo_branches.next() {
            return Some(Branch::Next);
        }
        if self.branch == repo_branches.dev() {
            return Some(Branch::Dev);
        }
        tracing::warn!(branch = %self.branch, "Unexpected branch");
        None
    }

    #[must_use]
    pub fn sha(&self) -> &str {
        &self.sha
    }

    #[must_use]
    pub fn message(&self) -> &str {
        &self.message
    }
}

#[derive(Debug, PartialEq, Eq)]
pub enum Branch {
    Main,
    Next,
    Dev,
}