#![allow(unknown_lints)] // for clippy extern crate hex; extern crate fallible_iterator; extern crate phf; extern crate postgres_protocol; use fallible_iterator::{FallibleIterator, FromFallibleIterator}; use std::ops::Range; pub mod error; pub mod params; pub struct RowData { buf: Vec, indices: Vec>>, } impl<'a> FromFallibleIterator> for RowData { fn from_fallible_iterator(mut it: I) -> Result where I: FallibleIterator> { let mut row = RowData { buf: vec![], indices: Vec::with_capacity(it.size_hint().0), }; while let Some(cell) = try!(it.next()) { let index = match cell { Some(cell) => { let base = row.buf.len(); row.buf.extend_from_slice(cell); Some(base..row.buf.len()) } None => None, }; row.indices.push(index); } Ok(row) } } impl RowData { pub fn len(&self) -> usize { self.indices.len() } pub fn get(&self, index: usize) -> Option<&[u8]> { match &self.indices[index] { &Some(ref range) => Some(&self.buf[range.clone()]), &None => None, } } }