1pub use std::convert::TryFrom;
2
3use crate::{DaemonError, Result};
4use crate::ffi::GroupRecord;
5
6#[derive(Debug, Ord, PartialOrd, PartialEq, Eq, Clone)]
9pub struct Group {
10 pub id: u32,
11 pub name: String
12}
13
14impl<'uname> TryFrom<&'uname str> for Group {
15 type Error = DaemonError;
16
17 fn try_from(gname: &'uname str) -> Result<Group> {
18 match GroupRecord::lookup_record_by_name(gname) {
19 Ok(record) => Ok(Group {
20 id: record.gr_gid,
21 name: record.gr_name
22 }),
23 Err(_) => Err(DaemonError::InvalidGroup),
24 }
25 }
26}
27
28impl TryFrom<&String> for Group {
29 type Error = DaemonError;
30
31 fn try_from(gname: &String) -> Result<Group> {
32 match GroupRecord::lookup_record_by_name(gname.as_str()) {
33 Ok(record) => Ok(Group {
34 id: record.gr_gid,
35 name: record.gr_name
36 }),
37 Err(_) => Err(DaemonError::InvalidGroup),
38 }
39 }
40}
41
42impl TryFrom<u32> for Group {
43 type Error = DaemonError;
44
45 fn try_from(gid: u32) -> Result<Group> {
46 let record = GroupRecord::lookup_record_by_id(gid)?;
47 Ok(Group {
48 id: record.gr_gid,
49 name: record.gr_name
50 })
51 }
52}
53