8000 Avoid str path for datetime, date, time, uuid · ijl/orjson@d81712f · GitHub
[go: up one dir, main page]

Skip to content

Commit d81712f

Browse files
committed
Avoid str path for datetime, date, time, uuid
1 parent c89e6d5 commit d81712f

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

src/serialize/per_type/datetime.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ impl Serialize for Date {
7373
{
7474
let mut buf = DateTimeBuffer::new();
7575
self.write_buf(&mut buf);
76-
serializer.serialize_str(str_from_slice!(buf.as_ptr(), buf.len()))
76+
serializer.serialize_unit_struct(str_from_slice!(buf.as_ptr(), buf.len()))
7777
}
7878
}
7979

@@ -124,7 +124,7 @@ impl Serialize for Time {
124124
if self.write_buf(&mut buf).is_err() {
125125
err!(SerializeError::DatetimeLibraryUnsupported)
126126
};
127-
serializer.serialize_str(str_from_slice!(buf.as_ptr(), buf.len()))
127+
serializer.serialize_unit_struct(str_from_slice!(buf.as_ptr(), buf.len()))
128128
}
129129
}
130130

@@ -243,6 +243,6 @@ impl Serialize for DateTime {
243243
if self.write_buf(&mut buf, self.opts).is_err() {
244244
err!(SerializeError::DatetimeLibraryUnsupported)
245245
}
246-
serializer.serialize_str(str_from_slice!(buf.as_ptr(), buf.len()))
246+
serializer.serialize_unit_struct(str_from_slice!(buf.as_ptr(), buf.len()))
247247
}
248248
}

src/serialize/per_type/uuid.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ impl Serialize for UUID {
6060
{
6161
let mut buf = arrayvec::ArrayVec::<u8, 36>::new();
6262
self.write_buf(&mut buf);
63-
serializer.serialize_str(str_from_slice!(buf.as_ptr(), buf.len()))
63+
serializer.serialize_unit_struct(str_from_slice!(buf.as_ptr(), buf.len()))
6464
}
6565
}

src/serialize/writer/json.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,18 @@ where
166166
.map_err(Error::io)
167167
}
168168

169-
fn serialize_unit_struct(self, _name: &'static str) -> Result<()> {
170-
unreachable!();
169+
#[inline(always)]
170+
fn serialize_unit_struct(self, name: &'static str) -> Result<()> {
171+
debug_assert!(name.len() <= 36);
172+
reserve_minimum!(self.writer);
173+
unsafe {
174+
self.writer.write_reserved_punctuation(b'"').unwrap();
175+
self.writer
176+
.write_reserved_fragment(name.as_bytes())
177+
.unwrap();
178+
self.writer.write_reserved_punctuation(b'"').unwrap();
179+
}
180+
Ok(())
171181
}
172182

173183
fn serialize_unit_variant(

0 commit comments

Comments
 (0)
0