settings: Use a derive macro for refine (#38451)
When we refactored settings to not pass JSON blobs around, we ended up needing to write *a lot* of code that just merged things (like json merge used to do). Use a derive macro to prevent typos in this logic. Release Notes: - N/A
This commit is contained in:
@@ -18,9 +18,8 @@ pub fn replace_subschema<T: JsonSchema>(
|
||||
let schema_name = T::schema_name();
|
||||
let definitions = generator.definitions_mut();
|
||||
assert!(!definitions.contains_key(&format!("{schema_name}2")));
|
||||
if definitions.contains_key(schema_name.as_ref()) {
|
||||
definitions.insert(schema_name.to_string(), schema().to_value());
|
||||
}
|
||||
assert!(definitions.contains_key(schema_name.as_ref()));
|
||||
definitions.insert(schema_name.to_string(), schema().to_value());
|
||||
schemars::Schema::new_ref(format!("{DEFS_PATH}{schema_name}"))
|
||||
}
|
||||
|
||||
|
||||
@@ -1390,21 +1390,3 @@ Line 3"#
|
||||
assert_eq!(result[1], (10..15, "world")); // '🦀' is 4 bytes
|
||||
}
|
||||
}
|
||||
|
||||
pub fn refine<T: Clone>(dest: &mut T, src: &Option<T>) {
|
||||
if let Some(src) = src {
|
||||
*dest = src.clone()
|
||||
}
|
||||
}
|
||||
|
||||
pub trait MergeFrom: Sized + Clone {
|
||||
fn merge_from(&mut self, src: &Option<Self>);
|
||||
}
|
||||
|
||||
impl<T: Clone> MergeFrom for T {
|
||||
fn merge_from(&mut self, src: &Option<Self>) {
|
||||
if let Some(src) = src {
|
||||
*self = src.clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user