user12510970
user12510970

Reputation:

Rust Diesel not building with error use of undeclared crate or module

I am trying to create my first Rust app with database support, I am using Diesel with SQLite, whenever I build my application I get the following error message:

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

and finally my main.rs:

mod models;
fn main() {

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

I tried to add use schema::* to my model.rs to no success as the model is not found. I also tried this solution to no success.

I cannot get to use the correct scopes, I am new to rust, I still getting used to its paradigm

Upvotes: 8

Views: 4906

Answers (1)

Ibraheem Ahmed
Ibraheem Ahmed

Reputation: 13568

Diesel assumes that your table name is the plural, snake-case form of your struct name. Because your table name does not follow this convention you can specify the table name explicitly:

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

Upvotes: 5

Related Questions