Switch character data type to an enum, including schema patch.
Schema patch required because the diesel enum derive crate does not seem to deal with print-schema for sqlite.
This commit is contained in:
parent
0c09a3fdef
commit
245bd4f2cc
|
@ -342,6 +342,18 @@ dependencies = [
|
||||||
"r2d2",
|
"r2d2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "diesel-derive-enum"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "703e71c268ea2d8da9c0ab0b40d8b217179ee622209c170875d24443193a0dfb"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2 1.0.24",
|
||||||
|
"quote 1.0.7",
|
||||||
|
"syn 1.0.53",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diesel_derives"
|
name = "diesel_derives"
|
||||||
version = "1.4.1"
|
version = "1.4.1"
|
||||||
|
@ -1436,6 +1448,7 @@ name = "tenebrous-sheets"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"diesel",
|
"diesel",
|
||||||
|
"diesel-derive-enum",
|
||||||
"log 0.4.11",
|
"log 0.4.11",
|
||||||
"prost",
|
"prost",
|
||||||
"prost-build",
|
"prost-build",
|
||||||
|
|
|
@ -14,6 +14,7 @@ serde = "1.0"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
diesel = "1.4"
|
diesel = "1.4"
|
||||||
|
diesel-derive-enum = { version = "1", features = ["sqlite"] }
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
rust-argon2 = "0.8"
|
rust-argon2 = "0.8"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
|
|
@ -3,3 +3,5 @@
|
||||||
|
|
||||||
[print_schema]
|
[print_schema]
|
||||||
file = "src/schema.rs"
|
file = "src/schema.rs"
|
||||||
|
import_types = ["diesel::sql_types::*", "crate::models::characters::*"]
|
||||||
|
patch_file = "src/schema.patch"
|
|
@ -3,7 +3,7 @@ CREATE TABLE characters(
|
||||||
user_id INTEGER NOT NULL,
|
user_id INTEGER NOT NULL,
|
||||||
viewable BOOLEAN NOT NULL,
|
viewable BOOLEAN NOT NULL,
|
||||||
character_name TEXT NOT NULL,
|
character_name TEXT NOT NULL,
|
||||||
data_type TEXT NOT NULL,
|
data_type TEXT CHECK(data_type IN ('chronicles_of_darkness_v1', 'changeling_v1')) NOT NULL,
|
||||||
data_version INTEGER NOT NULL,
|
data_version INTEGER NOT NULL,
|
||||||
data BLOB NOT NULL
|
data BLOB NOT NULL
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::models::users::User;
|
use crate::models::users::User;
|
||||||
use crate::schema::characters;
|
use crate::schema::characters;
|
||||||
|
use diesel_derive_enum::DbEnum;
|
||||||
use serde_derive::Serialize;
|
use serde_derive::Serialize;
|
||||||
|
|
||||||
/// Control system visibility of a character for a particular user.
|
/// Control system visibility of a character for a particular user.
|
||||||
|
@ -29,6 +30,12 @@ pub(crate) trait Visibility {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(DbEnum, Debug, Serialize, PartialEq)]
|
||||||
|
pub enum CharacterDataType {
|
||||||
|
ChroniclesOfDarknessV1,
|
||||||
|
ChangelingV1,
|
||||||
|
}
|
||||||
|
|
||||||
/// An entry that appears in a user's character list. Properties are
|
/// An entry that appears in a user's character list. Properties are
|
||||||
/// in order of table columns.
|
/// in order of table columns.
|
||||||
#[derive(Serialize, Debug, Queryable)]
|
#[derive(Serialize, Debug, Queryable)]
|
||||||
|
@ -37,7 +44,7 @@ pub struct Character {
|
||||||
pub user_id: i32,
|
pub user_id: i32,
|
||||||
pub viewable: bool,
|
pub viewable: bool,
|
||||||
pub character_name: String,
|
pub character_name: String,
|
||||||
pub data_type: String,
|
pub data_type: CharacterDataType,
|
||||||
pub data_version: i32,
|
pub data_version: i32,
|
||||||
pub data: Vec<u8>,
|
pub data: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
@ -58,7 +65,7 @@ pub struct StrippedCharacter {
|
||||||
pub user_id: i32,
|
pub user_id: i32,
|
||||||
pub viewable: bool,
|
pub viewable: bool,
|
||||||
pub character_name: String,
|
pub character_name: String,
|
||||||
pub data_type: String,
|
pub data_type: CharacterDataType,
|
||||||
pub data_version: i32,
|
pub data_version: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +87,7 @@ pub struct NewCharacter<'a> {
|
||||||
pub user_id: i32,
|
pub user_id: i32,
|
||||||
pub viewable: bool,
|
pub viewable: bool,
|
||||||
pub character_name: &'a str,
|
pub character_name: &'a str,
|
||||||
pub data_type: &'a str,
|
pub data_type: CharacterDataType,
|
||||||
pub data_version: i32,
|
pub data_version: i32,
|
||||||
pub data: &'a [u8],
|
pub data: &'a [u8],
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
This patch converts the generated schema to an enum type.
|
||||||
|
--- a/src/schema.rs
|
||||||
|
+++ b/src/schema.rs
|
||||||
|
@@ -4,13 +4,13 @@ table! {
|
||||||
|
|
||||||
|
characters (id) {
|
||||||
|
id -> Integer,
|
||||||
|
user_id -> Integer,
|
||||||
|
viewable -> Bool,
|
||||||
|
character_name -> Text,
|
||||||
|
- data_type -> Text,
|
||||||
|
+ data_type -> CharacterDataTypeMapping,
|
||||||
|
data_version -> Integer,
|
||||||
|
data -> Binary,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table! {
|
|
@ -1,16 +1,22 @@
|
||||||
table! {
|
table! {
|
||||||
|
use diesel::sql_types::*;
|
||||||
|
use crate::models::characters::*;
|
||||||
|
|
||||||
characters (id) {
|
characters (id) {
|
||||||
id -> Integer,
|
id -> Integer,
|
||||||
user_id -> Integer,
|
user_id -> Integer,
|
||||||
viewable -> Bool,
|
viewable -> Bool,
|
||||||
character_name -> Text,
|
character_name -> Text,
|
||||||
data_type -> Text,
|
data_type -> CharacterDataTypeMapping,
|
||||||
data_version -> Integer,
|
data_version -> Integer,
|
||||||
data -> Binary,
|
data -> Binary,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
table! {
|
table! {
|
||||||
|
use diesel::sql_types::*;
|
||||||
|
use crate::models::characters::*;
|
||||||
|
|
||||||
users (id) {
|
users (id) {
|
||||||
id -> Integer,
|
id -> Integer,
|
||||||
username -> Text,
|
username -> Text,
|
||||||
|
|
Loading…
Reference in New Issue