1
0
Fork 0
mirror of git://git.psyc.eu/libpsyc synced 2024-08-15 03:19:02 +00:00

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 text_types::SubstitutionResult;
pub use uniform::Uniform; pub use uniform::Uniform;
pub use uniform_types::{UniformParseError, PsycScheme, PsycEntity}; 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::{RoutingVariable, EntityVariable, Variable};
pub use variable_types::{PsycRoutingVar, PsycType}; 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_types::*;
use packet_id::PacketId; use packet_id::PacketId;
use util; use util;

View file

@ -43,24 +43,6 @@ pub enum PsycPacketId {
PSYC_PACKET_ID_ELEMS = 5, 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)] #[repr(C)]
pub struct PsycElem { pub struct PsycElem {
pub elem_type: PsycString, pub elem_type: PsycString,

View file

@ -1,4 +1,4 @@
use types::PsycString; use types::{PsycString, PsycOperator};
use parser_types::*; use parser_types::*;
use util; use util;
use std::mem; use std::mem;
@ -50,7 +50,7 @@ impl PsycParser {
pub fn parse<'a>(&mut self, buffer: &'a [u8]) -> Result<PsycParserResult<'a>, PsycParserError> { pub fn parse<'a>(&mut self, buffer: &'a [u8]) -> Result<PsycParserResult<'a>, PsycParserError> {
let state_ptr = &mut self.state as *mut PsycParseState; let state_ptr = &mut self.state as *mut PsycParseState;
let buffer_ptr = buffer.as_ptr() as *const c_char; 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 name: PsycString;
let mut value: PsycString; let mut value: PsycString;
unsafe { unsafe {
@ -60,7 +60,7 @@ impl PsycParser {
} }
name = mem::uninitialized(); name = mem::uninitialized();
value = 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 name_ptr = &mut name as *mut PsycString;
let value_ptr = &mut value as *mut PsycString; let value_ptr = &mut value as *mut PsycString;
let parse_result = psyc_parse(state_ptr, operator_ptr, name_ptr, value_ptr); let parse_result = psyc_parse(state_ptr, operator_ptr, name_ptr, value_ptr);

View file

@ -1,5 +1,5 @@
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
use types::PsycString; use types::{PsycString, PsycOperator};
enum PsycPart { } enum PsycPart { }
enum PsycListPart { } enum PsycListPart { }
@ -272,17 +272,17 @@ pub enum PsycParserResult<'a> {
Complete, Complete,
InsufficientData, InsufficientData,
RoutingModifier { RoutingModifier {
operator: char, operator: PsycOperator,
name: &'a [u8], name: &'a [u8],
value: &'a [u8] value: &'a [u8]
}, },
EntityModifier { EntityModifier {
operator: char, operator: PsycOperator,
name: &'a [u8], name: &'a [u8],
value: &'a [u8] value: &'a [u8]
}, },
EntityModifierStart { EntityModifierStart {
operator: char, operator: PsycOperator,
name: &'a [u8], name: &'a [u8],
value_part: &'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 test_data = ":_target\tpsyc://ve.symlynx.com/@blog\n\n?\n|\n".to_string().into_bytes();
let expected = vec![PsycParserResult::RoutingModifier{ let expected = vec![PsycParserResult::RoutingModifier{
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: "_target".as_bytes(), name: "_target".as_bytes(),
value: "psyc://ve.symlynx.com/@blog".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 test_data2 = "lurchi".to_string().into_bytes();
let expected = vec![PsycParserResult::EntityModifierStart { let expected = vec![PsycParserResult::EntityModifierStart {
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: b"_nick", name: b"_nick",
value_part: b"" value_part: b""
}, },
@ -58,13 +58,13 @@ fn test_insufficient() {
let expected = vec![PsycParserResult::InsufficientData, let expected = vec![PsycParserResult::InsufficientData,
PsycParserResult::RoutingModifier { PsycParserResult::RoutingModifier {
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: b"_target", name: b"_target",
value: b"psyc://ve.symlynx.com/@blog" value: b"psyc://ve.symlynx.com/@blog"
}, },
PsycParserResult::InsufficientData, PsycParserResult::InsufficientData,
PsycParserResult::EntityModifier{ PsycParserResult::EntityModifier{
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: b"_nick", name: b"_nick",
value: b"lurchi" 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 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 { let expected = vec![PsycParserResult::RoutingModifier {
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: b"_target", name: b"_target",
value: b"psyc://ve.symlynx.com/@blog" value: b"psyc://ve.symlynx.com/@blog"
}, },
PsycParserResult::StateSync, PsycParserResult::StateSync,
PsycParserResult::Complete, PsycParserResult::Complete,
PsycParserResult::RoutingModifier { PsycParserResult::RoutingModifier {
operator: ':', operator: PsycOperator::PSYC_OPERATOR_SET,
name: b"_target", name: b"_target",
value: b"psyc://ve.symlynx.com/@blog" value: b"psyc://ve.symlynx.com/@blog"
}, },