// Take a look at the license at the top of the repository in the LICENSE file.
-use json::{
+use crate::json::{
json_minifier::{keep_element, JsonMinifier},
read::json_read::JsonRead,
string::JsonMultiFilter,
};
-use std::io::Read;
+use std::fmt;
+use std::io::{self, Read};
mod read {
mod byte_to_char;
/// # Example
///
/// ```rust
-/// extern crate minifier;
/// use minifier::json::minify;
///
-/// fn main() {
-/// let json = r#"
-/// {
-/// "test": "test",
-/// "test2": 2
-/// }
-/// "#.into();
-/// let json_minified = minify(json);
-/// }
+/// let json = r#"
+/// {
+/// "test": "test",
+/// "test2": 2
+/// }
+/// "#.into();
+/// let json_minified = minify(json);
+/// assert_eq!(&json_minified.to_string(), r#"{"test":"test","test2":2}"#);
/// ```
#[inline]
-pub fn minify(json: &str) -> String {
- JsonMultiFilter::new(json.chars(), keep_element).collect()
+pub fn minify(json: &str) -> Minified<'_> {
+ Minified(JsonMultiFilter::new(json.chars(), keep_element))
+}
+
+#[derive(Debug)]
+pub struct Minified<'a>(JsonMultiFilter<'a, JsonMethod>);
+
+impl<'a> Minified<'a> {
+ pub fn write<W: io::Write>(self, w: W) -> io::Result<()> {
+ self.0.write(w)
+ }
+}
+
+impl<'a> fmt::Display for Minified<'a> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ self.0.fmt(f)
+ }
}
/// Minifies a given Read by JSON minification rules
let input = "\n".into();
let expected: String = "".into();
let actual = minify(input);
- assert_eq!(actual, expected);
+ assert_eq!(actual.to_string(), expected);
}
#[test]
.into();
let expected: String = "{\"test\":\"\\\" test2\",\"test2\":\"\",\"test3\":\" \"}".into();
let actual = minify(input);
- assert_eq!(actual, expected);
+ assert_eq!(actual.to_string(), expected);
}