From cf6c4ab7ecc3ae4e111510929ce77df282d80243 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 4 Apr 2017 11:19:24 -0700 Subject: [PATCH] Deserialize OsString on Windows --- serde/src/de/impls.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index 7bffab32..81c7c082 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -1009,7 +1009,23 @@ impl Visitor for OsStringVisitor { variant.visit_newtype().map(OsString::from_vec) } (OsStringKind::Windows, _) => { - Err(Error::custom("cannot deserialize windows os string on unix")) + Err(Error::custom("cannot deserialize Windows OS string on Unix")) + } + } + } + + #[cfg(windows)] + fn visit_enum(self, visitor: V) -> Result + where V: EnumVisitor, + { + use std::os::windows::ffi::OsStringExt; + + match try!(visitor.visit_variant()) { + (OsStringKind::Windows, variant) => { + variant.visit_newtype::>().map(|vec| OsString::from_wide(&vec)) + } + (OsStringKind::Unix, _) => { + Err(Error::custom("cannot deserialize Unix OS string on Windows")) } } }