diff options
Diffstat (limited to 'crates/common/tedge_utils/src/file.rs')
-rw-r--r-- | crates/common/tedge_utils/src/file.rs | 78 |
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(); |