From 6bdcd1273b9b48328ff21fbd78eb82284ea71494 Mon Sep 17 00:00:00 2001 From: lurchi Date: Thu, 5 Jan 2017 22:37:46 +0100 Subject: [PATCH] PsycOperator instead of char let the parser return PsycOperator instead of char. Move the type definitions PsycOperator and PsycStateOp to types.rs because they are commonly used. --- rust/src/lib.rs | 2 +- rust/src/packet.rs | 2 +- rust/src/packet_types.rs | 18 ------------------ rust/src/parser.rs | 6 +++--- rust/src/parser_types.rs | 8 ++++---- rust/src/types.rs | 20 ++++++++++++++++++++ rust/tests/test_parser.rs | 12 ++++++------ 7 files changed, 35 insertions(+), 33 deletions(-) diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 6625892..34b36cd 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -32,6 +32,6 @@ pub use text::Text; pub use text_types::SubstitutionResult; pub use uniform::Uniform; pub use uniform_types::{UniformParseError, PsycScheme, PsycEntity}; -pub use packet_types::{PsycOperator, PsycStateOp}; +pub use types::{PsycOperator, PsycStateOp}; pub use variable::{RoutingVariable, EntityVariable, Variable}; pub use variable_types::{PsycRoutingVar, PsycType}; diff --git a/rust/src/packet.rs b/rust/src/packet.rs index ad0ea32..7066b37 100644 --- a/rust/src/packet.rs +++ b/rust/src/packet.rs @@ -1,4 +1,4 @@ -use types::PsycString; +use types::{PsycString, PsycOperator, PsycStateOp}; use packet_types::*; use packet_id::PacketId; use util; diff --git a/rust/src/packet_types.rs b/rust/src/packet_types.rs index a159310..f94dec3 100644 --- a/rust/src/packet_types.rs +++ b/rust/src/packet_types.rs @@ -43,24 +43,6 @@ pub enum PsycPacketId { PSYC_PACKET_ID_ELEMS = 5, } -#[derive(Copy, Clone)] -#[repr(C)] -pub enum PsycOperator { - PSYC_OPERATOR_SET = ':' as _, - PSYC_OPERATOR_ASSIGN = '=' as _, - PSYC_OPERATOR_AUGMENT = '+' as _, - PSYC_OPERATOR_DIMINISH = '-' as _, - PSYC_OPERATOR_UPDATE = '@' as _, - PSYC_OPERATOR_QUERY = '?' as _, -} - -#[repr(C)] -pub enum PsycStateOp { - PSYC_STATE_NOOP = 0, - PSYC_STATE_RESET = '=' as _, - PSYC_STATE_RESYNC = '?' as _, -} - #[repr(C)] pub struct PsycElem { pub elem_type: PsycString, diff --git a/rust/src/parser.rs b/rust/src/parser.rs index b676067..f752cae 100644 --- a/rust/src/parser.rs +++ b/rust/src/parser.rs @@ -1,4 +1,4 @@ -use types::PsycString; +use types::{PsycString, PsycOperator}; use parser_types::*; use util; use std::mem; @@ -50,7 +50,7 @@ impl PsycParser { pub fn parse<'a>(&mut self, buffer: &'a [u8]) -> Result, PsycParserError> { let state_ptr = &mut self.state as *mut PsycParseState; let buffer_ptr = buffer.as_ptr() as *const c_char; - let mut operator = '\0'; + let mut operator = PsycOperator::PSYC_OPERATOR_SET; let mut name: PsycString; let mut value: PsycString; unsafe { @@ -60,7 +60,7 @@ impl PsycParser { } name = mem::uninitialized(); value = mem::uninitialized(); - let operator_ptr = &mut operator as *mut char as *mut c_char; + let operator_ptr = &mut operator as *mut PsycOperator as *mut c_char; let name_ptr = &mut name as *mut PsycString; let value_ptr = &mut value as *mut PsycString; let parse_result = psyc_parse(state_ptr, operator_ptr, name_ptr, value_ptr); diff --git a/rust/src/parser_types.rs b/rust/src/parser_types.rs index b5b5b75..3774d5b 100644 --- a/rust/src/parser_types.rs +++ b/rust/src/parser_types.rs @@ -1,5 +1,5 @@ #![allow(non_camel_case_types)] -use types::PsycString; +use types::{PsycString, PsycOperator}; enum PsycPart { } enum PsycListPart { } @@ -272,17 +272,17 @@ pub enum PsycParserResult<'a> { Complete, InsufficientData, RoutingModifier { - operator: char, + operator: PsycOperator, name: &'a [u8], value: &'a [u8] }, EntityModifier { - operator: char, + operator: PsycOperator, name: &'a [u8], value: &'a [u8] }, EntityModifierStart { - operator: char, + operator: PsycOperator, name: &'a [u8], value_part: &'a [u8] }, diff --git a/rust/src/types.rs b/rust/src/types.rs index e625c0f..7cb650f 100644 --- a/rust/src/types.rs +++ b/rust/src/types.rs @@ -35,3 +35,23 @@ impl PsycBool { } } } + +#[derive(Copy, Clone, Debug, PartialEq)] +#[repr(C)] +pub enum PsycOperator { + PSYC_OPERATOR_SET = ':' as _, + PSYC_OPERATOR_ASSIGN = '=' as _, + PSYC_OPERATOR_AUGMENT = '+' as _, + PSYC_OPERATOR_DIMINISH = '-' as _, + PSYC_OPERATOR_UPDATE = '@' as _, + PSYC_OPERATOR_QUERY = '?' as _, +} + +#[repr(C)] +pub enum PsycStateOp { + PSYC_STATE_NOOP = 0, + PSYC_STATE_RESET = '=' as _, + PSYC_STATE_RESYNC = '?' as _, +} + + diff --git a/rust/tests/test_parser.rs b/rust/tests/test_parser.rs index 1ec2e43..d049005 100644 --- a/rust/tests/test_parser.rs +++ b/rust/tests/test_parser.rs @@ -6,7 +6,7 @@ fn test_parse() { let test_data = ":_target\tpsyc://ve.symlynx.com/@blog\n\n?\n|\n".to_string().into_bytes(); let expected = vec![PsycParserResult::RoutingModifier{ - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: "_target".as_bytes(), value: "psyc://ve.symlynx.com/@blog".as_bytes(), }, @@ -35,7 +35,7 @@ fn test_incomplete() { let test_data2 = "lurchi".to_string().into_bytes(); let expected = vec![PsycParserResult::EntityModifierStart { - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: b"_nick", value_part: b"" }, @@ -58,13 +58,13 @@ fn test_insufficient() { let expected = vec![PsycParserResult::InsufficientData, PsycParserResult::RoutingModifier { - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: b"_target", value: b"psyc://ve.symlynx.com/@blog" }, PsycParserResult::InsufficientData, PsycParserResult::EntityModifier{ - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: b"_nick", value: b"lurchi" }, @@ -92,14 +92,14 @@ fn test_multiple() { let test_data = b":_target\tpsyc://ve.symlynx.com/@blog\n\n?\n|\n:_target\tpsyc://ve.symlynx.com/@blog\n\n_test_method\n|\n"; let expected = vec![PsycParserResult::RoutingModifier { - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: b"_target", value: b"psyc://ve.symlynx.com/@blog" }, PsycParserResult::StateSync, PsycParserResult::Complete, PsycParserResult::RoutingModifier { - operator: ':', + operator: PsycOperator::PSYC_OPERATOR_SET, name: b"_target", value: b"psyc://ve.symlynx.com/@blog" },