From 20c45f269cc2d049df579b460d3e99d3bf6203a6 Mon Sep 17 00:00:00 2001 From: Zykino Date: Sun, 18 Sep 2022 19:13:35 +0200 Subject: [PATCH] Attempt to add support for BSON --- Cargo.toml | 1 + src/lib.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index b8ba452..17618cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ serde-transcode = "1.1.1" # Data types we support # Should tend to be equal to the official list of data formats supported by serde: https://serde.rs/#data-formats +#bson = "2.3" #ciborium = "0.2" serde_json = "1.0" serde-pickle = "1.0" diff --git a/src/lib.rs b/src/lib.rs index 4c6a776..2016e5a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,17 +23,23 @@ pub struct Opt { #[derive(Copy, Clone, Debug, ValueEnum)] pub enum Input { + //Bson, + //Cbor, Json, Pickle, Ron, + //Toml Yaml, } #[derive(Copy, Clone, Debug, ValueEnum)] pub enum Output { + //Bson, + //Cbor, Json, Pickle, Ron, + //Toml, Yaml, } @@ -56,6 +62,14 @@ pub fn transcode(opt: Opt, input: &mut dyn Read, output: &mut dyn Write) { fn de(opt: &Opt, input: &mut dyn Read, output: &mut dyn Write) { match opt.input { + /* + Input::Bson => { + use bson::Deserializer; + + let mut deserializer = bson::from_reader(input).unwrap(); // FIXME: need which type annotation? + ser(opt, &mut deserializer, output); + } + */ Input::Json => { use serde_json::Deserializer; @@ -66,6 +80,7 @@ fn de(opt: &Opt, input: &mut dyn Read, output: &mut dyn Write) { Input::Pickle => { use serde_pickle::Deserializer; + // NOTE: Apparently serde_pickle do not implement `Deserializer` on const? let mut deserializer = Deserializer::new(input, serde_pickle::DeOptions::new()); ser(opt, &mut deserializer, output); } @@ -93,6 +108,21 @@ where D: Deserializer<'de>, { match opt.output { + /* + Output::Bson => { + use bson::Serializer; + + let options = bson::SerializerOptions::builder(); + let options = if opt.pretty { + options.human_readable(true) + } else { + options.human_readable(false) + }; + + let serializer = Serializer::new_with_options(options.build()); // FIXME: why no way to tell the serializer were we want the output? + serde_transcode::transcode(deserializer, serializer).unwrap(); + } + */ Output::Json => { use serde_json::Serializer;