Skip to content

0.9.0

Compare
Choose a tag to compare
@udoprog udoprog released this 26 Apr 18:40
· 26 commits to main since this release

Added

  • Add stable #[key(bitset)] container attribute for bitset storage.

Changes

  • Export the Key trait from the root of the crate, this means that users which previously used a key named Key might face issues (see below)

Migrating code which uses the local Key name

This crate now exports the Key trait from its root, if you're using a locally defined item named Key and derive fixed_map::Key you might now face issues.

The change is motivated because code which is generic over a Set or a Map would awkwardly have to import the trait separately from fixed_map::key::Key instead of using the expected fixed_map::Key, like this:

pub mod set {
    use fixed_map::key::Key;
    use fixed_map::Set;
    use musli::de::{Decode, Decoder, SequenceDecoder};
    use musli::en::{Encode, Encoder, SequenceEncoder};
    use musli::mode::Mode;

    pub fn encode<M, E, T>(set: &Set<T>, encoder: E) -> Result<E::Ok, E::Error>
    where
        M: Mode,
        E: Encoder,
        T: Key + Encode,
    {
        let mut seq = encoder.encode_sequence(set.len())?;

        for value in set.iter() {
            value.encode(seq.next()?)?;
        }

        seq.end()
    }
}

The issue you're facing might be the following:

use fixed_map::{Key, Map};

#[derive(Debug, Clone, Copy, Key)]
enum Key {
    First,
    Second,
}

With this error:

error[E0255]: the name `Key` is defined multiple times
 --> examples\basic.rs:4:1
  |
1 | use fixed_map::{Key, Map};
  |                 --- previous import of the trait `Key` here
...
4 | enum Key {
  | ^^^^^^^^ `Key` redefined here
  |
  = note: `Key` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import

The solution is to rename your local Key.

use fixed_map::{Key, Map};

#[derive(Debug, Clone, Copy, Key)]
enum Numbers {
    First,
    Second,
}