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.
This commit is contained in:
lurchi 2017-01-05 22:37:46 +01:00
parent 99b86d3faa
commit 6bdcd1273b
7 changed files with 35 additions and 33 deletions

View File

@ -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};

View File

@ -1,4 +1,4 @@
use types::PsycString;
use types::{PsycString, PsycOperator, PsycStateOp};
use packet_types::*;
use packet_id::PacketId;
use util;

View File

@ -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,

View File

@ -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<PsycParserResult<'a>, 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);

View File

@ -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]
},

View File

@ -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 _,
}

View File

@ -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"
},