shuttle_common/models/
resource.rsuse serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Serialize, Deserialize)]
#[typeshare::typeshare]
pub struct ProvisionResourceRequest {
pub r#type: ResourceType,
pub config: Value,
}
#[derive(Deserialize)]
#[serde(untagged)] pub enum ResourceInput {
Shuttle(ProvisionResourceRequest),
Custom(Value),
}
#[derive(
Debug, Clone, PartialEq, Eq, strum::Display, strum::EnumString, Serialize, Deserialize,
)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
#[typeshare::typeshare]
pub enum ResourceState {
Authorizing,
Provisioning,
Failed,
Ready,
Deleting,
Deleted,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[typeshare::typeshare]
pub struct ResourceResponse {
pub r#type: ResourceType,
pub state: ResourceState,
pub config: Value,
pub output: Value,
}
#[derive(Debug, Serialize, Deserialize)]
#[typeshare::typeshare]
pub struct ResourceListResponse {
pub resources: Vec<ResourceResponse>,
}
#[derive(
Clone,
Copy,
Debug,
Deserialize,
Serialize,
Eq,
PartialEq,
strum::AsRefStr,
strum::Display,
strum::EnumString,
)]
#[typeshare::typeshare]
pub enum ResourceType {
#[strum(to_string = "database::shared::postgres")]
#[serde(rename = "database::shared::postgres")]
DatabaseSharedPostgres,
#[strum(to_string = "database::aws_rds::postgres")]
#[serde(rename = "database::aws_rds::postgres")]
DatabaseAwsRdsPostgres,
#[strum(to_string = "database::aws_rds::mysql")]
#[serde(rename = "database::aws_rds::mysql")]
DatabaseAwsRdsMySql,
#[strum(to_string = "database::aws_rds::mariadb")]
#[serde(rename = "database::aws_rds::mariadb")]
DatabaseAwsRdsMariaDB,
#[strum(to_string = "secrets")]
#[serde(rename = "secrets")]
Secrets,
#[strum(to_string = "container")]
#[serde(rename = "container")]
Container,
}
#[cfg(test)]
mod test {
use std::str::FromStr;
use super::*;
#[test]
fn to_string_and_back() {
let inputs = [
ResourceType::DatabaseSharedPostgres,
ResourceType::Secrets,
ResourceType::Container,
];
for input in inputs {
let actual = ResourceType::from_str(input.as_ref()).unwrap();
assert_eq!(input, actual, ":{} should map back to itself", input);
}
}
}