superstruct 0.10.1

Versioned data types with minimal boilerplate
Documentation
# `Ref` and `RefMut`

SuperStruct generates two reference-like structs which are designed to simplify working with nested
`superstruct` types.

The immutable reference type is named `{BaseName}Ref` and has all of the immutable getter methods
from the top-level enum.

The mutable reference type is named `{BaseName}RefMut` and has all of the mutable getter methods
from the top-level enum.

Consider the `MyStruct` example again:

```rust,no_run,no_playground
#[superstruct(variants(Foo, Bar))]
struct MyStruct {
    name: String,
    #[superstruct(only(Foo))]
    location: u16,
}
```

The generated `Ref` types look like this:

```rust,no_run,no_playground
enum MyStructRef<'a> {
    Foo(&'a MyStructFoo),
    Bar(&'a MyStructBar),
}

enum MyStructRefMut<'a> {
    Foo(&'a mut MyStructFoo),
    Bar(&'a mut MyStructFoo),
}
```

The reason these types can be useful (particularly with nesting) is that they do not require a full
reference to a `MyStruct` in order to construct: a reference to a single variant struct will suffice.

## Trait Implementations

### `Copy`

Each `Ref` type is `Copy`, just like an ordinary `&T`.

### `From`

The `Ref` type has `From` implementations that allow converting from references to variants
or references to the top-level enum type, i.e.

- `impl From<&'a {VariantStruct}> for {BaseName}Ref<'a>` for all variants.
- `impl From<&'a {BaseName}> for {BaseName}Ref<'a>` (same as `to_ref()`).

## Example

Please see [`examples/nested.rs`](../rustdoc/src/nested/nested.rs.html) and its
generated [documentation](../rustdoc/nested/).