12 releases
0.3.0 | Oct 18, 2024 |
---|---|
0.3.0-alpha.2 | Aug 27, 2024 |
0.2.17 | Jan 26, 2024 |
0.2.16 | Dec 29, 2023 |
0.1.11 | Jun 21, 2022 |
#110 in Parser implementations
3,462 downloads per month
Used in 34 crates
(18 directly)
77KB
1.5K
SLoC
ISO8601 Timestamp
This crate provides high-performance formatting and parsing routines for ISO8601 timestamps, primarily focused on UTC values but with support for parsing (and automatically applying) UTC Offsets.
The primary purpose of this is to keep the lightweight representation of timestamps within data structures, and only formatting it to a string when needed via Serde.
The Timestamp
struct is only 12 bytes, while the formatted strings can be as large as 35 bytes, and care is taken to avoid heap allocations when formatting.
Example:
use iso8601_timestamp::Timestamp;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Event {
name: String,
ts: Timestamp, // only 12 bytes
value: i32,
}
when serialized to JSON could result in:
{
"name": "some_event",
"ts": "2021-10-17T02:03:01Z",
"value": 42
}
When serializing to non-human-readable formats, such as binary formats, the Timestamp
will be written as an i64
representing milliseconds since the Unix Epoch. This way it only uses 8 bytes instead of 24.
Similarly, when deserializing, it supports either an ISO8601 string or an i64
representing a unix timestamp in milliseconds.
Cargo Features
-
std
(default)- Enables standard library features, such as getting the current time.
-
serde
(default)- Enables serde implementations for
Timestamp
andTimestampStr
- Enables serde implementations for
-
rkyv_07
- Enables
rkyv
0.7 archive support forTimestamp
, serializing it as a 64-bit signed unix offset in milliseconds.
- Enables
-
rkyv_08
- Enables
rkyv
0.8 archive support forTimestamp
, serializing it as a 64-bit signed unix offset in milliseconds. - NOTE: The archived representation for 0.8 is endian-agnostic, but will depend on how rkyv is configured. See rkyv's documentation for more information. Both systems will need to be configured identically.
- Enables
-
verify
- Verifies numeric inputs when parsing and fails when non-numeric input is found.
- When disabled, parsing ignores invalid input, possibly giving garbage timestamps.
-
pg
- Enables
ToSql
/FromSql
implementations forTimestamp
so it can be directly stored/fetched from a PostgreSQL database usingrust-postgres
- Enables
-
rusqlite
- Enables
ToSql
/FromSql
implementations forTimestamp
so it can be stored/fetched from anrusqlite
/sqlite3
database
- Enables
-
diesel
/diesel-pg
- Enables support for diesel
ToSql
/FromSql
andAsExpression
- Enables support for diesel
-
schema
- Enables implementation for
JsonSchema
for generating a JSON schema on the fly usingschemars
.
- Enables implementation for
-
bson
- Enables
visit_map
implementation to handle deserialising BSON (MongoDB) DateTime format,{ $date: string }
.
- Enables
-
rand
- Enables
rand
implementations, to generate random timestamps.
- Enables
-
quickcheck
- Enables
quickcheck
'sArbitrary
implementation onTimestamp
- Enables
-
worker
- Enables support for
now_utc()
in Cloudflare workers
- Enables support for
-
js
- Enables support for
now_utc()
in WASM usingjs-sys
- Enables support for
-
ramhorns
- Implements
Content
forTimestamp
, formatting it as a regular ISO8601 timestamp. Note thatramhorns
is GPLv3.
- Implements
-
fred
- Implements conversions between
Timestamp
andRedisValue
/RedisKey
to be used withfred
Redis client. - Values are stored as milliseconds since the Unix Epoch, and keys are stored as ISO8601 strings.
- Implements conversions between
Dependencies
~1–18MB
~237K SLoC