Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 173 additions & 0 deletions src/ui/tokens/tokens_screen/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,179 @@ impl std::fmt::Display for TokenNameLanguage {
}
}

impl TokenNameLanguage {
pub fn iso_code(self) -> &'static str {
match self {
TokenNameLanguage::English => "en",
TokenNameLanguage::Arabic => "ar",
TokenNameLanguage::Bengali => "bn",
TokenNameLanguage::Burmese => "my",
TokenNameLanguage::Chinese => "zh",
TokenNameLanguage::Czech => "cs",
TokenNameLanguage::Dutch => "nl",
TokenNameLanguage::Farsi => "fa",
TokenNameLanguage::Filipino => "fil",
TokenNameLanguage::French => "fr",
TokenNameLanguage::German => "de",
TokenNameLanguage::Greek => "el",
TokenNameLanguage::Gujarati => "gu",
TokenNameLanguage::Hausa => "ha",
TokenNameLanguage::Hebrew => "he",
TokenNameLanguage::Hindi => "hi",
TokenNameLanguage::Hungarian => "hu",
TokenNameLanguage::Igbo => "ig",
TokenNameLanguage::Indonesian => "id",
TokenNameLanguage::Italian => "it",
TokenNameLanguage::Japanese => "ja",
TokenNameLanguage::Javanese => "jv",
TokenNameLanguage::Kannada => "kn",
TokenNameLanguage::Khmer => "km",
TokenNameLanguage::Korean => "ko",
TokenNameLanguage::Malay => "ms",
TokenNameLanguage::Malayalam => "ml",
TokenNameLanguage::Mandarin => "zh",
TokenNameLanguage::Marathi => "mr",
TokenNameLanguage::Nepali => "ne",
TokenNameLanguage::Oriya => "or",
TokenNameLanguage::Pashto => "ps",
TokenNameLanguage::Polish => "pl",
TokenNameLanguage::Portuguese => "pt",
TokenNameLanguage::Punjabi => "pa",
TokenNameLanguage::Romanian => "ro",
TokenNameLanguage::Russian => "ru",
TokenNameLanguage::Serbian => "sr",
TokenNameLanguage::Sindhi => "sd",
TokenNameLanguage::Sinhala => "si",
TokenNameLanguage::Somali => "so",
TokenNameLanguage::Spanish => "es",
TokenNameLanguage::Swahili => "sw",
TokenNameLanguage::Swedish => "sv",
TokenNameLanguage::Tamil => "ta",
TokenNameLanguage::Telugu => "te",
TokenNameLanguage::Thai => "th",
TokenNameLanguage::Turkish => "tr",
TokenNameLanguage::Ukrainian => "uk",
TokenNameLanguage::Urdu => "ur",
TokenNameLanguage::Vietnamese => "vi",
TokenNameLanguage::Yoruba => "yo",
}
Comment on lines +945 to +999

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, let's find the TokenNameLanguage enum definition and understand the full context
cat -n src/ui/tokens/tokens_screen/mod.rs | head -100

Repository: dashpay/dash-evo-tool

Length of output: 6083


🏁 Script executed:

# Search for the TokenNameLanguage enum definition
rg "enum TokenNameLanguage" -A 60

Repository: dashpay/dash-evo-tool

Length of output: 3048


🏁 Script executed:

# Look for usages of iso_code() method
rg "iso_code\(\)" -B 3 -A 3

Repository: dashpay/dash-evo-tool

Length of output: 613


🏁 Script executed:

# Check for existing tests in the file
rg "#\[test\]" src/ui/tokens/tokens_screen/mod.rs -A 10

Repository: dashpay/dash-evo-tool

Length of output: 2006


🏁 Script executed:

# Verify file size and look at the full structure around lines 945-999
wc -l src/ui/tokens/tokens_screen/mod.rs

Repository: dashpay/dash-evo-tool

Length of output: 104


🏁 Script executed:

# Get the iso_code() implementation and surrounding context
sed -n '920,1020p' src/ui/tokens/tokens_screen/mod.rs

Repository: dashpay/dash-evo-tool

Length of output: 3975


🏁 Script executed:

# Search for tests specifically for iso_code
rg "iso_code" -B 5 -A 5

Repository: dashpay/dash-evo-tool

Length of output: 1626


🏁 Script executed:

# Look at token_creator.rs to see how iso_code is used
cat -n src/ui/tokens/tokens_screen/token_creator.rs | grep -A 20 -B 20 "iso_code"

Repository: dashpay/dash-evo-tool

Length of output: 1735


🏁 Script executed:

# Check if there's any validation or duplicate handling
rg "duplicate|collision|unique.*code|Chinese|Mandarin" src/ui/tokens/tokens_screen/

Repository: dashpay/dash-evo-tool

Length of output: 1116


🏁 Script executed:

# Check DPP contract structure to understand if language codes are used as map keys
rg "token_names|language.*code" src/ui/tokens/tokens_screen/token_creator.rs -B 3 -A 3

Repository: dashpay/dash-evo-tool

Length of output: 9028


🏁 Script executed:

# Verify if there's any contract serialization that might use codes as keys
rg "token_names" -B 5 -A 5 | head -50

Repository: dashpay/dash-evo-tool

Length of output: 4620


Add unit tests for iso_code() and fix language code collisions

The iso_code() method has two issues:

  1. Duplicate ISO codes: Both Chinese and Mandarin map to "zh". The UI prevents duplicate enum variants from being selected, but a user can add both Chinese and Mandarin to the same token, resulting in duplicate language codes sent to the contract. If the DPP contract keys token localizations by language code, this will cause data loss or rejection.

  2. Missing unit tests: Per coding guidelines (**/*.rs requires #[test] inline tests), the iso_code() method has no test coverage. Add tests to verify code mappings and detect duplicate codes.

Resolution options:

  • Rename one variant (e.g., ChineseStandardChinese, MandarinMandarinChinese) with distinct codes
  • Document that duplicate codes are intentional and validate this in the contract layer
  • Remove one of the two variants if they're redundant for your use case
🤖 Prompt for AI Agents
In `@src/ui/tokens/tokens_screen/mod.rs` around lines 945 - 999, The iso_code()
mapping contains a duplicate ("zh") for TokenNameLanguage::Chinese and
TokenNameLanguage::Mandarin and lacks unit tests; update the mapping to
eliminate collisions (e.g., change the enum variant name or return value for
Mandari n/Chinese so each TokenNameLanguage variant returns a unique ISO string)
and add inline #[test]s that exercise TokenNameLanguage::iso_code() to assert
expected codes and detect duplicates (create tests that iterate all
TokenNameLanguage variants, assert their iso_code() values against expected map,
and assert uniqueness of returned codes). Ensure you update the
TokenNameLanguage enum reference (e.g., TokenNameLanguage::Chinese,
TokenNameLanguage::Mandarin) and add tests alongside iso_code() in the same
module to satisfy the repository’s Rust test guidelines.

}

pub fn ui_label(self) -> &'static str {
match self {
TokenNameLanguage::English => "English",
TokenNameLanguage::Arabic => "Arabic",
TokenNameLanguage::Bengali => "Bengali",
TokenNameLanguage::Burmese => "Burmese",
TokenNameLanguage::Chinese => "Chinese",
TokenNameLanguage::Czech => "Czech",
TokenNameLanguage::Dutch => "Dutch",
TokenNameLanguage::Farsi => "Farsi (Persian)",
TokenNameLanguage::Filipino => "Filipino (Tagalog)",
TokenNameLanguage::French => "French",
TokenNameLanguage::German => "German",
TokenNameLanguage::Greek => "Greek",
TokenNameLanguage::Gujarati => "Gujarati",
TokenNameLanguage::Hausa => "Hausa",
TokenNameLanguage::Hebrew => "Hebrew",
TokenNameLanguage::Hindi => "Hindi",
TokenNameLanguage::Hungarian => "Hungarian",
TokenNameLanguage::Igbo => "Igbo",
TokenNameLanguage::Indonesian => "Indonesian",
TokenNameLanguage::Italian => "Italian",
TokenNameLanguage::Japanese => "Japanese",
TokenNameLanguage::Javanese => "Javanese",
TokenNameLanguage::Kannada => "Kannada",
TokenNameLanguage::Khmer => "Khmer",
TokenNameLanguage::Korean => "Korean",
TokenNameLanguage::Malay => "Malay",
TokenNameLanguage::Malayalam => "Malayalam",
TokenNameLanguage::Mandarin => "Mandarin Chinese",
TokenNameLanguage::Marathi => "Marathi",
TokenNameLanguage::Nepali => "Nepali",
TokenNameLanguage::Oriya => "Oriya",
TokenNameLanguage::Pashto => "Pashto",
TokenNameLanguage::Polish => "Polish",
TokenNameLanguage::Portuguese => "Portuguese",
TokenNameLanguage::Punjabi => "Punjabi",
TokenNameLanguage::Romanian => "Romanian",
TokenNameLanguage::Russian => "Russian",
TokenNameLanguage::Serbian => "Serbian",
TokenNameLanguage::Sindhi => "Sindhi",
TokenNameLanguage::Sinhala => "Sinhala",
TokenNameLanguage::Somali => "Somali",
TokenNameLanguage::Spanish => "Spanish",
TokenNameLanguage::Swahili => "Swahili",
TokenNameLanguage::Swedish => "Swedish",
TokenNameLanguage::Tamil => "Tamil",
TokenNameLanguage::Telugu => "Telugu",
TokenNameLanguage::Thai => "Thai",
TokenNameLanguage::Turkish => "Turkish",
TokenNameLanguage::Ukrainian => "Ukrainian",
TokenNameLanguage::Urdu => "Urdu",
TokenNameLanguage::Vietnamese => "Vietnamese",
TokenNameLanguage::Yoruba => "Yoruba",
}
}

pub fn selection_order() -> &'static [TokenNameLanguage] {
&[
TokenNameLanguage::English,
TokenNameLanguage::Arabic,
TokenNameLanguage::Bengali,
TokenNameLanguage::Burmese,
TokenNameLanguage::Chinese,
TokenNameLanguage::Czech,
TokenNameLanguage::Dutch,
TokenNameLanguage::Farsi,
TokenNameLanguage::Filipino,
TokenNameLanguage::French,
TokenNameLanguage::German,
TokenNameLanguage::Greek,
TokenNameLanguage::Gujarati,
TokenNameLanguage::Hausa,
TokenNameLanguage::Hebrew,
TokenNameLanguage::Hindi,
TokenNameLanguage::Hungarian,
TokenNameLanguage::Igbo,
TokenNameLanguage::Indonesian,
TokenNameLanguage::Italian,
TokenNameLanguage::Japanese,
TokenNameLanguage::Javanese,
TokenNameLanguage::Kannada,
TokenNameLanguage::Khmer,
TokenNameLanguage::Korean,
TokenNameLanguage::Malay,
TokenNameLanguage::Malayalam,
TokenNameLanguage::Mandarin,
TokenNameLanguage::Marathi,
TokenNameLanguage::Nepali,
TokenNameLanguage::Oriya,
TokenNameLanguage::Pashto,
TokenNameLanguage::Polish,
TokenNameLanguage::Portuguese,
TokenNameLanguage::Punjabi,
TokenNameLanguage::Romanian,
TokenNameLanguage::Russian,
TokenNameLanguage::Serbian,
TokenNameLanguage::Sindhi,
TokenNameLanguage::Sinhala,
TokenNameLanguage::Somali,
TokenNameLanguage::Spanish,
TokenNameLanguage::Swahili,
TokenNameLanguage::Swedish,
TokenNameLanguage::Tamil,
TokenNameLanguage::Telugu,
TokenNameLanguage::Thai,
TokenNameLanguage::Turkish,
TokenNameLanguage::Ukrainian,
TokenNameLanguage::Urdu,
TokenNameLanguage::Vietnamese,
TokenNameLanguage::Yoruba,
]
}
}

#[derive(Clone, Debug)]
/// All arguments needed by `build_data_contract_v1_with_one_token`.
pub struct TokenBuildArgs {
Expand Down
Loading
Loading