How to handle application storage in rust? - eviltoast

I want to build a small gui application in rust. What are my options for application storage? I have heard of the confi crate but I want to save a bit more than just configuration. Is there a crate that handles this for me easily?

  • Vorpal@programming.dev
    link
    fedilink
    arrow-up
    11
    ·
    1 year ago

    Be sure to treat state and configuration separately. It doesn’t matter on Windows as far as I know (they go in the same location), but on Linux those are supposed to go in different places.

    Many programs get this wrong, and it is quite annoying as I track my config files in git. I don’t want a diff just because the list of recently opened files changed! Or even worse: the program stores the last window size and position in the config file… (looking at you KDE!)

    Here are some libraries I found to help with this in a cross platform way:

    I haven’t tried either, haven’t written such a program yet.

    As for how to store data, there are indeed many options, depending on your needs:

    • Plain text based formats (toml, yaml, JSON, ini, …) can be good for configs and basic state. As a bonus it let’s the user easily manage the file in version control if they are so inclined.
    • Databases (SQLite mostly)
    • Custom formats (binary files in a directory structure is often used for browser caches for example) .

    Without knowing more it is hard to give specific advise.

    • CMahaff@lemm.ee
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 year ago

      Thanks for the link to “dirs” - I wish I’d known about it before I implemented a (worse) version just using the home crate.

  • AngryClosetMonkey@feddit.ch
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

    It depends on how you want to store your data. Every OS has a standard for where applications should store their data. You should store your data at the appropriate path. If you have structured data against which you want to run queries you could use a sqlite DB (the sqlx crate supports sqlite) instead of just a bunch of config files.

  • raffomania@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    For storing state, I’d look at SQLite first. turbosql is a wrapper that looks like it’s a joy to use and I’ve been looking for an excuse to try it for a while :)