From f37a230f0206d4eb4800cc8158302d718a3520ce Mon Sep 17 00:00:00 2001 From: Horhik Date: Sun, 28 Mar 2021 21:20:37 +0300 Subject: [PATCH] impl Serialize for SSK (serde json) --- Cargo.toml | 5 +++++ src/lib.rs | 4 ++++ src/types/key.rs | 46 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7fe5528..40b4c1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,8 @@ description = "Implementation of FCPv2 freenet protocol" [dependencies] regex = "1.4.3" rusqlite = "0.24.2" +serde = { version = "1.0", features = ["derive"] } +[dev-dependencies] +serde_json = "1.0" + + diff --git a/src/lib.rs b/src/lib.rs index 0839fed..dc1d252 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,7 @@ pub mod types; pub mod client; pub mod node; + + +#[cfg(test)] +extern crate serde_json; diff --git a/src/types/key.rs b/src/types/key.rs index bfcaff7..fd6a544 100644 --- a/src/types/key.rs +++ b/src/types/key.rs @@ -1,7 +1,13 @@ use super::traits::{FcpParser, FcpRequest}; use rusqlite::types::ToSqlOutput; -use rusqlite::{Result, ToSql, types::{FromSql, ValueRef, FromSqlResult, FromSqlError}}; +use rusqlite::{ + types::{FromSql, FromSqlError, FromSqlResult, ValueRef}, + Result, ToSql, +}; +extern crate serde; +use serde::ser::{SerializeStruct, Serializer}; +use serde::Serialize ; #[derive(Debug, PartialEq)] pub struct SSK { pub sign_key: String, @@ -16,19 +22,51 @@ impl ToSql for SSK { } /// converting from rusqlite type to SSK -impl FromSql for SSK{ - fn column_result(value: ValueRef<'_>) -> FromSqlResult{ +impl FromSql for SSK { + fn column_result(value: ValueRef<'_>) -> FromSqlResult { match SSK::parse(value.as_str()?) { Some(res) => Ok(res), - None => Err(FromSqlError::InvalidType) + None => Err(FromSqlError::InvalidType), } } } +impl serde::ser::Serialize for SSK { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + // 3 is the number of fields in the struct. + serializer.serialize_str(&self.convert()[..]) + } +} #[derive(Debug, PartialEq)] pub struct USK { pub ssk: SSK, pub index: i32, } +#[cfg(test)] +mod tests { + use types::traits::FcpRequest; + use crate::types::SSK; + use crate::*; + #[test] + fn is_serializing() { + let ssk:SSK = SSK { + sign_key: "AKTTKG6YwjrHzWo67laRcoPqibyiTdyYufjVg54fBlWr".to_string(), + decrypt_key: "AwUSJG5ZS-FDZTqnt6skTzhxQe08T-fbKXj8aEHZsXM".to_string(), + settings: None + }; + let json = serde_json::json!(&ssk); + + + + assert_eq!("SSK@AKTTKG6YwjrHzWo67laRcoPqibyiTdyYufjVg54fBlWr,AwUSJG5ZS-FDZTqnt6skTzhxQe08T-fbKXj8aEHZsXM", json); + assert_eq!("SSK@AKTTKG6YwjrHzWo67laRcoPqibyiTdyYufjVg54fBlWr,AwUSJG5ZS-FDZTqnt6skTzhxQe08T-fbKXj8aEHZsXM", &ssk.convert()); + + + + } +}