four 0.0.13

framework for creating AWS CloudFormation template
Documentation
use serde::{Serialize, Serializer};

use crate::core::{function::Ref, pseudo};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Partition {
    Ref,
    Aws,
    China,
    GovCloudUS,
}

impl Partition {
    pub fn to_str(&self) -> Option<&str> {
        match self {
            Partition::Ref => None,
            Partition::Aws => Some("aws"),
            Partition::China => Some("aws-cn"),
            Partition::GovCloudUS => Some("aws-us-gov"),
        }
    }
}

impl Serialize for Partition {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        match self {
            Partition::Ref => Ref::new(pseudo::Partition).serialize(serializer),
            Partition::Aws => "aws".serialize(serializer),
            Partition::China => "aws-cn".serialize(serializer),
            Partition::GovCloudUS => "aws-us-gov".serialize(serializer),
        }
    }
}