snowflaked 1.0.3

A crate for creating and working with snowflake ids
Documentation
# Snowflaked

[![Crates.io](https://img.shields.io/crates/v/snowflaked)](https://crates.io/crates/snowflaked)
[![Docs.rs](https://img.shields.io/docsrs/snowflaked/latest)](https://docs.rs/snowflaked)

A crate for creating and working with snowflake ids.

## Usage

Add `snowflaked` to your `Cargo.toml`:

```toml
snowflaked = "1.0.0"
```

This crate provides APIs for generating new snowflake ids and defining custom snowflake types.

### Snowflake Generation

Use the `Generator` type to create new snowflake ids:

```rust
use snowflaked::Generator;

let mut generator = Generator::new(0);
let id: u64 = generator.generate();
```

Or use the thread-safe `sync::Generator` type (requires the optional `sync` feature):

```rust
use snowflaked::sync::Generator;

static GENERATOR: Generator = Generator::new(0);

fn generate_id() -> u64 {
    GENERATOR.generate()
}
```

### Using custom snowflake types

Custom snowflake types can be defined with the `Snowflake` trait. This trait is currently
implemented for `u64` and `i64` and can be used to define your custom types:

```rust
use snowflaked::Snowflake;

struct UserId(u64);

impl Snowflake for UserId {
    fn from_parts(timestamp: u64, instance: u64, sequence: u64) -> Self {
        Self(u64::from_parts(timestamp, instance, sequence))
    }

    fn timestamp(&self) -> u64 {
        self.0.timestamp()
    }

    fn instance(&self) -> u64 {
        self.0.instance()
    }

    fn sequence(&self) -> u64 {
        self.0.sequence()
    }
}
```

## License

Licensed under either 
- [MIT License]https://github.com/MrGunflame/snowflaked-rs/blob/master/LICENSE-MIT
or
- [Apache License, Version 2.0]https://github.com/MrGunflame/snowflaked-rs/blob/master/LICENSE-APACHE
at your option.