Skip to main content

ig_client/utils/
id.rs

1/// Character set used for generated deal references.
2///
3/// This is nanoid's URL-safe alphabet (`[A-Za-z0-9_-]`), which is within IG's
4/// permitted deal-reference charset. Defining it here — and routing every
5/// deal-reference builder through [`get_id`] — keeps the charset in a single
6/// place.
7const DEAL_REF_ALPHABET: [char; 64] = nanoid::alphabet::SAFE;
8
9/// Length, in characters, of a generated deal reference.
10///
11/// IG limits deal references to 30 characters.
12const DEAL_REF_LENGTH: usize = 30;
13
14/// Generates a unique deal reference as a `String`.
15///
16/// This function creates a `DEAL_REF_LENGTH`-character unique identifier drawn
17/// from `DEAL_REF_ALPHABET` (nanoid's URL-safe alphabet) using the `nanoid`
18/// library. The generated identifier is securely random and designed to be
19/// collision-resistant, and stays within IG's permitted deal-reference charset.
20///
21/// # Returns
22/// A freshly generated deal reference.
23///
24/// # Examples
25/// ```
26/// use ig_client::utils::id::get_id;
27///
28/// let deal_reference = get_id();
29/// assert_eq!(deal_reference.len(), 30);
30/// ```
31#[must_use]
32pub fn get_id() -> String {
33    nanoid::nanoid!(DEAL_REF_LENGTH, &DEAL_REF_ALPHABET)
34}