| # Custom attributes | 
 | The `Hash` trait supports the following attributes: | 
 |  | 
 | * **Container attributes** | 
 |     * [`Hash(bound="<where-clause or empty>")`](#custom-bound) | 
 | * **Field attributes** | 
 |     * [`Hash(bound="<where-clause or empty>")`](#custom-bound) | 
 |     * [`Hash(format_with="<path>")`](#hash-with) | 
 |     * [`Hash="ignore"`](#ignoring-a-field) | 
 |  | 
 | # Ignoring a field | 
 |  | 
 | You can use *derivative* to ignore fields from a `Hash` implementation: | 
 |  | 
 | ```rust | 
 | #[derive(Derivative)] | 
 | #[derivative(Hash)] | 
 | struct Foo { | 
 |     foo: u8, | 
 |     #[derivative(Hash="ignore")] | 
 |     bar: i32, | 
 | } | 
 |  | 
 | #[derive(Hash)] | 
 | struct Bar { | 
 |     foo: u8, | 
 | } | 
 |  | 
 | assert_eq!(hash(Foo { foo: 42, bar: -1337 }), hash(Bar { foo: 42 })); | 
 | ``` | 
 |  | 
 | # Hash with | 
 |  | 
 | You can pass a field to a hash function: | 
 |  | 
 | ```rust | 
 | #[derive(Derivative)] | 
 | #[derivative(Hash)] | 
 | struct Foo { | 
 |     foo: u32, | 
 |     #[derivative(Hash(hash_with="path::to::my_hash_fn"))] | 
 |     bar: SomeTypeThatMightNotBeHash, | 
 | } | 
 | ``` | 
 |  | 
 | The field `bar` will be hashed with `path::to::my_hash_fn(&bar, &mut state)` | 
 | where `state` is the current [`Hasher`]. | 
 |  | 
 | The function must the following prototype: | 
 |  | 
 | ```rust | 
 | fn my_hash_fn<H>(&T, state: &mut H) where H: Hasher; | 
 | ``` | 
 |  | 
 | # Limitations | 
 |  | 
 | On structure, `derivative(Hash)` will produce the same hash as `derive(Hash)`. | 
 | On unions however, it will produces the same hashes *only for unitary | 
 | variants*! | 
 |  | 
 | # Custom bound | 
 | As most other traits, `Hash` supports a custom bound on container and fields. | 
 | See [`Debug`'s documentation](Debug.md#custom-bound) for more information. | 
 |  | 
 | [`Hasher`]: https://doc.rust-lang.org/std/hash/trait.Hasher.html |