diff --git a/src/fastfield/writer.rs b/src/fastfield/writer.rs index 1f9e5a929..c0d3e05e3 100644 --- a/src/fastfield/writer.rs +++ b/src/fastfield/writer.rs @@ -1,4 +1,5 @@ use schema::{Schema, FieldValue, Field, Document}; +use schema::FieldEntry; use fastfield::FastFieldSerializer; use std::io; @@ -6,18 +7,29 @@ pub struct U32FastFieldsWriter { field_writers: Vec, } + +fn is_u32_fast(field_entry: &FieldEntry) -> bool { + match field_entry { + &FieldEntry::U32(_, ref options) => { + options.is_fast() + } + _ => { + false + } + } +} + impl U32FastFieldsWriter { pub fn from_schema(schema: &Schema) -> U32FastFieldsWriter { // TODO fix - // let u32_fields: Vec = schema.fields - // .iter() - // .enumerate() - // .filter(|&(_, field_entry)| field_entry.option.is_fast()) - // .map(|(field_id, _)| Field(field_id as u8)) - // .collect(); - //U32FastFieldsWriter::new(u32_fields) - U32FastFieldsWriter::new(Vec::new()) + let u32_fields: Vec = schema.fields() + .iter() + .enumerate() + .filter(|&(_, field_entry)| is_u32_fast(field_entry)) + .map(|(field_id, _)| Field(field_id as u8)) + .collect(); + U32FastFieldsWriter::new(u32_fields) } pub fn new(fields: Vec) -> U32FastFieldsWriter { diff --git a/src/schema/schema.rs b/src/schema/schema.rs index 4edffaae0..af87e37aa 100644 --- a/src/schema/schema.rs +++ b/src/schema/schema.rs @@ -98,6 +98,10 @@ impl Schema { &self.fields[field.0 as usize] } + pub fn fields(&self,) -> &Vec { + &self.fields + } + // pub fn get_u32_fields(&self,) -> &Vec { // &self.u32_fields // }