use std::fmt::Display;
use octocrab::models::SimpleUser;
use serde::{Deserialize, Serialize};
use url::Url;
#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "snake_case")]
pub enum SecretScanningAlertStatus {
#[serde(rename = "open")]
Open,
#[serde(rename = "resolved")]
Resolved,
}
impl Display for SecretScanningAlertStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SecretScanningAlertStatus::Open => write!(f, "Open"),
SecretScanningAlertStatus::Resolved => write!(f, "Resolved"),
}
}
}
#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "snake_case")]
pub enum SecretScanningAlertResolution {
#[serde(rename = "false_positive")]
FalsePositive,
#[serde(rename = "wont_fix")]
WontFix,
#[serde(rename = "revoked")]
Revoked,
#[serde(rename = "pattern_edited")]
PatternEdited,
#[serde(rename = "pattern_deleted")]
PatternDeleted,
#[serde(rename = "used_in_tests")]
UsedInTests,
}
#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "snake_case")]
pub enum SecretScanningAlertValidity {
#[serde(rename = "active")]
Active,
#[serde(rename = "inactive")]
Inactive,
#[serde(rename = "unknown")]
Unknown,
}
#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "snake_case")]
pub enum SecretScanningSort {
#[serde(rename = "created")]
Created,
#[serde(rename = "updated")]
Updated,
}
#[derive(Debug, Clone, Serialize, Deserialize, Hash, Eq, PartialEq)]
pub struct SecretScanningAlert {
pub number: u64,
pub created_at: chrono::DateTime<chrono::Utc>,
pub state: SecretScanningAlertStatus,
pub secret_type: String,
pub secret_type_display_name: String,
pub secret: String,
pub resolved: Option<SecretScanningAlertResolution>,
pub resolved_at: Option<chrono::DateTime<chrono::Utc>>,
pub resolved_by: Option<SimpleUser>,
pub resolution_comment: Option<String>,
pub push_protection_bypassed: Option<bool>,
pub push_protection_bypassed_by: Option<SimpleUser>,
pub push_protection_bypassed_at: Option<chrono::DateTime<chrono::Utc>>,
pub validity: Option<SecretScanningAlertValidity>,
pub url: Url,
pub html_url: Url,
pub locations_url: Url,
}