cmp 1.0.0

Simple, convenience macros and function for comparing.
Documentation
# cmp

`cmp` is a Rust crate that provides a macro for comparing fields in structs, which is particularly useful when writing `assert!` tests.

## Usage

```bash
cargo add cmp
```

```rust
use cmp::compare_structs;
```

## `compare_structs!`

The `compare_structs!` macro compares specified fields of two structs. If the fields do not match, the macro will panic and output the fields that do not match.

### Example

```rust
use cmp::compare_structs;

struct A<'a> {
    a: i32,
    b: &'a str,
    c: [(f64, f32); 2],
}

struct B<'a> {
    a: i32,
    b: &'a str,
    c: [(f64, f32); 2],
}

let struct_a = A {
    a: 10,
    b: "str",
    c: [(1.0, 1.0), (2.0, 2.0)],
};

let struct_b = B {
    a: 10,
    b: "diff str",
    c: [(1.0, 1.0), (2.0, 2.0)],
};

compare_structs!(struct_a, struct_b, a, c);
```

In this example, the `compare_structs!` macro compares the `a` and `c` fields of `struct_a` and `struct_b`. If they do not match, the macro will panic and output the fields that do not match.

## Output

The output of the `compare_structs!` macro singles out the fields in the structs that do not match. For example:

```bash
thread 'tests::compare_different_structs' panicked at src/lib.rs:135:9:
c: [
    (
        1.0,
        1.0,
    ),
    (
        2.0,
        3.0,
    ),
] != [
    (
        1.0,
        1.0,
    ),
    (
        2.0,
        2.0,
    ),
]

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

In this output, the `c` field of the two structs do not match, and the macro outputs the differing values.

## Features

- `serde`
  - Allows `compare_structs` to be called without specifying any fields
  - Adds `serde` and `serde_json` as dependencies