Hard coding 2000+ constants of the same type

This question is a bit weird. If it’s not clear what I’m asking, please point out the confusion (so I can improve the question) rather than guessing the question.

Here is the problem:

  1. I have “pub struct MeshData { … }”

  2. I have 2000+ objects of type “MeshData” – they have names apple_red, apple_green, apple_rotten, …, orange_big, orange_tangerine, orange_mandarin, …, chair_wooden, chair_plastic, chair_aeron, …, car_truck, car_tesla, car_f1, …

  3. This list of objects is static, determined at COMPILE TIME, and does NOT CHANGE during runtime.

  4. I want to hard code this list of items into a *.rs file – so that rustc can, statically, at compile time, notify me any missing object.


Here are the solutions I have considered:


This “solution” is not acceptable as I really want compile time checking / warning of any non-existent object.


Here ,we can either have a single module, mesh::car_…, mesh::orange_… ,
or submodules mesh::car::: … mesh::orange::…, …

This is the best solution I have so far.

What I don’t like about this is that IntelliJ wants me to name consts using all caps, i.e.

mesh::car::TRUCK , mesh::car::TESLA, …


Any other suggestions?

The replacement of ::car:: with the ::car:: was not intentional.

1 Like

This question is not “how do I use emoji’s as module/variable names in rust” :slight_smile:


So disable that lint with #![allow(non_upper_case_globals)] at the top of the module.

Also, you might want to use static instead of const. consts are effectively copy+pasted everywhere you use them, statics are actual storage in the compiled binary.

1 Like

Thanks, was unaware of ‘const’ vs ‘static const’.

Not static const, just static.

1 Like

chair_wooden, chair_plastic, chair_aeron,

I’m not sure if it’s helpful in your case, but Rust idiomatic way would be to have:

enum Item {

enum ChairKind {
    Wooden, Plastic, Aeron,

and when you match against them, they are checked at compile time.

Mapping these to external constants is trickier. You’d probably end up with a huge match block or two. There are also crates that add custom metadata to enums, like strum.


The static approach worked fine. Despite the naming convention, there (at least so far) hasn’t been a situation where:

  1. I have some object
  2. I know it is a Chair
  3. I don’t know which type of chair it is