summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2023-10-23 18:30:44 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2023-10-23 19:11:01 +0100
commit0ea14aa5697428d3bb212aaa5d0f8a898d0b49c4 (patch)
tree0202dac249566dea652f31dbac56cc58c98c65f0
parent18873691500efb1f04f97b48d1018a003b2e7f75 (diff)
deserialize: strings: Introduce string_serialize_via_display macro
This removes a lot of duplicated code. It could be even shorter if we were to use the `paste` crate. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rw-r--r--src/ser.rs71
1 files changed, 20 insertions, 51 deletions
diff --git a/src/ser.rs b/src/ser.rs
index b9e3568..49b607b 100644
--- a/src/ser.rs
+++ b/src/ser.rs
@@ -417,6 +417,13 @@ impl<'a> ser::SerializeStructVariant for &'a mut ConfigSerializer {
pub struct StringKeySerializer;
+/// Define `$emthod`, `serialize_foo`, taking `$type` and serialising it via [`Display`]
+macro_rules! string_serialize_via_display { { $method:ident, $type:ty } => {
+ fn $method(self, v: $type) -> Result<Self::Ok> {
+ Ok(v.to_string())
+ }
+} }
+
impl ser::Serializer for StringKeySerializer {
type Ok = String;
type Error = ConfigError;
@@ -428,57 +435,19 @@ impl ser::Serializer for StringKeySerializer {
type SerializeStruct = Self;
type SerializeStructVariant = Self;
- fn serialize_bool(self, v: bool) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_i8(self, v: i8) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_i16(self, v: i16) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_i32(self, v: i32) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_i64(self, v: i64) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_u8(self, v: u8) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_u16(self, v: u16) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_u32(self, v: u32) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_u64(self, v: u64) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_f32(self, v: f32) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_f64(self, v: f64) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_char(self, v: char) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
-
- fn serialize_str(self, v: &str) -> Result<Self::Ok> {
- Ok(v.to_string())
- }
+ string_serialize_via_display!(serialize_bool, bool);
+ string_serialize_via_display!(serialize_i8, i8);
+ string_serialize_via_display!(serialize_i16, i16);
+ string_serialize_via_display!(serialize_i32, i32);
+ string_serialize_via_display!(serialize_i64, i64);
+ string_serialize_via_display!(serialize_u8, u8);
+ string_serialize_via_display!(serialize_u16, u16);
+ string_serialize_via_display!(serialize_u32, u32);
+ string_serialize_via_display!(serialize_u64, u64);
+ string_serialize_via_display!(serialize_f32, f32);
+ string_serialize_via_display!(serialize_f64, f64);
+ string_serialize_via_display!(serialize_char, char);
+ string_serialize_via_display!(serialize_str, &str);
fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok> {
Ok(String::from_utf8_lossy(v).to_string())