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!

  • mipli
    link
    fedilink
    arrow-up
    11
    ·
    1 year ago

    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.

    • nerdbloodOP
      link
      fedilink
      arrow-up
      4
      ·
      1 year ago

      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
        link
        fedilink
        arrow-up
        3
        ·
        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.

    • nerdbloodOP
      link
      fedilink
      arrow-up
      3
      ·
      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
    link
    fedilink
    arrow-up
    2
    ·
    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!