fievar 0.2.0

Proc macrs to generate functions that return static slices of struct field names or enum variant names.
Documentation
This crate provides procedural macrs to generate functions that return static slices
of struct field names or enum variant names.

# Examples
```rust
use fievar::Fields;

#[derive(Fields)]
struct File {
    id: String,
    name: String,
    mime_type: String,
}

assert_eq!(&["id", "name", "mime_type"], File::fields());
```

You can also rename fields.
```rust
use fievar::Fields;

#[derive(Fields)]
struct File {
    id: String,
    name: String,
    #[fievar(name = "mimeType")]
    mime_type: String,
}

assert_eq!(&["id", "name", "mimeType"], File::fields());
```

# Transformations
## Syntax
*Expression:*  
   [[*T*][`|`*Sep*]]

*Sep:* Word separator.  
   Can be any text.

*T:*
Determines how to transform field/variant.  
   [[*TrCase*][` `*NumAlign*]]

*NumAlign:* Controls alignment of numerals.  
   `1__` | `__1` | `_1_`  

*TrCase:* Controls the case of letters.  
   [*TrWord*[` `*TrWord*[` `*TrWord*]]]  

*TrWord:* Controls the case of individual words.  
   [*TrChar*[*TrChar*[*TrChar*]]]

*TrChar:* Controls the case of individual characters in words.  
   `c` | `C`  

*TrCase* consists of upto three *TrWord*s separated by a space. If there is
only one *TrWord* then it is used to transform all words in field/variant. If
there are two *TrWord*s then the first *TrWord* is applied to the first word of
the field/variant and the second *TrWord* is applied to the rest of the words.
If there are three *TrWord*s then the first and last *TrWord*s are applied to
the first and last words of the field/variant and the second *TrWord* is
applied to the rest of the words. *TrChar*s work similarly on characters in a
word.

## Examples
```rust
use fievar::Variants;

#[derive(Variants)]
enum E {
    #[fievar(transform = "c")] // lowercase
    AVeryLong0Variant,

    #[fievar(transform = "C")] // uppercase
    AVeryLong1Variant,

    #[fievar(transform = "1__|_")] // align numeral left
    AVeryLong2Variant,

    #[fievar(transform = "__1|_")] // align numeral right
    AVeryLong3Variant,

    #[fievar(transform = "_1_|_")] // align numeral middle
    AVeryLong4Variant,

    #[fievar(transform = "c Cc")] // camelCase
    AVeryLong5Variant,

    #[fievar(transform = "c|_")] // snake_case
    AVeryLong6Variant,

    #[fievar(transform = "CcC cCc CcC _1_|*-*")] // something different
    LastVeryLong7Variant,
}

let v = &[
    "averylong0variant",
    "AVERYLONG1VARIANT",
    "A_Very_Long2_Variant",
    "A_Very_Long_3Variant",
    "A_Very_Long_4_Variant",
    "aVeryLong5Variant",
    "a_very_long6_variant",
    "LasT*-*vERy*-*lONg*-*7*-*VarianT"
];
assert_eq!(v, E::variants());
```