1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/// See [SoftEq]
use Clone;
use Eq;
use Sized;
/// Define soft (partial) equality
///
/// Two elements are "softly equals" if they can be considered as two different stages of the same element, i.e. their hard parts are equals (c.f. below)
/// This is mainly used by the [Vec] implementation of [Mutable], to determine when an item as mutated
///
/// We can distinguish two parts of a SoftEq element:
/// - the hard part, which is unique for each element (a uid String, for example)
/// - the soft part, which may variate for the same element (like a charge attribute for an electrical item)
///
/// ```
/// # use mutable::cmp::SoftEq;
/// # use mutable_derive::SoftEq;
/// #[derive(SoftEq)]
/// struct Item {
/// #[softeq(uid)]
/// id: String,
/// charge: usize,
/// }
///
/// # fn main() {
/// let i0 = Item { id: "tear".to_string(), charge: 32 };
/// let i1 = Item { id: "tear".to_string(), charge: 12 };
/// let i2 = Item { id: "draktaar".to_string(), charge: 32 };
///
/// assert!(i0.se(&i1));
/// assert!(i0.nse(&i2));
/// assert!(i1.nse(&i2));
/// # }
/// ```