From 99d28adf5e825713f64cad6cb14711ce82bc2692 Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Fri, 6 Sep 2024 12:20:43 +0200 Subject: [PATCH 1/6] derive serialize and deserialize for PostfixExpression --- Cargo.toml | 1 + src/enums/operator.rs | 4 +++- src/enums/postfix_token.rs | 3 ++- src/structs/postfix_expression.rs | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 58dd44d..52c238f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] +serde = { version = "1.0.209", features = ["derive"] } diff --git a/src/enums/operator.rs b/src/enums/operator.rs index d55fa54..6500a81 100644 --- a/src/enums/operator.rs +++ b/src/enums/operator.rs @@ -1,4 +1,6 @@ -#[derive(PartialEq, Copy, Clone, Debug)] +use serde::{Deserialize, Serialize}; + +#[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] pub enum Operator { And, Or, diff --git a/src/enums/postfix_token.rs b/src/enums/postfix_token.rs index d613dd2..90107a3 100644 --- a/src/enums/postfix_token.rs +++ b/src/enums/postfix_token.rs @@ -1,6 +1,7 @@ +use serde::{Deserialize, Serialize}; use crate::enums::operator::Operator; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Serialize, Deserialize)] pub enum PostfixToken { Operator(Operator), Predicate(Predicate), diff --git a/src/structs/postfix_expression.rs b/src/structs/postfix_expression.rs index 91b7c23..f586e4e 100644 --- a/src/structs/postfix_expression.rs +++ b/src/structs/postfix_expression.rs @@ -3,8 +3,9 @@ use crate::internals::postfix_stack_item::PostfixStackItem; use crate::traits::predicate_evaluator::PredicateEvaluator; use crate::{InfixExpression, InfixToken, Operator, Parenthesis}; use std::collections::VecDeque; +use serde::{Deserialize, Serialize}; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Serialize, Deserialize)] pub struct PostfixExpression { tokens: Vec>, } From a68e2910d311eee1b9a296d5faddab1327c9a013 Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Fri, 6 Sep 2024 12:45:04 +0200 Subject: [PATCH 2/6] improve serde representation --- src/enums/operator.rs | 1 + src/enums/postfix_token.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/enums/operator.rs b/src/enums/operator.rs index 6500a81..bb58c4e 100644 --- a/src/enums/operator.rs +++ b/src/enums/operator.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; #[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] pub enum Operator { And, Or, diff --git a/src/enums/postfix_token.rs b/src/enums/postfix_token.rs index 90107a3..3fbeb13 100644 --- a/src/enums/postfix_token.rs +++ b/src/enums/postfix_token.rs @@ -2,6 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::enums::operator::Operator; #[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "type")] pub enum PostfixToken { Operator(Operator), Predicate(Predicate), From 0314eee698befbd1a46412c99bce772014524e34 Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Fri, 6 Sep 2024 13:23:00 +0200 Subject: [PATCH 3/6] improve serde representation --- src/enums/operator.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enums/operator.rs b/src/enums/operator.rs index bb58c4e..1b1206a 100644 --- a/src/enums/operator.rs +++ b/src/enums/operator.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; #[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] +#[serde(rename_all = "snake_case", tag = "value")] pub enum Operator { And, Or, From b5fcc8e588178010c4d762696ce02d5e83bdbacd Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Fri, 6 Sep 2024 13:41:23 +0200 Subject: [PATCH 4/6] make PostfixExpression::are_tokens_valid public --- src/structs/postfix_expression.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/structs/postfix_expression.rs b/src/structs/postfix_expression.rs index f586e4e..802d3c8 100644 --- a/src/structs/postfix_expression.rs +++ b/src/structs/postfix_expression.rs @@ -86,7 +86,7 @@ impl PostfixExpression { Self { tokens } } - fn are_tokens_valid(tokens: &[PostfixToken]) -> bool { + pub fn are_tokens_valid(tokens: &[PostfixToken]) -> bool { let mut cnt: usize = 0; for token in tokens { From f0c69c439cdae59cc546cca42151cbed5437631d Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Fri, 6 Sep 2024 13:44:30 +0200 Subject: [PATCH 5/6] create PostfixExpression::is_valid --- src/structs/postfix_expression.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/structs/postfix_expression.rs b/src/structs/postfix_expression.rs index 802d3c8..5012e2b 100644 --- a/src/structs/postfix_expression.rs +++ b/src/structs/postfix_expression.rs @@ -86,7 +86,11 @@ impl PostfixExpression { Self { tokens } } - pub fn are_tokens_valid(tokens: &[PostfixToken]) -> bool { + pub fn is_valid(&self) -> bool { + Self::are_tokens_valid(&self.tokens) + } + + fn are_tokens_valid(tokens: &[PostfixToken]) -> bool { let mut cnt: usize = 0; for token in tokens { From 5badf0529579cecde82eec448c3997f53799557b Mon Sep 17 00:00:00 2001 From: GyulyVGC Date: Mon, 9 Sep 2024 12:23:40 +0200 Subject: [PATCH 6/6] serde for InfixExpression --- Cargo.toml | 2 +- src/enums/infix_token.rs | 4 +++- src/enums/parenthesis.rs | 5 ++++- src/enums/postfix_token.rs | 2 +- src/structs/infix_expression.rs | 9 ++++++++- src/structs/postfix_expression.rs | 4 +++- 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 52c238f..6dc0989 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,4 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] -serde = { version = "1.0.209", features = ["derive"] } +serde = { version = "1.0.210", features = ["derive"] } diff --git a/src/enums/infix_token.rs b/src/enums/infix_token.rs index 9f97da3..16df5ad 100644 --- a/src/enums/infix_token.rs +++ b/src/enums/infix_token.rs @@ -1,7 +1,9 @@ use crate::enums::operator::Operator; use crate::Parenthesis; +use serde::{Deserialize, Serialize}; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "type")] pub enum InfixToken { Parenthesis(Parenthesis), Operator(Operator), diff --git a/src/enums/parenthesis.rs b/src/enums/parenthesis.rs index ee7ff5d..5da0e4c 100644 --- a/src/enums/parenthesis.rs +++ b/src/enums/parenthesis.rs @@ -1,4 +1,7 @@ -#[derive(Debug, PartialEq)] +use serde::{Deserialize, Serialize}; + +#[derive(PartialEq, Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "value")] pub enum Parenthesis { Open, Close, diff --git a/src/enums/postfix_token.rs b/src/enums/postfix_token.rs index 3fbeb13..d013e71 100644 --- a/src/enums/postfix_token.rs +++ b/src/enums/postfix_token.rs @@ -1,5 +1,5 @@ -use serde::{Deserialize, Serialize}; use crate::enums::operator::Operator; +use serde::{Deserialize, Serialize}; #[derive(Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] diff --git a/src/structs/infix_expression.rs b/src/structs/infix_expression.rs index 4370682..b9b38fe 100644 --- a/src/structs/infix_expression.rs +++ b/src/structs/infix_expression.rs @@ -1,8 +1,11 @@ use crate::internals::infix_stack_item::InfixStackItem; use crate::{InfixToken, Parenthesis, PostfixExpression, PostfixToken}; +use serde::{Deserialize, Serialize}; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] pub struct InfixExpression { + #[serde(rename = "infix_tokens")] tokens: Vec>, } @@ -58,6 +61,10 @@ impl InfixExpression { Self { tokens } } + pub fn is_valid(&self) -> bool { + Self::are_tokens_valid(&self.tokens) + } + fn are_tokens_valid(tokens: &[InfixToken]) -> bool { let mut operator_stack: Vec = Vec::new(); let mut predicate_cnt: usize = 0; diff --git a/src/structs/postfix_expression.rs b/src/structs/postfix_expression.rs index 5012e2b..70ff4ae 100644 --- a/src/structs/postfix_expression.rs +++ b/src/structs/postfix_expression.rs @@ -2,11 +2,13 @@ use crate::enums::postfix_token::PostfixToken; use crate::internals::postfix_stack_item::PostfixStackItem; use crate::traits::predicate_evaluator::PredicateEvaluator; use crate::{InfixExpression, InfixToken, Operator, Parenthesis}; -use std::collections::VecDeque; use serde::{Deserialize, Serialize}; +use std::collections::VecDeque; #[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] pub struct PostfixExpression { + #[serde(rename = "postfix_tokens")] tokens: Vec>, }