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: ```rust use serde::{Serialize, Deserialize}; use smolstr::SmolStr; // stack-allocation for small strings use iso8601timestamp::Timestamp;
pub struct Event {
name: SmolStr,
ts: Timestamp,
value: i32,
}
when serialized to JSON could result in:
json
{
"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.
std
(default)
serde
(default)
Timestamp
and TimestampStr
verify
nightly
pg
ToSql
/FromSql
implementations for Timestamp
so it can be directly stored/fetched from a PostgreSQL database using rust-postgres
rusqlite
ToSql
/FromSql
implementations for Timestamp
so it can be stored/fetched from an rusqlite
/sqlite3
databaseschema
JsonSchema
for generating a JSON schema on the fly using schemars
.bson
visit_map
implementation to handle deserialising BSON (MongoDB) DateTime format, { $date: string }
.