pub struct Mergable<T> { /* private fields */ }
Expand description
Very often, types from the standard library and other crates will not implement the Merge or MergeMut traits, preventing us from leveraging recursive merging with complex data structures. Given that rust only allows trait implementations in the crate defining the trait or the struct, this puts users in a tough position of writing more code.
The Mergable type is a type wrapper that implements the Merge and MergeMut traits using the provided [Strategy] while exposing the underlying type through Deref and a number of operators that forward the underlying implementation to the inner type.
Usage
use merge_rs::Merge;
use merge_rs::mergeable::Mergable;
struct Message(String);
impl Message {
pub fn new(msg: String) -> Self {
Self(msg)
}
pub fn get(&self) -> &str {
&self.0
}
}
fn concat_messages(
left: &Message,
right: &Message
) -> Message {
Message::new(
format!("{} {}", left.get(), right.get())
)
}
let msg1 = Mergable::new(
Message::new("hello".to_string()),
concat_messages
);
let msg2 = Mergable::new(
Message::new("world".to_string()),
concat_messages
);
let greeting = msg1.merge(&msg2);
let hello_sring = msg1.get();
Implementations
Trait Implementations
sourceimpl<T> AddAssign<Mergable<T>> for Mergable<T>where
T: AddAssign,
impl<T> AddAssign<Mergable<T>> for Mergable<T>where
T: AddAssign,
sourcefn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+=
operation. Read moresourceimpl<T> AddAssign<T> for Mergable<T>where
T: AddAssign,
impl<T> AddAssign<T> for Mergable<T>where
T: AddAssign,
sourcefn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
Performs the
+=
operation. Read moresourceimpl<T: BitAndAssign> BitAndAssign<Mergable<T>> for Mergable<T>
impl<T: BitAndAssign> BitAndAssign<Mergable<T>> for Mergable<T>
sourcefn bitand_assign(&mut self, rhs: Self)
fn bitand_assign(&mut self, rhs: Self)
Performs the
&=
operation. Read moresourceimpl<T: BitAndAssign> BitAndAssign<T> for Mergable<T>
impl<T: BitAndAssign> BitAndAssign<T> for Mergable<T>
sourcefn bitand_assign(&mut self, rhs: T)
fn bitand_assign(&mut self, rhs: T)
Performs the
&=
operation. Read moresourceimpl<T: BitOrAssign> BitOrAssign<Mergable<T>> for Mergable<T>
impl<T: BitOrAssign> BitOrAssign<Mergable<T>> for Mergable<T>
sourcefn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
Performs the
|=
operation. Read moresourceimpl<T: BitOrAssign> BitOrAssign<T> for Mergable<T>
impl<T: BitOrAssign> BitOrAssign<T> for Mergable<T>
sourcefn bitor_assign(&mut self, rhs: T)
fn bitor_assign(&mut self, rhs: T)
Performs the
|=
operation. Read moresourceimpl<T: BitXorAssign> BitXorAssign<Mergable<T>> for Mergable<T>
impl<T: BitXorAssign> BitXorAssign<Mergable<T>> for Mergable<T>
sourcefn bitxor_assign(&mut self, rhs: Self)
fn bitxor_assign(&mut self, rhs: Self)
Performs the
^=
operation. Read moresourceimpl<T: BitXorAssign> BitXorAssign<T> for Mergable<T>
impl<T: BitXorAssign> BitXorAssign<T> for Mergable<T>
sourcefn bitxor_assign(&mut self, rhs: T)
fn bitxor_assign(&mut self, rhs: T)
Performs the
^=
operation. Read moresourceimpl<T> DivAssign<Mergable<T>> for Mergable<T>where
T: DivAssign,
impl<T> DivAssign<Mergable<T>> for Mergable<T>where
T: DivAssign,
sourcefn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Performs the
/=
operation. Read moresourceimpl<T> DivAssign<T> for Mergable<T>where
T: DivAssign,
impl<T> DivAssign<T> for Mergable<T>where
T: DivAssign,
sourcefn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
Performs the
/=
operation. Read moresourceimpl<T> MulAssign<Mergable<T>> for Mergable<T>where
T: MulAssign,
impl<T> MulAssign<Mergable<T>> for Mergable<T>where
T: MulAssign,
sourcefn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*=
operation. Read moresourceimpl<T> MulAssign<T> for Mergable<T>where
T: MulAssign,
impl<T> MulAssign<T> for Mergable<T>where
T: MulAssign,
sourcefn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
Performs the
*=
operation. Read moresourceimpl<T> RemAssign<Mergable<T>> for Mergable<T>where
T: RemAssign,
impl<T> RemAssign<Mergable<T>> for Mergable<T>where
T: RemAssign,
sourcefn rem_assign(&mut self, rhs: Self)
fn rem_assign(&mut self, rhs: Self)
Performs the
%=
operation. Read moresourceimpl<T> RemAssign<T> for Mergable<T>where
T: RemAssign,
impl<T> RemAssign<T> for Mergable<T>where
T: RemAssign,
sourcefn rem_assign(&mut self, rhs: T)
fn rem_assign(&mut self, rhs: T)
Performs the
%=
operation. Read moresourceimpl<T: ShlAssign> ShlAssign<Mergable<T>> for Mergable<T>
impl<T: ShlAssign> ShlAssign<Mergable<T>> for Mergable<T>
sourcefn shl_assign(&mut self, rhs: Self)
fn shl_assign(&mut self, rhs: Self)
Performs the
<<=
operation. Read moresourceimpl<T: ShlAssign> ShlAssign<T> for Mergable<T>
impl<T: ShlAssign> ShlAssign<T> for Mergable<T>
sourcefn shl_assign(&mut self, rhs: T)
fn shl_assign(&mut self, rhs: T)
Performs the
<<=
operation. Read moresourceimpl<T: ShrAssign> ShrAssign<Mergable<T>> for Mergable<T>
impl<T: ShrAssign> ShrAssign<Mergable<T>> for Mergable<T>
sourcefn shr_assign(&mut self, rhs: Self)
fn shr_assign(&mut self, rhs: Self)
Performs the
>>=
operation. Read moresourceimpl<T: ShrAssign> ShrAssign<T> for Mergable<T>
impl<T: ShrAssign> ShrAssign<T> for Mergable<T>
sourcefn shr_assign(&mut self, rhs: T)
fn shr_assign(&mut self, rhs: T)
Performs the
>>=
operation. Read moreAuto Trait Implementations
impl<T> RefUnwindSafe for Mergable<T>where
T: RefUnwindSafe,
impl<T> Send for Mergable<T>where
T: Send,
impl<T> Sync for Mergable<T>where
T: Sync,
impl<T> Unpin for Mergable<T>where
T: Unpin,
impl<T> UnwindSafe for Mergable<T>where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more