1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
pub use hex::{FromHexError, ToHex, FromHex};
use encoding::Field;
use messages::MessageWriter;
use super::Offset;
#[macro_export]
macro_rules! implement_exonum_serializer {
($name:ident) => {
impl $crate::encoding::serialize::json::ExonumJsonDeserialize for $name {
fn deserialize(value: &$crate::encoding::serialize::json::reexport::Value)
-> Result<$name, Box<::std::error::Error>> {
use $crate::encoding::serialize::json::reexport::from_value;
Ok(from_value(value.clone())?)
}
}
impl $crate::encoding::serialize::json::ExonumJson for $name {
fn deserialize_field<B>(
value: &$crate::encoding::serialize::json::reexport::Value,
buffer: &mut B,
from: $crate::encoding::Offset,
to: $crate::encoding::Offset)
-> Result<(), Box<::std::error::Error>>
where B: $crate::encoding::serialize::WriteBufferWrapper
{
use $crate::encoding::serialize::json::reexport::from_value;
let value: $name = from_value(value.clone())?;
buffer.write(from, to, value);
Ok(())
}
fn serialize_field(&self) ->
Result<$crate::encoding::serialize::json::reexport::Value,
Box<::std::error::Error>>
{
use $crate::encoding::serialize::json::reexport::to_value;
Ok(to_value(self)?)
}
}
};
}
#[macro_use]
pub mod json;
pub trait HexValue: Sized {
fn to_hex(&self) -> String;
fn from_hex<T: AsRef<str>>(v: T) -> Result<Self, FromHexError>;
}
#[doc(hidden)]
pub trait WriteBufferWrapper {
fn write<'a, T: Field<'a>>(&'a mut self, from: Offset, to: Offset, val: T);
}
impl WriteBufferWrapper for MessageWriter {
fn write<'a, T: Field<'a>>(&'a mut self, from: Offset, to: Offset, val: T) {
self.write(val, from, to)
}
}
impl WriteBufferWrapper for Vec<u8> {
fn write<'a, T: Field<'a>>(&'a mut self, from: Offset, to: Offset, val: T) {
val.write(self, from, to)
}
}
pub mod reexport {
pub use serde::{Serializer, Deserializer, Serialize, Deserialize};
pub use serde::de::Error as DeError;
pub use serde::ser::Error as SerError;
pub use serde::ser::SerializeStruct;
}