pub use progenitor_client::{ByteStream, Error, ResponseValue}; pub mod types { use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] pub struct BlockSize(i64); impl std::ops::Deref for BlockSize { type Target = i64; fn deref(&self) -> &Self::Target { &self.0 } } impl std::convert::TryFrom for BlockSize { type Error = &'static str; fn try_from(value: i64) -> Result { if ![512_i64, 2048_i64, 4096_i64].contains(&value) { Err("invalid value") } else { Ok(Self(value)) } } } #[doc = "A count of bytes, typically used either for memory or storage capacity\n\nThe maximum supported byte count is [`i64::MAX`]. This makes it somewhat inconvenient to define constructors: a u32 constructor can be infallible, but an i64 constructor can fail (if the value is negative) and a u64 constructor can fail (if the value is larger than i64::MAX). We provide all of these for consumers' convenience."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ByteCount(pub u64); impl std::ops::Deref for ByteCount { type Target = u64; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "The type of an individual datum of a metric."] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum DatumType { #[serde(rename = "bool")] Bool, #[serde(rename = "i64")] I64, #[serde(rename = "f64")] F64, #[serde(rename = "string")] String, #[serde(rename = "bytes")] Bytes, #[serde(rename = "cumulative_i64")] CumulativeI64, #[serde(rename = "cumulative_f64")] CumulativeF64, #[serde(rename = "histogram_i64")] HistogramI64, #[serde(rename = "histogram_f64")] HistogramF64, } impl ToString for DatumType { fn to_string(&self) -> String { match *self { DatumType::Bool => "bool".to_string(), DatumType::I64 => "i64".to_string(), DatumType::F64 => "f64".to_string(), DatumType::String => "string".to_string(), DatumType::Bytes => "bytes".to_string(), DatumType::CumulativeI64 => "cumulative_i64".to_string(), DatumType::CumulativeF64 => "cumulative_f64".to_string(), DatumType::HistogramI64 => "histogram_i64".to_string(), DatumType::HistogramF64 => "histogram_f64".to_string(), } } } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Digest { #[serde(rename = "type")] pub type_: DigestType, pub value: String, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum DigestType { #[serde(rename = "sha256")] Sha256, } impl ToString for DigestType { fn to_string(&self) -> String { match *self { DigestType::Sha256 => "sha256".to_string(), } } } #[doc = "Client view of an [`Disk`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Disk { pub block_size: ByteCount, #[doc = "human-readable free-form text about a resource"] pub description: String, pub device_path: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[serde(default, skip_serializing_if = "Option::is_none")] pub image_id: Option, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, pub project_id: uuid::Uuid, pub size: ByteCount, #[serde(default, skip_serializing_if = "Option::is_none")] pub snapshot_id: Option, pub state: DiskState, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for a [`Disk`](omicron_common::api::external::Disk)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct DiskCreate { pub description: String, #[doc = "initial source for this disk"] pub disk_source: DiskSource, pub name: Name, #[doc = "total size of the Disk in bytes"] pub size: ByteCount, } #[doc = "Parameters for the [`Disk`](omicron_common::api::external::Disk) to be attached or detached to an instance"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct DiskIdentifier { pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct DiskResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Different sources for a disk"] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type")] pub enum DiskSource { #[doc = "Create a blank disk"] #[serde(rename = "blank")] Blank { #[doc = "size of blocks for this Disk. valid values are: 512, 2048, or 4096"] block_size: BlockSize, }, #[doc = "Create a disk from a disk snapshot"] #[serde(rename = "snapshot")] Snapshot { snapshot_id: uuid::Uuid }, #[doc = "Create a disk from a project image"] #[serde(rename = "image")] Image { image_id: uuid::Uuid }, #[doc = "Create a disk from a global image"] #[serde(rename = "global_image")] GlobalImage { image_id: uuid::Uuid }, } #[doc = "State of a Disk (primarily: attached or not)"] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "state", content = "instance")] pub enum DiskState { #[serde(rename = "creating")] Creating, #[serde(rename = "detached")] Detached, #[doc = "Disk is being attached to the given Instance"] #[serde(rename = "attaching")] Attaching(uuid::Uuid), #[doc = "Disk is attached to the given Instance"] #[serde(rename = "attached")] Attached(uuid::Uuid), #[doc = "Disk is being detached from the given Instance"] #[serde(rename = "detaching")] Detaching(uuid::Uuid), #[serde(rename = "destroyed")] Destroyed, #[serde(rename = "faulted")] Faulted, } #[doc = "Error information from a response."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Error { #[serde(default, skip_serializing_if = "Option::is_none")] pub error_code: Option, pub message: String, pub request_id: String, } #[doc = "The name and type information for a field of a timeseries schema."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct FieldSchema { pub name: String, pub source: FieldSource, pub ty: FieldType, } #[doc = "The source from which a field is derived, the target or metric."] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum FieldSource { #[serde(rename = "target")] Target, #[serde(rename = "metric")] Metric, } impl ToString for FieldSource { fn to_string(&self) -> String { match *self { FieldSource::Target => "target".to_string(), FieldSource::Metric => "metric".to_string(), } } } #[doc = "The `FieldType` identifies the data type of a target or metric field."] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum FieldType { #[serde(rename = "string")] String, #[serde(rename = "i64")] I64, #[serde(rename = "ip_addr")] IpAddr, #[serde(rename = "uuid")] Uuid, #[serde(rename = "bool")] Bool, } impl ToString for FieldType { fn to_string(&self) -> String { match *self { FieldType::String => "string".to_string(), FieldType::I64 => "i64".to_string(), FieldType::IpAddr => "ip_addr".to_string(), FieldType::Uuid => "uuid".to_string(), FieldType::Bool => "bool".to_string(), } } } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum FleetRoles { #[serde(rename = "admin")] Admin, #[serde(rename = "collaborator")] Collaborator, #[serde(rename = "viewer")] Viewer, } impl ToString for FleetRoles { fn to_string(&self) -> String { match *self { FleetRoles::Admin => "admin".to_string(), FleetRoles::Collaborator => "collaborator".to_string(), FleetRoles::Viewer => "viewer".to_string(), } } } #[doc = "Client view of a [`Policy`], which describes how this resource may be accessed\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct FleetRolesPolicy { #[doc = "Roles directly assigned on this resource"] pub role_assignments: Vec, } #[doc = "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, [`RoleAssignment`]s are put into a [`Policy`] and that Policy is applied to a particular resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct FleetRolesRoleAssignment { pub identity_id: uuid::Uuid, pub identity_type: IdentityType, pub role_name: FleetRoles, } #[doc = "Client view of global Images"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct GlobalImage { #[doc = "size of blocks in bytes"] pub block_size: ByteCount, #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "Hash of the image contents, if applicable"] #[serde(default, skip_serializing_if = "Option::is_none")] pub digest: Option, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "total size in bytes"] pub size: ByteCount, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "URL source of this image, if any"] #[serde(default, skip_serializing_if = "Option::is_none")] pub url: Option, #[doc = "Version of this, if any"] #[serde(default, skip_serializing_if = "Option::is_none")] pub version: Option, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct GlobalImageResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Supported set of sort modes for scanning by id only.\n\nCurrently, we only support scanning in ascending order."] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum IdSortMode { #[serde(rename = "id_ascending")] IdAscending, } impl ToString for IdSortMode { fn to_string(&self) -> String { match *self { IdSortMode::IdAscending => "id_ascending".to_string(), } } } #[doc = "Describes what kind of identity is described by an id"] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum IdentityType { #[serde(rename = "silo_user")] SiloUser, } impl ToString for IdentityType { fn to_string(&self) -> String { match *self { IdentityType::SiloUser => "silo_user".to_string(), } } } #[doc = "Client view of project Images"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Image { #[doc = "size of blocks in bytes"] pub block_size: ByteCount, #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "Hash of the image contents, if applicable"] #[serde(default, skip_serializing_if = "Option::is_none")] pub digest: Option, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "The project the disk belongs to"] pub project_id: uuid::Uuid, #[doc = "total size in bytes"] pub size: ByteCount, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "URL source of this image, if any"] #[serde(default, skip_serializing_if = "Option::is_none")] pub url: Option, #[doc = "Version of this, if any"] #[serde(default, skip_serializing_if = "Option::is_none")] pub version: Option, } #[doc = "Create-time parameters for an [`Image`](omicron_common::api::external::Image)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ImageCreate { #[doc = "block size in bytes"] pub block_size: BlockSize, pub description: String, pub name: Name, #[doc = "The source of the image's contents."] pub source: ImageSource, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ImageResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "The source of the underlying image."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "src")] pub enum ImageSource { #[serde(rename = "url")] Url(String), #[serde(rename = "snapshot")] Snapshot(uuid::Uuid), } #[doc = "Client view of an [`Instance`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Instance { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "RFC1035-compliant hostname for the Instance."] pub hostname: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "memory allocated for this Instance"] pub memory: ByteCount, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "number of CPUs allocated for this Instance"] pub ncpus: InstanceCpuCount, #[doc = "id for the project containing this Instance"] pub project_id: uuid::Uuid, pub run_state: InstanceState, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, pub time_run_state_updated: chrono::DateTime, } #[doc = "The number of CPUs in an Instance"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct InstanceCpuCount(pub u16); impl std::ops::Deref for InstanceCpuCount { type Target = u16; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "Create-time parameters for an [`Instance`](omicron_common::api::external::Instance)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct InstanceCreate { pub description: String, #[doc = "The disks to be created or attached for this instance."] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub disks: Vec, pub hostname: String, pub memory: ByteCount, pub name: Name, pub ncpus: InstanceCpuCount, #[doc = "The network interfaces to be created for this instance."] #[serde(default = "instance_create_network_interfaces")] pub network_interfaces: InstanceNetworkInterfaceAttachment, #[doc = "User data for instance initialization systems (such as cloud-init). Must be a Base64-encoded string, as specified in RFC 4648 ยง 4 (+ and / characters with padding). Maximum 32 KiB unencoded data."] #[serde(default)] pub user_data: String, } fn instance_create_network_interfaces() -> InstanceNetworkInterfaceAttachment { InstanceNetworkInterfaceAttachment::Default } #[doc = "Describe the instance's disks at creation time"] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type")] pub enum InstanceDiskAttachment { #[doc = "During instance creation, create and attach disks"] #[serde(rename = "create")] Create { description: String, #[doc = "initial source for this disk"] disk_source: DiskSource, name: Name, #[doc = "total size of the Disk in bytes"] size: ByteCount, }, #[doc = "During instance creation, attach this disk"] #[serde(rename = "attach")] Attach { #[doc = "A disk name to attach"] name: Name, }, } #[doc = "Migration parameters for an [`Instance`](omicron_common::api::external::Instance)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct InstanceMigrate { pub dst_sled_uuid: uuid::Uuid, } #[doc = "Describes an attachment of a `NetworkInterface` to an `Instance`, at the time the instance is created."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "params")] pub enum InstanceNetworkInterfaceAttachment { #[doc = "Create one or more `NetworkInterface`s for the `Instance`"] #[serde(rename = "create")] Create(Vec), #[serde(rename = "default")] Default, #[serde(rename = "none")] None, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct InstanceResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Running state of an Instance (primarily: booted or stopped)\n\nThis typically reflects whether it's starting, running, stopping, or stopped, but also includes states related to the Instance's lifecycle"] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum InstanceState { #[serde(rename = "creating")] Creating, #[serde(rename = "starting")] Starting, #[serde(rename = "running")] Running, #[serde(rename = "stopping")] Stopping, #[serde(rename = "stopped")] Stopped, #[serde(rename = "rebooting")] Rebooting, #[serde(rename = "migrating")] Migrating, #[serde(rename = "repairing")] Repairing, #[serde(rename = "failed")] Failed, #[serde(rename = "destroyed")] Destroyed, } impl ToString for InstanceState { fn to_string(&self) -> String { match *self { InstanceState::Creating => "creating".to_string(), InstanceState::Starting => "starting".to_string(), InstanceState::Running => "running".to_string(), InstanceState::Stopping => "stopping".to_string(), InstanceState::Stopped => "stopped".to_string(), InstanceState::Rebooting => "rebooting".to_string(), InstanceState::Migrating => "migrating".to_string(), InstanceState::Repairing => "repairing".to_string(), InstanceState::Failed => "failed".to_string(), InstanceState::Destroyed => "destroyed".to_string(), } } } #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(untagged)] pub enum IpNet { V4(Ipv4Net), V6(Ipv6Net), } #[doc = "An IPv4 subnet, including prefix and subnet mask"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Ipv4Net(pub String); impl std::ops::Deref for Ipv4Net { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "An IPv6 subnet, including prefix and subnet mask"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Ipv6Net(pub String); impl std::ops::Deref for Ipv6Net { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "An inclusive-inclusive range of IP ports. The second port may be omitted to represent a single port"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct L4PortRange(pub String); impl std::ops::Deref for L4PortRange { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct LoginParams { pub username: String, } #[doc = "A Media Access Control address, in EUI-48 format"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct MacAddr(pub String); impl std::ops::Deref for MacAddr { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "Names must begin with a lower case ASCII letter, be composed exclusively of lowercase ASCII, uppercase ASCII, numbers, and '-', and may not end with a '-'."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Name(pub String); impl std::ops::Deref for Name { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "Supported set of sort modes for scanning by name or id"] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum NameOrIdSortMode { #[serde(rename = "name_ascending")] NameAscending, #[serde(rename = "name_descending")] NameDescending, #[serde(rename = "id_ascending")] IdAscending, } impl ToString for NameOrIdSortMode { fn to_string(&self) -> String { match *self { NameOrIdSortMode::NameAscending => "name_ascending".to_string(), NameOrIdSortMode::NameDescending => "name_descending".to_string(), NameOrIdSortMode::IdAscending => "id_ascending".to_string(), } } } #[doc = "Supported set of sort modes for scanning by name only\n\nCurrently, we only support scanning in ascending order."] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum NameSortMode { #[serde(rename = "name_ascending")] NameAscending, } impl ToString for NameSortMode { fn to_string(&self) -> String { match *self { NameSortMode::NameAscending => "name_ascending".to_string(), } } } #[doc = "A `NetworkInterface` represents a virtual network interface device."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct NetworkInterface { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "The Instance to which the interface belongs."] pub instance_id: uuid::Uuid, #[doc = "The IP address assigned to this interface."] pub ip: String, #[doc = "The MAC address assigned to this interface."] pub mac: MacAddr, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "The subnet to which the interface belongs."] pub subnet_id: uuid::Uuid, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "The VPC to which the interface belongs."] pub vpc_id: uuid::Uuid, } #[doc = "Create-time parameters for a [`NetworkInterface`](omicron_common::api::external::NetworkInterface)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct NetworkInterfaceCreate { pub description: String, #[doc = "The IP address for the interface. One will be auto-assigned if not provided."] #[serde(default, skip_serializing_if = "Option::is_none")] pub ip: Option, pub name: Name, #[doc = "The VPC Subnet in which to create the interface."] pub subnet_name: Name, #[doc = "The VPC in which to create the interface."] pub vpc_name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct NetworkInterfaceResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of an [`Organization`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Organization { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for an [`Organization`](crate::external_api::views::Organization)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct OrganizationCreate { pub description: String, pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct OrganizationResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum OrganizationRoles { #[serde(rename = "admin")] Admin, #[serde(rename = "collaborator")] Collaborator, } impl ToString for OrganizationRoles { fn to_string(&self) -> String { match *self { OrganizationRoles::Admin => "admin".to_string(), OrganizationRoles::Collaborator => "collaborator".to_string(), } } } #[doc = "Client view of a [`Policy`], which describes how this resource may be accessed\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct OrganizationRolesPolicy { #[doc = "Roles directly assigned on this resource"] pub role_assignments: Vec, } #[doc = "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, [`RoleAssignment`]s are put into a [`Policy`] and that Policy is applied to a particular resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct OrganizationRolesRoleAssignment { pub identity_id: uuid::Uuid, pub identity_type: IdentityType, pub role_name: OrganizationRoles, } #[doc = "Updateable properties of an [`Organization`](crate::external_api::views::Organization)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct OrganizationUpdate { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, } #[doc = "Client view of a [`Project`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Project { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, pub organization_id: uuid::Uuid, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for a [`Project`](crate::external_api::views::Project)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectCreate { pub description: String, pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum ProjectRoles { #[serde(rename = "admin")] Admin, #[serde(rename = "collaborator")] Collaborator, #[serde(rename = "viewer")] Viewer, } impl ToString for ProjectRoles { fn to_string(&self) -> String { match *self { ProjectRoles::Admin => "admin".to_string(), ProjectRoles::Collaborator => "collaborator".to_string(), ProjectRoles::Viewer => "viewer".to_string(), } } } #[doc = "Client view of a [`Policy`], which describes how this resource may be accessed\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectRolesPolicy { #[doc = "Roles directly assigned on this resource"] pub role_assignments: Vec, } #[doc = "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, [`RoleAssignment`]s are put into a [`Policy`] and that Policy is applied to a particular resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectRolesRoleAssignment { pub identity_id: uuid::Uuid, pub identity_type: IdentityType, pub role_name: ProjectRoles, } #[doc = "Updateable properties of a [`Project`](crate::external_api::views::Project)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectUpdate { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, } #[doc = "Client view of an [`Rack`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Rack { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RackResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of a [`Role`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Role { pub description: String, pub name: RoleName, } #[doc = "Role names consist of two string components separated by dot (\".\")."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RoleName(pub String); impl std::ops::Deref for RoleName { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RoleResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "A `RouteDestination` is used to match traffic with a routing rule, on the destination of that traffic.\n\nWhen traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding [`RouterRoute`] applies, and traffic will be forward to the [`RouteTarget`] for that rule."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "value")] pub enum RouteDestination { #[doc = "Route applies to traffic destined for a specific IP address"] #[serde(rename = "ip")] Ip(String), #[doc = "Route applies to traffic destined for a specific IP subnet"] #[serde(rename = "ip_net")] IpNet(IpNet), #[doc = "Route applies to traffic destined for the given VPC."] #[serde(rename = "vpc")] Vpc(Name), #[doc = "Route applies to traffic"] #[serde(rename = "subnet")] Subnet(Name), } #[doc = "A `RouteTarget` describes the possible locations that traffic matching a route destination can be sent."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "value")] pub enum RouteTarget { #[doc = "Forward traffic to a particular IP address."] #[serde(rename = "ip")] Ip(String), #[doc = "Forward traffic to a VPC"] #[serde(rename = "vpc")] Vpc(Name), #[doc = "Forward traffic to a VPC Subnet"] #[serde(rename = "subnet")] Subnet(Name), #[doc = "Forward traffic to a specific instance"] #[serde(rename = "instance")] Instance(Name), #[doc = "Forward traffic to an internet gateway"] #[serde(rename = "internet_gateway")] InternetGateway(Name), } #[doc = "A route defines a rule that governs where traffic should be sent based on its destination."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RouterRoute { #[doc = "human-readable free-form text about a resource"] pub description: String, pub destination: RouteDestination, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "Describes the kind of router. Set at creation. `read-only`"] pub kind: RouterRouteKind, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, pub target: RouteTarget, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "The VPC Router to which the route belongs."] pub vpc_router_id: uuid::Uuid, } #[doc = "Create-time parameters for a [`RouterRoute`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RouterRouteCreateParams { pub description: String, pub destination: RouteDestination, pub name: Name, pub target: RouteTarget, } #[doc = "The classification of a [`RouterRoute`] as defined by the system. The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created.\n\nSee [RFD-21](https://rfd.shared.oxide.computer/rfd/0021#concept-router) for more context"] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum RouterRouteKind { #[serde(rename = "default")] Default, #[serde(rename = "vpc_subnet")] VpcSubnet, #[serde(rename = "vpc_peering")] VpcPeering, #[serde(rename = "custom")] Custom, } impl ToString for RouterRouteKind { fn to_string(&self) -> String { match *self { RouterRouteKind::Default => "default".to_string(), RouterRouteKind::VpcSubnet => "vpc_subnet".to_string(), RouterRouteKind::VpcPeering => "vpc_peering".to_string(), RouterRouteKind::Custom => "custom".to_string(), } } } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RouterRouteResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Updateable properties of a [`RouterRoute`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct RouterRouteUpdateParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, pub destination: RouteDestination, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, pub target: RouteTarget, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Saga { pub id: uuid::Uuid, pub state: SagaState, } #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "error")] pub enum SagaErrorInfo { #[serde(rename = "action_failed")] ActionFailed { source_error: serde_json::Value }, #[serde(rename = "deserialize_failed")] DeserializeFailed { message: String }, #[serde(rename = "injected_error")] InjectedError, #[serde(rename = "serialize_failed")] SerializeFailed { message: String }, #[serde(rename = "subsaga_create_failed")] SubsagaCreateFailed { message: String }, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SagaResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "state")] pub enum SagaState { #[serde(rename = "running")] Running, #[serde(rename = "succeeded")] Succeeded, #[serde(rename = "failed")] Failed { error_info: SagaErrorInfo, error_node_name: String, }, } #[doc = "Client view of currently authed user."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SessionUser { pub id: uuid::Uuid, } #[doc = "Client view of a ['Silo']"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Silo { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "A silo where discoverable is false can be retrieved only by its id - it will not be part of the \"list all silos\" output."] pub discoverable: bool, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for a [`Silo`](crate::external_api::views::Silo)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SiloCreate { pub description: String, pub discoverable: bool, pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SiloResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum SiloRoles { #[serde(rename = "admin")] Admin, #[serde(rename = "collaborator")] Collaborator, #[serde(rename = "viewer")] Viewer, } impl ToString for SiloRoles { fn to_string(&self) -> String { match *self { SiloRoles::Admin => "admin".to_string(), SiloRoles::Collaborator => "collaborator".to_string(), SiloRoles::Viewer => "viewer".to_string(), } } } #[doc = "Client view of a [`Policy`], which describes how this resource may be accessed\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SiloRolesPolicy { #[doc = "Roles directly assigned on this resource"] pub role_assignments: Vec, } #[doc = "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, [`RoleAssignment`]s are put into a [`Policy`] and that Policy is applied to a particular resource."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SiloRolesRoleAssignment { pub identity_id: uuid::Uuid, pub identity_type: IdentityType, pub role_name: SiloRoles, } #[doc = "Client view of an [`Sled`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Sled { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, pub service_address: String, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SledResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of a Snapshot"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Snapshot { #[doc = "human-readable free-form text about a resource"] pub description: String, pub disk_id: uuid::Uuid, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, pub project_id: uuid::Uuid, pub size: ByteCount, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for a [`Snapshot`](omicron_common::api::external::Snapshot)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SnapshotCreate { pub description: String, #[doc = "The name of the disk to be snapshotted"] pub disk: Name, pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SnapshotResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of a [`SshKey`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SshKey { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`"] pub public_key: String, #[doc = "The user to whom this key belongs"] pub silo_user_id: uuid::Uuid, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for an [`SshKey`](crate::external_api::views::SshKey)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SshKeyCreate { pub description: String, pub name: Name, #[doc = "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`"] pub public_key: String, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct SshKeyResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Names are constructed by concatenating the target and metric names with ':'. Target and metric names must be lowercase alphanumeric characters with '_' separating words."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct TimeseriesName(pub String); impl std::ops::Deref for TimeseriesName { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } #[doc = "The schema for a timeseries.\n\nThis includes the name of the timeseries, as well as the datum type of its metric and the schema for each field."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct TimeseriesSchema { pub created: chrono::DateTime, pub datum_type: DatumType, pub field_schema: Vec, pub timeseries_name: TimeseriesName, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct TimeseriesSchemaResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of a [`User`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct User { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Client view of a [`Vpc`]"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Vpc { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "The name used for the VPC in DNS."] pub dns_name: Name, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "The unique local IPv6 address range for subnets in this VPC"] pub ipv6_prefix: Ipv6Net, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "id for the project containing this VPC"] pub project_id: uuid::Uuid, #[doc = "id for the system router where subnet default routes are registered"] pub system_router_id: uuid::Uuid, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, } #[doc = "Create-time parameters for a [`Vpc`](crate::external_api::views::Vpc)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcCreate { pub description: String, pub dns_name: Name, #[doc = "The IPv6 prefix for this VPC.\n\nAll IPv6 subnets created from this VPC must be taken from this range, which sould be a Unique Local Address in the range `fd00::/48`. The default VPC Subnet will have the first `/64` range from this prefix."] #[serde(default, skip_serializing_if = "Option::is_none")] pub ipv6_prefix: Option, pub name: Name, } #[doc = "A single rule in a VPC firewall"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcFirewallRule { #[doc = "whether traffic matching the rule should be allowed or dropped"] pub action: VpcFirewallRuleAction, #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "whether this rule is for incoming or outgoing traffic"] pub direction: VpcFirewallRuleDirection, #[doc = "reductions on the scope of the rule"] pub filters: VpcFirewallRuleFilter, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "the relative priority of this rule"] pub priority: u16, #[doc = "whether this rule is in effect"] pub status: VpcFirewallRuleStatus, #[doc = "list of sets of instances that the rule applies to"] pub targets: Vec, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "the VPC to which this rule belongs"] pub vpc_id: uuid::Uuid, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum VpcFirewallRuleAction { #[serde(rename = "allow")] Allow, #[serde(rename = "deny")] Deny, } impl ToString for VpcFirewallRuleAction { fn to_string(&self) -> String { match *self { VpcFirewallRuleAction::Allow => "allow".to_string(), VpcFirewallRuleAction::Deny => "deny".to_string(), } } } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum VpcFirewallRuleDirection { #[serde(rename = "inbound")] Inbound, #[serde(rename = "outbound")] Outbound, } impl ToString for VpcFirewallRuleDirection { fn to_string(&self) -> String { match *self { VpcFirewallRuleDirection::Inbound => "inbound".to_string(), VpcFirewallRuleDirection::Outbound => "outbound".to_string(), } } } #[doc = "Filter for a firewall rule. A given packet must match every field that is present for the rule to apply to it. A packet matches a field if any entry in that field matches the packet."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcFirewallRuleFilter { #[doc = "If present, the sources (if incoming) or destinations (if outgoing) this rule applies to."] #[serde(default, skip_serializing_if = "Option::is_none")] pub hosts: Option>, #[doc = "If present, the destination ports this rule applies to."] #[serde(default, skip_serializing_if = "Option::is_none")] pub ports: Option>, #[doc = "If present, the networking protocols this rule applies to."] #[serde(default, skip_serializing_if = "Option::is_none")] pub protocols: Option>, } #[doc = "The `VpcFirewallRuleHostFilter` is used to filter traffic on the basis of its source or destination host."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "value")] pub enum VpcFirewallRuleHostFilter { #[doc = "The rule applies to traffic from/to all instances in the VPC"] #[serde(rename = "vpc")] Vpc(Name), #[doc = "The rule applies to traffic from/to all instances in the VPC Subnet"] #[serde(rename = "subnet")] Subnet(Name), #[doc = "The rule applies to traffic from/to this specific instance"] #[serde(rename = "instance")] Instance(Name), #[doc = "The rule applies to traffic from/to a specific IP address"] #[serde(rename = "ip")] Ip(String), #[doc = "The rule applies to traffic from/to a specific IP subnet"] #[serde(rename = "ip_net")] IpNet(IpNet), } #[doc = "The protocols that may be specified in a firewall rule's filter"] #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum VpcFirewallRuleProtocol { #[serde(rename = "TCP")] Tcp, #[serde(rename = "UDP")] Udp, #[serde(rename = "ICMP")] Icmp, } impl ToString for VpcFirewallRuleProtocol { fn to_string(&self) -> String { match *self { VpcFirewallRuleProtocol::Tcp => "TCP".to_string(), VpcFirewallRuleProtocol::Udp => "UDP".to_string(), VpcFirewallRuleProtocol::Icmp => "ICMP".to_string(), } } } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum VpcFirewallRuleStatus { #[serde(rename = "disabled")] Disabled, #[serde(rename = "enabled")] Enabled, } impl ToString for VpcFirewallRuleStatus { fn to_string(&self) -> String { match *self { VpcFirewallRuleStatus::Disabled => "disabled".to_string(), VpcFirewallRuleStatus::Enabled => "enabled".to_string(), } } } #[doc = "A `VpcFirewallRuleTarget` is used to specify the set of [`Instance`]s to which a firewall rule applies."] #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type", content = "value")] pub enum VpcFirewallRuleTarget { #[doc = "The rule applies to all instances in the VPC"] #[serde(rename = "vpc")] Vpc(Name), #[doc = "The rule applies to all instances in the VPC Subnet"] #[serde(rename = "subnet")] Subnet(Name), #[doc = "The rule applies to this specific instance"] #[serde(rename = "instance")] Instance(Name), #[doc = "The rule applies to a specific IP address"] #[serde(rename = "ip")] Ip(String), #[doc = "The rule applies to a specific IP subnet"] #[serde(rename = "ip_net")] IpNet(IpNet), } #[doc = "A single rule in a VPC firewall"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcFirewallRuleUpdate { #[doc = "whether traffic matching the rule should be allowed or dropped"] pub action: VpcFirewallRuleAction, #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "whether this rule is for incoming or outgoing traffic"] pub direction: VpcFirewallRuleDirection, #[doc = "reductions on the scope of the rule"] pub filters: VpcFirewallRuleFilter, #[doc = "name of the rule, unique to this VPC"] pub name: Name, #[doc = "the relative priority of this rule"] pub priority: u16, #[doc = "whether this rule is in effect"] pub status: VpcFirewallRuleStatus, #[doc = "list of sets of instances that the rule applies to"] pub targets: Vec, } #[doc = "Updateable properties of a `Vpc`'s firewall Note that VpcFirewallRules are implicitly created along with a Vpc, so there is no explicit creation."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcFirewallRuleUpdateParams { pub rules: Vec, } #[doc = "Collection of a [`Vpc`]'s firewall rules"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcFirewallRules { pub rules: Vec, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "A VPC router defines a series of rules that indicate where traffic should be sent depending on its destination."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcRouter { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, pub kind: VpcRouterKind, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "The VPC to which the router belongs."] pub vpc_id: uuid::Uuid, } #[doc = "Create-time parameters for a [`VpcRouter`](crate::external_api::views::VpcRouter)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcRouterCreate { pub description: String, pub name: Name, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] pub enum VpcRouterKind { #[serde(rename = "system")] System, #[serde(rename = "custom")] Custom, } impl ToString for VpcRouterKind { fn to_string(&self) -> String { match *self { VpcRouterKind::System => "system".to_string(), VpcRouterKind::Custom => "custom".to_string(), } } } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcRouterResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Updateable properties of a [`VpcRouter`](crate::external_api::views::VpcRouter)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcRouterUpdate { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, } #[doc = "A VPC subnet represents a logical grouping for instances that allows network traffic between them, within a IPv4 subnetwork or optionall an IPv6 subnetwork."] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcSubnet { #[doc = "human-readable free-form text about a resource"] pub description: String, #[doc = "unique, immutable, system-controlled identifier for each resource"] pub id: uuid::Uuid, #[doc = "The IPv4 subnet CIDR block."] pub ipv4_block: Ipv4Net, #[doc = "The IPv6 subnet CIDR block."] pub ipv6_block: Ipv6Net, #[doc = "unique, mutable, user-controlled identifier for each resource"] pub name: Name, #[doc = "timestamp when this resource was created"] pub time_created: chrono::DateTime, #[doc = "timestamp when this resource was last modified"] pub time_modified: chrono::DateTime, #[doc = "The VPC to which the subnet belongs."] pub vpc_id: uuid::Uuid, } #[doc = "Create-time parameters for a [`VpcSubnet`](crate::external_api::views::VpcSubnet)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcSubnetCreate { pub description: String, #[doc = "The IPv4 address range for this subnet.\n\nIt must be allocated from an RFC 1918 private address range, and must not overlap with any other existing subnet in the VPC."] pub ipv4_block: Ipv4Net, #[doc = "The IPv6 address range for this subnet.\n\nIt must be allocated from the RFC 4193 Unique Local Address range, with the prefix equal to the parent VPC's prefix. A random `/64` block will be assigned if one is not provided. It must not overlap with any existing subnet in the VPC."] #[serde(default, skip_serializing_if = "Option::is_none")] pub ipv6_block: Option, pub name: Name, } #[doc = "A single page of results"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcSubnetResultsPage { #[doc = "list of items on this page of results"] pub items: Vec, #[doc = "token used to fetch the next page of results (if any)"] #[serde(default, skip_serializing_if = "Option::is_none")] pub next_page: Option, } #[doc = "Updateable properties of a [`VpcSubnet`](crate::external_api::views::VpcSubnet)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcSubnetUpdate { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, } #[doc = "Updateable properties of a [`Vpc`](crate::external_api::views::Vpc)"] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct VpcUpdate { #[serde(default, skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub dns_name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub name: Option, } } #[derive(Clone)] pub struct Client { baseurl: String, client: reqwest::Client, } impl Client { pub fn new(baseurl: &str) -> Self { let dur = std::time::Duration::from_secs(15); let client = reqwest::ClientBuilder::new() .connect_timeout(dur) .timeout(dur) .build() .unwrap(); Self::new_with_client(baseurl, client) } pub fn new_with_client(baseurl: &str, client: reqwest::Client) -> Self { Self { baseurl: baseurl.to_string(), client, } } pub fn baseurl(&self) -> &String { &self.baseurl } pub fn client(&self) -> &reqwest::Client { &self.client } #[doc = "List racks in the system\n\nSends a `GET` request to `/hardware/racks`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn hardware_racks_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/hardware/racks", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List racks in the system as a Stream\n\nSends repeated `GET` requests to `/hardware/racks` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn hardware_racks_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.hardware_racks_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.hardware_racks_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch information about a particular rack\n\nSends a `GET` request to `/hardware/racks/{rack_id}`\n\nArguments:\n- `rack_id`: The rack's unique ID.\n"] pub async fn hardware_racks_get_rack<'a>( &'a self, rack_id: &'a uuid::Uuid, ) -> Result, Error> { let url = format!( "{}/hardware/racks/{}", self.baseurl, progenitor_client::encode_path(&rack_id.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List sleds in the system\n\nSends a `GET` request to `/hardware/sleds`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn hardware_sleds_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/hardware/sleds", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List sleds in the system as a Stream\n\nSends repeated `GET` requests to `/hardware/sleds` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn hardware_sleds_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.hardware_sleds_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.hardware_sleds_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch information about a sled in the system\n\nSends a `GET` request to `/hardware/sleds/{sled_id}`\n\nArguments:\n- `sled_id`: The sled's unique ID.\n"] pub async fn hardware_sleds_get_sled<'a>( &'a self, sled_id: &'a uuid::Uuid, ) -> Result, Error> { let url = format!( "{}/hardware/sleds/{}", self.baseurl, progenitor_client::encode_path(&sled_id.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List global images\n\nReturns a list of all the global images. Global images are returned sorted by creation date, with the most recent images appearing first.\n\nSends a `GET` request to `/images`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn images_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/images", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List global images as a Stream\n\nReturns a list of all the global images. Global images are returned sorted by creation date, with the most recent images appearing first.\n\nSends repeated `GET` requests to `/images` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn images_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.images_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.images_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a global image\n\nCreate a new global image. This image can then be used by any user as a base for instances.\n\nSends a `POST` request to `/images`"] pub async fn images_post<'a>( &'a self, body: &'a types::ImageCreate, ) -> Result, Error> { let url = format!("{}/images", self.baseurl,); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get a global image\n\nReturns the details of a specific global image.\n\nSends a `GET` request to `/images/{image_name}`"] pub async fn images_get_image<'a>( &'a self, image_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/images/{}", self.baseurl, progenitor_client::encode_path(&image_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a global image\n\nPermanently delete a global image. This operation cannot be undone. Any instances using the global image will continue to run, however new instances can not be created with this image.\n\nSends a `DELETE` request to `/images/{image_name}`"] pub async fn images_delete_image<'a>( &'a self, image_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/images/{}", self.baseurl, progenitor_client::encode_path(&image_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Sends a `POST` request to `/login`"] pub async fn spoof_login<'a>( &'a self, body: &'a types::LoginParams, ) -> Result, Error> { let url = format!("{}/login", self.baseurl,); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200..=299 => Ok(ResponseValue::stream(response)), _ => Err(Error::ErrorResponse(ResponseValue::stream(response))), } } #[doc = "Sends a `POST` request to `/logout`"] pub async fn logout<'a>(&'a self) -> Result, Error> { let url = format!("{}/logout", self.baseurl,); let request = self.client.post(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200..=299 => Ok(ResponseValue::stream(response)), _ => Err(Error::ErrorResponse(ResponseValue::stream(response))), } } #[doc = "List all organizations\n\nSends a `GET` request to `/organizations`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn organizations_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/organizations", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all organizations as a Stream\n\nSends repeated `GET` requests to `/organizations` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn organizations_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.organizations_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.organizations_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a new organization\n\nSends a `POST` request to `/organizations`"] pub async fn organizations_post<'a>( &'a self, body: &'a types::OrganizationCreate, ) -> Result, Error> { let url = format!("{}/organizations", self.baseurl,); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch a specific organization\n\nSends a `GET` request to `/organizations/{organization_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n"] pub async fn organizations_get_organization<'a>( &'a self, organization_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a specific organization\n\nSends a `PUT` request to `/organizations/{organization_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `body`\n"] pub async fn organizations_put_organization<'a>( &'a self, organization_name: &'a types::Name, body: &'a types::OrganizationUpdate, ) -> Result, Error> { let url = format!( "{}/organizations/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a specific organization\n\nSends a `DELETE` request to `/organizations/{organization_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n"] pub async fn organizations_delete_organization<'a>( &'a self, organization_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch the IAM policy for this Organization\n\nSends a `GET` request to `/organizations/{organization_name}/policy`\n\nArguments:\n- `organization_name`: The organization's unique name.\n"] pub async fn organization_get_policy<'a>( &'a self, organization_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/policy", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update the IAM policy for this Organization\n\nSends a `PUT` request to `/organizations/{organization_name}/policy`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `body`\n"] pub async fn organization_put_policy<'a>( &'a self, organization_name: &'a types::Name, body: &'a types::OrganizationRolesPolicy, ) -> Result, Error> { let url = format!( "{}/organizations/{}/policy", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all projects\n\nSends a `GET` request to `/organizations/{organization_name}/projects`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn organization_projects_get<'a>( &'a self, organization_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all projects as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn organization_projects_get_stream<'a>( &'a self, organization_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.organization_projects_get(organization_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.organization_projects_get( organization_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a new project\n\nSends a `POST` request to `/organizations/{organization_name}/projects`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `body`\n"] pub async fn organization_projects_post<'a>( &'a self, organization_name: &'a types::Name, body: &'a types::ProjectCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch a specific project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n"] pub async fn organization_projects_get_project<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a specific project\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn organization_projects_put_project<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::ProjectUpdate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a specific project\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n"] pub async fn organization_projects_delete_project<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List disks in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/disks`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn project_disks_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/disks", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List disks in a project as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/disks` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn project_disks_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.project_disks_get(organization_name, project_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.project_disks_get( organization_name, project_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a disk in a project\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/disks`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn project_disks_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::DiskCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/disks", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch a single disk in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/disks/{disk_name}`"] pub async fn project_disks_get_disk<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, disk_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/disks/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&disk_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a disk from a project\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/disks/{disk_name}`"] pub async fn project_disks_delete_disk<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, disk_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/disks/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&disk_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List images\n\nList images in a project. The images are returned sorted by creation date, with the most recent images appearing first.\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/images`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn project_images_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/images", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List images as a Stream\n\nList images in a project. The images are returned sorted by creation date, with the most recent images appearing first.\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/images` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn project_images_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.project_images_get(organization_name, project_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.project_images_get( organization_name, project_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create an image\n\nCreate a new image in a project.\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/images`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn project_images_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::ImageCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/images", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get an image\n\nGet the details of a specific image in a project.\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/images/{image_name}`"] pub async fn project_images_get_image<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, image_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/images/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&image_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete an image\n\nPermanently delete an image from a project. This operation cannot be undone. Any instances in the project using the image will continue to run, however new instances can not be created with this image.\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/images/{image_name}`"] pub async fn project_images_delete_image<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, image_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/images/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&image_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List instances in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/instances`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn project_instances_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List instances in a project as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/instances` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn project_instances_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.project_instances_get(organization_name, project_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.project_instances_get( organization_name, project_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create an instance in a project\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn project_instances_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::InstanceCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get an instance in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}`"] pub async fn project_instances_get_instance<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete an instance from a project\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}`"] pub async fn project_instances_delete_instance<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List disks attached to this instance\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `instance_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn instance_disks_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/disks", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List disks attached to this instance as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `instance_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn instance_disks_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.instance_disks_get( organization_name, project_name, instance_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.instance_disks_get( organization_name, project_name, instance_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Sends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/attach`"] pub async fn instance_disks_attach<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, body: &'a types::DiskIdentifier, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/disks/attach", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 202u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Sends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/disks/detach`"] pub async fn instance_disks_detach<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, body: &'a types::DiskIdentifier, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/disks/detach", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 202u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Migrate an instance to a different propolis-server, possibly on a different sled\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/migrate`"] pub async fn project_instances_migrate_instance<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, body: &'a types::InstanceMigrate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/migrate", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List network interfaces attached to this instance\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `instance_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn instance_network_interfaces_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/network-interfaces", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List network interfaces attached to this instance as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `instance_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn instance_network_interfaces_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.instance_network_interfaces_get( organization_name, project_name, instance_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.instance_network_interfaces_get( organization_name, project_name, instance_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a network interface for an instance\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces`"] pub async fn instance_network_interfaces_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, body: &'a types::NetworkInterfaceCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/network-interfaces", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get an interface attached to an instance\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name}`"] pub async fn instance_network_interfaces_get_interface<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, interface_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/network-interfaces/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), progenitor_client::encode_path(&interface_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Detach a network interface from an instance\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/network-interfaces/{interface_name}`"] pub async fn instance_network_interfaces_delete_interface<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, interface_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/network-interfaces/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), progenitor_client::encode_path(&interface_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Reboot an instance\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/reboot`"] pub async fn project_instances_instance_reboot<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/reboot", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 202u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Boot an instance\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/start`"] pub async fn project_instances_instance_start<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/start", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 202u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Halt an instance\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/instances/{instance_name}/stop`"] pub async fn project_instances_instance_stop<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, instance_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/instances/{}/stop", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&instance_name.to_string()), ); let request = self.client.post(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 202u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch the IAM policy for this Project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/policy`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n"] pub async fn organization_projects_get_project_policy<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/policy", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update the IAM policy for this Project\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/policy`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn organization_projects_put_project_policy<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::ProjectRolesPolicy, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/policy", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List snapshots in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/snapshots`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn project_snapshots_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/snapshots", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List snapshots in a project as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/snapshots` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn project_snapshots_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.project_snapshots_get(organization_name, project_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.project_snapshots_get( organization_name, project_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a snapshot of a disk\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/snapshots`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn project_snapshots_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::SnapshotCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/snapshots", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get a snapshot in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name}`"] pub async fn project_snapshots_get_snapshot<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, snapshot_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/snapshots/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&snapshot_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a snapshot from a project\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/snapshots/{snapshot_name}`"] pub async fn project_snapshots_delete_snapshot<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, snapshot_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/snapshots/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&snapshot_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List VPCs in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn project_vpcs_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List VPCs in a project as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/vpcs` until there are no more results.\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn project_vpcs_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.project_vpcs_get(organization_name, project_name, limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.project_vpcs_get( organization_name, project_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a VPC in a project\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/vpcs`\n\nArguments:\n- `organization_name`: The organization's unique name.\n- `project_name`: The project's unique name within the organization.\n- `body`\n"] pub async fn project_vpcs_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, body: &'a types::VpcCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get a VPC in a project\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}`"] pub async fn project_vpcs_get_vpc<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a VPC\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}`"] pub async fn project_vpcs_put_vpc<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, body: &'a types::VpcUpdate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a vpc from a project\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}`"] pub async fn project_vpcs_delete_vpc<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List firewall rules for a VPC\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules`"] pub async fn vpc_firewall_rules_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/firewall/rules", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Replace the firewall rules for a VPC\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/firewall/rules`"] pub async fn vpc_firewall_rules_put<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, body: &'a types::VpcFirewallRuleUpdateParams, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/firewall/rules", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List VPC Custom and System Routers\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn vpc_routers_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List VPC Custom and System Routers as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn vpc_routers_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.vpc_routers_get( organization_name, project_name, vpc_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.vpc_routers_get( organization_name, project_name, vpc_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a VPC Router\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers`"] pub async fn vpc_routers_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, body: &'a types::VpcRouterCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get a VPC Router\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}`"] pub async fn vpc_routers_get_router<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a VPC Router\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}`"] pub async fn vpc_routers_put_router<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, body: &'a types::VpcRouterUpdate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a router from its VPC\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}`"] pub async fn vpc_routers_delete_router<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List a Router's routes\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `router_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn routers_routes_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}/routes", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List a Router's routes as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `router_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn routers_routes_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.routers_routes_get( organization_name, project_name, vpc_name, router_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.routers_routes_get( organization_name, project_name, vpc_name, router_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a VPC Router\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes`"] pub async fn routers_routes_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, body: &'a types::RouterRouteCreateParams, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}/routes", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get a VPC Router route\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}`"] pub async fn routers_routes_get_route<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, route_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}/routes/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), progenitor_client::encode_path(&route_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a Router route\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}`"] pub async fn routers_routes_put_route<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, route_name: &'a types::Name, body: &'a types::RouterRouteUpdateParams, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}/routes/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), progenitor_client::encode_path(&route_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a route from its router\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/routers/{router_name}/routes/{route_name}`"] pub async fn routers_routes_delete_route<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, router_name: &'a types::Name, route_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/routers/{}/routes/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&router_name.to_string()), progenitor_client::encode_path(&route_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List subnets in a VPC\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn vpc_subnets_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List subnets in a VPC as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn vpc_subnets_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.vpc_subnets_get( organization_name, project_name, vpc_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.vpc_subnets_get( organization_name, project_name, vpc_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a subnet in a VPC\n\nSends a `POST` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets`"] pub async fn vpc_subnets_post<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, body: &'a types::VpcSubnetCreate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), ); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get subnet in a VPC\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}`"] pub async fn vpc_subnets_get_subnet<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, subnet_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&subnet_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update a VPC Subnet\n\nSends a `PUT` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}`"] pub async fn vpc_subnets_put_subnet<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, subnet_name: &'a types::Name, body: &'a types::VpcSubnetUpdate, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&subnet_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a subnet from a VPC\n\nSends a `DELETE` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}`"] pub async fn vpc_subnets_delete_subnet<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, subnet_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets/{}", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&subnet_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List network interfaces in a VPC subnet\n\nSends a `GET` request to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces`\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `subnet_name`\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn subnet_network_interfaces_get<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, subnet_name: &'a types::Name, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!( "{}/organizations/{}/projects/{}/vpcs/{}/subnets/{}/network-interfaces", self.baseurl, progenitor_client::encode_path(&organization_name.to_string()), progenitor_client::encode_path(&project_name.to_string()), progenitor_client::encode_path(&vpc_name.to_string()), progenitor_client::encode_path(&subnet_name.to_string()), ); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List network interfaces in a VPC subnet as a Stream\n\nSends repeated `GET` requests to `/organizations/{organization_name}/projects/{project_name}/vpcs/{vpc_name}/subnets/{subnet_name}/network-interfaces` until there are no more results.\n\nArguments:\n- `organization_name`\n- `project_name`\n- `vpc_name`\n- `subnet_name`\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn subnet_network_interfaces_get_stream<'a>( &'a self, organization_name: &'a types::Name, project_name: &'a types::Name, vpc_name: &'a types::Name, subnet_name: &'a types::Name, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.subnet_network_interfaces_get( organization_name, project_name, vpc_name, subnet_name, limit, None, sort_by, ) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.subnet_network_interfaces_get( organization_name, project_name, vpc_name, subnet_name, None, state.as_deref(), None, ) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch the top-level IAM policy\n\nSends a `GET` request to `/policy`"] pub async fn policy_get<'a>( &'a self, ) -> Result, Error> { let url = format!("{}/policy", self.baseurl,); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update the top-level IAM policy\n\nSends a `PUT` request to `/policy`"] pub async fn policy_put<'a>( &'a self, body: &'a types::FleetRolesPolicy, ) -> Result, Error> { let url = format!("{}/policy", self.baseurl,); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the built-in roles\n\nSends a `GET` request to `/roles`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n"] pub async fn roles_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, ) -> Result, Error> { let url = format!("{}/roles", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the built-in roles as a Stream\n\nSends repeated `GET` requests to `/roles` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n"] pub fn roles_get_stream<'a>( &'a self, limit: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.roles_get(limit, None) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.roles_get(None, state.as_deref()) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch a specific built-in role\n\nSends a `GET` request to `/roles/{role_name}`\n\nArguments:\n- `role_name`: The built-in role's unique name.\n"] pub async fn roles_get_role<'a>( &'a self, role_name: &'a str, ) -> Result, Error> { let url = format!( "{}/roles/{}", self.baseurl, progenitor_client::encode_path(&role_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all sagas (for debugging)\n\nSends a `GET` request to `/sagas`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn sagas_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/sagas", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all sagas (for debugging) as a Stream\n\nSends repeated `GET` requests to `/sagas` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn sagas_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.sagas_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.sagas_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch information about a single saga (for debugging)\n\nSends a `GET` request to `/sagas/{saga_id}`"] pub async fn sagas_get_saga<'a>( &'a self, saga_id: &'a uuid::Uuid, ) -> Result, Error> { let url = format!( "{}/sagas/{}", self.baseurl, progenitor_client::encode_path(&saga_id.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch the user associated with the current session\n\nSends a `GET` request to `/session/me`"] pub async fn session_me<'a>( &'a self, ) -> Result, Error> { let url = format!("{}/session/me", self.baseurl,); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the current user's SSH public keys\n\nSends a `GET` request to `/session/me/sshkeys`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn sshkeys_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/session/me/sshkeys", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the current user's SSH public keys as a Stream\n\nSends repeated `GET` requests to `/session/me/sshkeys` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn sshkeys_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.sshkeys_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.sshkeys_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a new SSH public key for the current user\n\nSends a `POST` request to `/session/me/sshkeys`"] pub async fn sshkeys_post<'a>( &'a self, body: &'a types::SshKeyCreate, ) -> Result, Error> { let url = format!("{}/session/me/sshkeys", self.baseurl,); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Get (by name) an SSH public key belonging to the current user\n\nSends a `GET` request to `/session/me/sshkeys/{ssh_key_name}`"] pub async fn sshkeys_get_key<'a>( &'a self, ssh_key_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/session/me/sshkeys/{}", self.baseurl, progenitor_client::encode_path(&ssh_key_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete (by name) an SSH public key belonging to the current user\n\nSends a `DELETE` request to `/session/me/sshkeys/{ssh_key_name}`"] pub async fn sshkeys_delete_key<'a>( &'a self, ssh_key_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/session/me/sshkeys/{}", self.baseurl, progenitor_client::encode_path(&ssh_key_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Sends a `GET` request to `/silos`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn silos_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/silos", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Sends repeated `GET` requests to `/silos` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn silos_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.silos_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.silos_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Create a new silo\n\nSends a `POST` request to `/silos`"] pub async fn silos_post<'a>( &'a self, body: &'a types::SiloCreate, ) -> Result, Error> { let url = format!("{}/silos", self.baseurl,); let request = self.client.post(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 201u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch a specific silo\n\nSends a `GET` request to `/silos/{silo_name}`\n\nArguments:\n- `silo_name`: The silo's unique name.\n"] pub async fn silos_get_silo<'a>( &'a self, silo_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/silos/{}", self.baseurl, progenitor_client::encode_path(&silo_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Delete a specific silo\n\nSends a `DELETE` request to `/silos/{silo_name}`\n\nArguments:\n- `silo_name`: The silo's unique name.\n"] pub async fn silos_delete_silo<'a>( &'a self, silo_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/silos/{}", self.baseurl, progenitor_client::encode_path(&silo_name.to_string()), ); let request = self.client.delete(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Fetch the IAM policy for this Silo\n\nSends a `GET` request to `/silos/{silo_name}/policy`\n\nArguments:\n- `silo_name`: The silo's unique name.\n"] pub async fn silos_get_silo_policy<'a>( &'a self, silo_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/silos/{}/policy", self.baseurl, progenitor_client::encode_path(&silo_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "Update the IAM policy for this Silo\n\nSends a `PUT` request to `/silos/{silo_name}/policy`\n\nArguments:\n- `silo_name`: The silo's unique name.\n- `body`\n"] pub async fn silos_put_silo_policy<'a>( &'a self, silo_name: &'a types::Name, body: &'a types::SiloRolesPolicy, ) -> Result, Error> { let url = format!( "{}/silos/{}/policy", self.baseurl, progenitor_client::encode_path(&silo_name.to_string()), ); let request = self.client.put(url).json(body).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all timeseries schema\n\nSends a `GET` request to `/timeseries/schema`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n"] pub async fn timeseries_schema_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, ) -> Result, Error> { let url = format!("{}/timeseries/schema", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List all timeseries schema as a Stream\n\nSends repeated `GET` requests to `/timeseries/schema` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n"] pub fn timeseries_schema_get_stream<'a>( &'a self, limit: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.timeseries_schema_get(limit, None) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.timeseries_schema_get(None, state.as_deref()) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Refresh update metadata\n\nSends a `POST` request to `/updates/refresh`"] pub async fn updates_refresh<'a>(&'a self) -> Result, Error> { let url = format!("{}/updates/refresh", self.baseurl,); let request = self.client.post(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 204u16 => Ok(ResponseValue::empty(response)), 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the built-in system users\n\nSends a `GET` request to `/users`\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `page_token`: Token returned by previous call to retreive the subsequent page\n- `sort_by`\n"] pub async fn users_get<'a>( &'a self, limit: Option, page_token: Option<&'a str>, sort_by: Option, ) -> Result, Error> { let url = format!("{}/users", self.baseurl,); let mut query = Vec::new(); if let Some(v) = &limit { query.push(("limit", v.to_string())); } if let Some(v) = &page_token { query.push(("page_token", v.to_string())); } if let Some(v) = &sort_by { query.push(("sort_by", v.to_string())); } let request = self.client.get(url).query(&query).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } #[doc = "List the built-in system users as a Stream\n\nSends repeated `GET` requests to `/users` until there are no more results.\n\nArguments:\n- `limit`: Maximum number of items returned by a single call\n- `sort_by`\n"] pub fn users_get_stream<'a>( &'a self, limit: Option, sort_by: Option, ) -> impl futures::Stream>> + Unpin + '_ { use futures::StreamExt; use futures::TryFutureExt; use futures::TryStreamExt; self.users_get(limit, None, sort_by) .map_ok(move |page| { let page = page.into_inner(); let first = futures::stream::iter(page.items.into_iter().map(Ok)); let rest = futures::stream::try_unfold(page.next_page, move |state| async move { if state.is_none() { Ok(None) } else { self.users_get(None, state.as_deref(), None) .map_ok(|page| { let page = page.into_inner(); Some(( futures::stream::iter(page.items.into_iter().map(Ok)), page.next_page, )) }) .await } }) .try_flatten(); first.chain(rest) }) .try_flatten_stream() .boxed() } #[doc = "Fetch a specific built-in system user\n\nSends a `GET` request to `/users/{user_name}`\n\nArguments:\n- `user_name`: The built-in user's unique name.\n"] pub async fn users_get_user<'a>( &'a self, user_name: &'a types::Name, ) -> Result, Error> { let url = format!( "{}/users/{}", self.baseurl, progenitor_client::encode_path(&user_name.to_string()), ); let request = self.client.get(url).build()?; let result = self.client.execute(request).await; let response = result?; match response.status().as_u16() { 200u16 => ResponseValue::from_response(response).await, 400u16..=499u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), 500u16..=599u16 => Err(Error::ErrorResponse( ResponseValue::from_response(response).await?, )), _ => Err(Error::UnexpectedResponse(response)), } } }