Skip to main content

dpp/tests/fixtures/
get_token_conventions_fixture.rs

1use crate::data_contract::associated_token::token_configuration_convention::v0::TokenConfigurationConventionV0;
2use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
3use crate::data_contract::associated_token::token_configuration_localization::v0::TokenConfigurationLocalizationV0;
4
5/// Token conventions with `entries` localizations: "en", then distinct
6/// language codes, two letters while they last (2,704 of them) and three
7/// after. Every form is "abc", the shortest `validate_localizations` accepts,
8/// so each entry encodes in the fewest bytes a valid localization can: 13 for
9/// a two-letter code.
10pub fn get_token_conventions_with_localizations_fixture(
11    entries: usize,
12) -> TokenConfigurationConvention {
13    let letters = || ('a'..='z').chain('A'..='Z');
14    let two_letter_codes = letters().flat_map(move |a| letters().map(move |b| format!("{a}{b}")));
15    let three_letter_codes = letters().flat_map(move |a| {
16        letters().flat_map(move |b| letters().map(move |c| format!("{a}{b}{c}")))
17    });
18    let localizations = std::iter::once("en".to_string())
19        .chain(
20            two_letter_codes
21                .chain(three_letter_codes)
22                .filter(|code| code != "en"),
23        )
24        .take(entries)
25        .map(|code| {
26            (
27                code,
28                TokenConfigurationLocalizationV0 {
29                    should_capitalize: false,
30                    singular_form: "abc".to_string(),
31                    plural_form: "abc".to_string(),
32                }
33                .into(),
34            )
35        })
36        .collect();
37    TokenConfigurationConvention::V0(TokenConfigurationConventionV0 {
38        localizations,
39        decimals: 8,
40    })
41}