v_individual_model/onto/
parser.rs1use crate::onto::cbor2individual::{parse_cbor, parse_cbor_to_predicate};
2use crate::onto::individual::*;
3use crate::onto::msgpack2individual::*;
4
5#[derive(Eq, PartialEq, Debug)]
6pub enum RawType {
7 Cbor,
8 Json,
9 Msgpack,
10 Unknown,
11}
12
13pub fn parse_to_predicate(expect_predicate: &str, iraw: &mut Individual) -> bool {
14 if iraw.raw.raw_type == RawType::Msgpack {
15 if let Err(e) = parse_msgpack_to_predicate(expect_predicate, iraw) {
16 if !e.is_empty() {
17 error!("parse for [{}], err={}", expect_predicate, e);
18 }
19 return false;
20 }
21 return true;
22 } else if iraw.raw.raw_type == RawType::Cbor {
23 if let Err(e) = parse_cbor_to_predicate(expect_predicate, iraw) {
24 if !e.is_empty() {
25 error!("parse for [{}], err={}", expect_predicate, e);
26 }
27 return false;
28 }
29 return true;
30 }
31
32 false
33}
34
35const MSGPACK_MAGIC_HEADER: u8 = 146;
36
37pub fn parse_raw(iraw: &mut Individual) -> Result<(), i8> {
38 if iraw.raw.data.is_empty() {
39 return Ok(());
40 }
41
42 iraw.reset();
44
45 let traw: &[u8] = iraw.raw.data.as_slice();
46
47 if traw[0] == MSGPACK_MAGIC_HEADER {
48 iraw.raw.raw_type = RawType::Msgpack;
49 } else {
50 iraw.raw.raw_type = RawType::Cbor;
51 }
52
53 let res = if iraw.raw.raw_type == RawType::Msgpack {
54 parse_msgpack(&mut iraw.raw)
55 } else {
56 parse_cbor(&mut iraw.raw)
57 };
58
59 if let Ok(uri) = res {
60 iraw.obj.uri = uri;
61 return Ok(());
62 }
63
64 Err(-1)
65}