Skip to main content

nanite_docker/instruction/
user.rs

1use alloc::string::String;
2use core::fmt::{Display, Formatter};
3
4/// Represents a `USER` instruction.
5/// ```rust
6/// use nanite_docker::{User, Instruction};
7///
8/// let user = User::ByName {
9///     name: "user".into(),
10///     group: Some("group".into()),
11/// };
12/// let user_built = format!("{user}");
13/// assert_eq!(user_built, r#"USER user:group"#);
14///
15/// let user = User::ById {
16///     uid: 1000,
17///     gid: Some(1000),
18/// };
19/// let user_built = format!("{user}");
20/// assert_eq!(user_built, r#"USER 1000:1000"#);
21/// ```
22#[derive(Clone, Debug)]
23pub enum User {
24    ByName { name: String, group: Option<String> },
25    ById { uid: usize, gid: Option<usize> },
26}
27
28impl Display for User {
29    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
30        match self {
31            User::ByName { name, group } => {
32                if let Some(group) = group {
33                    write!(f, "USER {}:{}", name, group)
34                } else {
35                    write!(f, "USER {}", name)
36                }
37            }
38            User::ById { uid, gid } => {
39                if let Some(gid) = gid {
40                    write!(f, "USER {}:{}", uid, gid)
41                } else {
42                    write!(f, "USER {}", uid)
43                }
44            }
45        }
46    }
47}