Add relative timestamps using `jiff` and `icu_relativetime`

finchie
Jul 29, 2024, 8:29 PM
BFL2Y7GN6NBXXNAUSD4M6T6CIVQ2OLERPE2CAFSLRF377WFFTVCQC

Dependencies

  • [2] HHJDRLLN Create `fluent_embed_runtime` crate
  • [3] O77KA6C4 Create `fluent_embed` crate
  • [4] JZXXFWQK Add tests for `locale_select` backends on unix
  • [5] ROSR4HD5 Parse captured glob as locale
  • [6] VNSHGQYN Support using glob paths in `localize` macro
  • [7] 56F2YE6H Use `prettyplease` to format macro output
  • [8] VZYZRAO4 Move `output-macros` crate into workspace
  • [9] YNEOCYMG Create `locale-select` crate
  • [10] HCGVXOF7 Add language negotiation using `fluent-langneg`
  • [11] WBI5HFOB Add simple wrapper for `libc::settext()` to query system locale
  • [12] V5S5K33A Add basic error handling for invalid paths in proc_macro attribute
  • [13] RLX6XPNZ Return an error when user provides an exact path
  • [14] F5LG7WEN Emit compilation errors from Fluent source code
  • [15] UKFEFT6L Create basic `Output` proc-macro
  • [16] NO3PDO7P Refactor `fluent_embed` to support structs
  • [17] SHNZZSZG Create `cli_macros` shim crate

Change contents

  • replacement in locale_select/Cargo.toml at line 11
    [3.1654][3.5534:5554](),[3.5534][3.5534:5554]()
    icu_locid = "1.4.0"
    [3.1654]
    [3.247]
    icu_locid = "1.5.0"
  • file addition: time.rs (----------)
    [2.49]
    use fixed_decimal::{FixedDecimal, FloatPrecision};
    use icu_experimental::relativetime::{
    options::Numeric, RelativeTimeFormatter, RelativeTimeFormatterOptions,
    };
    use icu_locid::{langid, LanguageIdentifier};
    use icu_provider::DataLocale;
    use jiff::{tz::TimeZone, SpanRound, Timestamp, Unit};
    /// Allow the formatter to use non-numeric output (e.g. "tomorrow", "yesterday")
    const FORMATTER_OPTIONS: RelativeTimeFormatterOptions = RelativeTimeFormatterOptions {
    numeric: Numeric::Auto,
    };
    /// The locale to fall back to
    pub const DEFAULT_LOCALE: LanguageIdentifier = langid!("en-US");
    /// A time relative to the system clock (either past or future)
    pub struct RelativeTime(Timestamp);
    impl RelativeTime {
    pub fn new(timestamp: Timestamp) -> Self {
    Self(timestamp)
    }
    }
    impl crate::Localize for RelativeTime {
    const CANONICAL_LOCALE: LanguageIdentifier = DEFAULT_LOCALE;
    fn localize(&self) -> String {
    // Get the current time
    let current_timestamp = Timestamp::now();
    let current_datetime = current_timestamp.to_zoned(TimeZone::UTC).datetime();
    // Calculate the difference, rounded to the largest unit
    let unformatted_span = current_timestamp
    .since(self.0)
    .unwrap()
    // Make sure the span is rounded to the largest available unit
    .round(
    SpanRound::new()
    .largest(Unit::Year)
    .relative(current_datetime),
    )
    .unwrap();
    // Find the largest "component": year, month, week etc
    let units: [(Unit, i64); 7] = [
    (Unit::Year, unformatted_span.get_years() as i64),
    (Unit::Month, unformatted_span.get_months() as i64),
    (Unit::Week, unformatted_span.get_weeks() as i64),
    (Unit::Day, unformatted_span.get_days() as i64),
    (Unit::Hour, unformatted_span.get_hours() as i64),
    (Unit::Minute, unformatted_span.get_minutes()),
    (Unit::Second, unformatted_span.get_seconds()),
    ];
    // Use the largest non-zero unit
    let selected_unit = units
    .iter()
    .find(|(_unit, value)| value.abs() > 0)
    .map(|(unit, _value)| *unit)
    .unwrap_or(Unit::Second);
    // Round the span to that selected unit
    let rounding_options = SpanRound::new()
    .smallest(selected_unit)
    .largest(selected_unit)
    .relative(current_datetime);
    let formatted_span = current_timestamp
    .since(self.0)
    .unwrap()
    .round(rounding_options)
    .unwrap();
    // We can finally get the actual rounded value
    let selected_value = match selected_unit {
    Unit::Year => formatted_span.get_years() as i64,
    Unit::Month => formatted_span.get_months() as i64,
    Unit::Week => formatted_span.get_weeks() as i64,
    Unit::Day => formatted_span.get_days() as i64,
    Unit::Hour => formatted_span.get_hours() as i64,
    Unit::Minute => formatted_span.get_minutes(),
    Unit::Second => formatted_span.get_seconds(),
    _ => unreachable!(),
    };
    // Select which formatter to use
    let locale = DataLocale::from(&Self::CANONICAL_LOCALE);
    let formatter = match selected_unit {
    Unit::Year => RelativeTimeFormatter::try_new_long_year(&locale, FORMATTER_OPTIONS),
    Unit::Month => RelativeTimeFormatter::try_new_long_month(&locale, FORMATTER_OPTIONS),
    Unit::Week => RelativeTimeFormatter::try_new_long_week(&locale, FORMATTER_OPTIONS),
    Unit::Day => RelativeTimeFormatter::try_new_long_day(&locale, FORMATTER_OPTIONS),
    Unit::Hour => RelativeTimeFormatter::try_new_long_hour(&locale, FORMATTER_OPTIONS),
    Unit::Minute => RelativeTimeFormatter::try_new_long_minute(&locale, FORMATTER_OPTIONS),
    Unit::Second => RelativeTimeFormatter::try_new_long_second(&locale, FORMATTER_OPTIONS),
    _ => unreachable!(),
    }
    .unwrap();
    let decimal =
    FixedDecimal::try_from_f64(selected_value as f64, FloatPrecision::Integer).unwrap();
    formatter.format(decimal).to_string()
    }
    }
  • edit in fluent_embed_runtime/src/lib.rs at line 8
    [2.405]
    [2.405]
    pub mod time;
  • replacement in fluent_embed_runtime/Cargo.toml at line 10
    [2.1196][2.1196:1261]()
    icu_locid = "1.4.0"
    icu_plurals = "1.4.0"
    icu_provider = "1.4.0"
    [2.1196]
    [2.1261]
    fixed_decimal = { version = "0.5.6", features = ["ryu"] }
    icu_experimental = "0.1.0"
    icu_locid = "1.5.0"
    icu_plurals = "1.5.0"
    icu_provider = "1.5.0"
    jiff = { version = "0.1.2", default-features = false, features = ["std"] }
  • replacement in fluent_embed/Cargo.toml at line 12
    [3.1488][3.554:574]()
    icu_locid = "1.4.0"
    [3.1488]
    [3.9127]
    icu_locid = "1.5.0"
  • replacement in Cargo.lock at line 22
    [3.1039][3.1039:1057]()
    version = "1.1.2"
    [3.1039]
    [3.1057]
    version = "1.1.3"
  • replacement in Cargo.lock at line 24
    [3.1122][3.1122:1200]()
    checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
    [3.1122]
    [3.1200]
    checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
  • edit in Cargo.lock at line 30
    [3.13756]
    [3.13756]
    name = "autocfg"
    version = "1.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
    [[package]]
  • replacement in Cargo.lock at line 73
    [3.214][3.214:234]()
    version = "1.0.101"
    [3.214]
    [3.234]
    version = "1.1.1"
  • replacement in Cargo.lock at line 75
    [3.299][3.299:377]()
    checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d"
    [3.299]
    [3.14466]
    checksum = "907d8581360765417f8f2e0e7d602733bbed60156b4465b7617243689ef9b83d"
  • replacement in Cargo.lock at line 93
    [3.1218][3.2378:2393]()
    "syn 2.0.48",
    [3.1218]
    [3.2393]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 119
    [3.1261][3.1261:1279]()
    version = "0.2.4"
    [3.1261]
    [3.1279]
    version = "0.2.5"
  • replacement in Cargo.lock at line 121
    [3.1344][3.1344:1422]()
    checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
    [3.1344]
    [3.1422]
    checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
  • replacement in Cargo.lock at line 125
    [3.1465][3.2402:2417]()
    "syn 2.0.48",
    [3.1465]
    [3.1473]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 146
    [3.1511][3.1511:1529]()
    version = "0.5.5"
    [3.1511]
    [3.1529]
    version = "0.5.6"
  • replacement in Cargo.lock at line 148
    [3.1594][3.1594:1672]()
    checksum = "cbc7fdec9d7f6671a3ebb3282c969962aba67c49f6abac5311959b65cafabc10"
    [3.1594]
    [3.1672]
    checksum = "0febbeb1118a9ecdee6e4520ead6b54882e843dd0592ad233247dbee84c53db8"
  • edit in Cargo.lock at line 151
    [3.1704]
    [3.1704]
    "ryu",
  • replacement in Cargo.lock at line 158
    [3.1679][3.1679:1698]()
    version = "0.14.0"
    [3.1679]
    [3.1698]
    version = "0.14.1"
  • replacement in Cargo.lock at line 160
    [3.1763][3.1763:1841]()
    checksum = "0a56f2b85e609878e71a22e16b2a8c5b9de24c3d5a1c780536f3800a6a114b07"
    [3.1763]
    [3.1841]
    checksum = "e7b2da3cb6583f7e5f98d3e0e1f9ff70451398037445c8e89a0dc51594cf1736"
  • replacement in Cargo.lock at line 186
    [3.1978][3.2418:2433]()
    "syn 2.0.48",
    [3.1978]
    [3.1760]
    "syn 2.0.71",
  • edit in Cargo.lock at line 195
    [2.2898]
    [2.2898]
    "fixed_decimal",
    "icu_experimental",
  • edit in Cargo.lock at line 200
    [2.2945]
    [2.2945]
    "jiff",
  • edit in Cargo.lock at line 237
    [3.2206]
    [3.1734]
    ]
    [[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",
  • edit in Cargo.lock at line 266
    [3.1749]
    [3.1749]
    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]]
  • replacement in Cargo.lock at line 309
    [3.1768][3.1768:1786]()
    version = "1.4.0"
    [3.1768]
    [3.1786]
    version = "1.5.0"
  • replacement in Cargo.lock at line 311
    [3.1851][3.1851:1929]()
    checksum = "5c0aa2536adc14c07e2a521e95512b75ed8ef832f0fdf9299d4a0a45d2be2a9d"
    [3.1851]
    [3.1929]
    checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
  • replacement in Cargo.lock at line 322
    [3.2055][3.2055:2073]()
    version = "1.4.0"
    [3.2055]
    [3.2073]
    version = "1.5.0"
  • replacement in Cargo.lock at line 324
    [3.2138][3.2138:2216]()
    checksum = "57c17d8f6524fdca4471101dd71f0a132eb6382b5d6d7f2970441cb25f6f435a"
    [3.2138]
    [3.2216]
    checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
  • replacement in Cargo.lock at line 336
    [3.2381][3.2381:2399]()
    version = "1.4.0"
    [3.2381]
    [3.2399]
    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"
  • replacement in Cargo.lock at line 368
    [3.2464][3.2464:2542]()
    checksum = "545c6c3e8bf9580e2dafee8de6f9ec14826aaf359787789c7724f1f85f47d3dc"
    [3.2464]
    [3.2542]
    checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4"
    dependencies = [
    "displaydoc",
    "either",
    "writeable",
    "yoke",
    "zerofrom",
    ]
  • replacement in Cargo.lock at line 379
    [3.2576][3.2576:2594]()
    version = "1.4.0"
    [3.2576]
    [3.2594]
    version = "1.5.0"
  • replacement in Cargo.lock at line 381
    [3.2659][3.2659:2737]()
    checksum = "37d807b123eb2a9ae8f12080fb8cce479f5c8a761fba0bb5ab52da6dd5e31a03"
    [3.2659]
    [3.2737]
    checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114"
  • edit in Cargo.lock at line 385
    [3.2787][3.2787:2801]()
    "icu_locid",
  • replacement in Cargo.lock at line 393
    [3.2916][3.2916:2934]()
    version = "1.4.0"
    [3.2916]
    [3.2934]
    version = "1.5.0"
  • replacement in Cargo.lock at line 395
    [3.2999][3.2999:3077]()
    checksum = "c3acd5f1f2f988ed2dae9316c3d3560dfe4e03a7516d142b4b89b92252ada41a"
    [3.2999]
    [3.3077]
    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"
  • replacement in Cargo.lock at line 420
    [3.3112][3.3112:3130]()
    version = "1.4.0"
    [3.3112]
    [3.3130]
    version = "1.5.0"
  • replacement in Cargo.lock at line 422
    [3.3195][3.3195:3273]()
    checksum = "ba58e782287eb6950247abbf11719f83f5d4e4a5c1f2cd490d30a334bc47c2f4"
    [3.3195]
    [3.3273]
    checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
  • replacement in Cargo.lock at line 437
    [3.3456][3.3456:3474]()
    version = "1.4.0"
    [3.3456]
    [3.3474]
    version = "1.5.0"
  • replacement in Cargo.lock at line 439
    [3.3539][3.3539:3617]()
    checksum = "d2abdd3a62551e8337af119c5899e600ca0c88ec8f23a46c60ba216c803dcf1a"
    [3.3539]
    [3.3617]
    checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
  • replacement in Cargo.lock at line 443
    [3.3660][3.2434:2449]()
    "syn 2.0.48",
    [3.3660]
    [3.1961]
    "syn 2.0.71",
  • edit in Cargo.lock at line 460
    [3.3670]
    [3.861]
    [[package]]
    name = "jiff"
    version = "0.1.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0c33f2189d126c374d29641af39a0dc73daa1c8292403645575ce32e22e768a4"
  • replacement in Cargo.lock at line 475
    [3.46][3.46:66]()
    version = "0.2.153"
    [3.46]
    [3.66]
    version = "0.2.155"
  • replacement in Cargo.lock at line 477
    [3.131][3.131:209]()
    checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
    [3.131]
    [3.15402]
    checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
  • replacement in Cargo.lock at line 487
    [3.3700][3.3700:3718]()
    version = "0.7.2"
    [3.3700]
    [3.3718]
    version = "0.7.3"
  • replacement in Cargo.lock at line 489
    [3.3783][3.3783:3861]()
    checksum = "f9d642685b028806386b2b6e75685faadd3eb65a85fff7df711ce18446a422da"
    [3.3783]
    [3.1057]
    checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
  • replacement in Cargo.lock at line 525
    [3.2215][3.2215:2233]()
    version = "2.7.1"
    [3.2215]
    [3.2233]
    version = "2.7.4"
  • replacement in Cargo.lock at line 527
    [3.2298][3.2298:2376]()
    checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
    [3.2298]
    [3.2376]
    checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
  • replacement in Cargo.lock at line 557
    [3.16240][3.16240:16255]()
    "syn 2.0.48",
    [3.16240]
    [3.16255]
    "syn 2.0.71",
  • edit in Cargo.lock at line 583
    [3.2810]
    [3.1579]
    ]
    [[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",
  • replacement in Cargo.lock at line 655
    [3.16512][3.16512:16531]()
    version = "0.36.0"
    [3.16512]
    [3.16531]
    version = "0.36.1"
  • replacement in Cargo.lock at line 657
    [3.16596][3.16596:16674]()
    checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434"
    [3.16596]
    [3.16674]
    checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce"
  • replacement in Cargo.lock at line 668
    [3.4478][3.2450:2465]()
    "syn 2.0.48",
    [3.4478]
    [3.4486]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 688
    [3.323][3.323:342]()
    version = "0.2.16"
    [3.323]
    [3.342]
    version = "0.2.20"
  • replacement in Cargo.lock at line 690
    [3.407][3.407:485]()
    checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5"
    [3.407]
    [3.485]
    checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
  • replacement in Cargo.lock at line 693
    [3.518][3.2466:2481]()
    "syn 2.0.48",
    [3.518]
    [3.2481]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 722
    [3.4522][3.4522:4541]()
    version = "1.0.78"
    [3.4522]
    [3.4541]
    version = "1.0.86"
  • replacement in Cargo.lock at line 724
    [3.4606][3.4606:4684]()
    checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
    [3.4606]
    [3.4684]
    checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
  • replacement in Cargo.lock at line 731
    [3.4749][3.4749:4768]()
    version = "1.0.35"
    [3.4749]
    [3.4768]
    version = "1.0.36"
  • replacement in Cargo.lock at line 733
    [3.4833][3.4833:4911]()
    checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
    [3.4833]
    [3.4911]
    checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
  • replacement in Cargo.lock at line 740
    [3.3059][3.3059:3078]()
    version = "1.10.3"
    [3.3059]
    [3.3078]
    version = "1.10.5"
  • replacement in Cargo.lock at line 742
    [3.3143][3.3143:3221]()
    checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
    [3.3143]
    [3.3221]
    checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
  • replacement in Cargo.lock at line 752
    [3.3341][3.3341:3359]()
    version = "0.4.5"
    [3.3341]
    [3.3359]
    version = "0.4.7"
  • replacement in Cargo.lock at line 754
    [3.3424][3.3424:3502]()
    checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
    [3.3424]
    [3.3502]
    checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
  • replacement in Cargo.lock at line 763
    [3.3601][3.3601:3619]()
    version = "0.8.2"
    [3.3601]
    [3.3619]
    version = "0.8.4"
  • replacement in Cargo.lock at line 765
    [3.3684][3.3684:3762]()
    checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
    [3.3684]
    [3.16913]
    checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
  • edit in Cargo.lock at line 785
    [3.17396]
    [3.3762]
    [[package]]
    name = "ryu"
    version = "1.0.18"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
  • replacement in Cargo.lock at line 803
    [3.3890][3.3890:3910]()
    version = "1.0.196"
    [3.3890]
    [3.3910]
    version = "1.0.204"
  • replacement in Cargo.lock at line 805
    [3.3975][3.3975:4053]()
    checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
    [3.3975]
    [3.4053]
    checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
  • replacement in Cargo.lock at line 812
    [3.4124][3.4124:4144]()
    version = "1.0.196"
    [3.4124]
    [3.4144]
    version = "1.0.204"
  • replacement in Cargo.lock at line 814
    [3.4209][3.4209:4287]()
    checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
    [3.4209]
    [3.4287]
    checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
  • replacement in Cargo.lock at line 818
    [3.4330][3.3055:3070]()
    "syn 2.0.48",
    [3.4330]
    [3.4338]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 872
    [3.3313][3.4972:4991](),[3.4972][3.4972:4991]()
    version = "2.0.48"
    [3.3313]
    [3.4991]
    version = "2.0.71"
  • replacement in Cargo.lock at line 874
    [3.5056][3.5056:5134]()
    checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
    [3.5056]
    [3.5134]
    checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462"
  • replacement in Cargo.lock at line 889
    [3.4991][3.3314:3329]()
    "syn 2.0.48",
    [3.4991]
    [3.2222]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 921
    [3.2256][3.3330:3349]()
    version = "1.0.61"
    [3.2256]
    [3.2275]
    version = "1.0.62"
  • replacement in Cargo.lock at line 923
    [3.2340][3.3350:3428]()
    checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
    [3.2340]
    [3.2418]
    checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb"
  • replacement in Cargo.lock at line 930
    [3.2479][3.3429:3448]()
    version = "1.0.61"
    [3.2479]
    [3.2498]
    version = "1.0.62"
  • replacement in Cargo.lock at line 932
    [3.2563][3.3449:3527]()
    checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
    [3.2563]
    [3.2641]
    checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c"
  • replacement in Cargo.lock at line 936
    [3.2684][3.3528:3543]()
    "syn 2.0.48",
    [3.2684]
    [3.2692]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 941
    [3.5017][3.5017:5035]()
    version = "0.7.5"
    [3.5017]
    [3.5035]
    version = "0.7.6"
  • replacement in Cargo.lock at line 943
    [3.5100][3.5100:5178]()
    checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
    [3.5100]
    [3.5178]
    checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
  • replacement in Cargo.lock at line 963
    [3.2751][3.2751:2770]()
    version = "1.10.1"
    [3.2751]
    [3.2770]
    version = "1.11.0"
  • replacement in Cargo.lock at line 965
    [3.2835][3.2835:2913]()
    checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
    [3.2835]
    [3.18933]
    checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
  • edit in Cargo.lock at line 978
    [3.4184]
    [3.3544]
    [[package]]
    name = "utf16_iter"
    version = "1.0.5"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
    [[package]]
    name = "utf8_iter"
    version = "1.0.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
  • edit in Cargo.lock at line 1190
    [3.23570]
    [3.23570]
    [[package]]
    name = "write16"
    version = "1.0.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
  • replacement in Cargo.lock at line 1199
    [3.5270][3.5270:5288]()
    version = "0.5.4"
    [3.5270]
    [3.5288]
    version = "0.5.5"
  • replacement in Cargo.lock at line 1201
    [3.5353][3.5353:5431]()
    checksum = "dad7bb64b8ef9c0aa27b6da38b452b0ee9fd82beaf276a87dd796fb55cbae14e"
    [3.5353]
    [3.5431]
    checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
    dependencies = [
    "either",
    ]
  • replacement in Cargo.lock at line 1208
    [3.5458][3.5458:5476]()
    version = "0.7.3"
    [3.5458]
    [3.5476]
    version = "0.7.4"
  • replacement in Cargo.lock at line 1210
    [3.5541][3.5541:5619]()
    checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4"
    [3.5541]
    [3.5619]
    checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
  • replacement in Cargo.lock at line 1220
    [3.5734][3.5734:5752]()
    version = "0.7.3"
    [3.5734]
    [3.5752]
    version = "0.7.4"
  • replacement in Cargo.lock at line 1222
    [3.5817][3.5817:5895]()
    checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8"
    [3.5817]
    [3.5895]
    checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
  • replacement in Cargo.lock at line 1226
    [3.5938][3.3742:3757]()
    "syn 2.0.48",
    [3.5938]
    [3.5946]
    "syn 2.0.71",
  • replacement in Cargo.lock at line 1232
    [3.5996][3.5996:6014]()
    version = "0.1.3"
    [3.5996]
    [3.6014]
    version = "0.1.4"
  • replacement in Cargo.lock at line 1234
    [3.6079][3.6079:6157]()
    checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7"
    [3.6079]
    [3.6157]
    checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
  • replacement in Cargo.lock at line 1241
    [3.6234][3.6234:6252]()
    version = "0.1.3"
    [3.6234]
    [3.6252]
    version = "0.1.4"
  • replacement in Cargo.lock at line 1243
    [3.6317][3.6317:6395]()
    checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3"
    [3.6317]
    [3.6395]
    checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
  • replacement in Cargo.lock at line 1247
    [3.6438][3.3758:3773]()
    "syn 2.0.48",
    [3.6438]
    [3.6446]
    "syn 2.0.71",
  • edit in Cargo.lock at line 1249
    [3.6463]
    [3.6463]
    ]
    [[package]]
    name = "zerotrie"
    version = "0.1.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fb594dd55d87335c5f60177cee24f19457a5ec10a065e0a3014722ad252d0a1f"
    dependencies = [
    "displaydoc",
    "yoke",
    "zerofrom",
  • replacement in Cargo.lock at line 1264
    [3.6495][3.6495:6514]()
    version = "0.10.1"
    [3.6495]
    [3.6514]
    version = "0.10.4"
  • replacement in Cargo.lock at line 1266
    [3.6579][3.6579:6657]()
    checksum = "eff4439ae91fb5c72b8abc12f3f2dbf51bd27e6eadb9f8a5bc8898dddb0e27ea"
    [3.6579]
    [3.6657]
    checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
  • replacement in Cargo.lock at line 1275
    [3.6754][3.6754:6773]()
    version = "0.10.1"
    [3.6754]
    [3.6773]
    version = "0.10.3"
  • replacement in Cargo.lock at line 1277
    [3.6838][3.6838:6916]()
    checksum = "7b4e5997cbf58990550ef1f0e5124a05e47e1ebd33a84af25739be6031a62c20"
    [3.6838]
    [3.6916]
    checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
  • replacement in Cargo.lock at line 1281
    [3.6959][3.3774:3789]()
    "syn 2.0.48",
    [3.6959]
    [3.6967]
    "syn 2.0.71",