Improve glob error handling

finchie
Mar 5, 2025, 5:00 AM
NFV26FRQF6JNR7WLU72HR7W2GDHLDGDPAX3CYHZLBQEACJ24AB4QC

Dependencies

  • [2] UN2XEIEU Migrate from `locale_select` to `env_preferences`
  • [3] F5LG7WEN Emit compilation errors from Fluent source code
  • [4] 6ABVDTXZ Improve `fluent_embed_derive` test suite
  • [5] JZXXFWQK Add tests for `locale_select` backends on unix
  • [6] ROSR4HD5 Parse captured glob as locale
  • [7] O77KA6C4 Create `fluent_embed` crate
  • [8] AL3CCMWZ Remove deprecated `output-macros` crate
  • [9] VNSHGQYN Support using glob paths in `localize` macro
  • [10] RLX6XPNZ Return an error when user provides an exact path
  • [11] SHNZZSZG Create `cli_macros` shim crate
  • [12] KF65O6OD Add tests for placeables
  • [13] YNEOCYMG Create `locale-select` crate
  • [14] UKFEFT6L Create basic `Output` proc-macro
  • [15] OWXLFLRM Merge `cli_macros` shim into `fluent_embed`
  • [16] BANMRGRO Switch `wax` to temporary fork
  • [17] CESJ4CTO Move macro-specific code into `macro_impl` module
  • [18] C6W7N6N5 Implement `Localize` for `FixedDecimal` and primitive number types
  • [19] V5S5K33A Add basic error handling for invalid paths in proc_macro attribute
  • [20] 56F2YE6H Use `prettyplease` to format macro output
  • [21] VZYZRAO4 Move `output-macros` crate into workspace
  • [22] WBI5HFOB Add simple wrapper for `libc::settext()` to query system locale
  • [23] BFL2Y7GN Add relative timestamps using `jiff` and `icu_relativetime`

Change contents

  • edit in fluent_embed_derive/src/macro_impl/mod.rs at line 25
    [3.596]
    [3.596]
    // Set up a global Miette report handler to ensure consistent non-Rustc diagnostics
    miette::set_hook(Box::new(|_| {
    Box::new(
    miette::MietteHandlerOpts::new()
    // Force color output, even when printing using the debug formatter
    .color(true)
    .build(),
    )
    }))
    .unwrap();
  • replacement in fluent_embed_derive/src/macro_impl/error.rs at line 37
    [3.3292][3.2807:2845]()
    attribute::Error::NoMatches {
    [3.3292]
    [3.3328]
    attribute::Error::NoMatchesInEntry {
  • edit in fluent_embed_derive/src/macro_impl/error.rs at line 46
    [3.2928]
    [3.3652]
    help = "The attribute should use glob syntax to match against multiple files";
    note = "For example, you can:\n{}\n{}",
    "- Match against directories: locale/**/errors.ftl",
    "- Match against files: locale/*.ftl";
    };
    }
    attribute::Error::NoMatchesInGlob => {
    emit_error! { attribute_stream, "no matches found for glob";
  • edit in fluent_embed_derive/src/macro_impl/error.rs at line 66
    [3.4147][3.4147:4498]()
    // This includes setting up a global report handler with some extra options
    miette::set_hook(Box::new(|_| {
    Box::new(
    miette::MietteHandlerOpts::new()
    // Force color output, even when printing using the debug formatter
    .color(true)
    .build(),
    )
    }))
    .unwrap();
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 7
    [3.3464][3.3464:3486]()
    use wax::walk::Entry;
    [3.3464]
    [3.3486]
    use wax::{BuildError, Glob, WalkEntry, WalkError};
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 12
    [3.3562][3.3562:3638]()
    Build(#[from] wax::BuildError),
    Walk(#[from] wax::walk::WalkError),
    [3.3562]
    [3.3638]
    Build(#[from] BuildError),
    Walk(#[from] WalkError),
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 15
    [3.3712][3.3712:3728]()
    NoMatches {
    [3.3712]
    [3.3728]
    NoMatchesInEntry {
  • edit in fluent_embed_derive/src/macro_impl/attribute.rs at line 19
    [3.3790]
    [3.3790]
    #[error("Glob did not match any valid files")]
    NoMatchesInGlob,
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 30
    [3.4078][3.4078:4287]()
    let glob = wax::Glob::new(&attribute_glob)?;
    for potential_entry in glob.walk(&manifest_root) {
    // TODO: this assumes that the locale is the first capture
    let entry = potential_entry?;
    [3.4078]
    [3.4287]
    let glob = Glob::new(&attribute_glob)?;
    let entries = glob
    .walk(&manifest_root)
    .collect::<Result<Vec<WalkEntry>, WalkError>>()?;
  • edit in fluent_embed_derive/src/macro_impl/attribute.rs at line 35
    [3.4288]
    [3.4288]
    // Emit all glob-related diagnostics
    for diagnostic in glob.diagnose() {
    eprintln!("{diagnostic:?}");
    }
    for entry in &entries {
    // TODO: this assumes that the locale is the first capture
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 45
    [3.4405][3.4405:4447]()
    return Err(Error::NoMatches {
    [3.4405]
    [3.4447]
    return Err(Error::NoMatchesInEntry {
  • replacement in fluent_embed_derive/src/macro_impl/attribute.rs at line 57
    [3.4938][3.4938:5010]()
    let previous_value = locales.insert(locale, entry.into_path());
    [3.4938]
    [3.5010]
    let previous_value = locales.insert(locale, entry.path().to_path_buf());
  • edit in fluent_embed_derive/src/macro_impl/attribute.rs at line 59
    [3.5053]
    [3.5053]
    }
    // Make sure there was at least one file matched
    if locales.is_empty() {
    return Err(Error::NoMatchesInGlob);
  • replacement in fluent_embed_derive/Cargo.toml at line 23
    [3.768][3.64:116]()
    wax = { git = "https://github.com/Finchiedev/wax" }
    [3.768]
    [3.238]
    wax = { version = "0.6.0", features = ["miette"] }
  • replacement in Cargo.lock at line 3
    [3.4369][3.4369:4381]()
    version = 3
    [3.4369]
    [3.13329]
    version = 4
  • replacement in Cargo.lock at line 85
    [3.1281][3.1281:1300]()
    version = "0.2.32"
    [3.1281]
    [3.1300]
    version = "0.2.34"
  • replacement in Cargo.lock at line 87
    [3.1365][3.1365:1443]()
    checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
    [3.1365]
    [3.1443]
    checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd"
  • replacement in Cargo.lock at line 94
    [3.1538][3.1538:1557]()
    version = "0.2.32"
    [3.1538]
    [3.1557]
    version = "0.2.34"
  • replacement in Cargo.lock at line 96
    [3.1622][3.1622:1700]()
    checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
    [3.1622]
    [3.1700]
    checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
  • replacement in Cargo.lock at line 229
    [3.5501][3.15009:15020](),[3.589][3.15009:15020]()
    "miette",
    [3.5501]
    [3.843]
    "miette 7.2.0",
  • edit in Cargo.lock at line 345
    [3.3694]
    [3.1986]
    ]
    [[package]]
    name = "gimli"
    version = "0.29.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
    [[package]]
    name = "glob"
    version = "0.3.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
    [[package]]
    name = "hashbrown"
    version = "0.14.5"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
    [[package]]
    name = "heck"
    version = "0.4.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
    dependencies = [
    "unicode-segmentation",
    ]
    [[package]]
    name = "icu_collections"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
    dependencies = [
    "displaydoc",
    "yoke",
    "zerofrom",
    "zerovec",
    ]
    [[package]]
    name = "icu_decimal"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fb8fd98f86ec0448d85e1edf8884e4e318bb2e121bd733ec929a05c0a5e8b0eb"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_decimal_data",
    "icu_locid_transform",
    "icu_provider",
    "writeable",
    ]
    [[package]]
    name = "icu_decimal_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "8d424c994071c6f5644f999925fc868c85fec82295326e75ad5017bc94b41523"
    [[package]]
    name = "icu_experimental"
    version = "0.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "844ad7b682a165c758065d694bc4d74ac67f176da1c499a04d85d492c0f193b7"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_collections",
    "icu_decimal",
    "icu_experimental_data",
    "icu_locid",
    "icu_locid_transform",
    "icu_normalizer",
    "icu_pattern",
    "icu_plurals",
    "icu_properties",
    "icu_provider",
    "litemap",
    "num-bigint",
    "num-rational",
    "num-traits",
    "smallvec",
    "tinystr",
    "writeable",
    "zerofrom",
    "zerotrie",
    "zerovec",
    ]
    [[package]]
    name = "icu_experimental_data"
    version = "0.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9c178b9a34083fca5bd70d61f647575335e9c197d0f30c38e8ccd187babc69d0"
    [[package]]
    name = "icu_locid"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
    dependencies = [
    "displaydoc",
    "litemap",
    "tinystr",
    "writeable",
    "zerovec",
    ]
    [[package]]
    name = "icu_locid_transform"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
    dependencies = [
    "displaydoc",
    "icu_locid",
    "icu_locid_transform_data",
    "icu_provider",
    "tinystr",
    "zerovec",
    ]
    [[package]]
    name = "icu_locid_transform_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
    [[package]]
    name = "icu_normalizer"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
    dependencies = [
    "displaydoc",
    "icu_collections",
    "icu_normalizer_data",
    "icu_properties",
    "icu_provider",
    "smallvec",
    "utf16_iter",
    "utf8_iter",
    "write16",
    "zerovec",
    ]
    [[package]]
    name = "icu_normalizer_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
    [[package]]
    name = "icu_pattern"
    version = "0.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4"
    dependencies = [
    "displaydoc",
    "either",
    "writeable",
    "yoke",
    "zerofrom",
    ]
    [[package]]
    name = "icu_plurals"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_locid_transform",
    "icu_plurals_data",
    "icu_provider",
    "zerovec",
    ]
    [[package]]
    name = "icu_plurals_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9e3e8f775b215d45838814a090a2227247a7431d74e9156407d9c37f6ef0f208"
    [[package]]
    name = "icu_properties"
    version = "1.5.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
    dependencies = [
    "displaydoc",
    "icu_collections",
    "icu_locid_transform",
    "icu_properties_data",
    "icu_provider",
    "tinystr",
    "zerovec",
    ]
    [[package]]
    name = "icu_properties_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
    [[package]]
    name = "icu_provider"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
    dependencies = [
    "displaydoc",
    "icu_locid",
    "icu_provider_macros",
    "stable_deref_trait",
    "tinystr",
    "writeable",
    "yoke",
    "zerofrom",
    "zerovec",
    ]
    [[package]]
    name = "icu_provider_macros"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn 2.0.71",
    ]
    [[package]]
    name = "indexmap"
    version = "2.2.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
    dependencies = [
    "equivalent",
    "hashbrown",
    ]
    [[package]]
    name = "is_ci"
    version = "1.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
    [[package]]
    name = "itertools"
    version = "0.11.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
    dependencies = [
    "either",
    ]
    [[package]]
    name = "jiff"
    version = "0.1.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0c33f2189d126c374d29641af39a0dc73daa1c8292403645575ce32e22e768a4"
    [[package]]
    name = "libc"
    version = "0.2.155"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
    [[package]]
    name = "linux-raw-sys"
    version = "0.4.14"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
    [[package]]
    name = "litemap"
    version = "0.7.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
    [[package]]
    name = "memchr"
    version = "2.7.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
    [[package]]
    name = "miette"
    version = "5.10.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e"
    dependencies = [
    "miette-derive 5.10.0",
    "once_cell",
    "thiserror",
    "unicode-width",
  • edit in Cargo.lock at line 649
    [3.4394]
    [3.16718]
    name = "miette"
    version = "7.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1"
    dependencies = [
    "backtrace",
    "backtrace-ext",
    "cfg-if",
    "miette-derive 7.2.0",
    "owo-colors",
    "supports-color",
    "supports-hyperlinks",
    "supports-unicode",
    "terminal_size",
    "textwrap",
    "thiserror",
    "unicode-width",
    ]
    [[package]]
    name = "miette-derive"
    version = "5.10.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn 2.0.71",
    ]
    [[package]]
    name = "miette-derive"
    version = "7.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn 2.0.71",
    ]
    [[package]]
    name = "minimal-lexical"
    version = "0.2.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
    [[package]]
    name = "miniz_oxide"
    version = "0.7.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
    dependencies = [
    "adler",
    ]
    [[package]]
    name = "nom"
    version = "7.1.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
    dependencies = [
    "memchr",
    "minimal-lexical",
    ]
    [[package]]
    name = "num-bigint"
    version = "0.4.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
    dependencies = [
    "num-integer",
    "num-traits",
    ]
    [[package]]
    name = "num-integer"
    version = "0.1.46"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
    dependencies = [
    "num-traits",
    ]
    [[package]]
    name = "num-rational"
    version = "0.4.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
    dependencies = [
    "num-bigint",
    "num-integer",
    "num-traits",
    ]
    [[package]]
    name = "num-traits"
    version = "0.2.19"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
    dependencies = [
    "autocfg",
    ]
    [[package]]
    name = "object"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce"
    dependencies = [
    "memchr",
    ]
    [[package]]
    name = "once_cell"
    version = "1.20.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
    [[package]]
  • edit in Cargo.lock at line 1122
    [3.2283]
    [3.18218]
    name = "tardar"
    version = "0.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "900c942f83b6a8b9998cc8f74ad3ffa24b7ff3c4279ea1c1c52d95dced9f3516"
    dependencies = [
    "miette 5.10.0",
    "vec1",
    ]
    [[package]]
  • replacement in Cargo.lock at line 1225
    [3.4023][3.4023:4041]()
    version = "0.2.4"
    [3.4023]
    [3.4041]
    version = "0.2.6"
  • replacement in Cargo.lock at line 1227
    [3.4106][3.4106:4184]()
    checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
    [3.4106]
    [3.12206]
    checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
  • edit in Cargo.lock at line 1242
    [3.3557]
    [3.3557]
    name = "vec1"
    version = "1.12.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322"
    [[package]]
  • replacement in Cargo.lock at line 1272
    [3.4468][3.367:457]()
    source = "git+https://github.com/Finchiedev/wax#0f96f50433e90e5ae01a29c84b6be9852c5c1d59"
    [3.4468]
    [3.4611]
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357"
  • edit in Cargo.lock at line 1277
    [3.4659]
    [3.4659]
    "miette 5.10.0",
  • edit in Cargo.lock at line 1281
    [3.4686]
    [3.4686]
    "tardar",
  • replacement in Cargo.lock at line 1288
    [2.2127][2.2127:2145]()
    version = "0.1.8"
    [2.2127]
    [2.2145]
    version = "0.1.9"
  • replacement in Cargo.lock at line 1290
    [2.2210][2.2210:2288]()
    checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
    [2.2210]
    [2.2288]
    checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
  • edit in Cargo.lock at line 1614
    [3.3789][3.6967:6969](),[3.13800][3.6967:6969](),[3.6967][3.6967:6969](),[3.4394][3.15021:15211](),[3.15211][3.3356:3738](),[3.3738][3.1989:2206](),[3.15211][3.1989:2206](),[3.4394][3.1989:2206](),[3.2206][3.5414:6004]()
    ]
    name = "gimli"
    version = "0.29.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
    [[package]]
    name = "glob"
    version = "0.3.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
    [[package]]
    name = "hashbrown"
    version = "0.14.5"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
    [[package]]
    name = "heck"
    version = "0.4.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
    dependencies = [
    "unicode-segmentation",
    ]
    [[package]]
    name = "icu_collections"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
    dependencies = [
    "displaydoc",
    "yoke",
    "zerofrom",
    "zerovec",
    ]
    [[package]]
    name = "icu_decimal"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fb8fd98f86ec0448d85e1edf8884e4e318bb2e121bd733ec929a05c0a5e8b0eb"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_decimal_data",
    "icu_locid_transform",
    "icu_provider",
    "writeable",
  • resolve order conflict in Cargo.lock at line 1614
    [3.13800]
    [3.1734]
  • edit in Cargo.lock at line 1615
    [3.1736][3.1736:1749](),[3.1749][3.6005:6985](),[3.6985][3.1749:1768](),[3.1749][3.1749:1768](),[3.1768][3.6986:7004](),[3.7004][3.1786:1851](),[3.1786][3.1786:1851](),[3.1851][3.7005:7083](),[3.7083][3.1929:2055](),[3.1929][3.1929:2055](),[3.2055][3.7084:7102](),[3.7102][3.2073:2138](),[3.2073][3.2073:2138](),[3.2138][3.7103:7181](),[3.7181][3.2216:2381](),[3.2216][3.2216:2381](),[3.2381][3.7182:7976](),[3.7976][3.2399:2464](),[3.2399][3.2399:2464](),[3.2464][3.7977:8136](),[3.8136][3.2542:2555](),[3.2542][3.2542:2555](),[3.2555][3.2555:2576](),[3.2576][3.8137:8155](),[3.8155][3.2594:2659](),[3.2594][3.2594:2659](),[3.2659][3.8156:8234](),[3.8234][3.2737:2787](),[3.2737][3.2737:2787](),[3.2801][3.2801:2916](),[3.2916][3.8235:8253](),[3.8253][3.2934:2999](),[3.2934][3.2934:2999](),[3.2999][3.8254:8876](),[3.8876][3.3077:3112](),[3.3077][3.3077:3112](),[3.3112][3.8877:8895](),[3.8895][3.3130:3195](),[3.3130][3.3130:3195](),[3.3195][3.8896:8974](),[3.8974][3.3273:3426](),[3.3273][3.3273:3426](),[3.3426][3.2206:2221](),[3.2206][3.2206:2221](),[3.2221][3.3427:3456](),[3.3456][3.8975:8993](),[3.8993][3.3474:3539](),[3.3474][3.3474:3539](),[3.3539][3.8994:9072](),[3.9072][3.3617:3660](),[3.3617][3.3617:3660](),[3.3660][3.9073:9088](),[3.9088][3.3739:3979](),[3.2449][3.1961:1963](),[3.3979][3.1961:1963](),[3.9088][3.1961:1963](),[3.3668][3.1961:1963](),[3.1963][3.15212:15401](),[3.15401][3.1963:2185](),[3.1963][3.1963:2185](),[3.2185][3.3668:3670](),[3.3668][3.3668:3670](),[3.3670][3.9089:9277](),[3.1056][3.19:46](),[3.3670][3.19:46](),[3.46][3.9278:9298](),[3.9298][3.66:131](),[3.66][3.66:131](),[3.131][3.9299:9377](),[3.9377][3.15402:15600](),[3.209][3.15402:15600](),[3.209][3.3670:3683](),[3.15600][3.3670:3683](),[3.3670][3.3670:3683](),[3.3683][3.3683:3700](),[3.3700][3.9378:9396](),[3.9396][3.3718:3783](),[3.3718][3.3718:3783](),[3.3783][3.9397:9475](),[3.9475][3.1057:1070](),[3.3861][3.1057:1070](),[3.5744][3.2199:2215](),[3.2199][3.2199:2215](),[3.2215][3.9476:9494](),[3.9494][3.2233:2298](),[3.2233][3.2233:2298](),[3.2298][3.9495:9573](),[3.9573][3.2376:2389](),[3.2376][3.2376:2389](),[3.2389][3.15601:15838](),[3.15838][3.15838:15856](),[3.15856][3.15856:15998](),[3.15998][3.15998:16240](),[3.16240][3.9574:9589](),[3.9589][3.16255:16270](),[3.16255][3.16255:16270](),[3.16270][3.2389:2575](),[3.2389][3.2389:2575](),[3.2575][3.16271:16495](),[3.16495][3.2575:2810](),[3.2575][3.2575:2810](),[3.2810][3.9590:10551](),[3.10551][3.1579:1594](),[3.2810][3.1579:1594](),[3.3874][3.16496:16512](),[3.16512][3.10552:10571](),[3.10571][3.16531:16596](),[3.16531][3.16531:16596](),[3.16596][3.10572:10650](),[3.10650][3.16674:16717](),[3.16674][3.16674:16717]()
    [[package]]
    name = "icu_decimal_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "8d424c994071c6f5644f999925fc868c85fec82295326e75ad5017bc94b41523"
    [[package]]
    name = "icu_experimental"
    version = "0.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "844ad7b682a165c758065d694bc4d74ac67f176da1c499a04d85d492c0f193b7"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_collections",
    "icu_decimal",
    "icu_experimental_data",
    "icu_locid",
    "icu_locid_transform",
    "icu_normalizer",
    "icu_pattern",
    "icu_plurals",
    "icu_properties",
    "icu_provider",
    "litemap",
    "num-bigint",
    "num-rational",
    "num-traits",
    "smallvec",
    "tinystr",
    "writeable",
    "zerofrom",
    "zerotrie",
    "zerovec",
    ]
    [[package]]
    name = "icu_experimental_data"
    version = "0.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9c178b9a34083fca5bd70d61f647575335e9c197d0f30c38e8ccd187babc69d0"
    [[package]]
    name = "icu_locid"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
    dependencies = [
    "displaydoc",
    "litemap",
    "tinystr",
    "writeable",
    "zerovec",
    ]
    [[package]]
    name = "icu_locid_transform"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
    dependencies = [
    "displaydoc",
    "icu_locid",
    "icu_locid_transform_data",
    "icu_provider",
    "tinystr",
    "zerovec",
    ]
    [[package]]
    name = "icu_locid_transform_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
    [[package]]
    name = "icu_normalizer"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
    dependencies = [
    "displaydoc",
    "icu_collections",
    "icu_normalizer_data",
    "icu_properties",
    "icu_provider",
    "smallvec",
    "utf16_iter",
    "utf8_iter",
    "write16",
    "zerovec",
    ]
    [[package]]
    name = "icu_normalizer_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
    [[package]]
    name = "icu_pattern"
    version = "0.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4"
    dependencies = [
    "displaydoc",
    "either",
    "writeable",
    "yoke",
    "zerofrom",
    ]
    [[package]]
    name = "icu_plurals"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114"
    dependencies = [
    "displaydoc",
    "fixed_decimal",
    "icu_locid_transform",
    "icu_plurals_data",
    "icu_provider",
    "zerovec",
    ]
    [[package]]
    name = "icu_plurals_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9e3e8f775b215d45838814a090a2227247a7431d74e9156407d9c37f6ef0f208"
    [[package]]
    name = "icu_properties"
    version = "1.5.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
    dependencies = [
    "displaydoc",
    "icu_collections",
    "icu_locid_transform",
    "icu_properties_data",
    "icu_provider",
    "tinystr",
    "zerovec",
    ]
    [[package]]
    name = "icu_properties_data"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
    [[package]]
    name = "icu_provider"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
    dependencies = [
    "displaydoc",
    "icu_locid",
    "icu_provider_macros",
    "stable_deref_trait",
    "tinystr",
    "writeable",
    "yoke",
    "zerofrom",
    "zerovec",
    ]
    [[package]]
    name = "icu_provider_macros"
    version = "1.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn 2.0.71",
    ]
    [[package]]
    name = "indexmap"
    version = "2.2.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
    dependencies = [
    "equivalent",
    "hashbrown",
    ]
    [[package]]
    name = "is_ci"
    version = "1.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
    [[package]]
    name = "itertools"
    version = "0.11.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
    dependencies = [
    "either",
    ]
    [[package]]
    name = "jiff"
    version = "0.1.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0c33f2189d126c374d29641af39a0dc73daa1c8292403645575ce32e22e768a4"
    [[package]]
    name = "libc"
    version = "0.2.155"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
    [[package]]
    name = "linux-raw-sys"
    version = "0.4.14"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
    [[package]]
    name = "litemap"
    version = "0.7.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
    [[package]]
    name = "memchr"
    version = "2.7.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
    [[package]]
    name = "miette"
    version = "7.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1"
    dependencies = [
    "backtrace",
    "backtrace-ext",
    "cfg-if",
    "miette-derive",
    "owo-colors",
    "supports-color",
    "supports-hyperlinks",
    "supports-unicode",
    "terminal_size",
    "textwrap",
    "thiserror",
    "unicode-width",
    ]
    [[package]]
    name = "miette-derive"
    version = "7.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn 2.0.71",
    ]
    [[package]]
    name = "minimal-lexical"
    version = "0.2.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
    [[package]]
    name = "miniz_oxide"
    version = "0.7.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
    dependencies = [
    "adler",
    ]
    [[package]]
    name = "nom"
    version = "7.1.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
    dependencies = [
    "memchr",
    "minimal-lexical",
    ]
    [[package]]
    name = "num-bigint"
    version = "0.4.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
    dependencies = [
    "num-integer",
    "num-traits",
    ]
    [[package]]
    name = "num-integer"
    version = "0.1.46"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
    dependencies = [
    "num-traits",
    ]
    [[package]]
    name = "num-rational"
    version = "0.4.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
    dependencies = [
    "num-bigint",
    "num-integer",
    "num-traits",
    ]
    [[package]]
    name = "num-traits"
    version = "0.2.19"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
    dependencies = [
    "autocfg",
    ]
    [[package]]
    name = "object"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce"
    dependencies = [
    "memchr",
    ]
    [[package]]