add CBOR support to database schema
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
1f31e74024
commit
0c96891008
6 changed files with 60 additions and 2 deletions
|
@ -1,7 +1,7 @@
|
|||
use std::io::Write;
|
||||
|
||||
use conduwuit::{debug::type_name, err, result::DebugInspect, utils::exchange, Error, Result};
|
||||
use serde::{ser, Serialize};
|
||||
use serde::{ser, Deserialize, Serialize};
|
||||
|
||||
use crate::util::unhandled;
|
||||
|
||||
|
@ -55,6 +55,10 @@ pub(crate) struct Serializer<'a, W: Write> {
|
|||
#[derive(Debug, Serialize)]
|
||||
pub struct Json<T>(pub T);
|
||||
|
||||
/// Newtype for CBOR serialization.
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct Cbor<T>(pub T);
|
||||
|
||||
/// Directive to force separator serialization specifically for prefix keying
|
||||
/// use. This is a quirk of the database schema and prefix iterations.
|
||||
#[derive(Debug, Serialize)]
|
||||
|
@ -189,6 +193,14 @@ impl<W: Write> ser::Serializer for &mut Serializer<'_, W> {
|
|||
|
||||
match name {
|
||||
| "Json" => serde_json::to_writer(&mut self.out, value).map_err(Into::into),
|
||||
| "Cbor" => {
|
||||
use minicbor::encode::write::Writer;
|
||||
use minicbor_serde::Serializer;
|
||||
|
||||
value
|
||||
.serialize(&mut Serializer::new(&mut Writer::new(&mut self.out)))
|
||||
.map_err(|e| Self::Error::SerdeSer(e.to_string().into()))
|
||||
},
|
||||
| _ => unhandled!("Unrecognized serialization Newtype {name:?}"),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue