#![allow(unused_imports)]
#![cfg_attr(rustfmt, rustfmt_skip)]
use crate::{Client, ClientBuilder, Credentials, Retry};
use anyhow::Error;
use serde_json::Value;
use std::time::Duration;
use crate::util::urlencode;
pub struct Github {
pub client: Client
}
#[allow(non_snake_case)]
impl Github {
pub fn new<CB: Into<ClientBuilder>>(client_builder: CB) -> Result<Self, Error> {
Ok(Self{
client: client_builder
.into()
.path_prefix("api/github/v1/")
.build()?,
})
}
pub async fn ping(&self) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::ping_details();
let body = None;
let resp = self.client.request(method, path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn ping_url(&self) -> Result<String, Error> {
let (path, query) = Self::ping_details();
self.client.make_url(path, query)
}
pub fn ping_signed_url(&self, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::ping_details();
self.client.make_signed_url(path, query, ttl)
}
fn ping_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "ping";
let query = None;
(path, query)
}
pub async fn lbheartbeat(&self) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::lbheartbeat_details();
let body = None;
let resp = self.client.request(method, path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn lbheartbeat_url(&self) -> Result<String, Error> {
let (path, query) = Self::lbheartbeat_details();
self.client.make_url(path, query)
}
pub fn lbheartbeat_signed_url(&self, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::lbheartbeat_details();
self.client.make_signed_url(path, query, ttl)
}
fn lbheartbeat_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "__lbheartbeat__";
let query = None;
(path, query)
}
pub async fn version(&self) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::version_details();
let body = None;
let resp = self.client.request(method, path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn version_url(&self) -> Result<String, Error> {
let (path, query) = Self::version_details();
self.client.make_url(path, query)
}
pub fn version_signed_url(&self, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::version_details();
self.client.make_signed_url(path, query, ttl)
}
fn version_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "__version__";
let query = None;
(path, query)
}
pub async fn githubWebHookConsumer(&self) -> Result<(), Error> {
let method = "POST";
let (path, query) = Self::githubWebHookConsumer_details();
let body = None;
let resp = self.client.request(method, path, query, body).await?;
resp.bytes().await?;
Ok(())
}
fn githubWebHookConsumer_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "github";
let query = None;
(path, query)
}
pub async fn builds(&self, continuationToken: Option<&str>, limit: Option<&str>, organization: Option<&str>, repository: Option<&str>, sha: Option<&str>, pullRequest: Option<&str>) -> Result<Value, Error> {
let method = "GET";
let (path, query) = Self::builds_details(continuationToken, limit, organization, repository, sha, pullRequest);
let body = None;
let resp = self.client.request(method, path, query, body).await?;
Ok(resp.json().await?)
}
pub fn builds_url(&self, continuationToken: Option<&str>, limit: Option<&str>, organization: Option<&str>, repository: Option<&str>, sha: Option<&str>, pullRequest: Option<&str>) -> Result<String, Error> {
let (path, query) = Self::builds_details(continuationToken, limit, organization, repository, sha, pullRequest);
self.client.make_url(path, query)
}
pub fn builds_signed_url(&self, continuationToken: Option<&str>, limit: Option<&str>, organization: Option<&str>, repository: Option<&str>, sha: Option<&str>, pullRequest: Option<&str>, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::builds_details(continuationToken, limit, organization, repository, sha, pullRequest);
self.client.make_signed_url(path, query, ttl)
}
fn builds_details<'a>(continuationToken: Option<&'a str>, limit: Option<&'a str>, organization: Option<&'a str>, repository: Option<&'a str>, sha: Option<&'a str>, pullRequest: Option<&'a str>) -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "builds";
let mut query = None;
if let Some(q) = continuationToken {
query.get_or_insert_with(Vec::new).push(("continuationToken", q));
}
if let Some(q) = limit {
query.get_or_insert_with(Vec::new).push(("limit", q));
}
if let Some(q) = organization {
query.get_or_insert_with(Vec::new).push(("organization", q));
}
if let Some(q) = repository {
query.get_or_insert_with(Vec::new).push(("repository", q));
}
if let Some(q) = sha {
query.get_or_insert_with(Vec::new).push(("sha", q));
}
if let Some(q) = pullRequest {
query.get_or_insert_with(Vec::new).push(("pullRequest", q));
}
(path, query)
}
pub async fn cancelBuilds(&self, owner: &str, repo: &str, sha: Option<&str>, pullRequest: Option<&str>) -> Result<Value, Error> {
let method = "POST";
let (path, query) = Self::cancelBuilds_details(owner, repo, sha, pullRequest);
let body = None;
let resp = self.client.request(method, &path, query, body).await?;
Ok(resp.json().await?)
}
fn cancelBuilds_details<'a>(owner: &'a str, repo: &'a str, sha: Option<&'a str>, pullRequest: Option<&'a str>) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("builds/{}/{}/cancel", urlencode(owner), urlencode(repo));
let mut query = None;
if let Some(q) = sha {
query.get_or_insert_with(Vec::new).push(("sha", q));
}
if let Some(q) = pullRequest {
query.get_or_insert_with(Vec::new).push(("pullRequest", q));
}
(path, query)
}
pub async fn badge(&self, owner: &str, repo: &str, branch: &str) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::badge_details(owner, repo, branch);
let body = None;
let resp = self.client.request(method, &path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn badge_url(&self, owner: &str, repo: &str, branch: &str) -> Result<String, Error> {
let (path, query) = Self::badge_details(owner, repo, branch);
self.client.make_url(&path, query)
}
pub fn badge_signed_url(&self, owner: &str, repo: &str, branch: &str, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::badge_details(owner, repo, branch);
self.client.make_signed_url(&path, query, ttl)
}
fn badge_details<'a>(owner: &'a str, repo: &'a str, branch: &'a str) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("repository/{}/{}/{}/badge.svg", urlencode(owner), urlencode(repo), urlencode(branch));
let query = None;
(path, query)
}
pub async fn repository(&self, owner: &str, repo: &str) -> Result<Value, Error> {
let method = "GET";
let (path, query) = Self::repository_details(owner, repo);
let body = None;
let resp = self.client.request(method, &path, query, body).await?;
Ok(resp.json().await?)
}
pub fn repository_url(&self, owner: &str, repo: &str) -> Result<String, Error> {
let (path, query) = Self::repository_details(owner, repo);
self.client.make_url(&path, query)
}
pub fn repository_signed_url(&self, owner: &str, repo: &str, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::repository_details(owner, repo);
self.client.make_signed_url(&path, query, ttl)
}
fn repository_details<'a>(owner: &'a str, repo: &'a str) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("repository/{}/{}", urlencode(owner), urlencode(repo));
let query = None;
(path, query)
}
pub async fn latest(&self, owner: &str, repo: &str, branch: &str) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::latest_details(owner, repo, branch);
let body = None;
let resp = self.client.request(method, &path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn latest_url(&self, owner: &str, repo: &str, branch: &str) -> Result<String, Error> {
let (path, query) = Self::latest_details(owner, repo, branch);
self.client.make_url(&path, query)
}
pub fn latest_signed_url(&self, owner: &str, repo: &str, branch: &str, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::latest_details(owner, repo, branch);
self.client.make_signed_url(&path, query, ttl)
}
fn latest_details<'a>(owner: &'a str, repo: &'a str, branch: &'a str) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("repository/{}/{}/{}/latest", urlencode(owner), urlencode(repo), urlencode(branch));
let query = None;
(path, query)
}
pub async fn createStatus(&self, owner: &str, repo: &str, sha: &str, payload: &Value) -> Result<(), Error> {
let method = "POST";
let (path, query) = Self::createStatus_details(owner, repo, sha);
let body = Some(payload);
let resp = self.client.request(method, &path, query, body).await?;
resp.bytes().await?;
Ok(())
}
fn createStatus_details<'a>(owner: &'a str, repo: &'a str, sha: &'a str) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("repository/{}/{}/statuses/{}", urlencode(owner), urlencode(repo), urlencode(sha));
let query = None;
(path, query)
}
pub async fn createComment(&self, owner: &str, repo: &str, number: &str, payload: &Value) -> Result<(), Error> {
let method = "POST";
let (path, query) = Self::createComment_details(owner, repo, number);
let body = Some(payload);
let resp = self.client.request(method, &path, query, body).await?;
resp.bytes().await?;
Ok(())
}
fn createComment_details<'a>(owner: &'a str, repo: &'a str, number: &'a str) -> (String, Option<Vec<(&'static str, &'a str)>>) {
let path = format!("repository/{}/{}/issues/{}/comments", urlencode(owner), urlencode(repo), urlencode(number));
let query = None;
(path, query)
}
pub async fn renderTaskclusterYml(&self, payload: &Value) -> Result<Value, Error> {
let method = "POST";
let (path, query) = Self::renderTaskclusterYml_details();
let body = Some(payload);
let resp = self.client.request(method, path, query, body).await?;
Ok(resp.json().await?)
}
fn renderTaskclusterYml_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "taskcluster-yml";
let query = None;
(path, query)
}
pub async fn heartbeat(&self) -> Result<(), Error> {
let method = "GET";
let (path, query) = Self::heartbeat_details();
let body = None;
let resp = self.client.request(method, path, query, body).await?;
resp.bytes().await?;
Ok(())
}
pub fn heartbeat_url(&self) -> Result<String, Error> {
let (path, query) = Self::heartbeat_details();
self.client.make_url(path, query)
}
pub fn heartbeat_signed_url(&self, ttl: Duration) -> Result<String, Error> {
let (path, query) = Self::heartbeat_details();
self.client.make_signed_url(path, query, ttl)
}
fn heartbeat_details<'a>() -> (&'static str, Option<Vec<(&'static str, &'a str)>>) {
let path = "__heartbeat__";
let query = None;
(path, query)
}
}