diff options
Diffstat (limited to 'src/libsyntax/owned_slice.rs')
| -rw-r--r-- | src/libsyntax/owned_slice.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/libsyntax/owned_slice.rs b/src/libsyntax/owned_slice.rs index 57051e78667..57529228b51 100644 --- a/src/libsyntax/owned_slice.rs +++ b/src/libsyntax/owned_slice.rs @@ -18,8 +18,8 @@ use serialize::{Encodable, Decodable, Encoder, Decoder}; #[unsafe_no_drop_flag] // data is set to null on destruction pub struct OwnedSlice<T> { /// null iff len == 0 - priv data: *mut T, - priv len: uint, + data: *mut T, + len: uint, } #[unsafe_destructor] @@ -126,19 +126,22 @@ impl<T> Container for OwnedSlice<T> { } impl<T> FromIterator<T> for OwnedSlice<T> { - fn from_iterator<I: Iterator<T>>(mut iter: I) -> OwnedSlice<T> { + fn from_iter<I: Iterator<T>>(mut iter: I) -> OwnedSlice<T> { OwnedSlice::from_vec(iter.collect()) } } -impl<S: Encoder, T: Encodable<S>> Encodable<S> for OwnedSlice<T> { - fn encode(&self, s: &mut S) { +impl<S: Encoder<E>, T: Encodable<S, E>, E> Encodable<S, E> for OwnedSlice<T> { + fn encode(&self, s: &mut S) -> Result<(), E> { self.as_slice().encode(s) } } -impl<D: Decoder, T: Decodable<D>> Decodable<D> for OwnedSlice<T> { - fn decode(d: &mut D) -> OwnedSlice<T> { - OwnedSlice::from_vec(Decodable::decode(d)) +impl<D: Decoder<E>, T: Decodable<D, E>, E> Decodable<D, E> for OwnedSlice<T> { + fn decode(d: &mut D) -> Result<OwnedSlice<T>, E> { + Ok(OwnedSlice::from_vec(match Decodable::decode(d) { + Ok(t) => t, + Err(e) => return Err(e) + })) } } |
