use octocrate_core::*;
#[allow(unused_imports)]
use octocrate_types::*;
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[allow(unused_imports)]
use typed_builder::TypedBuilder;
pub mod list_for_org {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<Project>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum QueryState {
#[serde(rename = "open")]
Open,
#[serde(rename = "closed")]
Closed,
#[serde(rename = "all")]
All,
}
impl std::fmt::Display for QueryState {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
QueryState::Open => write!(f, "open"),
QueryState::Closed => write!(f, "closed"),
QueryState::All => write!(f, "all"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub state: Option<QueryState>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub mod create_for_org {
#[allow(unused_imports)]
use super::*;
pub type Response = Project;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub body: Option<String>,
pub name: String,
}
}
pub mod get_card {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectCard;
}
pub mod update_card {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectCard;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub archived: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub note: Option<String>,
}
}
pub mod move_card {
#[allow(unused_imports)]
use super::*;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub column_id: Option<i64>,
pub position: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Response {}
}
pub mod get_column {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectColumn;
}
pub mod update_column {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectColumn;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
pub name: String,
}
}
pub mod list_cards {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<ProjectCard>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum QueryArchivedState {
#[serde(rename = "all")]
All,
#[serde(rename = "archived")]
Archived,
#[serde(rename = "not_archived")]
NotArchived,
}
impl std::fmt::Display for QueryArchivedState {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
QueryArchivedState::All => write!(f, "all"),
QueryArchivedState::Archived => write!(f, "archived"),
QueryArchivedState::NotArchived => write!(f, "not_archived"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub archived_state: Option<QueryArchivedState>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub mod create_card {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectCard;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Request {
RequestItem1(RequestItem1),
RequestItem2(RequestItem2),
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct RequestItem1 {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct RequestItem2 {
pub content_id: i64,
pub content_type: String,
}
}
pub mod move_column {
#[allow(unused_imports)]
use super::*;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
pub position: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Response {}
}
pub mod get {
#[allow(unused_imports)]
use super::*;
pub type Response = Project;
}
pub mod update {
#[allow(unused_imports)]
use super::*;
pub type Response = Project;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum RequestOrganizationPermission {
#[serde(rename = "read")]
Read,
#[serde(rename = "write")]
Write,
#[serde(rename = "admin")]
Admin,
#[serde(rename = "none")]
None,
}
impl std::fmt::Display for RequestOrganizationPermission {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
RequestOrganizationPermission::Read => write!(f, "read"),
RequestOrganizationPermission::Write => write!(f, "write"),
RequestOrganizationPermission::Admin => write!(f, "admin"),
RequestOrganizationPermission::None => write!(f, "none"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub body: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub organization_permission: Option<RequestOrganizationPermission>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub private: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub state: Option<String>,
}
}
pub mod list_collaborators {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<SimpleUser>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum QueryAffiliation {
#[serde(rename = "outside")]
Outside,
#[serde(rename = "direct")]
Direct,
#[serde(rename = "all")]
All,
}
impl std::fmt::Display for QueryAffiliation {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
QueryAffiliation::Outside => write!(f, "outside"),
QueryAffiliation::Direct => write!(f, "direct"),
QueryAffiliation::All => write!(f, "all"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub affiliation: Option<QueryAffiliation>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub mod add_collaborator {
#[allow(unused_imports)]
use super::*;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub permission: Option<ReadWriteAdminPermission>,
}
}
pub mod get_permission_for_user {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectCollaboratorPermission;
}
pub mod list_columns {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<ProjectColumn>;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub mod create_column {
#[allow(unused_imports)]
use super::*;
pub type Response = ProjectColumn;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
pub name: String,
}
}
pub mod list_for_repo {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<Project>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum QueryState {
#[serde(rename = "open")]
Open,
#[serde(rename = "closed")]
Closed,
#[serde(rename = "all")]
All,
}
impl std::fmt::Display for QueryState {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
QueryState::Open => write!(f, "open"),
QueryState::Closed => write!(f, "closed"),
QueryState::All => write!(f, "all"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub state: Option<QueryState>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub mod create_for_repo {
#[allow(unused_imports)]
use super::*;
pub type Response = Project;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub body: Option<String>,
pub name: String,
}
}
pub mod create_for_authenticated_user {
#[allow(unused_imports)]
use super::*;
pub type Response = Project;
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Request {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub body: Option<String>,
pub name: String,
}
}
pub mod list_for_user {
#[allow(unused_imports)]
use super::*;
pub type Response = Vec<Project>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Copy)]
pub enum QueryState {
#[serde(rename = "open")]
Open,
#[serde(rename = "closed")]
Closed,
#[serde(rename = "all")]
All,
}
impl std::fmt::Display for QueryState {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
QueryState::Open => write!(f, "open"),
QueryState::Closed => write!(f, "closed"),
QueryState::All => write!(f, "all"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub state: Option<QueryState>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub page: Option<i64>,
}
}
pub struct GitHubProjectsAPI {
config: SharedAPIConfig,
}
impl GitHubProjectsAPI {
pub fn new(config: &SharedAPIConfig) -> Self {
Self {
config: config.clone(),
}
}
pub fn list_for_org(
&self,
org: impl Into<String>,
) -> Request<(), list_for_org::Query, list_for_org::Response> {
let org = org.into();
let url = format!("/orgs/{org}/projects");
Request::<(), list_for_org::Query, list_for_org::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn create_for_org(
&self,
org: impl Into<String>,
) -> Request<create_for_org::Request, (), create_for_org::Response> {
let org = org.into();
let url = format!("/orgs/{org}/projects");
Request::<create_for_org::Request, (), create_for_org::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn get_card(&self, card_id: impl Into<i64>) -> Request<(), (), get_card::Response> {
let card_id = card_id.into();
let url = format!("/projects/columns/cards/{card_id}");
Request::<(), (), get_card::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn update_card(
&self,
card_id: impl Into<i64>,
) -> Request<update_card::Request, (), update_card::Response> {
let card_id = card_id.into();
let url = format!("/projects/columns/cards/{card_id}");
Request::<update_card::Request, (), update_card::Response>::builder(&self.config)
.patch(url)
.build()
}
pub fn delete_card(&self, card_id: impl Into<i64>) -> NoContentRequest<(), ()> {
let card_id = card_id.into();
let url = format!("/projects/columns/cards/{card_id}");
NoContentRequest::<(), ()>::builder(&self.config)
.delete(url)
.build()
}
pub fn move_card(
&self,
card_id: impl Into<i64>,
) -> Request<move_card::Request, (), move_card::Response> {
let card_id = card_id.into();
let url = format!("/projects/columns/cards/{card_id}/moves");
Request::<move_card::Request, (), move_card::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn get_column(&self, column_id: impl Into<i64>) -> Request<(), (), get_column::Response> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}");
Request::<(), (), get_column::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn update_column(
&self,
column_id: impl Into<i64>,
) -> Request<update_column::Request, (), update_column::Response> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}");
Request::<update_column::Request, (), update_column::Response>::builder(&self.config)
.patch(url)
.build()
}
pub fn delete_column(&self, column_id: impl Into<i64>) -> NoContentRequest<(), ()> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}");
NoContentRequest::<(), ()>::builder(&self.config)
.delete(url)
.build()
}
pub fn list_cards(
&self,
column_id: impl Into<i64>,
) -> Request<(), list_cards::Query, list_cards::Response> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}/cards");
Request::<(), list_cards::Query, list_cards::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn create_card(
&self,
column_id: impl Into<i64>,
) -> Request<create_card::Request, (), create_card::Response> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}/cards");
Request::<create_card::Request, (), create_card::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn move_column(
&self,
column_id: impl Into<i64>,
) -> Request<move_column::Request, (), move_column::Response> {
let column_id = column_id.into();
let url = format!("/projects/columns/{column_id}/moves");
Request::<move_column::Request, (), move_column::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn get(&self, project_id: impl Into<i64>) -> Request<(), (), get::Response> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}");
Request::<(), (), get::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn update(
&self,
project_id: impl Into<i64>,
) -> Request<update::Request, (), update::Response> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}");
Request::<update::Request, (), update::Response>::builder(&self.config)
.patch(url)
.build()
}
pub fn delete(&self, project_id: impl Into<i64>) -> NoContentRequest<(), ()> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}");
NoContentRequest::<(), ()>::builder(&self.config)
.delete(url)
.build()
}
pub fn list_collaborators(
&self,
project_id: impl Into<i64>,
) -> Request<(), list_collaborators::Query, list_collaborators::Response> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}/collaborators");
Request::<(), list_collaborators::Query, list_collaborators::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn add_collaborator(
&self,
project_id: impl Into<i64>,
username: impl Into<String>,
) -> NoContentRequest<add_collaborator::Request, ()> {
let project_id = project_id.into();
let username = username.into();
let url = format!("/projects/{project_id}/collaborators/{username}");
NoContentRequest::<add_collaborator::Request, ()>::builder(&self.config)
.put(url)
.build()
}
pub fn remove_collaborator(
&self,
project_id: impl Into<i64>,
username: impl Into<String>,
) -> NoContentRequest<(), ()> {
let project_id = project_id.into();
let username = username.into();
let url = format!("/projects/{project_id}/collaborators/{username}");
NoContentRequest::<(), ()>::builder(&self.config)
.delete(url)
.build()
}
pub fn get_permission_for_user(
&self,
project_id: impl Into<i64>,
username: impl Into<String>,
) -> Request<(), (), get_permission_for_user::Response> {
let project_id = project_id.into();
let username = username.into();
let url = format!("/projects/{project_id}/collaborators/{username}/permission");
Request::<(), (), get_permission_for_user::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn list_columns(
&self,
project_id: impl Into<i64>,
) -> Request<(), list_columns::Query, list_columns::Response> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}/columns");
Request::<(), list_columns::Query, list_columns::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn create_column(
&self,
project_id: impl Into<i64>,
) -> Request<create_column::Request, (), create_column::Response> {
let project_id = project_id.into();
let url = format!("/projects/{project_id}/columns");
Request::<create_column::Request, (), create_column::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn list_for_repo(
&self,
owner: impl Into<String>,
repo: impl Into<String>,
) -> Request<(), list_for_repo::Query, list_for_repo::Response> {
let owner = owner.into();
let repo = repo.into();
let url = format!("/repos/{owner}/{repo}/projects");
Request::<(), list_for_repo::Query, list_for_repo::Response>::builder(&self.config)
.get(url)
.build()
}
pub fn create_for_repo(
&self,
owner: impl Into<String>,
repo: impl Into<String>,
) -> Request<create_for_repo::Request, (), create_for_repo::Response> {
let owner = owner.into();
let repo = repo.into();
let url = format!("/repos/{owner}/{repo}/projects");
Request::<create_for_repo::Request, (), create_for_repo::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn create_for_authenticated_user(
&self,
) -> Request<create_for_authenticated_user::Request, (), create_for_authenticated_user::Response>
{
let url = format!("/user/projects");
Request::<create_for_authenticated_user::Request, (), create_for_authenticated_user::Response>::builder(&self.config)
.post(url)
.build()
}
pub fn list_for_user(
&self,
username: impl Into<String>,
) -> Request<(), list_for_user::Query, list_for_user::Response> {
let username = username.into();
let url = format!("/users/{username}/projects");
Request::<(), list_for_user::Query, list_for_user::Response>::builder(&self.config)
.get(url)
.build()
}
}