about summary refs log tree commit diff
path: root/src/libsyntax_pos
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2016-09-17 23:31:03 +0300
committerEduard Burtescu <edy.burt@gmail.com>2016-09-20 20:08:06 +0300
commit221d1a97e505d00fc1664c5b2d9041f8b78aa933 (patch)
tree1e2f686fb89b143ca397f208a3f6c1be0a5d086f /src/libsyntax_pos
parentb01d4891e2935cf24242e44b50dfa37efc28d28c (diff)
downloadrust-221d1a97e505d00fc1664c5b2d9041f8b78aa933.tar.gz
rust-221d1a97e505d00fc1664c5b2d9041f8b78aa933.zip
serialize: allow specifying the default behavior for specializations.
Diffstat (limited to 'src/libsyntax_pos')
-rw-r--r--src/libsyntax_pos/lib.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs
index fb59f411106..8c8b4173fe5 100644
--- a/src/libsyntax_pos/lib.rs
+++ b/src/libsyntax_pos/lib.rs
@@ -138,8 +138,8 @@ pub struct SpanLabel {
     pub label: Option<String>,
 }
 
-impl Encodable for Span {
-    fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
+impl serialize::UseSpecializedEncodable for Span {
+    fn default_encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
         s.emit_struct("Span", 2, |s| {
             s.emit_struct_field("lo", 0, |s| {
                 self.lo.encode(s)
@@ -152,7 +152,15 @@ impl Encodable for Span {
     }
 }
 
-impl serialize::UseSpecializedDecodable for Span {}
+impl serialize::UseSpecializedDecodable for Span {
+    fn default_decode<D: Decoder>(d: &mut D) -> Result<Span, D::Error> {
+        d.read_struct("Span", 2, |d| {
+            let lo = d.read_struct_field("lo", 0, Decodable::decode)?;
+            let hi = d.read_struct_field("hi", 1, Decodable::decode)?;
+            Ok(mk_sp(lo, hi))
+        })
+    }
+}
 
 fn default_span_debug(span: Span, f: &mut fmt::Formatter) -> fmt::Result {
     write!(f, "Span {{ lo: {:?}, hi: {:?}, expn_id: {:?} }}",