use ferroid::{
base32::{Base32SnowExt, Base32UlidExt},
id::{SnowflakeDiscordId, SnowflakeInstagramId, SnowflakeMastodonId, SnowflakeTwitterId, ULID},
};
use crate::{Dummy, Faker};
pub struct FerroidULID;
pub struct FerroidTwitterId;
pub struct FerroidDiscordId;
pub struct FerroidMastodonId;
pub struct FerroidInstagramId;
impl Dummy<Faker> for ULID {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
let time_part: u128 = rng.random_range(0..(1 << ULID::TIMESTAMP_BITS));
let rand_part: u128 = rng.random_range(0..(1 << ULID::RANDOM_BITS));
ULID::from_components(time_part, rand_part)
}
}
impl Dummy<FerroidULID> for ULID {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &FerroidULID, rng: &mut R) -> Self {
let time_part: u128 = rng.random_range(0..(1 << ULID::TIMESTAMP_BITS));
let rand_part: u128 = rng.random_range(0..(1 << ULID::RANDOM_BITS));
ULID::from_components(time_part, rand_part)
}
}
impl Dummy<FerroidULID> for String {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(config: &FerroidULID, rng: &mut R) -> Self {
ULID::dummy_with_rng(config, rng).encode().to_string()
}
}
impl Dummy<Faker> for SnowflakeTwitterId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::SEQUENCE_BITS));
SnowflakeTwitterId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidTwitterId> for SnowflakeTwitterId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &FerroidTwitterId, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeTwitterId::SEQUENCE_BITS));
SnowflakeTwitterId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidTwitterId> for String {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(config: &FerroidTwitterId, rng: &mut R) -> Self {
SnowflakeTwitterId::dummy_with_rng(config, rng)
.encode()
.to_string()
}
}
impl Dummy<Faker> for SnowflakeDiscordId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::SEQUENCE_BITS));
SnowflakeDiscordId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidDiscordId> for SnowflakeDiscordId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &FerroidDiscordId, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeDiscordId::SEQUENCE_BITS));
SnowflakeDiscordId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidDiscordId> for String {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(config: &FerroidDiscordId, rng: &mut R) -> Self {
SnowflakeDiscordId::dummy_with_rng(config, rng)
.encode()
.to_string()
}
}
impl Dummy<Faker> for SnowflakeMastodonId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::SEQUENCE_BITS));
SnowflakeMastodonId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidMastodonId> for SnowflakeMastodonId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &FerroidMastodonId, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeMastodonId::SEQUENCE_BITS));
SnowflakeMastodonId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidMastodonId> for String {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(config: &FerroidMastodonId, rng: &mut R) -> Self {
SnowflakeMastodonId::dummy_with_rng(config, rng)
.encode()
.to_string()
}
}
impl Dummy<Faker> for SnowflakeInstagramId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::SEQUENCE_BITS));
SnowflakeInstagramId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidInstagramId> for SnowflakeInstagramId {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(_: &FerroidInstagramId, rng: &mut R) -> Self {
let timestamp: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::TIMESTAMP_BITS));
let machine_id: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::MACHINE_ID_BITS));
let sequence: u64 = rng.random_range(0..(1 << SnowflakeInstagramId::SEQUENCE_BITS));
SnowflakeInstagramId::from_components(timestamp, machine_id, sequence)
}
}
impl Dummy<FerroidInstagramId> for String {
fn dummy_with_rng<R: rand::RngExt + ?Sized>(config: &FerroidInstagramId, rng: &mut R) -> Self {
SnowflakeInstagramId::dummy_with_rng(config, rng)
.encode()
.to_string()
}
}