in parquet_derive/src/parquet_field.rs [908:988]
fn test_optional_to_writer_snippet() {
let struct_def: proc_macro2::TokenStream = quote! {
struct StringBorrower<'a> {
optional_str: Option<&'a str>,
optional_string: Option<&String>,
optional_dumb_int: Option<&i32>,
}
};
let fields = extract_fields(struct_def);
let optional = Field::from(&fields[0]);
let snippet = optional.writer_snippet();
assert_eq!(snippet.to_string(),
(quote! {
{
let definition_levels : Vec < i16 > = self . iter ( ) . map ( | rec | if rec . optional_str . is_some ( ) { 1 } else { 0 } ) . collect ( ) ;
let vals: Vec <_> = records.iter().filter_map( |rec| {
if let Some ( ref inner ) = rec . optional_str {
Some ( (&inner[..]).into() )
} else {
None
}
}).collect();
if let ColumnWriter::ByteArrayColumnWriter ( ref mut typed ) = column_writer.untyped() {
typed . write_batch ( & vals [ .. ] , Some(&definition_levels[..]) , None ) ? ;
} else {
panic!("Schema and struct disagree on type for {}" , stringify ! { optional_str } )
}
}
}
).to_string());
let optional = Field::from(&fields[1]);
let snippet = optional.writer_snippet();
assert_eq!(snippet.to_string(),
(quote!{
{
let definition_levels : Vec < i16 > = self . iter ( ) . map ( | rec | if rec . optional_string . is_some ( ) { 1 } else { 0 } ) . collect ( ) ;
let vals: Vec <_> = records.iter().filter_map( |rec| {
if let Some ( ref inner ) = rec . optional_string {
Some ( (&inner[..]).into() )
} else {
None
}
}).collect();
if let ColumnWriter::ByteArrayColumnWriter ( ref mut typed ) = column_writer.untyped() {
typed . write_batch ( & vals [ .. ] , Some(&definition_levels[..]) , None ) ? ;
} else {
panic!("Schema and struct disagree on type for {}" , stringify ! { optional_string } )
}
}
}).to_string());
let optional = Field::from(&fields[2]);
let snippet = optional.writer_snippet();
assert_eq!(snippet.to_string(),
(quote!{
{
let definition_levels : Vec < i16 > = self . iter ( ) . map ( | rec | if rec . optional_dumb_int . is_some ( ) { 1 } else { 0 } ) . collect ( ) ;
let vals: Vec <_> = records.iter().filter_map( |rec| {
if let Some ( inner ) = rec . optional_dumb_int {
Some ( inner as i32 )
} else {
None
}
}).collect();
if let ColumnWriter::Int32ColumnWriter ( ref mut typed ) = column_writer.untyped() {
typed . write_batch ( & vals [ .. ] , Some(&definition_levels[..]) , None ) ? ;
} else {
panic!("Schema and struct disagree on type for {}" , stringify ! { optional_dumb_int } )
}
}
}).to_string());
}