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}