#chrono #duration #diesel #time

diesel-chrono-duration

为diesel添加chrono::Duration支持

3个版本 (稳定)

1.1.0 2023年12月5日
1.0.0 2019年6月15日
0.1.0 2018年2月16日

日期和时间 类别中排名第 149

每月下载量 24

MIT 许可证

7KB

diesel-chrono-duration

CI MIT licensed

此crate将chrono::Duration类型支持添加到diesel ORM中。

为什么

Diesel crate只包含可以表示为SQL类型的类型实现。而chrono::Duration在SQLite和PostgreSQL中都没有直接的1对1映射。

如何

chrono::Duration类型将其值存储为i64数字。这正好是8个字节,这样的类型是BigIntegerBigInt。因此,ToSqlFromSql特质的实现简单地使用chrono::Duration的内部i64值。

使用方法

为了实现这一点,我们添加了ChronoDurationProxy类型,它是一个强类型,定义为

pub struct ChronoDurationProxy(pub chrono::Duration);

在您的表模型中,您使用它而不是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,
}

稍后,当您想将其值作为chrono::Duration使用时,您有这些选项

  • *duration返回内部chrono::Duration对象的引用。这是通过Deref特质完成的。
  • &duration也返回内部chrono::Duration对象的引用。这是通过AsRef特质完成的。
  • duration.0 如同普通的Rust。

贡献

这个项目非常简单且小巧,但所有贡献都是“请做出贡献”。提前感谢。

许可证

本项目采用MIT许可证

依赖

~4.5MB
~80K SLoC