diff --git a/Cargo.toml b/Cargo.toml index 5fd8df36..bec0c3db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = { version = "1.0", features = ["preserve_order"] } indexmap = "2.1.0" hex = "0.4.2" -base64 = "0.13.0" +base64 = "0.22.1" once_cell = "1.5.1" uuid-0_8 = { package = "uuid", version = "0.8.1", features = ["serde", "v4"], optional = true } uuid = { version = "1.1.2", features = ["serde", "v4"] } diff --git a/src/base64.rs b/src/base64.rs new file mode 100644 index 00000000..113f5fdf --- /dev/null +++ b/src/base64.rs @@ -0,0 +1,9 @@ +use base64::{engine::general_purpose::STANDARD, DecodeError, Engine}; + +pub fn decode>(input: T) -> Result, DecodeError> { + STANDARD.decode(input) +} + +pub fn encode>(input: T) -> String { + STANDARD.encode(input) +} diff --git a/src/binary.rs b/src/binary.rs index ae5240b9..f977088b 100644 --- a/src/binary.rs +++ b/src/binary.rs @@ -2,7 +2,7 @@ mod vector; -use crate::{spec::BinarySubtype, Document, RawBinaryRef}; +use crate::{base64, spec::BinarySubtype, Document, RawBinaryRef}; use std::{ convert::TryFrom, error, diff --git a/src/bson.rs b/src/bson.rs index 806fee0b..b112ac47 100644 --- a/src/bson.rs +++ b/src/bson.rs @@ -32,6 +32,7 @@ use serde_json::{json, Value}; pub use crate::document::Document; use crate::{ + base64, oid::{self, ObjectId}, spec::{BinarySubtype, ElementType}, Binary, diff --git a/src/de/raw.rs b/src/de/raw.rs index e75b2b32..69607bc6 100644 --- a/src/de/raw.rs +++ b/src/de/raw.rs @@ -7,6 +7,7 @@ use serde::{ }; use crate::{ + base64, oid::ObjectId, raw::{ RawBinaryRef, diff --git a/src/extjson/models.rs b/src/extjson/models.rs index b91d5f67..b726aa41 100644 --- a/src/extjson/models.rs +++ b/src/extjson/models.rs @@ -7,7 +7,7 @@ use serde::{ }; use std::borrow::Cow; -use crate::{extjson, oid, raw::serde::CowStr, spec::BinarySubtype, Bson}; +use crate::{base64, extjson, oid, raw::serde::CowStr, spec::BinarySubtype, Bson}; #[derive(Deserialize)] #[serde(deny_unknown_fields)] diff --git a/src/lib.rs b/src/lib.rs index 7386720b..077a2db6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -331,6 +331,7 @@ pub use self::de::{from_reader_utf8_lossy, from_slice_utf8_lossy}; #[macro_use] mod macros; +mod base64; pub mod binary; mod bson; pub mod datetime; diff --git a/src/raw/bson_ref.rs b/src/raw/bson_ref.rs index f1f0fde9..94a9b9fb 100644 --- a/src/raw/bson_ref.rs +++ b/src/raw/bson_ref.rs @@ -12,6 +12,7 @@ use super::{ Result, }; use crate::{ + base64, extjson, oid::{self, ObjectId}, raw::{RawJavaScriptCodeWithScope, RAW_BSON_NEWTYPE}, diff --git a/src/ser/raw/value_serializer.rs b/src/ser/raw/value_serializer.rs index 8ed93eda..8c0b2215 100644 --- a/src/ser/raw/value_serializer.rs +++ b/src/ser/raw/value_serializer.rs @@ -6,6 +6,7 @@ use serde::{ }; use crate::{ + base64, oid::ObjectId, raw::RAW_DOCUMENT_NEWTYPE, ser::{write_binary, write_cstring, write_i32, write_i64, write_string, Error, Result}, diff --git a/src/ser/serde.rs b/src/ser/serde.rs index 9b5ce313..469babee 100644 --- a/src/ser/serde.rs +++ b/src/ser/serde.rs @@ -12,6 +12,7 @@ use serde::ser::{ }; use crate::{ + base64, bson::{Array, Bson, DbPointer, Document, JavaScriptCodeWithScope, Regex, Timestamp}, datetime::DateTime, extjson, diff --git a/src/tests/modules/binary.rs b/src/tests/modules/binary.rs index d26c4d65..5ecba080 100644 --- a/src/tests/modules/binary.rs +++ b/src/tests/modules/binary.rs @@ -1,4 +1,4 @@ -use crate::{spec::BinarySubtype, tests::LOCK, Binary}; +use crate::{base64, spec::BinarySubtype, tests::LOCK, Binary}; #[test] fn binary_from_base64() { diff --git a/src/tests/modules/bson.rs b/src/tests/modules/bson.rs index d5362d20..1e4f7b1d 100644 --- a/src/tests/modules/bson.rs +++ b/src/tests/modules/bson.rs @@ -4,6 +4,7 @@ use std::{ }; use crate::{ + base64, doc, oid::ObjectId, spec::BinarySubtype, diff --git a/src/tests/modules/macros.rs b/src/tests/modules/macros.rs index 150e22d2..12e718dd 100644 --- a/src/tests/modules/macros.rs +++ b/src/tests/modules/macros.rs @@ -1,4 +1,5 @@ use crate::{ + base64, doc, oid::ObjectId, spec::BinarySubtype,