Git Product home page Git Product logo

nanoid's People

Contributors

alexkirsz avatar ariarzer avatar caemor avatar delimitry avatar exr0n avatar fundon avatar insertish avatar merlinfuchs avatar nbraud avatar nikolay-govorov avatar rushmorem avatar svenstaro avatar theironborn avatar tmccombs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

nanoid's Issues

smartstring feature is non-additve

From the cargo reference:

... features should be additive. That is, enabling a feature should not disable functionality, and it should usually be safe to enable any combination of features. A feature should not introduce a SemVer-incompatible change.

However, the smartstring feature in nanoid doesn't comply with that.

Consider the case where a project has two dependencies that use nanoid. One uses SmartString, the other doesn't. When the full project is built, the smartstring feature will be enabled, and the library that doesn't use smartstring will fail to compile.

Unresolved import `nanoid::nanoid`?

Hi, rust newbie here. I just created a new project to try out nanoid, but it says error[E0432]: unresolved import 'nanoid::nanoid'.

Cargo.toml:

[package]
name = "nanoid_test"
version = "0.1.0"
authors = ["Exr0n <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
nanoid = "0.1.3"

src/main.rs:

extern crate nanoid;
use nanoid::nanoid;

fn main() {
    println!("Hello, world!");
}

$ cargo run --verbose:

       Fresh libc v0.2.69
       Fresh rand v0.4.6
       Fresh nanoid v0.1.3
   Compiling nanoid_test v0.1.0 (/Users/exr0n/Desktop/snap/nanoid_test)
     Running `rustc --crate-name nanoid_test --edition=2018 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=e6ce498e3c0aac20 -C extra-filename=-e6ce498e3c0aac20 --out-dir /Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps -C incremental=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/incremental -L dependency=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps --extern nanoid=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps/libnanoid-8c29b7d0393c4491.rlib`
error[E0432]: unresolved import `nanoid::nanoid`
 --> src/main.rs:2:5
  |
2 | use nanoid::nanoid;
  |     ^^^^^^^^^^^^^^ no `nanoid` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: could not compile `nanoid_test`.

Caused by:
  process didn't exit successfully: `rustc --crate-name nanoid_test --edition=2018 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=e6ce498e3c0aac20 -C extra-filename=-e6ce498e3c0aac20 --out-dir /Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps -C incremental=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/incremental -L dependency=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps --extern nanoid=/Users/exr0n/Desktop/snap/nanoid_test/target/debug/deps/libnanoid-8c29b7d0393c4491.rlib` (exit code: 1)

It seems like rustc knows where to find the nanoid crate, but for some reason can't use it while compiling? I can use other crates like chrono fine, so I have no clue what's going on.

API 2.0

Let’s update the library to be compatible with the latest Nano ID 2.0:

  • Replace ~ to - in default alphabet
  • Add non-secure fast generator
  • Async API?

Plans to replace ~ to -

Hi.

The official nanoid uses the characters A-Za-z0-9_-. So, to you have plan use them too?

It would be nice to change the ~ to -, it is more "user friendly" to share the generated IDs as tokens.

Wrong IDs in the documentation

Hi.

I've noticed the following ID present in the documentation:

Uakgb_J5m9g~0JDMbcJqLJ

however, it is wrong, since it contains 22 characters, but the documentation says ... returns an ID with 21 characters. 🤔

nanoid::format silently truncates the dictionary

nanoid::format silently truncates the dictionary it's given as input, to the largest power of 2 that's below dictionary.len() (modulo floating-point imprecision):

  • it picks symbols from alphabet as alphabet[byte];
  • byte has mask applied with bitwise-and;
  • mask is the largest power of two below dictionary.len();
  • hence, byte is between 0 and that power of two.

This causes the resulting value to have lower entropy than expected (i.e. lower guarantees on its uniqueness), when the alphabet's size is not a power of two (with the effect being more pronounced as the difference between the size and the next power of two grows smaller).

Note that the default alphabet has size 64 = 2⁶, so callers using it are not affected.

Updated deps

Can you please update the dependencies, especially to rand 0.8 and publish an update to crates.io?

Unique String ?

In your description, you talk about a unique string ID.
But I cannot find any code which guarantees that the string is unique.

Am I misunderstanding the description or am I missing the relevant code?
If there is no guarantee that the string is unique, maybe the word unique in the description should be removed.

0.3.0 release

Would you please make another crate release with the recent api changes?

Documentation is inconsistent with regards to the default alphabet.

The documentation at https://docs.rs/nanoid/latest/nanoid/ claims that the default alphabet is A-Za-z0-9_~. This is stated several times in the text, and there is a code example which claims it may generate a string with a tilde:

If you want to reduce ID length (and increase collisions probability), you can pass the length as an argument generate function:

use nanoid::nanoid;

fn main() {
   let id = nanoid!(10); //=> "IRFa~VaY2b"
}

However, tilde (~) is not URL-safe.

nanoid::alphabet::SAFE, which the documentation claims is the default alphabet, contains the hyphen in place of the tilde. Presumably this is correct, and the documentation text is wrong.

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.