8182bee632
Upgrades to Glean v50.0.1, which comes with a rewritten core and UniFFI-powered bindings. Glean has some API changes, so we swap it over to that. Mostly mechanical changes. Also upgrades to inherent v1.0 in fog. This matches what Glean uses internally and gets rid of one duplicated crate. Also upgrades to glean-parser==6.0.1 One crate duplication now (change in `python/mozbuild/mozbuild/vendor/vendor_rust.py` required). Some new crates now vendored. These are transitive dependencies of Glean dependencies, all with valid licenses and already used in other products (mobile). Differential Revision: https://phabricator.services.mozilla.com/D146062 |
||
---|---|---|
.. | ||
src | ||
.cargo-checksum.json | ||
CHANGELOG.md | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
README.md
fs-err
fs-err is a drop-in replacement for std::fs
that provides more
helpful messages on errors. Extra information includes which operations was
attempted and any involved paths.
Error Messages
Using std::fs
, if this code fails:
let file = File::open("does not exist.txt")?;
The error message that Rust gives you isn't very useful:
The system cannot find the file specified. (os error 2)
...but if we use fs-err instead, our error contains more actionable information:
failed to open file `does not exist.txt`
caused by: The system cannot find the file specified. (os error 2)
Usage
fs-err's API is the same as std::fs
, so migrating code to use it is easy.
// use std::fs;
use fs_err as fs;
let contents = fs::read_to_string("foo.txt")?;
println!("Read foo.txt: {}", contents);
fs-err uses std::io::Error
for all errors. This helps fs-err
compose well with traits from the standard library like
std::io::Read
and crates that use them like
serde_json
:
use fs_err::File;
let file = File::open("my-config.json")?;
// If an I/O error occurs inside serde_json, the error will include a file path
// as well as what operation was being performed.
let decoded: Vec<String> = serde_json::from_reader(file)?;
println!("Program config: {:?}", decoded);
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.