use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use url::Url;
use super::{Author, CodespaceId, Repository, RepositoryId};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Codespace {
pub id: CodespaceId,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub environment_id: Option<String>,
pub owner: Author,
pub billable_owner: Author,
pub repository: Repository,
#[serde(skip_serializing_if = "Option::is_none")]
pub machine: Option<CodespaceMachine>,
#[serde(skip_serializing_if = "Option::is_none")]
pub devcontainer_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prebuild: Option<bool>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_used_at: Option<DateTime<Utc>>,
pub state: String,
pub url: Url,
#[serde(skip_serializing_if = "Option::is_none")]
pub git_status: Option<CodespaceGitStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle_timeout_minutes: Option<u32>,
pub web_url: Url,
pub machines_url: Url,
pub start_url: Url,
pub stop_url: Url,
#[serde(skip_serializing_if = "Option::is_none")]
pub publish_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pulls_url: Option<Url>,
#[serde(default)]
pub recent_folders: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle_timeout_notice: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_period_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_expires_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespaceMachine {
pub name: String,
pub display_name: String,
pub operating_system: String,
pub storage_in_bytes: u64,
pub memory_in_bytes: u64,
pub cpus: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub prebuild_availability: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespaceGitStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub ahead: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub behind: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_unpushed_changes: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_uncommitted_changes: Option<bool>,
#[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
pub ref_: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Devcontainer {
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespaceDefaultAttributes {
#[serde(skip_serializing_if = "Option::is_none")]
pub billable_owner: Option<Author>,
pub defaults: CodespaceDefaults,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespaceDefaults {
pub location: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub devcontainer_path: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespacePermissionsCheck {
pub accepted: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespaceExportDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sha: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub export_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html_url: Option<Url>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct OrgCodespacesAccess {
pub visibility: OrgCodespacesAccessVisibility,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum OrgCodespacesAccessVisibility {
Disabled,
SelectedMembers,
AllMembers,
AllMembersAndOutsideCollaborators,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CodespacesSecret {
pub name: String,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub visibility: crate::models::orgs::secrets::Visibility,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_repositories_url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct SelectedRepositories {
pub total_count: u32,
pub repositories: Vec<Repository>,
}
#[derive(Debug, Clone, Serialize)]
pub struct CodespacePullRequestRef {
pub pull_request_number: u64,
pub repository_id: RepositoryId,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct CreateUserCodespace {
#[serde(skip_serializing_if = "Option::is_none")]
pub repository_id: Option<RepositoryId>,
#[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
pub ref_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub machine: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub devcontainer_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub multi_repo_permissions_opt_out: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub working_directory: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle_timeout_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_period_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pull_request: Option<CodespacePullRequestRef>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct CreateRepoCodespace {
#[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
pub ref_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub machine: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub devcontainer_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub multi_repo_permissions_opt_out: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub working_directory: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle_timeout_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_period_minutes: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct CreatePullRequestCodespace {
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub machine: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub devcontainer_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub multi_repo_permissions_opt_out: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub working_directory: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle_timeout_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_period_minutes: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct UpdateCodespace {
#[serde(skip_serializing_if = "Option::is_none")]
pub machine: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recent_folders: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct PublishCodespace {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private: Option<bool>,
}
#[derive(Debug, Clone, Serialize)]
pub struct CreateUserCodespacesSecret<'a> {
pub encrypted_value: &'a str,
pub key_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_repository_ids: Option<&'a [RepositoryId]>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SetSelectedRepositories<'a> {
pub selected_repository_ids: &'a [RepositoryId],
}