Commit e4e2eb00 authored by Nugine's avatar Nugine
Browse files

feat(s3s-policy/model): add methods

parent eb643aa5
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
//! <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html>

use std::marker::PhantomData;
use std::slice;

use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
@@ -280,6 +281,40 @@ where
    }
}

impl<T> OneOrMore<T> {
    pub fn as_slice(&self) -> &[T] {
        match self {
            OneOrMore::One(t) => slice::from_ref(t),
            OneOrMore::More(ts) => ts,
        }
    }

    pub fn as_mut_slice(&mut self) -> &mut [T] {
        match self {
            OneOrMore::One(t) => slice::from_mut(t),
            OneOrMore::More(ts) => ts,
        }
    }
}

impl<T> WildcardOneOrMore<T> {
    pub fn as_slice(&self) -> Option<&[T]> {
        match self {
            WildcardOneOrMore::Wildcard => None,
            WildcardOneOrMore::One(t) => Some(slice::from_ref(t)),
            WildcardOneOrMore::More(ts) => Some(ts),
        }
    }

    pub fn as_mut_slice(&mut self) -> Option<&mut [T]> {
        match self {
            WildcardOneOrMore::Wildcard => None,
            WildcardOneOrMore::One(t) => Some(slice::from_mut(t)),
            WildcardOneOrMore::More(ts) => Some(ts),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;