(config: &Registry)
| 72 | } |
| 73 | |
| 74 | pub fn config_set(config: &Registry) -> Result<String, RegistryError> { |
| 75 | let mut reg_result = Registry { key_path: config.key_path.clone(), ..Default::default() }; |
| 76 | let reg_key: RegistryKey; |
| 77 | match &config.value_name { |
| 78 | None => { |
| 79 | match config.exist { |
| 80 | Some(true) | None => { |
| 81 | open_or_create_key(&config.key_path)?; |
| 82 | }, |
| 83 | Some(false) => { |
| 84 | reg_result.exist = Some(false); |
| 85 | remove_key(&config.key_path)?; |
| 86 | }, |
| 87 | } |
| 88 | }, |
| 89 | Some(value_name) => { |
| 90 | reg_result.value_name = Some(value_name.clone()); |
| 91 | match &config.exist { |
| 92 | Some(true) | None => { |
| 93 | reg_key = open_or_create_key(&config.key_path)?; |
| 94 | match config.value_data.as_ref() { |
| 95 | Some(value_data) => { |
| 96 | reg_result.value_data = Some(value_data.clone()); |
| 97 | reg_key.set_value(value_name, &convert_configreg_data(value_data))?; |
| 98 | }, |
| 99 | None => { |
| 100 | // just verify that the value exists |
| 101 | match reg_key.get_value(value_name) { |
| 102 | Ok(_) => {}, |
| 103 | Err(NtStatusError { status: NtStatusErrorKind::ObjectNameNotFound, .. }) => { |
| 104 | reg_key.set_value(value_name, &NtRegistryValueData::None)?; |
| 105 | }, |
| 106 | Err(err) => { |
| 107 | return Err(RegistryError::NtStatus(err)); |
| 108 | } |
| 109 | } |
| 110 | } |
| 111 | } |
| 112 | }, |
| 113 | Some(false) => { |
| 114 | reg_key = open_or_create_key(&config.key_path)?; |
| 115 | reg_result.exist = Some(false); |
| 116 | match reg_key.delete_value(value_name) { |
| 117 | Ok(()) | Err(NtStatusError { status: NtStatusErrorKind::ObjectNameNotFound, ..}) => {}, |
| 118 | Err(err) => { |
| 119 | return Err(RegistryError::NtStatus(err)); |
| 120 | } |
| 121 | } |
| 122 | }, |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | let reg_json = match serde_json::to_string(®_result) { |
| 128 | Ok(reg_json) => reg_json, |
| 129 | Err(err) => { |
| 130 | return Err(RegistryError::Json(err.to_string())); |
| 131 | } |
no test coverage detected