number2name 1.0.1

Simple Rust library to convert an index to a name that is as short as possible.
Documentation

number2name (Rust library)

This is a simple Rust library to convert an index to a name that is as short as possible.

It can convert from index to string and back, for different character sets.

Example

From number to text:

let charset = Charset::case_insensitive("abc");
let text = charset.encode(13);
assert_eq!(text, "aab");

From text to number:

let nr = charset.decode("aab")?;
assert_eq!(nr, 13);

Install

Cargo.toml:

number2name = "^1.0.0"

Encoding

For a character set 'abc', the series is::

0 a
1 b
2 c
3 aa
4 ab
...
10 cb
11 cc
12 aaa
13 aab

Note that this is slightly shorter than base3 with leading characters stripped::

0 a (or '')
1 b
2 c
3 ba
4 bb
...
11 bac
12 bba
13 bbb
14 bbc

Character sets

You can easily use your own character sets using number2name::Charset.

Or use one of the built-in ones:

  • HEX (case-insensitive) / HEXLOWERCASE (case-sensitive)

    0123456789abcdef

  • BASE32 (case-insensitive) / BASE32LOWERCASE (case-sensitive)

    ABCDEFGHIJKLMNOPQRSTUVWXYZ234567

  • BASE32HUMAN

    abcdefghjkmnpqrstuvwxyz23456789

  • BASE32CROCKFORD

    0123456789ABCDEFGHJKMNPQRSTVWXYZ

  • BASE32SCNY

    一二三四五六七八九十鼠牛虎兔龍蛇马羊猴鸡狗猪凤北东南西中左右上下

  • BASE32HEX

    0123456789ABCDEFGHIJKLMNOPQRSTUV

  • BASE64 (case-sensitive)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

  • BASE64URL (case-sensitive)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

Notes

  • It's generally pretty fast, but if performance is critical:

    • Re-use the Charset instances (automatic for built-in ones)
    • Use case-sensitive character sets where possible