3 votes

Rust Diesel ne construit pas avec l'erreur d'utilisation d'un crate ou d'un module non déclaré

J'essaie de créer ma première application Rust avec un support de base de données, j'utilise Diesel avec SQLite, chaque fois que je construis mon application, j'obtiens le message d'erreur suivant :

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

Mon 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"]

Mon 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>,
}

Mon 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,
);

et enfin mon main.rs :

mod models;
fn main() {

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

J'ai essayé d'ajouter use schema::* à mon model.rs sans succès car le modèle n'est pas trouvé. J'ai également essayé cette solution sans succès.

Je n'arrive pas à utiliser les bonnes lunettes de visée, je suis nouveau dans la rouille, je m'habitue encore à son paradigme.

1voto

Ibraheem Ahmed Points 5030

Diesel suppose que le nom de votre table est la forme plurielle de votre nom de structure. Si votre nom de table ne suit pas cette convention, vous pouvez le spécifier explicitement :

#[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...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X