-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathCargo.toml
242 lines (220 loc) · 9.78 KB
/
Cargo.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
[package]
name = "jiff"
version = "0.2.1" #:version
authors = ["Andrew Gallant <jamslam@gmail.com>"]
license = "Unlicense OR MIT"
repository = "https://github.com/BurntSushi/jiff"
documentation = "https://docs.rs/jiff"
description = '''
A date-time library that encourages you to jump into the pit of success.
This library is heavily inspired by the Temporal project.
'''
categories = ["date-and-time", "no-std"]
keywords = ["date", "time", "calendar", "zone", "duration"]
edition = "2021"
autotests = false
autoexamples = false
rust-version = "1.70"
# We include `/tests/lib.rs` to squash a `cargo package` warning that the
# `integration` test target is being ignored. We don't include anything else
# so tests obviously won't work, but it makes `cargo package` quiet.
include = [
"/src/**/*.rs",
"/tests/lib.rs",
"/*.md",
"COPYING",
"LICENSE-MIT",
"UNLICENSE",
]
[workspace]
members = [
"crates/jiff-cli",
"crates/jiff-diesel",
"crates/jiff-icu",
"crates/jiff-sqlx",
"crates/jiff-static",
"crates/jiff-tzdb",
"crates/jiff-tzdb-platform",
"examples/*",
]
exclude = [
"examples/diesel-mysql",
"examples/diesel-postgres",
"examples/diesel-sqlite",
"examples/sqlx-postgres",
"examples/sqlx-sqlite",
]
# Features are documented in the "Crate features" section of the crate docs:
# https://docs.rs/jiff/*/#crate-features
[features]
default = [
"std",
"tz-system",
"tzdb-bundle-platform",
"tzdb-zoneinfo",
"tzdb-concatenated",
]
std = ["alloc", "log?/std", "serde?/std"]
alloc = ["serde?/alloc", "portable-atomic-util/alloc"]
serde = ["dep:serde"]
logging = ["dep:log"]
# When enabled, Jiff will include code that attempts to determine the "system"
# time zone. For example, on Unix systems, this is usually determined by
# looking at the symlink information on /etc/localtime. But in general, it's
# very platform specific and heuristic oriented. On some platforms, this may
# require extra dependencies. (For example, `windows-sys` on Windows.)
tz-system = ["std", "dep:windows-sys"]
# When enabled, the `jiff::tz::get` and `jiff::tz::include` proc-macros
# become available. These proc macros enable creating `TimeZone` values in a
# `const` context for use in `core`-only environments.
#
# Users should generally prefer using Jiff's default zoneinfo integration at
# runtime. On Unix systems, this will enable applications using Jiff to get
# automatic tzdb updates when `/usr/share/zoneinfo` is updated without needing
# to re-compile the application.
#
# Note that this introduces a build-time dependency on `jiff-tzdb`.
static = ["static-tz", "jiff-static?/tzdb"]
# When enabled, the `jiff::tz::include` macro becomes available.
#
# This proc-macro parses the TZif data (from a file) at compile time and
# generates a special static structure that can be used by Jiff at runtime
# to do tzdb lookups. This effectively provides a way to use time zones in
# core-only environments without dynamic memory allocation.
#
# This is a subset of the functionality provided by `static`. Namely, this
# doesn't result in a dependency on `jiff-tzdb`. It requires users to include
# the time zone they want as a file, where as enabling `static` (which also
# enables this feature, by necessity) permits using Jiff's bundled tzdb.
static-tz = ["dep:jiff-static"]
# This conditionally bundles tzdb into the binary depending on which platform
# Jiff is being built for.
tzdb-bundle-platform = ["dep:jiff-tzdb-platform", "alloc"]
# This forces the jiff-tzdb crate to be included. If tzdb-zoneinfo is enabled,
# then the system tzdb will take priority over the bundled database.
tzdb-bundle-always = ["dep:jiff-tzdb", "alloc"]
# This enables the system or "zoneinfo" time zone database. This is the
# database that is typically found at /usr/share/zoneinfo on macOS and Linux.
tzdb-zoneinfo = ["std"]
# This enables the system concatenated time zone database. On some platforms,
# like Android, this is the standard time zone database instead of the more
# widespread `zoneinfo` directory created by `zic` itseld.
#
# This being enabled just means that some standard paths will be searched
# for the concatenated database and it will be used if the standard zoneinfo
# directory couldn't be found.
tzdb-concatenated = ["std"]
# This enables bindings to web browser APIs for retrieving the current time
# and configured time zone. This ONLY applies on wasm32-unknown-unknown and
# wasm64-unknown-unknown targets. Specifically, *not* on wasm32-wasi or
# wasm32-unknown-emscripten targets.
#
# This is an "ecosystem" compromise due to the fact that there is no general
# way to determine at compile time whether a wasm target is intended for use
# on the "web." In practice, only wasm{32,64}-unknown-unknown targets are used
# on the web, but wasm{32,64}-unknown-unknown targets can be used in non-web
# contexts as well. Thus, the `js` feature should be enabled only by binaries,
# tests or benchmarks when it is *known* that the application will be used in a
# web context.
#
# Libraries that depend on Jiff should not need to define their own `js`
# feature just to forward it to Jiff. Instead, application authors can depend
# on Jiff directly and enable the `js` feature themselves.
#
# (This is the same dependency setup that the `getrandom` crate uses.)
js = ["dep:wasm-bindgen", "dep:js-sys"]
[dependencies]
jiff-static = { version = "0.2", path = "crates/jiff-static", optional = true }
jiff-tzdb = { version = "0.1.2", path = "crates/jiff-tzdb", optional = true }
log = { version = "0.4.21", optional = true, default-features = false }
serde = { version = "1.0.203", optional = true, default-features = false }
# This ensures that `jiff-static` is always used with a compatible version
# of `jiff`. Namely, since `jiff-static` emits code that relies on internal
# Jiff APIs that aren't covered by semver, we only guarantee compatibility for
# one version of Jiff for each release of `jiff-static`.
#
# (This is the same pattern that `serde` and `serde_derive` use as of
# 2025-02-22.)
#
# This also helps with compilation, although in Jiff's case, we don't use
# `syn` so this is less of a problem.
#
# See: https://github.com/matklad/macro-dep-test
[target.'cfg(any())'.dependencies]
jiff-static = { version = "=0.2.1", path = "crates/jiff-static" }
# Note that the `cfg` gate for the `tzdb-bundle-platform` must repeat the
# target gate on this dependency. The intent is that `tzdb-bundle-platform`
# is enabled by default, but that the `tzdb-bundle-platform` crate is only
# actually used on platforms without a system tzdb (i.e., Windows and wasm).
[target.'cfg(any(windows, target_family = "wasm"))'.dependencies]
jiff-tzdb-platform = { version = "0.1.2", path = "crates/jiff-tzdb-platform", optional = true }
[target.'cfg(windows)'.dependencies.windows-sys]
version = ">=0.52.0, <=0.59.*"
default-features = false
features = ["Win32_Foundation", "Win32_System_Time"]
optional = true
[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dependencies]
js-sys = { version = "0.3.50", optional = true }
wasm-bindgen = { version = "0.2.70", optional = true }
# For targets that have no atomics in `std`, we add a dependency on
# `portable-atomic-util` for its Arc implementation.
#
# Note that for this to work, you may need to enable a `portable-atomic`
# feature like `portable-atomic/unsafe-assume-single-core` or
# `portable-atomic/critical-section`.
[target.'cfg(not(target_has_atomic = "ptr"))'.dependencies]
portable-atomic = { version = "1.10.0", default-features = false }
portable-atomic-util = { version = "0.2.4", default-features = false }
[dev-dependencies]
anyhow = "1.0.81"
chrono = { version = "0.4.38", features = ["serde"] }
chrono-tz = "0.10.0"
clap = { version = "4.5.23", features = ["derive"] }
humantime = "2.1.0"
# This adds approximately 50 new compilation units when running `cargo test`
# locally on Unix. Blech.
icu = { version = "1.5.0", features = ["std"] }
insta = "1.39.0"
# We force `serde` to be enabled in dev mode so that the docs render and test
# correctly. We also enable `static` so that we can test our proc macros.
jiff = { path = "./", default-features = false, features = ["serde", "static"] }
# Uncomment if you want to remove `ignore` from `jiff_icu` tests in
# `COMPARE.md`. Otherwise, this creates a circular dependency and causes
# `jiff-icu` to get re-compiled all the time.
# jiff-icu = { path = "./crates/jiff-icu" }
quickcheck = { version = "1.0.3", default-features = false }
serde = { version = "1.0.203", features = ["derive"] }
serde_json = "1.0.117"
serde_yaml = "0.9.34"
tabwriter = "1.4.0"
time = { version = "0.3.36", features = ["local-offset", "macros", "parsing"] }
tzfile = "0.1.3"
walkdir = "2.5.0"
# hifitime doesn't build on wasm for some reason, so exclude it there.
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies.hifitime]
version = "3.9.0"
[[test]]
path = "tests/lib.rs"
name = "integration"
# This is just like the default 'test' profile, but debug_assertions are
# disabled. This is important to cover for Jiff because we do a lot of extra
# work in our internal ranged integer types when debug_assertions are enabled.
# It also makes types fatter. It's very useful for catching overflow bugs.
# But since there's a fair bit of logic there, it's also worth running tests
# without debug_assertions enabled to exercise the *actual* code paths used
# in production.
[profile.testrelease]
inherits = "test"
debug-assertions = false
[package.metadata.docs.rs]
# We want to document all features.
all-features = true
# Since this crate's feature setup is pretty complicated, it is worth opting
# into a nightly unstable option to show the features that need to be enabled
# for public API items. To do that, we set 'docsrs', and when that's enabled,
# we enable the 'doc_auto_cfg' feature.
#
# To test this locally, run:
#
# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features
rustdoc-args = ["--cfg", "docsrs"]