Crates.io | diesel-chrono-duration |
lib.rs | diesel-chrono-duration |
version | 1.1.0 |
source | src |
created_at | 2018-02-16 15:13:44.03516 |
updated_at | 2023-12-05 18:12:14.416955 |
description | Adds chrono::Duration support to the diesel |
homepage | |
repository | https://github.com/iddm/diesel-chrono-duration |
max_upload_size | |
id | 51408 |
size | 8,430 |
This crate adds support for the chrono::Duration
type into the diesel
ORM.
Diesel crate has a policy of including only such type implementations which can be represented as is in the SQL types. chrono::Duration
does not have a direct 1-to-1 mapping in both the SQLite
and PostgreSQL
.
The chrono::Duration
type stores its value as i64
number. This is exactly 8 bytes and such types are BigInteger
and BigInt
. So, the ToSql
and FromSql
traits implementation simply uses chrono::Duration
's inner
i64
value.
To implement this we added ChronoDurationProxy
type which is just a strong type as defined as:
pub struct ChronoDurationProxy(pub chrono::Duration);
In your table model you use it instead of chrono::Duration
:
extern crate diesel_chrono_duration;
use diesel_chrono_duration::ChronoDurationProxy;
#[derive(Debug, Clone, Queryable, Insertable)]
#[table_name = "sometable"]
pub struct SomeTable {
/// The ID of the record in the table.
pub id: i32,
/// Some duration
pub duration: ChronoDurationProxy,
}
Later, when you want to use it's value as chrono::Duration
you have these options:
*duration
returns a reference to the inner chrono::Duration
object. It is done by the Deref
trait.&duration
also returns a reference to the inner chrono::Duration
object. It is done by the AsRef
trait.duration.0
as in usual rust.The project is very simple and small but all contributions are "please make a contribution". Thanks in advance.
This project is licensed under the MIT license.