Skip to content

Commit adf6c0d

Browse files
committed
Fix fields length for serializing record struct in JsonFormatter
1 parent 813edaf commit adf6c0d

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

spdlog/src/formatter/json_formatter.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ use crate::{
1212
Error, Record, StringBuf, __EOL,
1313
};
1414

15+
fn opt_to_num<T>(opt: Option<T>) -> usize {
16+
opt.map_or(0, |_| 1)
17+
}
18+
1519
struct JsonRecord<'a>(&'a Record<'a>);
1620

1721
impl<'a> Serialize for JsonRecord<'a> {
1822
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1923
where
2024
S: serde::Serializer,
2125
{
22-
let src_loc = self.0.source_location();
23-
24-
let mut record =
25-
serializer.serialize_struct("JsonRecord", if src_loc.is_none() { 4 } else { 5 })?;
26+
let fields_len =
27+
4 + opt_to_num(self.0.logger_name()) + opt_to_num(self.0.source_location());
28+
let mut record = serializer.serialize_struct("JsonRecord", fields_len)?;
2629

2730
record.serialize_field("level", &self.0.level())?;
2831
record.serialize_field(
@@ -41,7 +44,7 @@ impl<'a> Serialize for JsonRecord<'a> {
4144
record.serialize_field("logger", logger_name)?;
4245
}
4346
record.serialize_field("tid", &self.0.tid())?;
44-
if let Some(src_loc) = src_loc {
47+
if let Some(src_loc) = self.0.source_location() {
4548
record.serialize_field("source", src_loc)?;
4649
}
4750

0 commit comments

Comments
 (0)