use encoding::Field;
use messages::MessageWriter;
use super::Offset;
pub use hex::{FromHexError, ToHex, FromHex, encode as encode_hex, decode as decode_hex};
#[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 + Send + Sync>>
{
use $crate::encoding::serialize::json::reexport::to_value;
Ok(to_value(self)?)
}
}
};
}
#[macro_use]
pub mod json;
#[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;
}