args-api 0.1.0

Shared API contract types and endpoint definitions for args.
Documentation
use serde::{Deserialize, Serialize};

use super::default_visibility;
use crate::{endpoint::Endpoint, resource::RepositoryResource};

pub struct CreateRepository;

impl Endpoint for CreateRepository {
    const PATH: &'static str = "/repository/{owner}/{repo}";
    const METHOD: http::Method = http::Method::POST;

    type Request = CreateRepositoryRequest;
    type Response = CreateRepositoryResponse;
}

#[derive(ApiRequest, Debug, Serialize, Deserialize)]
pub struct CreateRepositoryRequest {
    pub owner_type: String,

    #[serde(default = "default_visibility")]
    pub visibility: String,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,

    #[serde(default)]
    pub init_readme: bool,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub gitignore_template: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license_template: Option<String>,
}

pub type CreateRepositoryResponse = RepositoryResource;