Skip to content

Latest commit

 

History

History
32 lines (24 loc) · 1.98 KB

README.docify.md

File metadata and controls

32 lines (24 loc) · 1.98 KB

smol-symbol 💠

Crates.io docs.rs Build Status MIT License

This crate provides the ability to create globally unique (per input value), human-readable Symbols at compile-time as well as at run-time, that are meant to be reminiscent of the Symbol type in the Crystal programming language.

Where this crate differs is the alphabet and length of our Symbol is a bit more restrictive, allowing us to encode the entire text of each Symbol as a u128 internally. The only caveat is we are limited to 25 characters of length and an alphabet consisting of lowercase a-z as well as _. No other characters are permitted.

The Symbol type can be created at compile-time using the convenient s! macro, and can also be created using the TryFrom<AsRef<str>> impl at runtime, though this is not as efficient as doing this at compile-time using the s! macro.

The Symbol type can also be turned into a String via a convenient Into<String> impl.

We also provide the ability to define custom alphabets that use the more general CustomSymbol type via a handy custom_alphabet! macro, allowing you to alter these restrictions directly (smaller alphabet = larger max length for a symbol) and add support for other languages or less restrictive character sets. The only invariant that can't be customized at the moment is CustomSymbol will always use a u128 as its backing data store.

Example

See the docs for Symbol and s! for more detailed information.