summaryrefslogtreecommitdiffstats
path: root/crates/common/tedge_utils/src/file.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/common/tedge_utils/src/file.rs')
-rw-r--r--crates/common/tedge_utils/src/file.rs78
1 files changed, 32 insertions, 46 deletions
diff --git a/crates/common/tedge_utils/src/file.rs b/crates/common/tedge_utils/src/file.rs
index af7dbbb0..4da9f1bf 100644
--- a/crates/common/tedge_utils/src/file.rs
+++ b/crates/common/tedge_utils/src/file.rs
@@ -34,29 +34,29 @@ pub enum FileError {
}
pub fn create_directory_with_user_group(
- dir: &str,
+ dir: impl AsRef<Path>,
user: &str,
group: &str,
mode: u32,
) -> Result<(), FileError> {
let perm_entry = PermissionEntry::new(Some(user.into()), Some(group.into()), Some(mode));
- perm_entry.create_directory(Path::new(dir))
+ perm_entry.create_directory(dir.as_ref())
}
-pub fn create_directory_with_mode(dir: &str, mode: u32) -> Result<(), FileError> {
+pub fn create_directory_with_mode(dir: impl AsRef<Path>, mode: u32) -> Result<(), FileError> {
let perm_entry = PermissionEntry::new(None, None, Some(mode));
- perm_entry.create_directory(Path::new(dir))
+ perm_entry.create_directory(dir.as_ref())
}
pub fn create_file_with_user_group(
- file: &str,
+ file: impl AsRef<Path>,
user: &str,
group: &str,
mode: u32,
default_content: Option<&str>,
) -> Result<(), FileError> {
let perm_entry = PermissionEntry::new(Some(user.into()), Some(group.into()), Some(mode));
- perm_entry.create_file(Path::new(file), default_content)
+ perm_entry.create_file(file.as_ref(), default_content)
}
#[derive(Debug, PartialEq, Eq, Default, Clone)]
@@ -141,22 +141,18 @@ impl PermissionEntry {
}
pub fn change_user_and_group(file: &Path, user: &str, group: &str) -> Result<(), FileError> {
- let ud = match get_user_by_name(user) {
- Some(user) => user.uid(),
- None => {
- return Err(FileError::UserNotFound { user: user.into() });
- }
- };
+ let ud = get_user_by_name(user)
+ .map(|u| u.uid())
+ .ok_or_else(|| FileError::UserNotFound { user: user.into() })?;
+
let uid = get_metadata(Path::new(file))?.st_uid();
- let gd = match get_group_by_name(group) {
- Some(group) => group.gid(),
- None => {
- return Err(FileError::GroupNotFound {
- group: group.into(),
- });
- }
- };
+ let gd = get_group_by_name(group)
+ .map(|g| g.gid())
+ .ok_or_else(|| FileError::GroupNotFound {
+ group: group.into(),
+ })?;
+
let gid = get_metadata(Path::new(file))?.st_gid();
// if user and group are same as existing, then do not change
@@ -168,12 +164,9 @@ pub fn change_user_and_group(file: &Path, user: &str, group: &str) -> Result<(),
}
fn change_user(file: &Path, user: &str) -> Result<(), FileError> {
- let ud = match get_user_by_name(user) {
- Some(user) => user.uid(),
- None => {
- return Err(FileError::UserNotFound { user: user.into() });
- }
- };
+ let ud = get_user_by_name(user)
+ .map(|u| u.uid())
+ .ok_or_else(|| FileError::UserNotFound { user: user.into() })?;
let uid = get_metadata(Path::new(file))?.st_uid();
@@ -186,14 +179,11 @@ fn change_user(file: &Path, user: &str) -> Result<(), FileError> {
}
fn change_group(file: &Path, group: &str) -> Result<(), FileError> {
- let gd = match get_group_by_name(group) {
- Some(group) => group.gid(),
- None => {
- return Err(FileError::GroupNotFound {
- group: group.into(),
- });
- }
- };
+ let gd = get_group_by_name(group)
+ .map(|g| g.gid())
+ .ok_or_else(|| FileError::GroupNotFound {
+ group: group.into(),
+ })?;
let gid = get_metadata(Path::new(file))?.st_gid();
@@ -243,7 +233,7 @@ mod tests {
let file_path = temp_dir.path().join("file").display().to_string();
let user = whoami::username();
- let _ = create_file_with_user_group(file_path.as_str(), &user, &user, 0o644, None).unwrap();
+ let _ = create_file_with_user_group(&file_path, &user, &user, 0o644, None).unwrap();
assert!(Path::new(file_path.as_str()).exists());
let meta = std::fs::metadata(file_path.as_str()).unwrap();
let perm = meta.permissions();
@@ -264,7 +254,7 @@ mod tests {
// Create a new file with default content
create_file_with_user_group(
- file_path.as_str(),
+ &file_path,
&user,
&user,
0o775,
@@ -282,8 +272,7 @@ mod tests {
let file_path = temp_dir.path().join("file").display().to_string();
let user = whoami::username();
- let err = create_file_with_user_group(file_path.as_str(), "test", &user, 0o775, None)
- .unwrap_err();
+ let err = create_file_with_user_group(&file_path, "test", &user, 0o775, None).unwrap_err();
assert!(err.to_string().contains("User not found"));
}
@@ -294,8 +283,7 @@ mod tests {
let file_path = temp_dir.path().join("file").display().to_string();
let user = whoami::username();
- let err = create_file_with_user_group(file_path.as_str(), &user, "test", 0o775, None)
- .unwrap_err();
+ let err = create_file_with_user_group(&file_path, &user, "test", 0o775, None).unwrap_err();
assert!(err.to_string().contains("Group not found"));
fs::remove_file(file_path.as_str()).unwrap();
@@ -307,7 +295,7 @@ mod tests {
let dir_path = temp_dir.path().join("dir").display().to_string();
let user = whoami::username();
- let _ = create_directory_with_user_group(dir_path.as_str(), &user, &user, 0o775).unwrap();
+ let _ = create_directory_with_user_group(&dir_path, &user, &user, 0o775).unwrap();
assert!(Path::new(dir_path.as_str()).exists());
let meta = fs::metadata(dir_path.as_str()).unwrap();
@@ -323,8 +311,7 @@ mod tests {
let user = whoami::username();
- let err =
- create_directory_with_user_group(dir_path.as_str(), "test", &user, 0o775).unwrap_err();
+ let err = create_directory_with_user_group(dir_path, "test", &user, 0o775).unwrap_err();
assert!(err.to_string().contains("User not found"));
}
@@ -336,8 +323,7 @@ mod tests {
let user = whoami::username();
- let err =
- create_directory_with_user_group(dir_path.as_str(), &user, "test", 0o775).unwrap_err();
+ let err = create_directory_with_user_group(dir_path, &user, "test", 0o775).unwrap_err();
assert!(err.to_string().contains("Group not found"));
}
@@ -348,7 +334,7 @@ mod tests {
let file_path = temp_dir.path().join("file").display().to_string();
let user = whoami::username();
- let _ = create_file_with_user_group(file_path.as_str(), &user, &user, 0o644, None).unwrap();
+ let _ = create_file_with_user_group(&file_path, &user, &user, 0o644, None).unwrap();
assert!(Path::new(file_path.as_str()).exists());
let meta = fs::metadata(file_path.as_str()).unwrap();