pub use struct_merge_codegen::*;
pub trait StructMerge<Src> {
fn merge(&mut self, src: Src);
fn merge_soft(&mut self, src: Src);
}
pub trait StructMergeInto<Target: ?Sized> {
fn merge_into(self, target: &mut Target);
fn merge_into_soft(self, target: &mut Target);
}
impl<Target, Src: StructMergeInto<Target>> StructMerge<Src> for Target {
fn merge(&mut self, src: Src) {
src.merge_into(self);
}
fn merge_soft(&mut self, src: Src) {
src.merge_into_soft(self);
}
}
pub trait StructMergeRef<Src> {
fn merge_ref(&mut self, src: &Src);
fn merge_ref_soft(&mut self, src: &Src);
}
pub trait StructMergeIntoRef<Target: ?Sized> {
fn merge_into_ref(&self, target: &mut Target);
fn merge_into_ref_soft(&self, target: &mut Target);
}
impl<Target, Src: StructMergeIntoRef<Target>> StructMergeRef<Src> for Target {
fn merge_ref(&mut self, src: &Src) {
src.merge_into_ref(self);
}
fn merge_ref_soft(&mut self, src: &Src) {
src.merge_into_ref_soft(self);
}
}
pub mod prelude {
pub use super::{StructMerge, StructMergeRef};
}