1#![cfg(windows)]
2#![deny(rust_2018_idioms)]
3
4mod hive;
34pub mod iter;
35pub mod key;
36mod sec;
37pub mod value;
38
39pub use hive::Hive;
40#[doc(inline)]
41pub use key::RegKey;
42pub use sec::Security;
43#[doc(inline)]
44pub use value::Data;
45
46#[derive(Debug, thiserror::Error)]
47pub enum Error {
51 #[error("A key error occurred.")]
52 Key(#[from] key::Error),
53 #[error("A keys error occurred.")]
54 Keys(#[from] iter::keys::Error),
55 #[error("A value error occurred.")]
56 Value(#[from] value::Error),
57 #[error("A values error occurred.")]
58 Values(#[from] iter::values::Error),
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64 use std::convert::TryInto;
65
66 #[test]
67 fn open_key() {
68 let result = Hive::CurrentUser
69 .open(r"SOFTWARE\Microsoft", Security::AllAccess)
70 .unwrap();
71 println!("{}", result);
72 }
73
74 #[test]
75 fn iter_keys() {
76 let regkey = Hive::CurrentUser
77 .open(r"SOFTWARE\Microsoft", Security::AllAccess)
78 .unwrap();
79 let results = regkey.keys().collect::<Result<Vec<_>, _>>().unwrap();
80 println!("{:?}", &results);
81 }
82
83 #[test]
84 fn iter_values() {
85 let regkey = Hive::CurrentUser
86 .open(r"Keyboard Layout\Preload", Security::Read)
87 .unwrap();
88 let results = regkey.values().collect::<Result<Vec<_>, _>>().unwrap();
89 println!("{:?}", &results);
90 }
91
92 #[test]
93 fn display_repr() {
94 const KEY_UNINSTALL: &str = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
95 let regkey = Hive::LocalMachine
96 .open(KEY_UNINSTALL, Security::Read)
97 .unwrap();
98
99 assert_eq!(
100 format!("{}", regkey),
101 r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
102 );
103 }
104
105 #[test]
106 fn set_value_and_delete() {
107 let regkey = Hive::CurrentUser
108 .create(r"Test\registry-rust-crate", Security::AllAccess)
109 .unwrap();
110 regkey
111 .set_value("test", &Data::String("Meow meow".try_into().unwrap()))
112 .unwrap();
113 regkey
114 .set_value(
115 "test2",
116 &Data::MultiString(vec![
117 "Meow meow".try_into().unwrap(),
118 "Woop woop".try_into().unwrap(),
119 ]),
120 )
121 .unwrap();
122 regkey.set_value("nothing", &Data::None).unwrap();
123 regkey
124 .set_value("some binary", &Data::Binary(vec![1, 2, 3, 4, 255]))
125 .unwrap();
126 regkey.set_value("u32", &Data::U32(0x1234FEFE)).unwrap();
127 regkey.set_value("u32be", &Data::U32BE(0x1234FEFE)).unwrap();
128 regkey
129 .set_value("u64", &Data::U64(0x1234FEFE_1234FEFE))
130 .unwrap();
131
132 let results = regkey.values().collect::<Result<Vec<_>, _>>().unwrap();
133 println!("{:?}", &results);
134
135 assert_eq!(
136 format!("{}", regkey),
137 r"HKEY_CURRENT_USER\Test\registry-rust-crate"
138 );
139 let subkey = regkey.create("subkey", Security::AllAccess).unwrap();
140 assert_eq!(
141 format!("{}", subkey),
142 r"HKEY_CURRENT_USER\Test\registry-rust-crate\subkey"
143 );
144
145 let subkey = regkey.open("subkey", Security::AllAccess).unwrap();
146 assert_eq!(
147 format!("{}", subkey),
148 r"HKEY_CURRENT_USER\Test\registry-rust-crate\subkey"
149 );
150
151 Hive::CurrentUser.delete("Test", true).unwrap();
152 }
153}