sddl 0.1.3

a library to parse and analyse SDDL Strings
Documentation
use serde::Serialize;
use strum::{EnumMessage, IntoStaticStr};
use strum_macros::EnumString;

#[derive(Clone, Copy, Debug, Eq, PartialEq, EnumString, EnumMessage, IntoStaticStr, Hash)]
#[strum(use_phf, serialize_all = "SCREAMING_SNAKE_CASE")]
pub enum SidAlias {
    #[strum(message = r"BUILTIN\Access Control Assistence Operators")]
    AA,

    #[strum(message = r"APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES")]
    AC,

    #[strum(message = r"NT AUTHORITY\ANONYMOUS LOGON")]
    AN,

    #[strum(message = r"BUILTIN\Account Operators")]
    AO,

    #[strum(message = r"<DOMAIN>\Protected Users")]
    AP,

    #[strum(message = r"Authentication authority asserted identity")]
    AS,

    #[strum(message = r"NT AUTHORITY\Authenticated Users")]
    AU,

    #[strum(message = r"BUILTIN\Administrators")]
    BA,

    #[strum(message = r"UILTIN\Guest")]
    BG,

    #[strum(message = r"BUILTIN\Backup Operators")]
    BO,

    #[strum(message = r"BUILTIN\Users")]
    BU,

    #[strum(message = r"<DOMAIN>\Cert Publishers")]
    CA,

    #[strum(message = r"BUILTIN\Certificate Service DCOM Access")]
    CD,

    #[strum(message = r"CREATOR GROUP")]
    CG,

    #[strum(message = r"<DOMAIN>\Cloneable Domain Controllers")]
    CN,

    #[strum(message = r"CREATOR OWNER")]
    CO,

    #[strum(message = r"BUILTIN\Cryptographic Operators")]
    CY,

    #[strum(message = r"<DOMAIN>\Domain Admins")]
    DA,

    #[strum(message = r"<DOMAIN>\Domain Computers")]
    DC,

    #[strum(message = r"<DOMAIN>\Domain Controllers")]
    DD,

    #[strum(message = r"<DOMAIN>\Domain Guests")]
    DG,

    #[strum(message = r"<DOMAIN>\Domain Users")]
    DU,

    #[strum(message = r"<DOMAIN>\Enterprise Admins")]
    EA,

    #[strum(message = r"NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS")]
    ED,

    #[strum(message = r"<DOMAIN>\Enterprise Key Admins")]
    EK,

    #[strum(message = r"BUILTIN\Event Log Readers")]
    ER,

    #[strum(message = r"BUILTIN\RDS Endpoint Servers")]
    ES,

    #[strum(message = r"BUILTIN\Hyper-V Administrators")]
    HA,

    #[strum(message = r"Mandatory Label\High Mandatory Level")]
    HI,

    #[strum(message = r"<DOMAIN>\Hardware Operators")]
    HO,

    #[strum(message = r"BUILTIN\IIS_IUSRS")]
    IS,

    #[strum(message = r"NT AUTHORITY\INTERACTIVE")]
    IU,

    #[strum(message = r"<DOMAIN>\Key Admins")]
    KA,

    #[strum(message = r"<DOMAIN>\Administrator")]
    LA,

    #[strum(message = r"<DOMAIN>\Guests")]
    LG,

    #[strum(message = r"NT AUTHORITY\LOCAL SERVICE")]
    LS,

    #[strum(message = r"BUILTIN\Performance Log Users")]
    LU,

    #[strum(message = r"Mandatory Label\Low Mandatory Level")]
    LW,

    #[strum(message = r"Mandatory Label\Medium Mandatory Level")]
    ME,

    #[strum(message = r"Mandatory Label\Medium Plus Mandatory Level")]
    MP,

    #[strum(message = r"BUILTIN\RDS Management Servers")]
    MS,

    #[strum(message = r"BUILTIN\Performance Monitor Users")]
    MU,

    #[strum(message = r"BUILTIN\Network Configuration Operators")]
    NO,

    #[strum(message = r"NT AUTHORITY\NETWORK SERVICE")]
    NS,

    #[strum(message = r"NT AUTHORITY\NETWORK")]
    NU,

    #[strum(message = r"OWNER RIGHTS")]
    OW,

    #[strum(message = r"<DOMAIN>\Group Policy Creator Owners")]
    PA,

    #[strum(message = r"BUILTIN\Print Operators")]
    PO,

    #[strum(message = r"NT AUTHORITY\SELF")]
    PS,

    #[strum(message = r"BUILTIN\Power Users")]
    PU,

    #[strum(message = r"BUILTIN\RDS Remote Access Servers")]
    RA,

    #[strum(message = r"NT AUTHORITY\RESTRICTED")]
    RC,

    #[strum(message = r"BUILTIN\Remote Desktop Users")]
    RD,

    #[strum(message = r"BUILTIN\Replicator")]
    RE,

    #[strum(message = r"BUILTIN\Remote Management Users")]
    RM,

    #[strum(message = r"<DOMAIN>\Enterprise Read-only Domain Controllers")]
    RO,

    #[strum(message = r"<DOMAIN>\RAS and IAS Servers")]
    RS,

    #[strum(message = r"BUILTIN\Pre-Windows 2000 Compatible Access")]
    RU,

    #[strum(message = r"<DOMAIN>\Schema Admins")]
    SA,

    #[strum(message = r"<DOMAIN>\OpenSSH Users")]
    SH,

    #[strum(message = r"Mandatory Label\System Mandatory Level")]
    SI,

    #[strum(message = r"BUILTIN\Server Operators")]
    SO,

    #[strum(message = r"Service asserted identity")]
    SS,

    #[strum(message = r"NT AUTHORITY\SERVICE")]
    SU,

    #[strum(message = r"NT AUTHORITY\SYSTEM")]
    SY,

    #[strum(message = r"NT AUTHORITY\USER MODE DRIVERS")]
    UD,

    #[strum(message = r"Everyone")]
    WD,

    #[strum(message = r"NT AUTHORITY\WRITE RESTRICTED")]
    WR,
}

impl SidAlias {
    pub fn long_name(&self) -> &'static str {
        self.get_message().unwrap()
    }

    pub fn short_name(&self) -> &'static str {
        let s: &'static str = self.into();
        s
    }
}

impl Serialize for SidAlias {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        serializer.serialize_str(self.short_name())
    }
}