pub trait Merge {
// Required method
fn merge(&mut self, other: Self);
}
Expand description
A trait for objects that can be merged.
§Deriving
Merge
can be derived for structs if the derive
feature is enabled. The generated
implementation calls the merge
method for all fields, or the merge strategy function if set.
You can use these field attributes to configure the generated implementation:
skip
: Skip this field in themerge
method.strategy = f
: Callf(self.field, other.field)
instead of calling themerge
function for this field.
You can also set a default strategy for all fields by setting the strategy
attribute for the
struct.
§Examples
Deriving Merge
for a struct:
use merge::Merge;
#[derive(Debug, PartialEq, Merge)]
struct S {
#[merge(strategy = merge::option::overwrite_none)]
option: Option<usize>,
#[merge(skip)]
s: String,
#[merge(strategy = merge::bool::overwrite_false)]
flag: bool,
}
let mut val = S {
option: None,
s: "some ignored value".to_owned(),
flag: false,
};
val.merge(S {
option: Some(42),
s: "some other ignored value".to_owned(),
flag: true,
});
assert_eq!(S {
option: Some(42),
s: "some ignored value".to_owned(),
flag: true,
}, val);
Setting a default merge strategy:
use merge::Merge;
#[derive(Debug, PartialEq, Merge)]
#[merge(strategy = merge::option::overwrite_none)]
struct S {
option1: Option<usize>,
option2: Option<usize>,
option3: Option<usize>,
}
let mut val = S {
option1: None,
option2: Some(1),
option3: None,
};
val.merge(S {
option1: Some(2),
option2: Some(2),
option3: None,
});
assert_eq!(S {
option1: Some(2),
option2: Some(1),
option3: None,
}, val);
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.