Rust Diesel:特性约束`NaiveDateTime: Deserialize<'_>`未满足。

18

我是rust和diesel的新手,正在尝试使用rocket框架创建一个小型演示api。
出现错误:无法满足特性约束NaiveDateTime: Deserialize<'_>

我搜寻并找到了一些有用的链接,例如这里:https://github.com/serde-rs/serde/issues/759
看起来是版本存在问题。

以下是我的文件:
schema.rs

table! {
    department (dept_id) {
        dept_id -> Int4,
        dept_name -> Nullable<Text>,
        created_on -> Nullable<Timestamp>,
        created_by -> Nullable<Text>,
        modified_on -> Nullable<Timestamp>,
        modified_by -> Nullable<Text>,
        is_active -> Nullable<Bool>,
    }
}

cargo.toml

[dependencies]
diesel = { version = "1.4.5", features = ["postgres","chrono","numeric"] }
dotenv = "0.15.0"
chrono = { version = "0.4.19" }
bigdecimal = { version = "0.1.0" }
rocket = "0.4.6"
rocket_codegen = "0.4.6"
r2d2-diesel = "1.0.0"
r2d2 = "0.8.9"
serde = { version = "1.0.118", features = ["derive"] }
serde_derive = "1.0.118"
serde_json = "1.0.60"

[dependencies.rocket_contrib]
version = "*"
default-features = false
features = ["json"]

model.rs

#![allow(unused)]
#![allow(clippy::all)]

use super::schema::department;
use serde::Serialize;
use serde::Deserialize;

use chrono::NaiveDateTime;
use bigdecimal::BigDecimal;
#[derive(Queryable, Debug, Identifiable, Serialize, Deserialize)]
#[primary_key(dept_id)]
#[table_name = "department"]
pub struct Department {
    pub dept_id: i32,
    pub dept_name: Option<String>,
    pub created_on: Option<NaiveDateTime>,
    pub created_by: Option<String>,
    pub modified_on: Option<NaiveDateTime>,
    pub modified_by: Option<String>,
    pub is_active: Option<bool>,
}

main.rs

#[macro_use]
extern crate diesel;
extern crate dotenv;
extern crate serde;
extern crate serde_derive;
extern crate serde_json;
extern crate chrono;
extern crate bigdecimal;

mod models;
mod schema;
mod connection;

fn main() {
    println!("Hello, Home!");
}

有人能帮我吗?
谢谢!


谢谢你问这个问题,我正需要完全相同的解决方案。 - Corfucinas
1个回答

38

Chrono有一些可选功能,您需要启用这些功能。 在此情况下,您需要在Cargo.toml中的chrono依赖项配置中将serde作为一个可选功能包含进去:

chrono = { version = "0.4", features = ["serde"] }

3
谢谢,对于我的情况,也可以通过执行 cargo add chrono --features serde 来解决。 - Aditya Kresna Permana
非常有用的答案。 - WeakPointer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接