use std::io::Error as IoError;
use std::io::ErrorKind;
use serde_json::Error as JsonError;
use serde_json::Value;
use serde_json::to_writer;
use super::Redactor;
use super::internal::bounded_json_writer::BoundedJsonWriter;
use crate::RedactionInspection;
use crate::RedactionInspectionError;
use crate::RedactionTextOutput;
impl Redactor {
#[inline]
pub fn to_json<'value, T: crate::domain::internal::RedactSerializeSource + ?Sized>(
&self,
value: &'value T,
) -> Result<String, JsonError>
where
T::RedactedFields<'value>: serde::Serialize,
{
let mut writer = BoundedJsonWriter::new(self.policy().limits().max_output_bytes());
to_writer(&mut writer, &self.redact_view(value))?;
String::from_utf8(writer.into_bytes().map_err(JsonError::io)?)
.map_err(|error| JsonError::io(IoError::new(ErrorKind::InvalidData, error)))
}
#[must_use]
#[inline]
pub fn redact_json(&self, text: &str) -> RedactionTextOutput {
let mut session = self.text_runtime();
session.json(|json| {
let _ = json.text(text);
});
session.finish()
}
#[must_use]
#[inline]
pub fn redact_json_value(&self, value: &Value) -> RedactionTextOutput {
let mut session = self.text_runtime();
session.json(|json| {
let _ = json.value(value);
});
session.finish()
}
#[inline]
pub fn inspect_json(&self, text: &str) -> Result<RedactionInspection, RedactionInspectionError> {
let mut session = self.inspection_runtime();
crate::formats::json::inspection::inspect_text(&mut session, text);
session.finish()
}
#[inline]
pub fn inspect_json_value(&self, value: &Value) -> Result<RedactionInspection, RedactionInspectionError> {
let mut session = self.inspection_runtime();
crate::formats::json::inspection::inspect_borrowed_value(&mut session, value);
session.finish()
}
}