#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum State {
All,
Open,
Closed,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Direction {
#[serde(rename = "asc")]
Ascending,
#[serde(rename = "desc")]
Descending,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[non_exhaustive]
pub enum LockReason {
#[serde(rename = "off-topic")]
OffTopic,
#[serde(rename = "too heated")]
TooHeated,
#[serde(rename = "resolved")]
Resolved,
#[serde(rename = "spam")]
Spam,
}
pub mod actions {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ArchiveFormat {
Zip,
}
impl std::fmt::Display for ArchiveFormat {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let text = match self {
Self::Zip => "zip",
};
f.write_str(text)
}
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Visibility {
All,
Private,
Selected,
}
}
pub mod issues {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Sort {
Created,
Updated,
Comments,
}
#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub enum Filter<T> {
Matches(T),
Any,
None,
}
impl<T: serde::Serialize> serde::Serialize for Filter<T> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
match self {
Self::Matches(val) => val.serialize(serializer),
Self::Any => serializer.serialize_str("*"),
Self::None => serializer.serialize_str("none"),
}
}
}
impl<T: serde::Serialize> From<T> for Filter<T> {
fn from(value: T) -> Self {
Self::Matches(value)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn serialize() {
assert_eq!(
"1234",
serde_json::to_string(&Filter::Matches(1234)).unwrap()
);
assert_eq!(
r#""milestone""#,
serde_json::to_string(&Filter::Matches("milestone")).unwrap()
);
assert_eq!(r#""*""#, serde_json::to_string(&Filter::<()>::Any).unwrap());
assert_eq!(
r#""none""#,
serde_json::to_string(&Filter::<()>::None).unwrap()
);
}
}
}
pub mod markdown {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum Mode {
Markdown,
Gfm,
}
}
pub mod orgs {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Role {
Member,
Admin,
}
}
pub mod pulls {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Sort {
Created,
Updated,
Popularity,
LongRunning,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum MediaType {
Raw,
Text,
Html,
Full,
}
impl std::fmt::Display for MediaType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let text = match self {
Self::Raw => "raw",
Self::Text => "text",
Self::Html => "html",
Self::Full => "full",
};
f.write_str(text)
}
}
}
pub mod repos {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Type {
All,
Forks,
Internal,
Member,
Private,
Public,
Sources,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Sort {
Created,
Updated,
Pushed,
FullName,
}
#[derive(Debug, Clone)]
pub enum Reference {
Branch(String),
Tag(String),
}
impl Reference {
pub fn ref_url(&self) -> String {
match self {
Self::Branch(branch) => format!("heads/{}", branch),
Self::Tag(tag) => format!("tags/{}", tag),
}
}
pub fn full_ref_url(&self) -> String {
format!("refs/{}", self.ref_url())
}
}
impl std::fmt::Display for Reference {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(&self.full_ref_url())
}
}
}
pub mod teams {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Privacy {
Secret,
Closed,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Permission {
Pull,
Push,
Admin,
Maintain,
Triage,
}
}