chore: move patch::PatchPrStatus to types::PatchPrStatus

Signed-off-by: Awiteb <a@4rs.nl>
This commit is contained in:
Awiteb
2025-09-12 10:12:09 +00:00
parent 4df73316a0
commit c3be6248b5
14 changed files with 110 additions and 123 deletions

View File

@@ -17,12 +17,11 @@
use clap::Args; use clap::Args;
use nostr::hashes::sha1::Hash as Sha1Hash; use nostr::hashes::sha1::Hash as Sha1Hash;
use super::PatchPrStatus;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
traits::{CommandRunner, VecNostrEventExt}, traits::{CommandRunner, VecNostrEventExt},
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -16,12 +16,11 @@
use clap::Args; use clap::Args;
use super::PatchPrStatus;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -16,12 +16,11 @@
use clap::Args; use clap::Args;
use super::PatchPrStatus;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -17,12 +17,11 @@
use clap::Args; use clap::Args;
use nostr::hashes::sha1::Hash as Sha1Hash; use nostr::hashes::sha1::Hash as Sha1Hash;
use super::PatchPrStatus;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
traits::{CommandRunner, VecNostrEventExt}, traits::{CommandRunner, VecNostrEventExt},
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -34,14 +34,12 @@ mod send;
mod tests; mod tests;
use std::{ use std::{
fmt,
path::{Path, PathBuf}, path::{Path, PathBuf},
str::FromStr, str::FromStr,
sync::LazyLock, sync::LazyLock,
}; };
use clap::Subcommand; use clap::Subcommand;
use nostr::event::Kind;
use regex::Regex; use regex::Regex;
use self::apply::ApplyArgs; use self::apply::ApplyArgs;
@@ -108,103 +106,6 @@ pub struct GitPatch {
pub body: String, pub body: String,
} }
#[derive(Debug)]
pub enum PatchPrStatus {
/// The patch/pr is currently open
Open,
/// The patch/pr has been merged/applied
MergedApplied,
/// The patch/pr has been closed
Closed,
/// A patch/pr that has been drafted but not yet applied.
Draft,
}
impl PatchPrStatus {
/// Returns all status kinds
#[inline]
pub const fn all_kinds() -> [Kind; 4] {
[
Kind::GitStatusOpen,
Kind::GitStatusApplied,
Kind::GitStatusClosed,
Kind::GitStatusDraft,
]
}
/// Maps the patch/pr status to its corresponding Nostr kind.
#[inline]
pub fn kind(&self) -> Kind {
match self {
Self::Open => Kind::GitStatusOpen,
Self::MergedApplied => Kind::GitStatusApplied,
Self::Closed => Kind::GitStatusClosed,
Self::Draft => Kind::GitStatusDraft,
}
}
/// Returns the string representation of the patch/pr status.
pub const fn as_str(&self) -> &'static str {
match self {
Self::Open => "Open",
Self::MergedApplied => "Merged/Applied",
Self::Closed => "Closed",
Self::Draft => "Draft",
}
}
/// Check if the status is open.
#[inline]
pub fn is_open(&self) -> bool {
matches!(self, Self::Open)
}
/// Check if the status is merged/applied.
#[inline]
pub fn is_merged_or_applied(&self) -> bool {
matches!(self, Self::MergedApplied)
}
/// Check if the status is closed.
#[inline]
pub fn is_closed(&self) -> bool {
matches!(self, Self::Closed)
}
/// Check if the status is draft
#[inline]
pub fn is_drafted(&self) -> bool {
matches!(self, Self::Draft)
}
}
impl From<&PatchPrStatus> for Kind {
fn from(status: &PatchPrStatus) -> Self {
status.kind()
}
}
impl fmt::Display for PatchPrStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl TryFrom<Kind> for PatchPrStatus {
type Error = N34Error;
fn try_from(kind: Kind) -> Result<Self, Self::Error> {
match kind {
Kind::GitStatusOpen => Ok(Self::Open),
Kind::GitStatusApplied => Ok(Self::MergedApplied),
Kind::GitStatusClosed => Ok(Self::Closed),
Kind::GitStatusDraft => Ok(Self::Draft),
_ => Err(N34Error::InvalidPatchStatus(kind)),
}
}
}
impl GitPatch { impl GitPatch {
/// Returns the patch file name from the subject /// Returns the patch file name from the subject
pub fn filename(&self, parent: impl AsRef<Path>) -> N34Result<PathBuf> { pub fn filename(&self, parent: impl AsRef<Path>) -> N34Result<PathBuf> {

View File

@@ -16,12 +16,11 @@
use clap::Args; use clap::Args;
use super::PatchPrStatus;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -20,9 +20,8 @@ use nostr::hashes::sha1::Hash as Sha1Hash;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
patch::PatchPrStatus,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -19,9 +19,8 @@ use clap::Args;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
patch::PatchPrStatus,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -19,9 +19,8 @@ use clap::Args;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
patch::PatchPrStatus,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -20,9 +20,8 @@ use nostr::hashes::sha1::Hash as Sha1Hash;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
patch::PatchPrStatus,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -19,9 +19,8 @@ use clap::Args;
use crate::{ use crate::{
cli::{ cli::{
CliOptions, CliOptions,
patch::PatchPrStatus,
traits::CommandRunner, traits::CommandRunner,
types::{EntityType, NaddrOrSet, NostrEvent}, types::{EntityType, NaddrOrSet, NostrEvent, PatchPrStatus},
}, },
error::{N34Error, N34Result}, error::{N34Error, N34Result},
}; };

View File

@@ -28,11 +28,10 @@ use nostr::{
use super::{ use super::{
issue::IssueStatus, issue::IssueStatus,
patch::PatchPrStatus,
types::{NaddrOrSet, NostrEvent}, types::{NaddrOrSet, NostrEvent},
}; };
use crate::{ use crate::{
cli::{CliOptions, patch::GitPatch}, cli::{CliOptions, patch::GitPatch, types::PatchPrStatus},
error::{N34Error, N34Result}, error::{N34Error, N34Result},
nostr_utils::traits::{GitIssuePrMetadata, GitPatchUtils, ReposUtils}, nostr_utils::traits::{GitIssuePrMetadata, GitPatchUtils, ReposUtils},
}; };

View File

@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://gnu.org/licenses/gpl-3.0.html>. // along with this program. If not, see <https://gnu.org/licenses/gpl-3.0.html>.
use std::str::FromStr; use std::{fmt, str::FromStr};
use nostr::{ use nostr::{
event::{EventId, Kind}, event::{EventId, Kind},
@@ -259,6 +259,103 @@ impl FromStr for NostrEvent {
} }
} }
#[derive(Debug)]
pub enum PatchPrStatus {
/// The patch/pr is currently open
Open,
/// The patch/pr has been merged/applied
MergedApplied,
/// The patch/pr has been closed
Closed,
/// A patch/pr that has been drafted but not yet applied.
Draft,
}
impl PatchPrStatus {
/// Returns all status kinds
#[inline]
pub const fn all_kinds() -> [Kind; 4] {
[
Kind::GitStatusOpen,
Kind::GitStatusApplied,
Kind::GitStatusClosed,
Kind::GitStatusDraft,
]
}
/// Maps the patch/pr status to its corresponding Nostr kind.
#[inline]
pub fn kind(&self) -> Kind {
match self {
Self::Open => Kind::GitStatusOpen,
Self::MergedApplied => Kind::GitStatusApplied,
Self::Closed => Kind::GitStatusClosed,
Self::Draft => Kind::GitStatusDraft,
}
}
/// Returns the string representation of the patch/pr status.
pub const fn as_str(&self) -> &'static str {
match self {
Self::Open => "Open",
Self::MergedApplied => "Merged/Applied",
Self::Closed => "Closed",
Self::Draft => "Draft",
}
}
/// Check if the status is open.
#[inline]
pub fn is_open(&self) -> bool {
matches!(self, Self::Open)
}
/// Check if the status is merged/applied.
#[inline]
pub fn is_merged_or_applied(&self) -> bool {
matches!(self, Self::MergedApplied)
}
/// Check if the status is closed.
#[inline]
pub fn is_closed(&self) -> bool {
matches!(self, Self::Closed)
}
/// Check if the status is draft
#[inline]
pub fn is_drafted(&self) -> bool {
matches!(self, Self::Draft)
}
}
impl From<&PatchPrStatus> for Kind {
fn from(status: &PatchPrStatus) -> Self {
status.kind()
}
}
impl fmt::Display for PatchPrStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl TryFrom<Kind> for PatchPrStatus {
type Error = N34Error;
fn try_from(kind: Kind) -> Result<Self, Self::Error> {
match kind {
Kind::GitStatusOpen => Ok(Self::Open),
Kind::GitStatusApplied => Ok(Self::MergedApplied),
Kind::GitStatusClosed => Ok(Self::Closed),
Kind::GitStatusDraft => Ok(Self::Draft),
_ => Err(N34Error::InvalidPatchStatus(kind)),
}
}
}
fn parse_nip5_repo(nip5: &str, repo_id: &str) -> Result<NaddrOrSet, String> { fn parse_nip5_repo(nip5: &str, repo_id: &str) -> Result<NaddrOrSet, String> {
let (username, domain) = nip5.split_once("@").unwrap_or(("_", nip5)); let (username, domain) = nip5.split_once("@").unwrap_or(("_", nip5));

View File

@@ -39,7 +39,7 @@ use nostr_sdk::{Client, ClientOptions};
use traits::TokenUtils; use traits::TokenUtils;
use crate::{ use crate::{
cli::{CliOptions, issue::IssueStatus, patch::PatchPrStatus}, cli::{CliOptions, issue::IssueStatus, types::PatchPrStatus},
error::{N34Error, N34Result}, error::{N34Error, N34Result},
nostr_utils::traits::KindExt, nostr_utils::traits::KindExt,
}; };