diff --git a/Cargo.lock b/Cargo.lock index 8b5b30c..8901fff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -303,6 +303,7 @@ dependencies = [ "libc", "num-integer", "num-traits", + "serde", "time", "winapi", ] @@ -412,6 +413,7 @@ version = "0.0.2" dependencies = [ "regex", "rusqlite", + "serde", ] [[package]] @@ -1301,15 +1303,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.116" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5" +checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" -version = "1.0.116" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" +checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" dependencies = [ "proc-macro2", "quote", @@ -1394,9 +1399,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "syn" -version = "1.0.58" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5" +checksum = "f3a1d708c221c5a612956ef9f75b37e454e88d1f7b899fbd3a18d4252012d663" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index ac53802..af8435d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ serde = "1.0.116" serde_derive = "1.0.116" async-trait = "0.1.42" simple_logger = "1.11.0" -chrono = "0.4.19" +chrono = {version = "0.4.19", features = ["serde"]} [dependencies.fcpv2] path = "../FCPv2" diff --git a/src/api/handlers.rs b/src/api/handlers.rs index fdb16f1..fca116e 100644 --- a/src/api/handlers.rs +++ b/src/api/handlers.rs @@ -1,12 +1,15 @@ use super::request::*; +use super::response::User; +use super::response::UserList; +use crate::chat::types::PackedMessage; use crate::chat::types::SP; +use crate::db::{messages, users}; use async_std::io::Result; use rusqlite::Connection; -use crate::db::{messages, users}; -use crate::chat::types::PackedMessage; +use serde_json::json; pub fn start_app(request: StartAppReq, server_sender: &SP) -> Result<()> { Ok(()) - //sending *JSON*, what everything is OK + //sending *JSON*, what everything is OK } pub fn stop_app(request: StopAppReq, conn: &Connection, server_sender: &SP) -> Result<()> { @@ -14,13 +17,20 @@ pub fn stop_app(request: StopAppReq, conn: &Connection, server_sender: &SP) -> R } pub fn load_users(request: LoadUsersReq, conn: &Connection, server_sender: &SP) -> Result<()> { - let users = users::load_all_users(conn); - unimplemented!(); - //sending *JSON* + let jsoned_users: Vec<_> = users::load_all_users(conn) + .unwrap() + .into_iter() + .map(|x| x.to_jsonable()) + .collect(); + let users: String = serde_json::to_string(&UserList { + users: jsoned_users, + }).unwrap(); + let _ =server_sender.send(PackedMessage::ToClient(users)).unwrap(); + Ok(()) } pub fn send_message(request: SendMessageReq, conn: &Connection, server_sender: &SP) -> Result<()> { unimplemented!() - //sending FCP request + //sending FCP request } pub fn load_messages( @@ -29,9 +39,9 @@ pub fn load_messages( server_sender: &SP, ) -> Result<()> { unimplemented!() - //sending *JSON* + //sending *JSON* } pub fn add_user(request: AddUserReq, conn: &Connection, server_sender: &SP) -> Result<()> { unimplemented!() - //sending *JSON* what user is created + //sending *JSON* what user is created } diff --git a/src/api/response.rs b/src/api/response.rs index ec6a923..a961e7e 100644 --- a/src/api/response.rs +++ b/src/api/response.rs @@ -1,5 +1,7 @@ - +use crate::db::types::User as SqliteUser; use serde_derive::{Deserialize, Serialize}; +use crate::db::types::SignKey; +pub type InsertKey = String; #[derive(Serialize, Deserialize)] enum ResponseType{ Error, @@ -25,3 +27,19 @@ struct AppError{ struct ActionStatus{ } + + +#[derive(Debug, Deserialize, Serialize)] +pub struct User { + pub id: u32, + pub name: String, + pub sign_key: SignKey, + pub insert_key: InsertKey, + pub messages_count: u32, +} + + +#[derive(Serialize, Deserialize)] +pub struct UserList{ + pub users: Vec +} diff --git a/src/api/selector.rs b/src/api/selector.rs index f913a00..9714255 100644 --- a/src/api/selector.rs +++ b/src/api/selector.rs @@ -37,7 +37,3 @@ pub async fn request_selector(json: String, server_sender: &SP, conn: &Connectio )) } -#[test] -fn is_making_correct_jsons() { - let json = from_str::("{\"req_type\":\"StartAppReq\"}").unwrap(); -} diff --git a/src/db/types.rs b/src/db/types.rs index acc0ac3..434b82d 100644 --- a/src/db/types.rs +++ b/src/db/types.rs @@ -1,13 +1,15 @@ use chrono::prelude::*; use fcpv2::types::{traits::FcpRequest, SSK}; +use serde_derive::{Serialize, Deserialize}; +use crate::api::response::User as JsonableUser; pub const DB_PATH: &str = "hole.db"; pub type SignKey = String; pub type InsertKey = SSK; -#[derive(Debug)] +#[derive(Debug, Deserialize, Serialize)] pub struct User { pub id: u32, pub name: String, @@ -16,7 +18,19 @@ pub struct User { pub messages_count: u32, } -#[derive(Debug)] +impl User{ + pub fn to_jsonable(self) -> JsonableUser{ + JsonableUser{ + id: self.id, + name: self.name, + sign_key: self.sign_key, + insert_key: SSK::convert(&self.insert_key), + messages_count: self.messages_count + } + } +} + +#[derive(Debug, Deserialize, Serialize)] pub struct Message { pub id: u32, pub date: NaiveDateTime,