gritlab 0.1.12

Gitlab rust API sdk
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]
pub struct Namespace {
    pub id: i64,
    pub name: String,
    pub path: String,
    pub kind: String,
    pub full_path: String,
    pub parent_id: Option<i64>,
    pub avatar_url: Option<String>,
    pub web_url: String,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Links {
    #[serde(rename = "self")]
    pub self_: String,
    pub issues: String,
    pub merge_requests: String,
    pub repo_branches: String,
    pub labels: String,
    pub events: String,
    pub members: String,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct ContainerExpiryPolicy {
    pub cadence: String,
    pub enabled: bool,
    pub keep_n: i64,
    pub older_than: String,
    pub name_regex: String,
    pub name_regex_keep: Option<String>,
    pub next_run_at: DateTime<Utc>,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Owner {
    pub id: i64,
    pub name: String,
    pub username: String,
    pub state: String,
    pub avatar_url: String,
    pub web_url: String,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Group {
    pub group_id: i64,
    pub group_name: String,
    pub group_full_path: String,
    pub group_access_level: i64,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Access {
    access_level: i64,
    notification_level: i64,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Permissions {
    pub project_accesss: Option<Access>,
    pub group_access: Option<Access>,
}

// TODO: use macro to eliminate so many skip_serializing_if annos
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ListProjectsOption {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub archived: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id_after: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id_before: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub imported: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_activity_after: Option<DateTime<Utc>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_activity_before: Option<DateTime<Utc>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub membership: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_access_level: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub order_by: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub owned: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub repository_checksum_failed: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub repository_storage: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub search_namespaces: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub search: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub simple: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub sort: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub starred: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub statistics: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub topic: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub topic_id: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub visibility: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub wiki_checksum_failed: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub wiki_custom_attributes: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub wiki_issues_enabled: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub wiki_merge_requests_enabled: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub with_programming_language: Option<String>,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Repository {
    pub id: i64,
    pub description: Option<String>,
    pub name: String,
    pub name_with_namespace: String,
    pub path: String,
    pub path_with_namespace: String,
    pub created_at: DateTime<Utc>,
    pub default_branch: Option<String>,
    pub tag_list: Vec<String>,
    pub ssh_url_to_repo: String,
    pub http_url_to_repo: String,
    pub web_url: String,
    pub readme_url: Option<String>,
    pub avatar_url: Option<String>,
    pub forks_count: i64,
    pub star_count: i64,
    pub last_activity_at: DateTime<Utc>,
    pub namespace: Namespace,
    pub _links: Links,
    pub packages_enabled: Option<bool>,
    pub empty_repo: bool,
    pub archived: bool,
    pub visibility: String,
    pub owner: Option<Owner>,
    pub resolve_outdated_diff_discussions: bool,
    pub container_registry_enabled: bool,
    pub container_expiration_policy: Option<ContainerExpiryPolicy>,
    pub issues_enabled: bool,
    pub merge_requests_enabled: bool,
    pub wiki_enabled: bool,
    pub jobs_enabled: bool,
    pub snippets_enabled: bool,
    pub service_desk_enabled: bool,
    pub service_desk_address: Option<String>,
    pub can_create_merge_request_in: bool,
    pub issues_access_level: String,
    pub repository_access_level: String,
    pub merge_requests_access_level: String,
    pub forking_access_level: String,
    pub wiki_access_level: String,
    pub builds_access_level: String,
    pub snippets_access_level: String,
    pub pages_access_level: String,
    pub operations_access_level: String,
    pub analytics_access_level: String,
    pub emails_disabled: Option<bool>,
    pub shared_runners_enabled: bool,
    pub lfs_enabled: bool,
    pub creator_id: i64,
    pub import_status: String,
    pub open_issues_count: i64,
    pub ci_default_git_depth: Option<i64>,
    pub ci_forward_deployment_enabled: Option<bool>,
    pub public_jobs: bool,
    pub build_timeout: i64,
    pub auto_cancel_pending_pipelines: String,
    pub build_coverage_regex: Option<String>,
    pub ci_config_path: Option<String>,
    pub shared_with_groups: Vec<Group>,
    pub only_allow_merge_if_pipeline_succeeds: bool,
    pub allow_merge_on_skipped_pipeline: Option<bool>,
    pub restrict_user_defined_variables: bool,
    pub request_access_enabled: bool,
    pub only_allow_merge_if_all_discussions_are_resolved: bool,
    pub remove_source_branch_after_merge: Option<bool>,
    pub printing_merge_request_link_enabled: bool,
    pub merge_method: String,
    pub suggestion_commit_message: Option<String>,
    pub auto_devops_enabled: bool,
    pub auto_devops_deploy_strategy: String,
    pub autoclose_referenced_issues: bool,
    pub repository_storage: String,
    // TODO
    // pub requirements_enabled: Option<String>,
    pub security_and_compliance_enabled: bool,
    pub compliance_frameworks: Vec<String>,
    pub permissions: Permissions,
}