Sign In

jiff

Package Overview
Dependencies
Maintainers
1
Versions
67
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jiff - cargo Package Compare versions

Comparing version
0.2.28
to
0.2.29
+1
-1
.cargo_vcs_info.json
{
"git": {
"sha1": "66f6ec2d0b75112deadf7e067dbf2ef114d41c50"
"sha1": "bdb1138fc92221109029ac098c5fc21de4b9488a"
},
"path_in_vcs": ""
}
+287
-327

@@ -25,23 +25,29 @@ # This file is automatically @generated by Cargo.

name = "anyhow"
version = "1.0.102"
version = "1.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]]
name = "autocfg"
version = "1.5.1"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "bitflags"
version = "2.11.1"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
[[package]]
name = "bumpalo"
version = "3.20.3"
version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"

@@ -56,5 +62,5 @@ [[package]]

name = "cc"
version = "1.2.62"
version = "1.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
dependencies = [

@@ -73,5 +79,5 @@ "find-msvc-tools",

name = "chrono"
version = "0.4.44"
version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
dependencies = [

@@ -98,9 +104,10 @@ "iana-time-zone",

name = "console"
version = "0.16.3"
version = "0.15.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87"
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
dependencies = [
"encode_unicode",
"libc",
"windows-sys",
"once_cell",
"windows-sys 0.59.0",
]

@@ -115,6 +122,38 @@

[[package]]
name = "defmt"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f"
dependencies = [
"bitflags 1.3.2",
"defmt-macros",
]
[[package]]
name = "defmt-macros"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b"
dependencies = [
"defmt-parser",
"proc-macro-error2",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "defmt-parser"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e"
dependencies = [
"thiserror 2.0.18",
]
[[package]]
name = "deranged"
version = "0.5.8"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
dependencies = [

@@ -143,3 +182,3 @@ "powerfmt",

"libc",
"windows-sys",
"windows-sys 0.61.2",
]

@@ -149,40 +188,21 @@

name = "fastrand"
version = "2.4.1"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
[[package]]
name = "futures-core"
version = "0.3.32"
name = "getrandom"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
[[package]]
name = "futures-task"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
[[package]]
name = "futures-util"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"futures-core",
"futures-task",
"pin-project-lite",
"slab",
"cfg-if",
"libc",
"wasi",
]

@@ -192,5 +212,5 @@

name = "getrandom"
version = "0.4.2"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [

@@ -200,5 +220,3 @@ "cfg-if",

"r-efi",
"rand_core 0.10.1",
"wasip2",
"wasip3",
]

@@ -208,16 +226,7 @@

name = "hashbrown"
version = "0.15.5"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"foldhash",
]
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "hashbrown"
version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
[[package]]
name = "heck"

@@ -230,5 +239,5 @@ version = "0.5.0"

name = "hifitime"
version = "3.9.0"
version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c587aef1280b84f15bfd84eefff9ee55d1a2826e67f089ed263a8c3a029c273"
checksum = "a978b79fb40cea4c6592890ffe0021dfea5c51a107fbac565abae82fd24a15af"
dependencies = [

@@ -240,4 +249,6 @@ "js-sys",

"serde_derive",
"snafu",
"wasm-bindgen",
"web-sys",
"web-time",
]

@@ -253,5 +264,5 @@

name = "iana-time-zone"
version = "0.1.65"
version = "0.1.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
dependencies = [

@@ -277,17 +288,9 @@ "android_system_properties",

[[package]]
name = "id-arena"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]]
name = "indexmap"
version = "2.14.0"
version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
dependencies = [
"equivalent",
"hashbrown 0.17.1",
"serde",
"serde_core",
"hashbrown",
]

@@ -297,5 +300,5 @@

name = "insta"
version = "1.47.2"
version = "1.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094e"
checksum = "b76866be74d68b1595eb8060cb9191dca9c021db2316558e52ddc5d55d41b66c"
dependencies = [

@@ -310,9 +313,9 @@ "console",

name = "itoa"
version = "1.0.18"
version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010"
[[package]]
name = "jiff"
version = "0.2.28"
version = "0.2.29"
dependencies = [

@@ -322,2 +325,3 @@ "anyhow",

"chrono-tz",
"defmt",
"hifitime",

@@ -339,2 +343,3 @@ "humantime",

"tabwriter",
"tempfile",
"time",

@@ -350,5 +355,5 @@ "time-tz",

name = "jiff-static"
version = "0.2.28"
version = "0.2.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47"
checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f"
dependencies = [

@@ -378,8 +383,6 @@ "jiff-tzdb",

name = "js-sys"
version = "0.3.99"
version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
dependencies = [
"cfg-if",
"futures-util",
"once_cell",

@@ -390,12 +393,6 @@ "wasm-bindgen",

[[package]]
name = "leb128fmt"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "lexical-core"
version = "0.8.5"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594"
dependencies = [

@@ -409,9 +406,8 @@ "lexical-parse-float",

name = "lexical-parse-float"
version = "0.8.5"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56"
dependencies = [
"lexical-parse-integer",
"lexical-util",
"static_assertions",
]

@@ -421,8 +417,7 @@

name = "lexical-parse-integer"
version = "0.8.6"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34"
dependencies = [
"lexical-util",
"static_assertions",
]

@@ -432,8 +427,5 @@

name = "lexical-util"
version = "0.8.5"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
dependencies = [
"static_assertions",
]
checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17"

@@ -448,5 +440,5 @@ [[package]]

name = "libm"
version = "0.2.16"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"

@@ -461,17 +453,17 @@ [[package]]

name = "log"
version = "0.4.30"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "memchr"
version = "2.8.0"
version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "num-conv"
version = "0.2.2"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"

@@ -499,5 +491,5 @@ [[package]]

name = "once_cell"
version = "1.21.4"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"

@@ -548,3 +540,3 @@ [[package]]

"phf_shared 0.11.3",
"rand 0.8.6",
"rand",
]

@@ -571,18 +563,12 @@

[[package]]
name = "pin-project-lite"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
[[package]]
name = "portable-atomic"
version = "1.13.1"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd"
[[package]]
name = "portable-atomic-util"
version = "0.2.7"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
dependencies = [

@@ -599,8 +585,20 @@ "portable-atomic",

[[package]]
name = "prettyplease"
version = "0.2.37"
name = "proc-macro-error-attr2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
dependencies = [
"proc-macro2",
"quote",
]
[[package]]
name = "proc-macro-error2"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
dependencies = [
"proc-macro-error-attr2",
"proc-macro2",
"quote",
"syn",

@@ -611,5 +609,5 @@ ]

name = "proc-macro2"
version = "1.0.106"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [

@@ -621,7 +619,7 @@ "unicode-ident",

name = "quickcheck"
version = "1.1.0"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95c589f335db0f6aaa168a7cd27b1fc6920f5e1470c804f814d9cd6e62a0f70b"
checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
dependencies = [
"rand 0.10.1",
"rand",
]

@@ -631,5 +629,5 @@

name = "quote"
version = "1.0.45"
version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [

@@ -641,26 +639,16 @@ "proc-macro2",

name = "r-efi"
version = "6.0.0"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "rand"
version = "0.8.6"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"rand_core 0.6.4",
"rand_core",
]
[[package]]
name = "rand"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
dependencies = [
"getrandom",
"rand_core 0.10.1",
]
[[package]]
name = "rand_core"

@@ -670,10 +658,7 @@ version = "0.6.4"

checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom 0.2.16",
]
[[package]]
name = "rand_core"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
[[package]]
name = "regex"

@@ -692,5 +677,5 @@ version = "1.12.3"

name = "regex-automata"
version = "0.4.14"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
dependencies = [

@@ -704,5 +689,5 @@ "aho-corasick",

name = "regex-syntax"
version = "0.8.10"
version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"

@@ -715,7 +700,7 @@ [[package]]

dependencies = [
"bitflags",
"bitflags 2.10.0",
"errno",
"libc",
"linux-raw-sys",
"windows-sys",
"windows-sys 0.61.2",
]

@@ -731,5 +716,5 @@

name = "ryu"
version = "1.0.23"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"

@@ -746,8 +731,2 @@ [[package]]

[[package]]
name = "semver"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[[package]]
name = "serde"

@@ -770,3 +749,3 @@ version = "1.0.228"

"serde",
"thiserror",
"thiserror 1.0.69",
"xml-rs",

@@ -797,5 +776,5 @@ ]

name = "serde_json"
version = "1.0.150"
version = "1.0.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
dependencies = [

@@ -836,23 +815,32 @@ "itoa",

name = "siphasher"
version = "1.0.3"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "slab"
version = "0.4.12"
name = "snafu"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
checksum = "d1a012328be2e3f5d5f6f3218147ca02588cea4cb865e876849ab6debcf36522"
dependencies = [
"snafu-derive",
]
[[package]]
name = "static_assertions"
version = "1.1.0"
name = "snafu-derive"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
checksum = "5f103c50866b8743da9429b8a581d81a27c2d3a9c4ac7df8f8571c1dd7896eda"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "syn"
version = "2.0.117"
version = "2.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
dependencies = [

@@ -880,6 +868,6 @@ "proc-macro2",

"fastrand",
"getrandom",
"getrandom 0.3.4",
"once_cell",
"rustix",
"windows-sys",
"windows-sys 0.61.2",
]

@@ -893,6 +881,15 @@

dependencies = [
"thiserror-impl",
"thiserror-impl 1.0.69",
]
[[package]]
name = "thiserror"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [
"thiserror-impl 2.0.18",
]
[[package]]
name = "thiserror-impl"

@@ -909,6 +906,17 @@ version = "1.0.69"

[[package]]
name = "thiserror-impl"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "time"
version = "0.3.47"
version = "0.3.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
dependencies = [

@@ -921,3 +929,3 @@ "deranged",

"powerfmt",
"serde_core",
"serde",
"time-core",

@@ -929,11 +937,11 @@ "time-macros",

name = "time-core"
version = "0.1.8"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
[[package]]
name = "time-macros"
version = "0.2.27"
version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
dependencies = [

@@ -972,5 +980,5 @@ "num-conv",

name = "unicode-ident"
version = "1.0.24"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"

@@ -984,8 +992,2 @@ [[package]]

[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "unsafe-libyaml"

@@ -1007,17 +1009,14 @@ version = "0.2.11"

[[package]]
name = "wasip2"
version = "1.0.3+wasi-0.2.9"
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
dependencies = [
"wit-bindgen 0.57.1",
]
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip3"
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
name = "wasip2"
version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
"wit-bindgen 0.51.0",
"wit-bindgen",
]

@@ -1027,5 +1026,5 @@

name = "wasm-bindgen"
version = "0.2.122"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
dependencies = [

@@ -1041,5 +1040,5 @@ "cfg-if",

name = "wasm-bindgen-macro"
version = "0.2.122"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
dependencies = [

@@ -1052,5 +1051,5 @@ "quote",

name = "wasm-bindgen-macro-support"
version = "0.2.122"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
dependencies = [

@@ -1066,5 +1065,5 @@ "bumpalo",

name = "wasm-bindgen-shared"
version = "0.2.122"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
dependencies = [

@@ -1075,41 +1074,17 @@ "unicode-ident",

[[package]]
name = "wasm-encoder"
version = "0.244.0"
name = "web-sys"
version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
dependencies = [
"leb128fmt",
"wasmparser",
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "wasm-metadata"
version = "0.244.0"
name = "web-time"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
"anyhow",
"indexmap",
"wasm-encoder",
"wasmparser",
]
[[package]]
name = "wasmparser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
"bitflags",
"hashbrown 0.15.5",
"indexmap",
"semver",
]
[[package]]
name = "web-sys"
version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
dependencies = [
"js-sys",

@@ -1125,3 +1100,3 @@ "wasm-bindgen",

dependencies = [
"windows-sys",
"windows-sys 0.61.2",
]

@@ -1190,2 +1165,11 @@

name = "windows-sys"
version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-sys"
version = "0.61.2"

@@ -1199,96 +1183,72 @@ source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "wit-bindgen"
version = "0.51.0"
name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"wit-bindgen-rust-macro",
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "wit-bindgen"
version = "0.57.1"
name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck",
"wit-parser",
]
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "wit-bindgen-rust"
version = "0.51.0"
name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck",
"indexmap",
"prettyplease",
"syn",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
]
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "wit-bindgen-rust-macro"
version = "0.51.0"
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
dependencies = [
"anyhow",
"prettyplease",
"proc-macro2",
"quote",
"syn",
"wit-bindgen-core",
"wit-bindgen-rust",
]
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "wit-component"
version = "0.244.0"
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
"bitflags",
"indexmap",
"log",
"serde",
"serde_derive",
"serde_json",
"wasm-encoder",
"wasm-metadata",
"wasmparser",
"wit-parser",
]
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "wit-parser"
version = "0.244.0"
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
"indexmap",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser",
]
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "wit-bindgen"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]]
name = "xml-rs"

@@ -1301,4 +1261,4 @@ version = "0.8.28"

name = "zmij"
version = "1.0.21"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
checksum = "f1dccf46b25b205e4bebe1d5258a991df1cc17801017a845cb5b3fe0269781aa"

@@ -16,3 +16,3 @@ # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO

name = "jiff"
version = "0.2.28"
version = "0.2.29"
authors = ["Andrew Gallant <jamslam@gmail.com>"]

@@ -74,2 +74,3 @@ build = false

"portable-atomic-util/alloc",
"defmt?/alloc",
]

@@ -85,2 +86,3 @@ default = [

]
defmt = ["dep:defmt"]
js = [

@@ -127,2 +129,6 @@ "dep:wasm-bindgen",

[dependencies.defmt]
version = "1.0.0"
optional = true
[dependencies.jiff-static]

@@ -182,2 +188,5 @@ version = "0.2"

[dev-dependencies.tempfile]
version = "3.27.0"
[dev-dependencies.time]

@@ -209,3 +218,3 @@ version = "0.3.36"

[target."cfg(any())".dependencies.jiff-static]
version = "=0.2.28"
version = "=0.2.29"

@@ -217,3 +226,3 @@ [target.'cfg(any(windows, target_family = "wasm"))'.dependencies.jiff-tzdb-platform]

[target.'cfg(not(target_family = "wasm"))'.dev-dependencies.hifitime]
version = "3.9.0"
version = "4.3.0"

@@ -220,0 +229,0 @@ [target.'cfg(not(target_has_atomic = "ptr"))'.dependencies.portable-atomic]

# CHANGELOG
0.2.29 (2026-06-20)
===================
This release adds support for [`defmt`], which is a highly efficient logging
framework that targets resource-constrained devices, like microcontrollers.
Enhancements:
* [#505](https://github.com/BurntSushi/jiff/issues/505):
Add support for the `defmt` crate by implementing `defmt::Format` on the
principle public types in Jiff.
* [#584](https://github.com/BurntSushi/jiff/pull/584):
Add `Zoned::UNIX_EPOCH` as a constant.
* [#587](https://github.com/BurntSushi/jiff/pull/587):
Change the `Debug` output for `civil::ISOWeekDate` to match the `Debug` output
style of other primitive datetime types.
Bug fixes:
* [#525](https://github.com/BurntSushi/jiff/issues/525):
Fix a bug that prevented time zone lookups when using an on-disk time zone
database on Windows.
* [#539](https://github.com/BurntSushi/jiff/issues/539):
Fix a bug where rendering a datetime in an error message would omit a `T`
separator.
0.2.28 (2026-05-28)

@@ -1553,1 +1579,2 @@ ===================

[Discussions on GitHub]: https://github.com/BurntSushi/jiff/discussions
[`defmt`]: https://github.com/BurntSushi/jiff/issues/587

@@ -1147,6 +1147,8 @@ # Comparison with other Rust datetime crates

a positive leap second (a second gets repeated), `hifitime` will correctly
report the accurate duration:
report the accurate duration. With that said, to get an accurate duration, one
of the two time scales has to be converted to to TAI (or another time scale
which does not have leap seconds):
```rust
use hifitime::{Duration, Epoch};
use hifitime::{Duration, Epoch, TimeScale};

@@ -1156,2 +1158,4 @@ fn main() -> anyhow::Result<()> {

let e2: Epoch = "2015-07-01T00:00:00 UTC".parse()?;
let e2 = e2.to_time_scale(TimeScale::TAI);
let duration = e2 - e1;

@@ -1158,0 +1162,0 @@ assert_eq!(duration, Duration::from_seconds(3_601.0));

@@ -155,3 +155,3 @@ use crate::{

/// ```
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[derive(Clone, Copy, Eq, Hash, PartialEq)]
pub struct ISOWeekDate {

@@ -733,2 +733,8 @@ year: i16,

impl core::fmt::Debug for ISOWeekDate {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
core::fmt::Display::fmt(self, f)
}
}
impl core::fmt::Display for ISOWeekDate {

@@ -800,2 +806,13 @@ fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {

#[cfg(feature = "defmt")]
impl defmt::Format for ISOWeekDate {
fn format(&self, f: defmt::Formatter) {
use crate::fmt::DefmtWrite;
defmt::unwrap!(
DEFAULT_DATETIME_PRINTER.print_iso_week_date(self, DefmtWrite(f))
);
}
}
#[cfg(feature = "serde")]

@@ -802,0 +819,0 @@ impl serde_core::Serialize for ISOWeekDate {

@@ -133,2 +133,3 @@ /*!

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Era {

@@ -135,0 +136,0 @@ /// The "before common era" era.

@@ -84,2 +84,3 @@ use crate::{error::Error, shared::util::itime::IWeekday, util::b};

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]

@@ -86,0 +87,0 @@ #[allow(missing_docs)]

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ FailedAddDays,

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ FailedNegateUnsignedDuration,

use crate::{error, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ Empty,

@@ -12,2 +12,3 @@ use crate::{error, util::escape};

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -14,0 +15,0 @@ HybridDurationEmpty,

use crate::{error, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ColonAfterHours,

use crate::{civil::Weekday, error, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ CommentClosingParenWithoutOpen,

use crate::{error, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ EndOfInputAnnotation,

use crate::{civil::Weekday, error, tz::Offset, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -253,2 +254,3 @@ ColonCount {

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum ParseError {

@@ -463,2 +465,3 @@ ExpectedAmPm,

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum FormatError {

@@ -465,0 +468,0 @@ RequiresDate,

use crate::{error, tz::Offset, util::escape};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ #[cfg(not(feature = "alloc"))]

use crate::{error, Unit};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ConversionToSecondsFailed { unit: Unit },

@@ -397,5 +397,28 @@ use crate::util::{

#[cfg(feature = "defmt")]
impl defmt::Format for Error {
fn format(&self, f: defmt::Formatter) {
let Some(ref inner) = self.inner else {
return defmt::write!(f, "Error {{ kind: None }}");
};
#[cfg(feature = "alloc")]
{
defmt::write!(
f,
"Error {{ kind: {}, cause: {} }}",
inner.kind,
inner.cause
);
}
#[cfg(not(feature = "alloc"))]
{
defmt::write!(f, "Error {{ kind: {} }}", inner.kind);
}
}
}
/// The underlying kind of a [`Error`].
#[derive(Debug)]
#[cfg_attr(not(feature = "alloc"), derive(Clone))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum ErrorKind {

@@ -516,2 +539,3 @@ Adhoc(AdhocError),

#[cfg_attr(not(feature = "alloc"), derive(Clone))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
struct AdhocError {

@@ -564,2 +588,3 @@ #[cfg(feature = "alloc")]

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum CrateFeatureError {

@@ -649,2 +674,12 @@ #[cfg(not(feature = "tz-system"))]

#[cfg(feature = "defmt")]
impl defmt::Format for IOError {
fn format(&self, f: defmt::Formatter) {
// `std::io::Error` does not implement `defmt::Format`. Since this
// error is std-only and defmt is mainly used in embedded contexts,
// omitting the error is probably fine.
defmt::write!(f, "IOError(unavailable)");
}
}
#[cfg(feature = "std")]

@@ -692,2 +727,12 @@ impl From<std::io::Error> for IOError {

#[cfg(feature = "defmt")]
impl defmt::Format for FilePathError {
fn format(&self, f: defmt::Formatter) {
// `std::path::PathBuf` does not implement `defmt::Format`. Since this
// error is std-only and defmt is mainly used in embedded contexts,
// omitting the path is probably fine.
defmt::write!(f, "FilePathError(unavailable)");
}
}
/// A simple trait to encapsulate automatic conversion to `Error`.

@@ -694,0 +739,0 @@ ///

use crate::{error, Unit};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ConvertNonFinite,

use crate::{error, Unit};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ConvertDateTimeToTimestamp,

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ OverflowAddDuration,

@@ -7,2 +7,3 @@ use crate::{

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -9,0 +10,0 @@ BecauseFold { before: Offset, after: Offset },

@@ -10,2 +10,3 @@ use crate::error;

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -12,0 +13,0 @@ AllocRequestOverLimit,

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ #[cfg(feature = "tzdb-concatenated")]

@@ -7,2 +7,3 @@ use crate::{

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -9,0 +10,0 @@ ConvertDateTimeToTimestamp {

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ColonPrefixInvalidUtf8,

@@ -9,2 +9,3 @@ #[cfg(not(feature = "tz-system"))]

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {}

@@ -24,2 +25,3 @@

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -26,0 +28,0 @@ FailedEnvTz,

use crate::error;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ ConvertNonFixed {

@@ -1,9 +0,10 @@

#[cfg(not(test))]
#[cfg(any(not(test), not(feature = "alloc")))]
pub(crate) use self::disabled::*;
#[cfg(test)]
#[cfg(all(test, feature = "alloc"))]
pub(crate) use self::enabled::*;
#[cfg(not(test))]
#[cfg(any(not(test), not(feature = "alloc")))]
mod disabled {
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {}

@@ -18,3 +19,3 @@

#[cfg(test)]
#[cfg(all(test, feature = "alloc"))]
mod enabled {

@@ -33,2 +34,3 @@ use alloc::boxed::Box;

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -35,0 +37,0 @@ DuplicateLink { name: Box<str> },

use crate::{error, util::b, Unit};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum UnitConfigError {

@@ -126,2 +127,3 @@ CalendarUnitsNotAllowed { unit: Unit },

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum MustDivide {

@@ -128,0 +130,0 @@ NanosPerCivilDay,

use crate::{error, util::escape::Byte};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum RoundingIncrementError {

@@ -45,2 +46,3 @@ ForDateTime,

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum ParseIntError {

@@ -83,2 +85,3 @@ NoDigitsFound,

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum ParseFractionError {

@@ -183,1 +186,10 @@ NoDigitsFound,

}
#[cfg(feature = "defmt")]
impl defmt::Format for OsStrUtf8Error {
fn format(&self, f: defmt::Formatter) {
// `OsStr` does not implement `defmt::Format`. Since this error is std-only
// and defmt is mainly used in embedded contexts, omitting the value is fine.
defmt::write!(f, "OsStrUtf8Error(unavailable)");
}
}
use crate::{error, Unit};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum Error {

@@ -5,0 +6,0 @@ AddDateTime,

@@ -718,3 +718,9 @@ use core::mem::MaybeUninit;

) -> BorrowedWriter<'buffer, 'data, 'write> {
assert!(bbuf.capacity() >= BROAD_MINIMUM_BUFFER_LEN);
assert!(
bbuf.capacity() >= BROAD_MINIMUM_BUFFER_LEN,
"capacity ({capacity}) must be \
at least {BROAD_MINIMUM_BUFFER_LEN} \
to handle integer formatting",
capacity = bbuf.capacity(),
);
BorrowedWriter { bbuf, wtr }

@@ -779,2 +785,24 @@ }

#[cfg_attr(feature = "perf-inline", inline(always))]
pub(crate) fn write_int(
&mut self,
n: impl Into<u64>,
) -> Result<(), Error> {
let n = n.into();
self.if_will_fill_then_flush(digits(n))?;
self.bbuf.write_int(n);
Ok(())
}
#[cfg_attr(feature = "perf-inline", inline(always))]
pub(crate) fn write_int1(
&mut self,
n: impl Into<u64>,
) -> Result<(), Error> {
let n = n.into();
self.if_will_fill_then_flush(1usize)?;
self.bbuf.write_int1(n);
Ok(())
}
#[cfg_attr(feature = "perf-inline", inline(always))]
pub(crate) fn write_int_pad(

@@ -781,0 +809,0 @@ &mut self,

@@ -471,1 +471,56 @@ /*!

}
/// An adapter for writing Jiff's formatted output to a
/// [`defmt`] formatter.
///
/// This is used by Jiff's [`defmt::Format`] trait implementations to share the
/// same printer code used for [`core::fmt`] output.
///
/// # Example
///
/// This example shows the [`defmt::Format`] trait implementation for
/// [`civil::DateTime`](crate::civil::DateTime) (but using a wrapper type).
///
/// ```
/// use jiff::{
/// civil::DateTime,
/// fmt::{temporal::DateTimePrinter, DefmtWrite},
/// };
///
/// struct MyDateTime(DateTime);
///
/// impl defmt::Format for MyDateTime {
/// fn format(&self, f: defmt::Formatter) {
/// static P: DateTimePrinter = DateTimePrinter::new();
/// defmt::unwrap!(P.print_datetime(&self.0, DefmtWrite(f)));
/// }
/// }
/// ```
#[cfg(feature = "defmt")]
#[derive(defmt::Format)]
pub struct DefmtWrite<'a>(pub defmt::Formatter<'a>);
#[cfg(feature = "defmt")]
impl<'a> core::fmt::Debug for DefmtWrite<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
f.debug_struct("DefmtWrite").finish()
}
}
#[cfg(feature = "defmt")]
impl<'a> core::fmt::Write for DefmtWrite<'a> {
#[inline]
fn write_str(&mut self, string: &str) -> Result<(), core::fmt::Error> {
defmt::write!(self.0, "{=str}", string);
Ok(())
}
}
#[cfg(feature = "defmt")]
impl<'a> Write for DefmtWrite<'a> {
#[inline]
fn write_str(&mut self, string: &str) -> Result<(), Error> {
defmt::write!(self.0, "{=str}", string);
Ok(())
}
}

@@ -632,2 +632,9 @@ /*!

[Platform support](crate::_documentation::platform) for more details.
* **defmt** -
When enabled, Jiff will implement the [`defmt::Format`] trait for many
of its types. This is useful for embedded environments where the usual
`core::fmt` machinery is not practical to use. Note that, at time of writing
(2026-06-12), not all public types in this crate implement [`defmt::Format`].
If there are types for which you need `defmt` support but don't have it in
Jiff, then please [open a new issue][issue-new].

@@ -690,2 +697,3 @@ ### Time zone features

[Concatenated Time Zone Database]: https://android.googlesource.com/platform/libcore/+/jb-mr2-release/luni/src/main/java/libcore/util/ZoneInfoDB.java
[issue-new]: https://github.com/BurntSushi/jiff/issues/new
*/

@@ -692,0 +700,0 @@

@@ -74,2 +74,5 @@ /*!

removed. Nesting isn't supported.
* All `#[cfg(feature = "defmt")]` annotations and gated items are removed. The
`jiff-static` proc macro only needs these types internally for parsing and
code generation.

@@ -76,0 +79,0 @@ Otherwise, this module is specifically organized in a way that doesn't rely on

@@ -937,2 +937,3 @@ use alloc::{string::String, vec};

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) struct TzifError {

@@ -943,2 +944,3 @@ kind: TzifErrorKind,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum TzifErrorKind {

@@ -1016,2 +1018,3 @@ Footer(FooterError),

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum TransitionTypeError {

@@ -1049,2 +1052,3 @@ ExceedsLocalTimeTypes,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum LocalTimeTypeError {

@@ -1084,2 +1088,3 @@ InvalidOffset { offset: i32 },

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum TimeZoneDesignatorError {

@@ -1135,2 +1140,3 @@ InvalidEnd,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum IndicatorError {

@@ -1184,2 +1190,3 @@ InvalidCombination,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum InconsistentPosixTimeZoneError {

@@ -1222,2 +1229,3 @@ Designation,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum FooterError {

@@ -1265,2 +1273,3 @@ InvalidPosixTz(crate::shared::posix::PosixTimeZoneError),

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum HeaderError {

@@ -1328,2 +1337,3 @@ InvalidDataBlock { version: u8 },

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
enum CountKind {

@@ -1353,2 +1363,3 @@ Ut,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum SplitAtError {

@@ -1392,2 +1403,3 @@ V1,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
struct U32UsizeError;

@@ -1394,0 +1406,0 @@

@@ -51,3 +51,3 @@ /// A simple and not the most-efficient fixed size string on the stack.

/// Returns the capacity of this array string.
pub(crate) fn capacity() -> usize {
pub(crate) const fn capacity() -> usize {
N

@@ -141,2 +141,9 @@ }

#[cfg(feature = "defmt")]
impl<const N: usize> defmt::Format for ArrayStr<N> {
fn format(&self, f: defmt::Formatter) {
defmt::write!(f, "{=str}", self.as_str())
}
}
impl<const N: usize> AsRef<str> for ArrayStr<N> {

@@ -143,0 +150,0 @@ fn as_ref(&self) -> &str {

@@ -682,2 +682,3 @@ /*!

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum RangeError {

@@ -684,0 +685,0 @@ DateInvalidDayOfYear { year: i16 },

@@ -74,2 +74,3 @@ use crate::{

#[derive(Clone, Copy, Debug, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[non_exhaustive]

@@ -154,2 +155,3 @@ pub enum Disambiguation {

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum AmbiguousOffset {

@@ -300,2 +302,3 @@ /// The offset for a particular civil datetime and time zone is

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct AmbiguousTimestamp {

@@ -816,2 +819,3 @@ dt: DateTime,

#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct AmbiguousZoned {

@@ -818,0 +822,0 @@ ts: AmbiguousTimestamp,

@@ -581,2 +581,12 @@ use crate::{

#[cfg(feature = "defmt")]
impl defmt::Format for TimeZoneDatabase {
fn format(&self, f: defmt::Formatter) {
// `Kind` doesn't implement `defmt::Format`, so we only emit the type
// name. On embedded targets the database is usually bundled or unused,
// so the internal backend probably isn't meaningful to log either way.
defmt::write!(f, "TimeZoneDatabase(unavailable)");
}
}
/// An iterator over the time zone identifiers in a [`TimeZoneDatabase`].

@@ -592,2 +602,3 @@ ///

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TimeZoneNameIter<'d> {

@@ -640,2 +651,3 @@ #[cfg(feature = "alloc")]

#[derive(Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TimeZoneName<'d> {

@@ -642,0 +654,0 @@ /// The lifetime of the tzdb.

@@ -1,6 +0,2 @@

use alloc::{
string::{String, ToString},
vec,
vec::Vec,
};
use alloc::{string::String, vec, vec::Vec};

@@ -11,3 +7,3 @@ use std::{

io::Read,
path::{Path, PathBuf},
path::{Component, Path, PathBuf},
sync::{

@@ -563,3 +559,3 @@ atomic::{AtomicUsize, Ordering},

let full = base.join(time_zone_name);
let original = parse::os_str_utf8(time_zone_name.as_os_str())
let original = iana_name_from_path(time_zone_name)
.map_err(|err| Error::from(err).path(base))?;

@@ -569,3 +565,3 @@ let lower = original.to_ascii_lowercase();

full,
original: original.to_string(),
original,
lower,

@@ -665,2 +661,17 @@ validity: AtomicUsize::new(ZONE_INFO_NAME_UNKNOWN),

fn iana_name_from_path(
path: &Path,
) -> Result<String, crate::error::util::OsStrUtf8Error> {
let mut name = String::new();
for component in path.components() {
let Component::Normal(part) = component else { continue };
let part = parse::os_str_utf8(part)?;
if !name.is_empty() {
name.push('/');
}
name.push_str(part);
}
Ok(name)
}
impl Eq for ZoneInfoName {}

@@ -839,6 +850,42 @@

#[cfg(test)]
#[cfg(all(
test,
not(miri),
not(target_arch = "wasm32"),
not(target_arch = "wasm64"),
))]
mod tests {
use super::*;
fn mktempdir() -> tempfile::TempDir {
tempfile::TempDir::with_prefix("jiff-zoneinfo-").unwrap()
}
#[test]
fn iana_name_always_uses_slashes() {
let name = ZoneInfoName::new(
Path::new("/"),
&Path::new("Asia").join("Tokyo"),
)
.unwrap();
assert_eq!("Asia/Tokyo", name.original());
}
#[test]
fn from_dir_uses_iana_name_separators() {
let tmpdir = mktempdir();
let zoneinfo = tmpdir.path().join("zoneinfo");
let asia = zoneinfo.join("Asia");
std::fs::create_dir_all(&asia).unwrap();
std::fs::write(
asia.join("Tokyo"),
crate::tz::testdata::TzifTestFile::get("Asia/Tokyo").data,
)
.unwrap();
let db = Database::from_dir(&zoneinfo).unwrap();
assert!(db.get("Asia/Tokyo").is_some());
assert!(db.get(r"Asia\Tokyo").is_none());
}
/// DEBUG COMMAND

@@ -845,0 +892,0 @@ ///

@@ -151,3 +151,3 @@ /*!

// See module comment for WIP status. :-(
#[cfg(test)]
#[cfg(all(test, feature = "alloc"))]
mod zic;

@@ -154,0 +154,0 @@

@@ -76,3 +76,3 @@ /*!

error::{tz::posix::Error as E, Error, ErrorContext},
shared,
fmt, shared,
timestamp::Timestamp,

@@ -255,2 +255,10 @@ tz::{

impl<ABBREV: AsRef<str>> PosixTimeZone<ABBREV> {
/// Returns the underlying "shared" type. (The type shared between `jiff`
/// and `jiff-static`.)
pub(crate) fn shared(&self) -> &shared::PosixTimeZone<ABBREV> {
&self.inner
}
}
impl<ABBREV: AsRef<str> + Debug> PosixTimeZone<ABBREV> {

@@ -334,6 +342,16 @@ /// Returns the appropriate time zone offset to use for the given

fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
core::fmt::Display::fmt(&self.inner, f)
fmt::temporal::DateTimePrinter::new()
.print_posix_time_zone(self.shared(), fmt::StdFmtWrite(f))
.map_err(|_| core::fmt::Error)
}
}
#[cfg(feature = "defmt")]
impl<ABBREV: AsRef<str>> defmt::Format for PosixTimeZone<ABBREV> {
fn format(&self, f: defmt::Formatter) {
defmt::unwrap!(fmt::temporal::DateTimePrinter::new()
.print_posix_time_zone(self.shared(), fmt::DefmtWrite(f)))
}
}
// The tests below require parsing which requires alloc.

@@ -340,0 +358,0 @@ #[cfg(feature = "alloc")]

@@ -80,2 +80,7 @@ #[cfg(not(miri))]

},
// Just another random test file.
TzifTestFile {
name: "Asia/Tokyo",
data: include_bytes!("testdata/asia-tokyo.tzif"),
},
TzifTestFile { name: "UTC", data: include_bytes!("testdata/utc.tzif") },

@@ -82,0 +87,0 @@ ];

@@ -153,2 +153,3 @@ /*!

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum BoundsError {

@@ -706,2 +707,19 @@ $($name(RawBoundsError<$name>),)*

#[cfg(feature = "defmt")]
impl<B, P> defmt::Format for RawBoundsError<B>
where
B: Bounds<Primitive = P>,
P: defmt::Format,
{
fn format(&self, f: defmt::Formatter) {
defmt::write!(
f,
"RawBoundsError {{ what: {=str}, min: {}, max: {} }}",
B::WHAT,
B::MIN,
B::MAX
);
}
}
/// Like `BoundsError`, but maintained manually.

@@ -711,2 +729,3 @@ ///

#[derive(Clone, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub(crate) enum SpecialBoundsError {

@@ -713,0 +732,0 @@ UnixNanoseconds,

@@ -294,2 +294,3 @@ use crate::{

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum RoundMode {

@@ -296,0 +297,0 @@ /// Rounds toward positive infinity.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display