Use preserves::ser::Serializer
This commit is contained in:
parent
754194210c
commit
a5b00a45bf
|
@ -29,8 +29,13 @@ fn translate_sink_err(e: tungstenite::Error) -> packets::EncodeError {
|
||||||
fn encode_message(codec: &value::Codec<V, Syndicate>, p: packets::S2C) ->
|
fn encode_message(codec: &value::Codec<V, Syndicate>, p: packets::S2C) ->
|
||||||
Result<Message, packets::EncodeError>
|
Result<Message, packets::EncodeError>
|
||||||
{
|
{
|
||||||
let v: V = value::to_value(p)?;
|
use serde::ser::Serialize;
|
||||||
Ok(Message::Binary(codec.encode_bytes(&v)?))
|
use preserves::ser::Serializer;
|
||||||
|
let mut bs = Vec::with_capacity(128);
|
||||||
|
let mut ser: Serializer<_, V, Syndicate> =
|
||||||
|
Serializer::new(&mut bs, codec.encode_placeholders.as_ref());
|
||||||
|
p.serialize(&mut ser).map_err(|e| std::io::Error::from(e))?;
|
||||||
|
Ok(Message::Binary(bs))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn message_encoder(codec: &value::Codec<V, Syndicate>)
|
fn message_encoder(codec: &value::Codec<V, Syndicate>)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use super::V;
|
use super::V;
|
||||||
use super::Syndicate;
|
use super::Syndicate;
|
||||||
|
|
||||||
use bytes::{Buf, BytesMut};
|
use bytes::{Buf, buf::BufMutExt, BytesMut};
|
||||||
use preserves::value;
|
use preserves::{value, ser::Serializer};
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
@ -120,14 +120,16 @@ pub struct Codec<InT, OutT> {
|
||||||
pub type ServerCodec = Codec<C2S, S2C>;
|
pub type ServerCodec = Codec<C2S, S2C>;
|
||||||
pub type ClientCodec = Codec<S2C, C2S>;
|
pub type ClientCodec = Codec<S2C, C2S>;
|
||||||
|
|
||||||
|
pub fn standard_preserves_placeholders() -> value::DecodePlaceholderMap<V, Syndicate> {
|
||||||
|
let mut m = value::Map::new();
|
||||||
|
m.insert(0, value::Value::symbol("Discard"));
|
||||||
|
m.insert(1, value::Value::symbol("Capture"));
|
||||||
|
m.insert(2, value::Value::symbol("Observe"));
|
||||||
|
m
|
||||||
|
}
|
||||||
|
|
||||||
pub fn standard_preserves_codec() -> value::Codec<V, Syndicate> {
|
pub fn standard_preserves_codec() -> value::Codec<V, Syndicate> {
|
||||||
value::Codec::new({
|
value::Codec::new(standard_preserves_placeholders())
|
||||||
let mut m = value::Map::new();
|
|
||||||
m.insert(0, value::Value::symbol("Discard"));
|
|
||||||
m.insert(1, value::Value::symbol("Capture"));
|
|
||||||
m.insert(2, value::Value::symbol("Observe"));
|
|
||||||
m
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<InT, OutT> Codec<InT, OutT> {
|
impl<InT, OutT> Codec<InT, OutT> {
|
||||||
|
@ -166,8 +168,9 @@ impl<InT, OutT: serde::Serialize> tokio_util::codec::Encoder<OutT> for Codec<InT
|
||||||
{
|
{
|
||||||
type Error = EncodeError;
|
type Error = EncodeError;
|
||||||
fn encode(&mut self, item: OutT, bs: &mut BytesMut) -> Result<(), Self::Error> {
|
fn encode(&mut self, item: OutT, bs: &mut BytesMut) -> Result<(), Self::Error> {
|
||||||
let v: V = value::to_value(&item)?;
|
let mut w = bs.writer();
|
||||||
bs.extend(self.codec.encode_bytes(&v)?);
|
let mut ser: Serializer<_, V, Syndicate> = Serializer::new(&mut w, self.codec.encode_placeholders.as_ref());
|
||||||
|
item.serialize(&mut ser).map_err(|e| std::io::Error::from(e))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue