Giter VIP home page Giter VIP logo

strong_id's Introduction

strong_id

github crates.io docs.rs ci status typeid spec status

Strongly typed IDs which optionally satisfy the TypeID specification.

A StrongId is any type which implements StrongId<T: Id>.

The Id trait is implemented for u8, u16, u32, u64, u128, usize and when the "uuid" feature is enabled, Uuid.

TypeID

With default-features = false and the typeid feature enabled, StrongID will follow the TypeID specification.

StrongID is verified against the TypeID spec with the typeid workflow every 6 hours.

Examples

Dynamic StrongIds

ID with a prefix

use strong_id::{prefix, DynamicStrongId};

let user_id = DynamicStrongId::<u16>::new(prefix!("user"), 3203).unwrap();
println!("{}", user_id); // user_0343

let user_id = "user_0343".parse::<DynamicStrongId<u16>>().unwrap();
println!("{:#?}", user_id);
// DynamicStrongId {
//     prefix: Some(
//        Prefix {
//           inner: "user",
//        },
//     ),
//     suffix: 3203,
// }

ID without a prefix

use strong_id::{prefix, DynamicStrongId};

let id = DynamicStrongId::<u16>::new_plain(3203);
println!("{}", id); // 0343

let id = "0343".parse::<DynamicStrongId<u16>>().unwrap();
println!("{:#?}", id);
// DynamicStrongId {
//     prefix: None,
//     suffix: 3203,
// }

TypeId with a prefix

use strong_id::{prefix, DynamicStrongId};

let user_id = DynamicStrongId::<Uuid>::now_v7(prefix!("user")).unwrap();
println!("{}", user_id); // user_01h536gfwffx2rm6pa0xg63337

let user_id = "user_01h536gfwffx2rm6pa0xg63337"
  .parse::<DynamicStrongId<Uuid>>()
  .unwrap();
println!("{:#?}", user_id);
// DynamicStrongId {
//     prefix: Some(
//        Prefix {
//           inner: "user",
//        },
//     ),
//     suffix: 01894668-3f8f-7f45-8a1a-ca0760618c67,
// }

TypeId without a prefix

use strong_id::{prefix, DynamicStrongId};

let id = DynamicStrongId::<Uuid>::now_v7_plain();
println!("{}", id); // 01h536gfwffx2rm6pa0xg63337

let id = "01h536gfwffx2rm6pa0xg63337"
  .parse::<DynamicStrongId<Uuid>>()
  .unwrap();
println!("{:#?}", id);
// DynamicStrongId {
//     prefix: None,
//     suffix: 01894668-3f8f-7f45-8a1a-ca0760618c67,
// }

Generated StrongIds

ID with a prefix

use strong_id::strong_id;

strong_id!(pub struct UserId(u16 => "user"));

let user_id = UserId::from(3203);
println!("{}", user_id); // user_0343

let user_id = "user_0343".parse::<UserId>().unwrap();
println!("{:#?}", user_id);
// UserId {
//     suffix: 3203,
// }

ID without a prefix

use strong_id::strong_id;

strong_id!(pub struct Id(u16));

let id = Id::from(3203);
println!("{}", id); // user_0343

let id = "0343".parse::<Id>().unwrap();
println!("{:#?}", id);
// Id {
//     suffix: 3203,
// }

Generated TypeId with a prefix

use strong_id::{strong_uuid, StrongUuid};

strong_uuid!(pub struct UserId(pub Uuid => "user"));
// strong_uuid!(struct UserId(Uuid => "user"));
/*
strong_id! {
    #[derive(StrongUuid)]
    pub struct UserId(pub Uuid => "user")    
}
*/

let user_id = UserId::now_v7();
println!("{}", user_id); // user_01h536z8abez196j2nzz06y8c8

let user_id = "user_01h536z8abez196j2nzz06y8c8".parse::<UserId>().unwrap();
println!("{:#?}", user_id);
// UserId {
//     suffix: 0189466f-a14b-77c2-9348-55ffc06f2188,
// }

Generated TypeId without a prefix

use strong_id::{strong_uuid, StrongUuid};

strong_uuid!(pub struct Id(pub Uuid));
// strong_uuid!(struct Id(Uuid));
/*
strong_id! {
    #[derive(StrongUuid)]
    pub struct Id(pub Uuid)    
}
*/

let id = Id::now_v7();
println!("{}", id); // 01h5372sq2egxb6ps3taq7p6np

let id = "01h5372sq2egxb6ps3taq7p6np".parse::<Id>().unwrap();
println!("{:#?}", id);
// UserId {
//     suffix: 01894671-66e2-743a-b35b-23d2ae7b1ab6,
// }

Features

  • delimited - Enables underscore delimited prefixes. On by default.
  • serde - Enables serde support in code generation.
  • uuid - Enable uuid functionality.
    • uuid-v1 - corresponds with uuid "v1" feature
    • uuid-v3 - corresponds with uuid "v3" feature
    • uuid-v4 - corresponds with uuid "v4" feature
    • uuid-v5 - corresponds with uuid "v5" feature
    • uuid-v6 - corresponds with uuid "v6" feature
    • uuid-v7 - corresponds with uuid "v7" feature
    • uuid-v8 - corresponds with uuid "v8" feature
  • typeid - Enable features which satisfy the TypeId specification.

strong_id's People

Contributors

johnnynotsolucky avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

michaelbentz

strong_id's Issues

Macro fails in contexts that define their own Result type

I wanted to add a StrongId in a codebase that already has a declaration like,

pub type Result<T> = std::result::Result<T, OurError>;

This is a pattern I've seen in a few rust projects.

That definition makes my use of strong_id::strong_id!() fail - the macro output expects but does not explicitly specify std::result::Result rather than this type alias.

One workaround is to wrap the strongid definition in a submodule and pub-use the result:

mod myid {
    use strong_id::strong_uuid;
    use std::result::Result;
    strong_uuid!(pub struct RequestId(Uuid => "req"));
}
pub use myid::RequestId;

Consider explicitly qualifying ::std::result::Result within macro-generated code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.