sz_configtool_lib/
hashes.rs1use crate::error::{Result, SzConfigError};
7use serde_json::{Value, json};
8
9pub fn add_to_name_hash(config_json: &str, name: &str) -> Result<String> {
29 let mut config_data: Value = serde_json::from_str(config_json)?;
30
31 if let Some(g2_config) = config_data.get_mut("G2_CONFIG") {
32 if let Some(sys_oom) = g2_config.get_mut("SYS_OOM") {
33 if let Some(sys_oom_obj) = sys_oom.as_object_mut() {
34 let name_hash = sys_oom_obj.entry("NAME_HASH").or_insert(json!([]));
36
37 if let Some(name_hash_arr) = name_hash.as_array_mut() {
38 if name_hash_arr.iter().any(|v| v.as_str() == Some(name)) {
40 return Err(SzConfigError::AlreadyExists(format!(
41 "Name already in hash: {name}"
42 )));
43 }
44
45 name_hash_arr.push(json!(name));
47 } else {
48 return Err(SzConfigError::InvalidConfig(
49 "NAME_HASH is not an array".to_string(),
50 ));
51 }
52 }
53 } else {
54 return Err(SzConfigError::NotFound(
55 "SYS_OOM section not found".to_string(),
56 ));
57 }
58 }
59
60 Ok(serde_json::to_string(&config_data)?)
61}
62
63pub fn delete_from_name_hash(config_json: &str, name: &str) -> Result<String> {
83 let mut config_data: Value = serde_json::from_str(config_json)?;
84 let mut found = false;
85
86 if let Some(g2_config) = config_data.get_mut("G2_CONFIG") {
87 if let Some(sys_oom) = g2_config.get_mut("SYS_OOM") {
88 if let Some(sys_oom_obj) = sys_oom.as_object_mut() {
89 if let Some(name_hash) = sys_oom_obj.get_mut("NAME_HASH") {
90 if let Some(name_hash_arr) = name_hash.as_array_mut() {
91 let before_len = name_hash_arr.len();
92 name_hash_arr.retain(|v| v.as_str() != Some(name));
93 found = name_hash_arr.len() < before_len;
94 }
95 }
96 }
97 }
98 }
99
100 if !found {
101 return Err(SzConfigError::NotFound(format!(
102 "Name not found in hash: {name}"
103 )));
104 }
105
106 Ok(serde_json::to_string(&config_data)?)
107}
108
109pub fn add_to_ssn_last4_hash(config_json: &str, name: &str) -> Result<String> {
129 let mut config_data: Value = serde_json::from_str(config_json)?;
130
131 if let Some(g2_config) = config_data.get_mut("G2_CONFIG") {
132 if let Some(sys_oom) = g2_config.get_mut("SYS_OOM") {
133 if let Some(sys_oom_obj) = sys_oom.as_object_mut() {
134 let ssn_last4_hash = sys_oom_obj.entry("SSN_LAST4_HASH").or_insert(json!([]));
136
137 if let Some(ssn_last4_hash_arr) = ssn_last4_hash.as_array_mut() {
138 if ssn_last4_hash_arr.iter().any(|v| v.as_str() == Some(name)) {
140 return Err(SzConfigError::AlreadyExists(format!(
141 "Name already in SSN_LAST4_HASH: {name}"
142 )));
143 }
144
145 ssn_last4_hash_arr.push(json!(name));
147 } else {
148 return Err(SzConfigError::InvalidConfig(
149 "SSN_LAST4_HASH is not an array".to_string(),
150 ));
151 }
152 }
153 } else {
154 return Err(SzConfigError::NotFound(
155 "SYS_OOM section not found".to_string(),
156 ));
157 }
158 }
159
160 Ok(serde_json::to_string(&config_data)?)
161}
162
163pub fn delete_from_ssn_last4_hash(config_json: &str, name: &str) -> Result<String> {
183 let mut config_data: Value = serde_json::from_str(config_json)?;
184 let mut removed = false;
185
186 if let Some(g2_config) = config_data.get_mut("G2_CONFIG") {
187 if let Some(sys_oom) = g2_config.get_mut("SYS_OOM") {
188 if let Some(sys_oom_obj) = sys_oom.as_object_mut() {
189 if let Some(ssn_last4_hash) = sys_oom_obj.get_mut("SSN_LAST4_HASH") {
190 if let Some(ssn_last4_hash_arr) = ssn_last4_hash.as_array_mut() {
191 if let Some(pos) = ssn_last4_hash_arr
193 .iter()
194 .position(|v| v.as_str() == Some(name))
195 {
196 ssn_last4_hash_arr.remove(pos);
197 removed = true;
198 }
199 } else {
200 return Err(SzConfigError::InvalidConfig(
201 "SSN_LAST4_HASH is not an array".to_string(),
202 ));
203 }
204 } else {
205 return Err(SzConfigError::NotFound(
206 "SSN_LAST4_HASH not found in SYS_OOM".to_string(),
207 ));
208 }
209 }
210 } else {
211 return Err(SzConfigError::NotFound(
212 "SYS_OOM section not found".to_string(),
213 ));
214 }
215 }
216
217 if !removed {
218 return Err(SzConfigError::NotFound(format!(
219 "Name not found in SSN_LAST4_HASH: {name}"
220 )));
221 }
222
223 Ok(serde_json::to_string(&config_data)?)
224}