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:
- program start, fetch data from my db (DONE)
- store this data somehow somewhere
- access said data (for read only in this use case)
Thanks for any insights here!
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 @heartlessevil@lemmy.one suggested, but I’ve found that passing it as an argument feels a bit better.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!
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.
From your description it sounds like you want OnceCell which is a relatively new feature; previously you’d use lazy_static
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.
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!