elephantry 5.1.1

Object model manager for PostgreSQL
Documentation
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
pub enum TargetSessionAttrs {
    Any,
    #[cfg(feature = "pg14")]
    PreferStandby,
    #[cfg(feature = "pg14")]
    Primary,
    #[cfg(feature = "pg14")]
    ReadOnly,
    ReadWrite,
    #[cfg(feature = "pg14")]
    Standby,
}

impl std::str::FromStr for TargetSessionAttrs {
    type Err = crate::Error;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        let sslmode = match s {
            "any" => Self::Any,
            #[cfg(feature = "pg14")]
            "prefer-standby" => Self::PreferStandby,
            #[cfg(feature = "pg14")]
            "primary" => Self::Primary,
            #[cfg(feature = "pg14")]
            "read-only" => Self::ReadOnly,
            "read-write" => Self::ReadWrite,
            #[cfg(feature = "pg14")]
            "standby" => Self::Standby,
            _ => return Err(crate::Error::Parse(format!("Invalid gssencmode: {s}"))),
        };

        Ok(sslmode)
    }
}

impl std::fmt::Display for TargetSessionAttrs {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let s = match *self {
            Self::Any => "any",
            #[cfg(feature = "pg14")]
            Self::PreferStandby => "prefer-standby",
            #[cfg(feature = "pg14")]
            Self::Primary => "primary",
            #[cfg(feature = "pg14")]
            Self::ReadOnly => "read-only",
            Self::ReadWrite => "read-write",
            #[cfg(feature = "pg14")]
            Self::Standby => "standby",
        };

        f.write_str(s)
    }
}