use crate::types::issue::StateType;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct ReposListOptions {
#[serde(default = "default_per_page")]
pub per_page: Option<u32>,
#[serde(default = "default_page")]
pub page: Option<u32>,
}
fn default_per_page() -> Option<u32> {
Some(30)
}
fn default_page() -> Option<u32> {
Some(1)
}
impl Default for ReposListOptions {
fn default() -> Self {
Self { per_page: default_per_page(), page: default_page() }
}
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CommitListOptions {
#[serde(default = "default_per_page")]
pub per_page: Option<u32>,
#[serde(default = "default_page")]
pub page: Option<u32>,
pub sha: Option<String>,
pub author: Option<String>,
pub since: Option<DateTime<Utc>>,
pub until: Option<DateTime<Utc>>,
}
impl Default for CommitListOptions {
fn default() -> Self {
Self {
per_page: default_per_page(),
page: default_page(),
sha: None,
author: None,
since: None,
until: None,
}
}
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OrgRepoListOptions {
#[serde(default = "default_per_page")]
pub per_page: Option<u32>,
#[serde(default = "default_page")]
pub page: Option<u32>,
}
impl Default for OrgRepoListOptions {
fn default() -> Self {
Self { per_page: default_per_page(), page: default_page() }
}
}
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct CreateIssueOptions {
pub labels: Option<Vec<String>>,
pub assignees: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct UpdateIssueOptions {
pub title: Option<String>,
pub body: Option<String>,
pub state: Option<StateType>,
}
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct IssueListOptions {
#[serde(default = "default_per_page")]
pub per_page: Option<u32>,
#[serde(default = "default_page")]
pub page: Option<u32>,
pub labels: Option<Vec<String>>,
pub creator: Option<String>,
pub assignee: Option<String>,
pub state: Option<StateType>,
}