Crates.io | chrono-tz-postgres |
lib.rs | chrono-tz-postgres |
version | 0.8.1 |
source | src |
created_at | 2022-11-01 04:38:32.643148 |
updated_at | 2022-12-02 13:51:53.508236 |
description | Typed timezones in Rust and PostgreSQL |
homepage | https://github.com/allan2/chrono-tz-postgres |
repository | https://github.com/allan2/chrono-tz-postgres |
max_upload_size | |
id | 702632 |
size | 138,393 |
A timezone type that can be converted to and from a custom Postgres type. This allows you to use typed timezones in PostgreSQL.
The custom Postgres enum tz
is equivalent to the Rust enum chrono_tz::Tz
. It can be found here.
The version number mirrors chrono-tz
.
use chrono_tz::Tz;
use chrono_tz_postgres::TzPg;
use postgres::{Client, NoTls};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// We can convert between Tz and TzPg
let tz = Tz::Arctic__Longyearbyen;
let tzpg = TzPg::from(tz);
let tz: Tz = tzpg.into();
println!("{}", tz);
// Tz can be serialized, unlike TzPg
serde_json::to_string(&tz)?;
// but TzPg can interface with Postgres
let mut client = Client::connect("host=localhost user=postgres", NoTls)?;
// timezone the column name, whose type is `tz`
// `tz` is a custom Postgres type
let row = client.query_one("SELECT timezone FROM foo LIMIT 1", &[])?;
let tz: TzPg = row.get(0);
// Convert back to Tz to do more
let tz: Tz = tz.into();
println!("{}", tz);
Ok(())
}