Skip to main content

jcers/
lib.rs

1#![doc = include_str!("../README.md")]
2
3mod de;
4mod err;
5mod ser;
6#[cfg(test)]
7mod test;
8mod util;
9mod value;
10
11use std::fmt::LowerHex;
12
13use bytes::Buf;
14pub use de::{Jce, JceGet};
15pub use err::{JceError, JceResult};
16#[cfg(feature = "derive")]
17#[cfg_attr(docrs, doc(cfg(feature = "derive")))]
18pub use jcers_proc::{JceGet, JcePut};
19pub use ser::{JceMut, JcePut};
20pub use util::{JceHead, JceType};
21pub use value::*;
22
23/// Read data from Buf
24///
25/// ## Example
26/// ```rust
27/// use bytes::Bytes;
28/// let mut buf = Bytes::from(vec![0x00u8, 0x01u8]);
29/// let v: JceValue = from_buf(&mut buf).unwrap();
30/// assert_eq!(v, JceValue::Byte(0x01u8));
31/// ```
32pub fn from_buf<B, T>(buf: &mut B) -> JceResult<T>
33where
34    B: Buf + LowerHex,
35    T: JceGet,
36{
37    let mut jce = Jce::new(buf);
38    T::jce_get(&mut jce)
39}
40
41
42/// Read data as a anonymous struct and get the given tag value
43pub fn from_buf_with_tag<B, T>(buf: &mut B, tag: u8) -> JceResult<T>
44where
45    B: Buf + LowerHex,
46    T: JceGet,
47{
48    let mut jce = Jce::new(buf);
49    T::get_by_tag(&mut jce, tag)
50}
51
52/// Unbox a JceStruct and get the given tag value
53pub fn from_buf_with_tag_unbox<B, T>(buf: &mut B, tag: u8) -> JceResult<T>
54where
55    B: Buf + LowerHex,
56    T: JceGet,
57{
58    let mut jce = Jce::new(buf);
59    jce.read_head();
60    let mut jce = jce.sub_jce();
61    T::get_by_tag(&mut jce, tag)
62}
63
64#[test]
65fn test_from_buf() {
66    use bytes::Bytes;
67    let mut buf = Bytes::from(vec![0x00u8, 0x01u8]);
68    let v: JceValue = from_buf(&mut buf).unwrap();
69    assert_eq!(v, JceValue::U8(0x01u8));
70}