MCPcopy Create free account
hub / github.com/Moosync/Moosync / save_selective

Method save_selective

src-tauri/preferences/src/preferences.rs:139–187  ·  view source on GitHub ↗
(&self, key: String, value: Option<T>)

Source from the content-addressed store, hash-verified

137
138 #[tracing::instrument(level = "debug", skip(self, key, value))]
139 pub fn save_selective<T>(&self, key: String, value: Option<T>) -> Result<()>
140 where
141 T: Serialize + Clone + Debug,
142 {
143 let key = format!("prefs.{}", key);
144 tracing::debug!("saving {} - {:?}", key, value);
145
146 let mut prefs = self.memcache.lock().unwrap();
147
148 if value.is_none() {
149 prefs.dot_remove(key.as_str()).unwrap();
150 } else {
151 let old_value: Option<Value> = prefs.dot_get(key.as_str()).unwrap();
152
153 if let Some(old_value) = old_value {
154 if old_value == serde_json::to_value(&value).unwrap() {
155 return Ok(());
156 }
157 }
158
159 {
160 let mut prefs_clone = prefs.clone();
161 prefs_clone.dot_set(key.as_str(), &value).unwrap();
162 // let schema = serde_json::from_str(SCHEMA).unwrap();
163 // let schema = match jsonschema::validator_for(&schema) {
164 // Ok(s) => s,
165 // Err(e) => panic!("{}: {}", e, e.instance_path),
166 // };
167 // schema.validate(&prefs_clone)?;
168 }
169 prefs.dot_set(key.as_str(), &value).unwrap();
170 }
171
172 let writable = prefs.clone();
173 drop(prefs);
174
175 let config_file_path = self.config_file.lock().expect("poisoned");
176 let mut config_file = File::create(config_file_path.as_os_str())?;
177 config_file.write_all(&serde_json::to_vec(&writable)?)?;
178 config_file.flush()?;
179
180 let parsed = serde_json::to_value(value).unwrap();
181
182 let sender = self.sender.clone();
183 thread::spawn(move || {
184 sender.send((key, parsed)).unwrap();
185 });
186 Ok(())
187 }
188
189 #[tracing::instrument(level = "debug", skip(self, key))]
190 pub fn load_selective_array<T>(&self, key: String) -> Result<T>

Callers 9

test_save_and_load_arrayFunction · 0.80
test_update_preferencesFunction · 0.80
test_has_keyFunction · 0.80
test_preference_eventsFunction · 0.80
test_remove_preferenceFunction · 0.80
set_secureMethod · 0.80
initialFunction · 0.80
set_preferencesMethod · 0.80

Calls 3

cloneMethod · 0.80
flushMethod · 0.80
sendMethod · 0.80

Tested by 6

test_save_and_load_arrayFunction · 0.64
test_update_preferencesFunction · 0.64
test_has_keyFunction · 0.64
test_preference_eventsFunction · 0.64
test_remove_preferenceFunction · 0.64