Skip to content

Commit

Permalink
Add RegKey::rename_subkey() method
Browse files Browse the repository at this point in the history
Fixes #58
  • Loading branch information
gentoo90 committed Nov 19, 2023
1 parent ab0995e commit fa2f1c8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/reg_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,34 @@ impl RegKey {
}
}

/// Rename a subkey
///
/// # Examples
/// ```no_run
/// # use std::error::Error;
/// # use winreg::RegKey;
/// # use winreg::enums::*;
/// # fn main() -> Result<(), Box<dyn Error>> {
/// let items = RegKey::predef(HKEY_CURRENT_USER).open_subkey(r"Software\MyProduct\Items")?;
/// items.rename_subkey("itemA", "itemB")?;
/// # Ok(())
/// # }
/// ```
pub fn rename_subkey<ON: AsRef<OsStr>, NN: AsRef<OsStr>>(
&self,
old_name: ON,
new_name: NN,
) -> io::Result<()> {
let c_old_name = to_utf16(old_name);
let c_new_name = to_utf16(new_name);
match unsafe {
winapi_reg::RegRenameKey(self.hkey, c_old_name.as_ptr(), c_new_name.as_ptr())
} {
0 => Ok(()),
err => werr!(err),
}
}

/// Copy all the values and subkeys from `path` to `dest` key.
/// Will copy the content of `self` if `path` is an empty string.
///
Expand Down
11 changes: 11 additions & 0 deletions tests/reg_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,17 @@ fn test_delete_subkey_with_flags() {
.is_ok());
}

#[test]
fn test_rename_subkey() {
with_key!(key, "RenameSubkey" => {
let old_name = "SubkeyA";
let new_name = "SubkeyB";
key.create_subkey(old_name).unwrap();
assert!(key.rename_subkey(old_name, new_name).is_ok());
assert!(key.open_subkey(new_name).is_ok());
});
}

#[test]
fn test_copy_tree() {
with_key!(key, "CopyTree" => {
Expand Down

0 comments on commit fa2f1c8

Please sign in to comment.