Just a small release to keep things up to date
- Add a changelog #89
- Update
winreg
from 0.52 -> 0.55 #86
- Make tests into into integration tests where possible #87
- Remove publish workflow #88
- Add a release checklist #90
Finally after a very long development period we're release version 2.0.0. Living up to the major version bump this release does involve breaking changes to most parts of the API. The majority of these changes fit into three core themes:
Iterator
ification of the list all flavors of methods- Exhaustively parsing
App
s (previouslySteamApp
s) to drop the public dependency onsteamy-vdf
- Actually defining an
Error
type instead of returning ambiguousNone
s
Let's dive right in
Methods that would previously exhaustively collect some set of information and cache it like SteamDir::libraryfolders()
and SteamDir::apps()
now return iterators that walk over the set of information and returns values on the fly akin to APIs like std::fs::read_dir()
. This has a couple of distinct advantages where we can return precise errors for each item ergonomically, and we can be lazier with our computation
We're trying to be a stable library since our major version is >0, but unfortunately there's not a stable VDF parser in sight. That's a bit problematic as we'll want to avoid relying on one in our public API, but that also means significant changes to how App
would hold a steamy_vdf::Table
representing the parsed appmanifest file. To mitigate this we attempt to exhaustively parse and provide as much data as we can from steam apps, and to top it off we also annotated it with #[non_exhaustive]
, so that more fields can be added in the future without a breaking change
This is a significant improvement over the old API. Previously errors would be bubbled up as None
s that would lead to ambiguity over whether a None
is from something not existing or simply failing to be parsed. We now religiously return errors to represent failure cases leaving it up to the consumer to decide whether to ignore the error or fail loudly
Where possible we try to include relevant information for the error, but several of the underlying types are intentionally opaque to avoid exposing unstable depdencies in our public API