Skip to content

Commit

Permalink
Bug 1341102: Revendor rust dependencies; r=bustage
Browse files Browse the repository at this point in the history
MozReview-Commit-ID: 7hXRyaLssOZ
  • Loading branch information
Manishearth committed Feb 28, 2017
1 parent c0f2382 commit 3dc0ca6
Show file tree
Hide file tree
Showing 126 changed files with 7,216 additions and 1,785 deletions.
2 changes: 1 addition & 1 deletion third_party/rust/bincode/.cargo-checksum.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"e084df3ce631ce22082bd63f9e421e7f4d7a2408d6520de532f6a649e4d320dd",".travis.yml":"f705a11b487bf71c41ebd8223cc1f3cbde0dfdfeea96a100af55e06e93397a1b","Cargo.toml":"c1d0f68b42bff71b04c8e763f13b0141f30dc849bee5b0ab5b9008e3627aac99","LICENSE.md":"90d7e062634054e6866d3c81e6a2b3058a840e6af733e98e80bdfe1a7dec6912","changelist.org":"90bb4036f90c3792c8294de2e3d52a54cc6230c3e5dc78013a781a9aa468f5f3","examples/basic.rs":"57aeca11d5cc5c3d5bb613e78b2ea43a2e80d66c15a2fffae303b165aa4ab41d","logo.png":"ebc5305aae938c1f834cf35302faa8be0f1b7b8c3c3beef5cf6b2f68b9628c35","readme.dev.md":"43bad3bcc13a5c057344d3ba7f64bd2b313f8c133d6afa068108df73e8e8facd","readme.md":"1fe1bda36327400cfedfcf103d58091c8465067b62706b0a368d287ca0312cd9","src/lib.rs":"04d6e4533f4bbb2ce2126bca414f95610075642b223f4e0c0b8f7a573792d7fd","src/refbox.rs":"fe266cec4f9f36942a1a9a9ad094a4bb1003d0c0f3c070cfb6214790d0f21b69","src/serde/mod.rs":"ef0c0a55936d835ae756d84a6ac38de312687d7c0f2cfc6810ec994413464516","src/serde/reader.rs":"6bfde2e2df9b450f6c07576198e47fdc837bbc4ddc74f447c72875c188c72ddc","src/serde/writer.rs":"eb3b439e8822871d715464ef6aca4b93a73b2b57625f9c586b68007f7386ab12","tests/test.rs":"f009e979fda892ad531ddd0f2003f0a7df607b19bd453a53f87c9041dfd9c745"},"package":"62650bb5651ba8f0580cebf4ef255d791b8b0ef53800322661e1bb5791d42966"}
{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"e084df3ce631ce22082bd63f9e421e7f4d7a2408d6520de532f6a649e4d320dd",".travis.yml":"f705a11b487bf71c41ebd8223cc1f3cbde0dfdfeea96a100af55e06e93397a1b","Cargo.toml":"8988a4300b10f78e0a3affbc4530827766c80c0d9847441e42e12017b09f7854","LICENSE.md":"90d7e062634054e6866d3c81e6a2b3058a840e6af733e98e80bdfe1a7dec6912","changelist.org":"90bb4036f90c3792c8294de2e3d52a54cc6230c3e5dc78013a781a9aa468f5f3","examples/basic.rs":"57aeca11d5cc5c3d5bb613e78b2ea43a2e80d66c15a2fffae303b165aa4ab41d","logo.png":"ebc5305aae938c1f834cf35302faa8be0f1b7b8c3c3beef5cf6b2f68b9628c35","readme.dev.md":"43bad3bcc13a5c057344d3ba7f64bd2b313f8c133d6afa068108df73e8e8facd","readme.md":"a70631b99064d77c968edf1e2f59415ff26c307589fa3767243376db44f00800","src/lib.rs":"84f115fcd9fe9a6fad489341f1134a24f178de46bfba6dab774a13212eac32ba","src/refbox.rs":"fe266cec4f9f36942a1a9a9ad094a4bb1003d0c0f3c070cfb6214790d0f21b69","src/serde/mod.rs":"5b4eaf256ec87f08bec20e0ac46184b3b336e87b2cb22f40bae6213613ae3081","src/serde/reader.rs":"8b223500017eff9eb9b634b74acefb96457db124e64fe594511abf12a4ef4207","src/serde/writer.rs":"5fd74db7389aebfd14c126dad56348ea5ad0d58bbbcc91a0757e9451c6ee977f","tests/test.rs":"8f595d83de63c0ce091626fd5875185fa29040cf77c47f3a27ceba30673d6e67"},"package":"db8831e3eb4e9ae608d826876fa422ffb15b47caa89fc1bcb96bfbe4f5ded8b2"}
2 changes: 1 addition & 1 deletion third_party/rust/bincode/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "bincode"
version = "1.0.0-alpha2"
version = "1.0.0-alpha4"
authors = ["Ty Overby <ty@pre-alpha.com>", "Francesco Mazzoli <f@mazzo.li>", "David Tolnay <dtolnay@gmail.com>", "Daniel Griffen"]

repository = "https://github.com/TyOverby/bincode"
Expand Down
8 changes: 7 additions & 1 deletion third_party/rust/bincode/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,13 @@ perfectly with other stream-based apis such as rust files, network streams,
and the [flate2-rs](https://github.com/alexcrichton/flate2-rs) compression
library.

[Api Documentation](http://tyoverby.github.io/bincode/bincode/)
## [Api Documentation](http://tyoverby.github.io/bincode/bincode/)

## Bincode in the wild

* [google/tarpc](https://github.com/google/tarpc): Bincode is used to serialize and deserialize networked RPC messages.
* [servo/webrender](https://github.com/servo/webrender): Bincode records webrender API calls for record/replay-style graphics debugging.
* [servo/icp-channel](https://github.com/servo/ipc-channel): Ipc-Channel uses Bincode to send structs between processes using a channel-like API.

## Example
```rust
Expand Down
58 changes: 57 additions & 1 deletion third_party/rust/bincode/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,63 @@ extern crate serde as serde_crate;
pub mod refbox;
mod serde;

pub use serde::*;
pub mod endian_choice {
pub use super::serde::{serialize, serialize_into, deserialize, deserialize_from};
}

use std::io::{Read, Write};

pub use serde::{Deserializer, Serializer, ErrorKind, Error, Result, serialized_size, serialized_size_bounded};

/// Deserializes a slice of bytes into an object.
///
/// This method does not have a size-limit because if you already have the bytes
/// in memory, then you don't gain anything by having a limiter.
pub fn deserialize<T>(bytes: &[u8]) -> serde::Result<T>
where T: serde_crate::Deserialize,
{
serde::deserialize::<_, byteorder::LittleEndian>(bytes)
}

/// Deserializes an object directly from a `Buffer`ed Reader.
///
/// If the provided `SizeLimit` is reached, the deserialization will bail immediately.
/// A SizeLimit can help prevent an attacker from flooding your server with
/// a neverending stream of values that runs your server out of memory.
///
/// If this returns an `Error`, assume that the buffer that you passed
/// in is in an invalid state, as the error could be returned during any point
/// in the reading.
pub fn deserialize_from<R: ?Sized, T>(reader: &mut R, size_limit: SizeLimit) -> serde::Result<T>
where R: Read,
T: serde_crate::Deserialize,
{
serde::deserialize_from::<_, _, byteorder::LittleEndian>(reader, size_limit)
}

/// Serializes an object directly into a `Writer`.
///
/// If the serialization would take more bytes than allowed by `size_limit`, an error
/// is returned and *no bytes* will be written into the `Writer`.
///
/// If this returns an `Error` (other than SizeLimit), assume that the
/// writer is in an invalid state, as writing could bail out in the middle of
/// serializing.
pub fn serialize_into<W: ?Sized, T: ?Sized>(writer: &mut W, value: &T, size_limit: SizeLimit) -> serde::Result<()>
where W: Write, T: serde_crate::Serialize
{
serde::serialize_into::<_, _, byteorder::LittleEndian>(writer, value, size_limit)
}

/// Serializes a serializable object into a `Vec` of bytes.
///
/// If the serialization would take more bytes than allowed by `size_limit`,
/// an error is returned.
pub fn serialize<T: ?Sized>(value: &T, size_limit: SizeLimit) -> serde::Result<Vec<u8>>
where T: serde_crate::Serialize
{
serde::serialize::<_, byteorder::LittleEndian>(value, size_limit)
}

/// A limit on the amount of bytes that can be read or written.
///
Expand Down
20 changes: 10 additions & 10 deletions third_party/rust/bincode/src/serde/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::io::{Write, Read};
use std::io::Error as IoError;
use std::{error, fmt, result};
use ::SizeLimit;
use byteorder::{ByteOrder};

pub use self::reader::{
Deserializer,
Expand Down Expand Up @@ -118,9 +119,8 @@ impl serde::ser::Error for Error {
/// If this returns an `Error` (other than SizeLimit), assume that the
/// writer is in an invalid state, as writing could bail out in the middle of
/// serializing.
pub fn serialize_into<W: ?Sized, T: ?Sized>(writer: &mut W, value: &T, size_limit: SizeLimit) -> Result<()>
where W: Write,
T: serde::Serialize,
pub fn serialize_into<W: ?Sized, T: ?Sized, E>(writer: &mut W, value: &T, size_limit: SizeLimit) -> Result<()>
where W: Write, T: serde::Serialize, E: ByteOrder
{
match size_limit {
SizeLimit::Infinite => { }
Expand All @@ -130,15 +130,15 @@ pub fn serialize_into<W: ?Sized, T: ?Sized>(writer: &mut W, value: &T, size_limi
}
}

let mut serializer = Serializer::new(writer);
let mut serializer = Serializer::<_, E>::new(writer);
serde::Serialize::serialize(value, &mut serializer)
}

/// Serializes a serializable object into a `Vec` of bytes.
///
/// If the serialization would take more bytes than allowed by `size_limit`,
/// an error is returned.
pub fn serialize<T: ?Sized>(value: &T, size_limit: SizeLimit) -> Result<Vec<u8>>
pub fn serialize<T: ?Sized, E: ByteOrder>(value: &T, size_limit: SizeLimit) -> Result<Vec<u8>>
where T: serde::Serialize
{
// Since we are putting values directly into a vector, we can do size
Expand All @@ -152,7 +152,7 @@ pub fn serialize<T: ?Sized>(value: &T, size_limit: SizeLimit) -> Result<Vec<u8>>
SizeLimit::Infinite => Vec::new()
};

try!(serialize_into(&mut writer, value, SizeLimit::Infinite));
try!(serialize_into::<_, _, E>(&mut writer, value, SizeLimit::Infinite));
Ok(writer)
}

Expand Down Expand Up @@ -190,21 +190,21 @@ pub fn serialized_size_bounded<T: ?Sized>(value: &T, max: u64) -> Option<u64>
/// If this returns an `Error`, assume that the buffer that you passed
/// in is in an invalid state, as the error could be returned during any point
/// in the reading.
pub fn deserialize_from<R: ?Sized, T>(reader: &mut R, size_limit: SizeLimit) -> Result<T>
pub fn deserialize_from<R: ?Sized, T, E: ByteOrder>(reader: &mut R, size_limit: SizeLimit) -> Result<T>
where R: Read,
T: serde::Deserialize,
{
let mut deserializer = Deserializer::new(reader, size_limit);
let mut deserializer = Deserializer::<_, E>::new(reader, size_limit);
serde::Deserialize::deserialize(&mut deserializer)
}

/// Deserializes a slice of bytes into an object.
///
/// This method does not have a size-limit because if you already have the bytes
/// in memory, then you don't gain anything by having a limiter.
pub fn deserialize<T>(bytes: &[u8]) -> Result<T>
pub fn deserialize<T, E: ByteOrder>(bytes: &[u8]) -> Result<T>
where T: serde::Deserialize,
{
let mut reader = bytes;
deserialize_from(&mut reader, SizeLimit::Infinite)
deserialize_from::<_, _, E>(&mut reader, SizeLimit::Infinite)
}
57 changes: 32 additions & 25 deletions third_party/rust/bincode/src/serde/reader.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::io::Read;
use std::marker::PhantomData;

use byteorder::{BigEndian, ReadBytesExt};
use byteorder::{ReadBytesExt, ByteOrder};
use serde_crate as serde;
use serde_crate::de::value::ValueDeserializer;
use serde_crate::de::Error as DeError;
Expand All @@ -17,18 +18,20 @@ use super::{Result, Error, ErrorKind};
/// serde::Deserialize::deserialize(&mut deserializer);
/// let bytes_read = d.bytes_read();
/// ```
pub struct Deserializer<R> {
pub struct Deserializer<R, E: ByteOrder> {
reader: R,
size_limit: SizeLimit,
read: u64
read: u64,
_phantom: PhantomData<E>,
}

impl<R: Read> Deserializer<R> {
pub fn new(r: R, size_limit: SizeLimit) -> Deserializer<R> {
impl<R: Read, E: ByteOrder> Deserializer<R, E> {
pub fn new(r: R, size_limit: SizeLimit) -> Deserializer<R, E> {
Deserializer {
reader: r,
size_limit: size_limit,
read: 0
read: 0,
_phantom: PhantomData
}
}

Expand All @@ -51,14 +54,19 @@ impl<R: Read> Deserializer<R> {
self.read_bytes(size_of::<T>() as u64)
}

fn read_string(&mut self) -> Result<String> {
fn read_vec(&mut self) -> Result<Vec<u8>> {
let len = try!(serde::Deserialize::deserialize(&mut *self));
try!(self.read_bytes(len));

let mut buffer = Vec::new();
try!(self.reader.by_ref().take(len as u64).read_to_end(&mut buffer));
let len = len as usize;
let mut bytes = Vec::with_capacity(len);
unsafe { bytes.set_len(len); }
try!(self.reader.read_exact(&mut bytes));
Ok(bytes)
}

String::from_utf8(buffer).map_err(|err|
fn read_string(&mut self) -> Result<String> {
String::from_utf8(try!(self.read_vec())).map_err(|err|
ErrorKind::InvalidEncoding{
desc: "error while decoding utf8 string",
detail: Some(format!("Deserialize error: {}", err))
Expand All @@ -73,14 +81,13 @@ macro_rules! impl_nums {
where V: serde::de::Visitor,
{
try!(self.read_type::<$ty>());
let value = try!(self.reader.$reader_method::<BigEndian>());
let value = try!(self.reader.$reader_method::<E>());
visitor.$visitor_method(value)
}
}
}


impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
impl<'a, R: Read, E: ByteOrder> serde::Deserializer for &'a mut Deserializer<R, E> {
type Error = Error;

#[inline]
Expand Down Expand Up @@ -192,13 +199,13 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
self.deserialize_seq(visitor)
visitor.visit_bytes(&try!(self.read_vec()))
}

fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
self.deserialize_seq(visitor)
visitor.visit_byte_buf(try!(self.read_vec()))
}

fn deserialize_enum<V>(self,
Expand All @@ -207,7 +214,7 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
impl<'a, R: Read + 'a> serde::de::EnumVisitor for &'a mut Deserializer<R> {
impl<'a, R: Read + 'a, E: ByteOrder> serde::de::EnumVisitor for &'a mut Deserializer<R, E> {
type Error = Error;
type Variant = Self;

Expand All @@ -228,9 +235,9 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
struct TupleVisitor<'a, R: Read + 'a>(&'a mut Deserializer<R>);
struct TupleVisitor<'a, R: Read + 'a, E: ByteOrder + 'a>(&'a mut Deserializer<R, E>);

impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for TupleVisitor<'a, R> {
impl<'a, 'b: 'a, R: Read + 'b, E: ByteOrder> serde::de::SeqVisitor for TupleVisitor<'a, R, E> {
type Error = Error;

fn visit_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>
Expand All @@ -249,12 +256,12 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
struct SeqVisitor<'a, R: Read + 'a> {
deserializer: &'a mut Deserializer<R>,
struct SeqVisitor<'a, R: Read + 'a, E: ByteOrder + 'a> {
deserializer: &'a mut Deserializer<R, E>,
len: usize,
}

impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for SeqVisitor<'a, R> {
impl<'a, 'b: 'a, R: Read + 'b, E: ByteOrder> serde::de::SeqVisitor for SeqVisitor<'a, R, E> {
type Error = Error;

fn visit_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>
Expand Down Expand Up @@ -298,12 +305,12 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value>
where V: serde::de::Visitor,
{
struct MapVisitor<'a, R: Read + 'a> {
deserializer: &'a mut Deserializer<R>,
struct MapVisitor<'a, R: Read + 'a, E: ByteOrder + 'a> {
deserializer: &'a mut Deserializer<R, E>,
len: usize,
}

impl<'a, 'b: 'a, R: Read + 'b> serde::de::MapVisitor for MapVisitor<'a, R> {
impl<'a, 'b: 'a, R: Read + 'b, E: ByteOrder> serde::de::MapVisitor for MapVisitor<'a, R, E> {
type Error = Error;

fn visit_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>>
Expand Down Expand Up @@ -382,7 +389,7 @@ impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer<R> {
}
}

impl<'a, R: Read> serde::de::VariantVisitor for &'a mut Deserializer<R> {
impl<'a, R: Read, E: ByteOrder> serde::de::VariantVisitor for &'a mut Deserializer<R, E> {
type Error = Error;

fn visit_unit(self) -> Result<()> {
Expand Down
Loading

0 comments on commit 3dc0ca6

Please sign in to comment.