#[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 apps {
use crate::models::RepositoryId;
#[derive(Debug, Clone, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize, Default)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub struct CreateInstallationAccessToken {
pub repositories: Vec<String>,
pub repository_ids: Vec<RepositoryId>,
}
}
pub mod checks {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunStatus {
Queued,
InProgress,
Completed,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunConclusion {
Success,
Failure,
Neutral,
Cancelled,
TimedOut,
Skipped,
Stale,
ActionRequired,
}
#[derive(serde::Serialize)]
pub struct CheckRunOutput {
pub title: String,
pub summary: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub annotations: Vec<CheckRunOutputAnnotation>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub images: Vec<CheckRunOutputImage>,
}
#[derive(serde::Serialize)]
pub struct CheckRunOutputAnnotation {
pub path: String,
pub start_line: u32,
pub end_line: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_column: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<u32>,
pub annotation_level: CheckRunOutputAnnotationLevel,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_details: Option<String>,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunOutputAnnotationLevel {
Notice,
Warning,
Failure,
}
#[derive(serde::Serialize)]
pub struct CheckRunOutputImage {
pub image_url: String,
pub alt: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
}
#[derive(serde::Serialize, serde::Deserialize, Debug)]
pub struct CheckRunAnnotation {
pub path: String,
pub start_line: u32,
pub end_line: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_column: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub annotation_level: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_details: Option<String>,
pub blob_href: String,
}
}
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)
}
}
#[derive(Debug, Copy, Clone, PartialEq, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum MergeMethod {
Merge,
Squash,
Rebase,
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum State {
Open,
Closed,
}
pub mod comments {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Sort {
Created,
Updated,
}
}
}
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),
Commit(String),
}
impl Reference {
pub fn ref_url(&self) -> String {
match self {
Self::Branch(branch) => format!("heads/{branch}"),
Self::Tag(tag) => format!("tags/{tag}"),
Self::Commit(sha) => sha.clone(),
}
}
pub fn full_ref_url(&self) -> String {
match self {
Self::Branch(_) | Self::Tag(_) => format!("refs/{}", self.ref_url()),
Self::Commit(sha) => sha.clone(),
}
}
}
impl std::fmt::Display for Reference {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(&self.full_ref_url())
}
}
#[derive(Debug, Clone)]
pub struct Commitish(pub String);
impl From<Reference> for Commitish {
fn from(r: Reference) -> Commitish {
Commitish(r.ref_url())
}
}
impl From<String> for Commitish {
fn from(s: String) -> Commitish {
Commitish(s)
}
}
impl std::fmt::Display for Commitish {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(&self.0)
}
}
pub mod forks {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Sort {
Newest,
Oldest,
Stargazers,
}
}
}
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,
}
}
pub mod workflows {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Filter {
Latest,
All,
}
}
pub mod users {
pub mod repos {
#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Type {
All,
Owner,
Member,
}
}
}