From 0848d57c7654d09c3041022c231dfbbbfac17600 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Tue, 30 Jul 2024 14:14:59 +0100 Subject: refactor: add struct `RepoState` to more easily access state details --- src/repo_state.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/repo_state.rs (limited to 'src/repo_state.rs') diff --git a/src/repo_state.rs b/src/repo_state.rs new file mode 100644 index 0000000..33bc90f --- /dev/null +++ b/src/repo_state.rs @@ -0,0 +1,33 @@ +use anyhow::{Context, Result}; +use git2::Oid; + +pub struct RepoState { + pub state: Vec<(String, String)>, + pub event: nostr::Event, +} + +impl RepoState { + pub fn try_from(mut state_events: Vec) -> Result { + state_events.sort_by_key(|e| e.created_at); + let event = state_events.first().context("no state events")?; + let mut state = vec![]; + for tag in &event.tags { + if let Some(name) = tag.as_vec().first() { + if ["refs/heads/", "refs/tags", "HEAD"] + .iter() + .any(|s| name.starts_with(*s)) + { + if let Some(value) = tag.as_vec().get(1) { + if Oid::from_str(value).is_ok() { + state.push((name.to_owned(), value.to_owned())); + } + } + } + } + } + Ok(RepoState { + state, + event: event.clone(), + }) + } +} -- cgit v1.2.3