pub enum Assignee {
User(String),
Group(String),
}Expand description
Who an approval gate is currently assigned to: an individual user or a group.
The distinction is carried in the type rather than in a free-form string, so
callers cannot confuse a user with a group. On the wire and in the store the
value is a single prefixed string — user:{name} for Assignee::User and
group:{name} for Assignee::Group — which keeps the database column a
plain TEXT and the OpenAPI type a plain string.
Whether an approver is allowed to resolve a gate is decided by the API
layer, which reads this type: a gate assigned to a Assignee::User can be
answered by that user and by whoever holds an active
ApprovalDelegation from them, while a
Assignee::Group gate stays admin-only.
§Examples
use ironflow_store::entities::Assignee;
let alice = Assignee::user("alice");
assert_eq!(alice.to_string(), "user:alice");
assert_eq!(alice.name(), "alice");
let sre: Assignee = "group:sre-oncall".parse()?;
assert_eq!(sre, Assignee::group("sre-oncall"));
assert!(sre.is_group());Variants§
User(String)
An individual user, identified by an opaque name.
Group(String)
A group, identified by an opaque name.
Implementations§
Source§impl Assignee
impl Assignee
Sourcepub fn user(name: impl Into<String>) -> Assignee
pub fn user(name: impl Into<String>) -> Assignee
Build a Assignee::User from any string-like value.
§Examples
use ironflow_store::entities::Assignee;
assert_eq!(Assignee::user("alice").to_string(), "user:alice");Sourcepub fn group(name: impl Into<String>) -> Assignee
pub fn group(name: impl Into<String>) -> Assignee
Build a Assignee::Group from any string-like value.
§Examples
use ironflow_store::entities::Assignee;
assert_eq!(Assignee::group("sre").to_string(), "group:sre");Sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
The bare name, without the user:/group: prefix.
§Examples
use ironflow_store::entities::Assignee;
assert_eq!(Assignee::group("sre").name(), "sre");Trait Implementations§
Source§impl<'de> Deserialize<'de> for Assignee
impl<'de> Deserialize<'de> for Assignee
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Assignee, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Assignee, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
impl Eq for Assignee
Source§impl Serialize for Assignee
impl Serialize for Assignee
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for Assignee
Auto Trait Implementations§
impl Freeze for Assignee
impl RefUnwindSafe for Assignee
impl Send for Assignee
impl Sync for Assignee
impl Unpin for Assignee
impl UnsafeUnpin for Assignee
impl UnwindSafe for Assignee
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.