use serde::{Serialize, Serializer};
use super::{MAX_SPACE_SERIALIZE_DEPTH, SpaceKind, ops};
#[derive(Serialize)]
struct OpsView<'a> {
name: &'a Option<String>,
#[serde(skip_serializing_if = "std::ops::Not::not")]
name_was_lossy: bool,
start_line: usize,
end_line: usize,
kind: SpaceKind,
#[serde(serialize_with = "serialize_ops_view_spaces")]
spaces: &'a [ops::Ops],
operands: &'a [String],
operators: &'a [String],
}
fn serialize_ops_view_spaces<S: Serializer>(
spaces: &&[ops::Ops],
serializer: S,
) -> Result<S::Ok, S::Error> {
crate::recursion::serialize_bounded(spaces, MAX_SPACE_SERIALIZE_DEPTH, "Ops", serializer)
}
impl Serialize for ops::Ops {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
OpsView {
name: &self.name,
name_was_lossy: self.name_was_lossy,
start_line: self.start_line,
end_line: self.end_line,
kind: self.kind,
spaces: &self.spaces,
operands: &self.operands,
operators: &self.operators,
}
.serialize(serializer)
}
}