Rust Diesel не строится с ошибкой при использовании необъявленного ящика или модуля

Я пытаюсь создать свое первое приложение Rust с поддержкой базы данных, я использую Diesel с SQLite, всякий раз, когда я создаю свое приложение, я получаю следующее сообщение об ошибке:

failed to resolve: use of undeclared crate or module `categorys`
  --> src/models.rs:14:12
   |
14 | pub struct Category {
   |            ^^^^^^^^ use of undeclared crate or module `categorys`

error[E0433]: failed to resolve: use of undeclared crate or module `correspondents`
  --> src/models.rs:21:12
   |
21 | pub struct Correspondent {
   |            ^^^^^^^^^^^^^ use of undeclared crate or module `correspondents`

error[E0433]: failed to resolve: use of undeclared crate or module `doctypes`
  --> src/models.rs:27:12
   |
27 | pub struct Doctype {
   |            ^^^^^^^ use of undeclared crate or module `doctypes`

error[E0433]: failed to resolve: use of undeclared crate or module `documents`
  --> src/models.rs:37:12
   |
37 | pub struct Document {
   |            ^^^^^^^^ use of undeclared crate or module `documents`

error: aborting due to 4 previous errors

My cargo.toml:

[package]
name = "Rekorder"
version = "0.1.0"
authors = ["ossama"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
diesel = { version = "1.4.4", features = ["sqlite"] }
diesel_cli_ext = "0.3.6"
dotenv = "0.15.0"
chrono = "0.4"

[dependencies.gtk]
version = "0.9.0"
features = ["v3_16"]

[dependencies.gio]
version = ""
features = ["v2_44"]

My models.rs:

// Generated by diesel_ext

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


use chrono::NaiveDate;
use diesel::Queryable;
use diesel::Identifiable;
use diesel::sql_types::Binary;


#[derive(Queryable, Debug, Identifiable)]
pub struct Category {
    pub id: i32,
    pub name: String,
    pub color: Option<i32>,
}

#[derive(Queryable, Debug, Identifiable)]
pub struct Correspondent {
    pub id: i32,
    pub name: String,
}

#[derive(Queryable, Debug, Identifiable)]
pub struct Doctype {
    pub id: i32,
    pub name: String,
    pub correspondent_name: Option<String>,
    pub support_extra_date_number: Option<bool>,
    pub icon: Option<Binary>,
}

#[derive(Queryable, Debug, Identifiable)]
#[primary_key(number, date_of_document, doc_type_id)]
pub struct Document {
    pub number: i32,
    pub date_of_document: NaiveDate,
    pub doc_type_id: i32,
    pub extra_number: Option<String>,
    pub extra_date: Option<NaiveDate>,
    pub correspondent_id: i32,
    pub content: String,
    pub notes: Option<String>,
    pub category_id: Option<i32>,
    pub document_file_name: Option<String>,
    pub document_file_size: Option<i32>,
    pub document_file: Option<Binary>,
}

My schema.rs:

table! {
    category (id) {
        id -> Integer,
        name -> Text,
        color -> Nullable<Integer>,
    }
}

table! {
    correspondent (id) {
        id -> Integer,
        name -> Text,
    }
}

table! {
    doctype (id) {
        id -> Integer,
        name -> Text,
        correspondent_name -> Nullable<Text>,
        support_extra_date_number -> Nullable<Bool>,
        icon -> Nullable<Binary>,
    }
}

table! {
    document (number, date_of_document, doc_type_id) {
        number -> Integer,
        date_of_document -> Date,
        doc_type_id -> Integer,
        extra_number -> Nullable<Text>,
        extra_date -> Nullable<Date>,
        correspondent_id -> Integer,
        content -> Text,
        notes -> Nullable<Text>,
        category_id -> Nullable<Integer>,
        document_file_name -> Nullable<Text>,
        document_file_size -> Nullable<Integer>,
        document_file -> Nullable<Binary>,
    }
}

joinable!(document -> category (category_id));
joinable!(document -> correspondent (correspondent_id));
joinable!(document -> doctype (doc_type_id));

allow_tables_to_appear_in_same_query!(
    category,
    correspondent,
    doctype,
    document,
);

и наконец мой main.rs:

mod models;
fn main() {

    println!("Hello, world!");
}

Я попытался добавить use schema::* к своему model.rs, но безуспешно, так как модель не нашлась. Я также попробовал это решение Безуспешно.

Я не могу использовать правильные прицелы, я новичок в ржавчине, я все еще привыкаю к ​​ее парадигме


person Ossama Nasser    schedule 27.02.2021    source источник


Ответы (1)


Diesel предполагает, что имя вашей таблицы - это форма множественного числа в форме змеи от имени вашей структуры. Поскольку имя вашей таблицы не соответствует этому соглашению, вы можете явно указать имя таблицы:

#[derive(Queryable, Identifiable)]
#[table_name = "category"]
pub struct Category {
    // ...
}

#[derive(Queryable, Identifiable)]
#[table_name = "correspondent"]
pub struct Correspondent {
    // ...
}

// and do the same to the rest of your models...
person Ibraheem Ahmed    schedule 28.02.2021