Skip to content

iddm/diesel-chrono-duration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

diesel-chrono-duration

CI MIT licensed

This crate adds support for the chrono::Duration type into the diesel ORM.

Why

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.

How

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.

Usage

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.

Contribute

The project is very simple and small but all contributions are "please make a contribution". Thanks in advance.

License

This project is licensed under the MIT license.

About

Adds chrono duration support for the diesel ORM

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages