Skip to content

Commit d940fe1

Browse files
committed
Reuse existing Buf wrapper as replacement for std::io::Write
1 parent f2899a9 commit d940fe1

File tree

4 files changed

+7
-43
lines changed

4 files changed

+7
-43
lines changed

serde/src/de/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ use crate::lib::*;
118118

119119
pub mod value;
120120

121-
mod format;
122121
mod ignored_any;
123122
mod impls;
124123
pub(crate) mod size_hint;
@@ -1374,7 +1373,7 @@ pub trait Visitor<'de>: Sized {
13741373
E: Error,
13751374
{
13761375
let mut buf = [0u8; 58];
1377-
let mut writer = format::Buf::new(&mut buf);
1376+
let mut writer = crate::format::Buf::new(&mut buf);
13781377
fmt::Write::write_fmt(&mut writer, format_args!("integer `{}` as i128", v)).unwrap();
13791378
Err(Error::invalid_type(
13801379
Unexpected::Other(writer.as_str()),
@@ -1436,7 +1435,7 @@ pub trait Visitor<'de>: Sized {
14361435
E: Error,
14371436
{
14381437
let mut buf = [0u8; 57];
1439-
let mut writer = format::Buf::new(&mut buf);
1438+
let mut writer = crate::format::Buf::new(&mut buf);
14401439
fmt::Write::write_fmt(&mut writer, format_args!("integer `{}` as u128", v)).unwrap();
14411440
Err(Error::invalid_type(
14421441
Unexpected::Other(writer.as_str()),
File renamed without changes.

serde/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ mod integer128;
310310
pub mod de;
311311
pub mod ser;
312312

313+
mod format;
314+
313315
#[doc(inline)]
314316
pub use crate::de::{Deserialize, Deserializer};
315317
#[doc(inline)]

serde/src/ser/impls.rs

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -769,31 +769,6 @@ impl Serialize for SystemTime {
769769

770770
////////////////////////////////////////////////////////////////////////////////
771771

772-
#[cfg(any(feature = "std", not(no_core_net)))]
773-
struct Wrapper<'a> {
774-
pub buf: &'a mut [u8],
775-
pub offset: usize,
776-
}
777-
778-
#[cfg(any(feature = "std", not(no_core_net)))]
779-
impl<'a> fmt::Write for Wrapper<'a> {
780-
fn write_str(&mut self, s: &str) -> fmt::Result {
781-
if self.offset > self.buf.len() {
782-
return Err(fmt::Error);
783-
}
784-
let remaining_buf = &mut self.buf[self.offset..];
785-
let raw_s = s.as_bytes();
786-
let write_num = core::cmp::min(raw_s.len(), remaining_buf.len());
787-
remaining_buf[..write_num].copy_from_slice(&raw_s[..write_num]);
788-
self.offset += raw_s.len();
789-
if write_num < raw_s.len() {
790-
Err(fmt::Error)
791-
} else {
792-
Ok(())
793-
}
794-
}
795-
}
796-
797772
/// Serialize a value that implements `Display` as a string, when that string is
798773
/// statically known to never have more than a constant `MAX_LEN` bytes.
799774
///
@@ -802,21 +777,9 @@ impl<'a> fmt::Write for Wrapper<'a> {
802777
macro_rules! serialize_display_bounded_length {
803778
($value:expr, $max:expr, $serializer:expr) => {{
804779
let mut buffer = [0u8; $max];
805-
let written_len = {
806-
let mut w = Wrapper {
807-
buf: &mut buffer,
808-
offset: 0,
809-
};
810-
write!(&mut w, "{}", $value).unwrap();
811-
w.offset
812-
};
813-
let written = &buffer[..written_len];
814-
815-
// write! only provides fmt::Formatter to Display implementations, which
816-
// has methods write_str and write_char but no method to write arbitrary
817-
// bytes. Therefore `written` must be valid UTF-8.
818-
let written_str = str::from_utf8(written).expect("must be valid UTF-8");
819-
$serializer.serialize_str(written_str)
780+
let mut writer = crate::format::Buf::new(&mut buffer);
781+
write!(&mut writer, "{}", $value).unwrap();
782+
$serializer.serialize_str(writer.as_str())
820783
}};
821784
}
822785

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy