this post was submitted on 08 Jul 2023
12 points (92.9% liked)

Rust

6026 readers
2 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

[email protected]

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
 

My program is small enough that in TS/JS I'd normally just store the data in some global variable to be access from whatever elsewhere in the app. But with Rust from what I can tell this doesn't seem to be a common practice. How should i handle this?

More specifically, I need to:

  1. program start, fetch data from my db (DONE)
  2. store this data somehow somewhere
  3. access said data (for read only in this use case)

Thanks for any insights here!

top 6 comments
sorted by: hot top controversial new old
[–] mipli 11 points 1 year ago (1 children)

I would consider just passing along the data directly to the functions that need access to it, rather than storing in a global state. If passing each piece of data along as separate parameters is a bit much, you can always create struct Context { ... } which keeps tracks of whatever you need and pass that around.

Nothing wrong with using OnceCell as @[email protected] suggested, but I've found that passing it as an argument feels a bit better.

[–] nerdblood 4 points 1 year ago (1 children)

I might not need global state, the more I think about it. I'll start with passing a struct and see where that gets me, thanks!

[–] nous 3 points 1 year ago

Using OnceCell for inviting some static resource, like a regex expression. Or for storing something like a internal cache for a function is ok. But I would avoid using it to hold a application wide state that anything can drop in and modify. Passing around application state where it is needed is generally much better and far easier to test things with.

[–] [email protected] 8 points 1 year ago (1 children)

From your description it sounds like you want OnceCell which is a relatively new feature; previously you'd use lazy_static

[–] nerdblood 3 points 1 year ago

Yeah I tried out lazy_static, but the compiler was strongly urging me not to use it since it's being deprecated. Thanks, I didn't know about OneCell.

[–] dvektor 2 points 1 year ago

Glad I clicked on this... I'd never heard of /used OnceCell, and have a literally identical need in a program I'm writing. Nice!