cumulus 0.0.6

AWS CloudFormation Template Generator
Documentation
use serde::Serialize;

use crate::resource::ToResource;
use crate::skip_serializing_if::SkipSerializingIf;

#[derive(Debug, Default, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct EIp {
    #[serde(skip)]
    name: String,
    #[serde(skip_serializing_if = "Domain::is_default")]
    domain: Domain,
    #[serde(skip_serializing_if = "String::is_empty")]
    instance_id: String,
    #[serde(skip_serializing_if = "String::is_empty")]
    public_ipv4_pool: String,
}

impl EIp {
    pub fn vpc(name: impl ToString) -> Self {
        let name = name.to_string();
        Self {
            name,
            domain: Domain::Vpc,
            ..Self::default()
        }
    }
}

impl ToResource for EIp {
    fn name(&self) -> String {
        self.name.clone()
    }
}

#[derive(Debug, PartialEq, Serialize)]
#[serde(rename_all = "lowercase")]
enum Domain {
    Standard,
    Vpc,
}

impl Default for Domain {
    fn default() -> Self {
        Self::Standard
    }
}

impl SkipSerializingIf for Domain {
    fn is_default(&self) -> bool {
        *self == Self::Standard
    }
}