I want to create a global hash map that maps strings to vectors of colors. This data needs to be queried by multiple functions and should just be hard coded into the program. That doesn’t seem possible.

Now, how is the right ™ way to do something like that in Rust? What if you need just a bunch of data structures from the beginning of the program until its end where some of the data needs to allocated?

Just make a function that matches string and outputs your colors. It’ll be faster and easier than any extra crate.

SigmarStern
creator
link
fedilink
21Y

The thing is, I also want to query all possible colors. And that would then be in a different function so I’d have to change two functions whenever I add a new color and I don’t like that.

Then make a vector of colors, and make a function that matches string to index in that vector

PrincipleOfCharity
link
fedilink
5
edit-2
1Y

Is the hash map immutable? If so, look at the rust-phf crate.

You may be able to use something like lazy_static.

https://docs.rs/lazy_static/latest/lazy_static/

SigmarStern
creator
link
fedilink
31Y

I heard about this, but I wasn’t sure it was the right way. Or if Rust developers just straight up avoid situations like this.

lazy_static was the standard way as far as I’m concerned until this month. OnceCell or OnceLock should fill this role now.

I generally avoid this situation. At best I’ll create an Rc<HashMap<T, U>> to pass around. I find that having a need for a static variable can be an indication of bad design. It often makes the code that depends on it untestable.

Rust Programming
!rust@lemmy.ml
    • 0 users online
    • 7 users / day
    • 8 users / week
    • 21 users / month
    • 56 users / 6 months
    • 1 subscriber
    • 269 Posts
    • 757 Comments
    • Modlog