Skip to content

Commit c6aee1c

Browse files
authored
Merge pull request #5 from GyulyVGC/serde
Serde
2 parents 76966b4 + 5badf05 commit c6aee1c

File tree

7 files changed

+31
-6
lines changed

7 files changed

+31
-6
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ version = "0.1.0"
44
edition = "2021"
55

66
[dependencies]
7+
serde = { version = "1.0.210", features = ["derive"] }

src/enums/infix_token.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use crate::enums::operator::Operator;
22
use crate::Parenthesis;
3+
use serde::{Deserialize, Serialize};
34

4-
#[derive(Debug, PartialEq)]
5+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
6+
#[serde(rename_all = "snake_case", tag = "type")]
57
pub enum InfixToken<Predicate> {
68
Parenthesis(Parenthesis),
79
Operator(Operator),

src/enums/operator.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
#[derive(PartialEq, Copy, Clone, Debug)]
1+
use serde::{Deserialize, Serialize};
2+
3+
#[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)]
4+
#[serde(rename_all = "snake_case", tag = "value")]
25
pub enum Operator {
36
And,
47
Or,

src/enums/parenthesis.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
#[derive(Debug, PartialEq)]
1+
use serde::{Deserialize, Serialize};
2+
3+
#[derive(PartialEq, Debug, Serialize, Deserialize)]
4+
#[serde(rename_all = "snake_case", tag = "value")]
25
pub enum Parenthesis {
36
Open,
47
Close,

src/enums/postfix_token.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use crate::enums::operator::Operator;
2+
use serde::{Deserialize, Serialize};
23

3-
#[derive(Debug, PartialEq)]
4+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
5+
#[serde(rename_all = "snake_case", tag = "type")]
46
pub enum PostfixToken<Predicate> {
57
Operator(Operator),
68
Predicate(Predicate),

src/structs/infix_expression.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
use crate::internals::infix_stack_item::InfixStackItem;
22
use crate::{InfixToken, Parenthesis, PostfixExpression, PostfixToken};
3+
use serde::{Deserialize, Serialize};
34

4-
#[derive(Debug, PartialEq)]
5+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
6+
#[serde(rename_all = "snake_case")]
57
pub struct InfixExpression<Predicate> {
8+
#[serde(rename = "infix_tokens")]
69
tokens: Vec<InfixToken<Predicate>>,
710
}
811

@@ -58,6 +61,10 @@ impl<Predicate> InfixExpression<Predicate> {
5861
Self { tokens }
5962
}
6063

64+
pub fn is_valid(&self) -> bool {
65+
Self::are_tokens_valid(&self.tokens)
66+
}
67+
6168
fn are_tokens_valid(tokens: &[InfixToken<Predicate>]) -> bool {
6269
let mut operator_stack: Vec<InfixStackItem> = Vec::new();
6370
let mut predicate_cnt: usize = 0;

src/structs/postfix_expression.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ use crate::enums::postfix_token::PostfixToken;
22
use crate::internals::postfix_stack_item::PostfixStackItem;
33
use crate::traits::predicate_evaluator::PredicateEvaluator;
44
use crate::{InfixExpression, InfixToken, Operator, Parenthesis};
5+
use serde::{Deserialize, Serialize};
56
use std::collections::VecDeque;
67

7-
#[derive(Debug, PartialEq)]
8+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
9+
#[serde(rename_all = "snake_case")]
810
pub struct PostfixExpression<Predicate> {
11+
#[serde(rename = "postfix_tokens")]
912
tokens: Vec<PostfixToken<Predicate>>,
1013
}
1114

@@ -85,6 +88,10 @@ impl<Predicate> PostfixExpression<Predicate> {
8588
Self { tokens }
8689
}
8790

91+
pub fn is_valid(&self) -> bool {
92+
Self::are_tokens_valid(&self.tokens)
93+
}
94+
8895
fn are_tokens_valid(tokens: &[PostfixToken<Predicate>]) -> bool {
8996
let mut cnt: usize = 0;
9097

0 commit comments

Comments
 (0)