Skip to content

Commit 6c4943b

Browse files
committed
Reader takes a reference to schema
1 parent 32f6078 commit 6c4943b

File tree

7 files changed

+36
-35
lines changed

7 files changed

+36
-35
lines changed

examples/recursive_record.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn main() -> Result<(), Error> {
4646
let buf = writer.into_inner()?;
4747

4848
// read
49-
let reader = Reader::with_schema(buf.as_slice(), schema)?;
49+
let reader = Reader::with_schema(buf.as_slice(), &schema)?;
5050
for i in reader {
5151
let a: LongList = from_value(&i)?;
5252
dbg!(a);

examples/writer_builder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn main() -> Result<(), Error> {
1414
writer.serialize(())?;
1515
let v = writer.into_inner()?;
1616

17-
let reader = Reader::with_schema(v.as_slice(), schema)?;
17+
let reader = Reader::with_schema(v.as_slice(), &schema)?;
1818
for i in reader {
1919
dbg!(i?);
2020
}

src/reader.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ use std::str::FromStr;
2525
use value::{FieldValue, Record, Value};
2626

2727
/// Reader is the primary interface for reading data from an avro datafile.
28-
pub struct Reader<R> {
28+
pub struct Reader<'a, R> {
2929
source: R,
3030
header: Header,
31-
reader_schema: Option<Schema>,
31+
reader_schema: Option<&'a Schema>,
3232
block_buffer: Cursor<Vec<u8>>,
3333
entries_in_block: u64,
3434
}
3535

36-
impl<R> Reader<R>
36+
impl<'a, R> Reader<'a, R>
3737
where
3838
R: Read,
3939
{
@@ -50,7 +50,7 @@ where
5050
}
5151

5252
/// Create a Reader with the given reader schema and a readable buffer.
53-
pub fn with_schema(mut source: R, reader_schema: Schema) -> Result<Self, AvrowErr> {
53+
pub fn with_schema(mut source: R, reader_schema: &'a Schema) -> Result<Self, AvrowErr> {
5454
let header = Header::from_reader(&mut source)?;
5555

5656
Ok(Reader {
@@ -121,7 +121,7 @@ pub fn from_value<'de, D: Deserialize<'de>>(
121121
}
122122
}
123123

124-
impl<'a, 's, R: Read> Iterator for Reader<R> {
124+
impl<'a, 's, R: Read> Iterator for Reader<'_, R> {
125125
type Item = Result<Value, AvrowErr>;
126126

127127
fn next(&mut self) -> Option<Self::Item> {

src/writer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ mod tests {
291291
writer.serialize(()).unwrap();
292292
let _v = writer.into_inner().unwrap();
293293

294-
let reader = Reader::with_schema(_v.as_slice(), schema).unwrap();
294+
let reader = Reader::with_schema(_v.as_slice(), &schema).unwrap();
295295
for i in reader {
296296
let _: () = from_value(&i).unwrap();
297297
}
@@ -312,7 +312,7 @@ mod tests {
312312
writer.serialize(()).unwrap();
313313
let _v = writer.into_inner().unwrap();
314314

315-
let reader = Reader::with_schema(_v.as_slice(), schema).unwrap();
315+
let reader = Reader::with_schema(_v.as_slice(), &schema).unwrap();
316316
assert!(reader.meta().contains_key("hello"));
317317
}
318318
}

tests/common.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub(crate) fn writer_from_schema<'a>(schema: &'a Schema, codec: Codec) -> Writer
4040
writer
4141
}
4242

43-
pub(crate) fn reader_with_schema<'a>(schema: Schema, buffer: Vec<u8>) -> Reader<Cursor<Vec<u8>>> {
43+
pub(crate) fn reader_with_schema<'a>(schema: &Schema, buffer: Vec<u8>) -> Reader<Cursor<Vec<u8>>> {
4444
let reader = Reader::with_schema(Cursor::new(buffer), schema).unwrap();
4545
reader
4646
}

tests/read_write.rs

+9-8
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ fn read_write_primitive() {
8383
let buf = writer.into_inner().unwrap();
8484

8585
// read
86-
let reader = Reader::with_schema(buf.as_slice(), MockSchema.prim(name)).unwrap();
86+
let schema = MockSchema.prim(name);
87+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
8788
for i in reader {
8889
match primitive {
8990
Primitive::Null => {
@@ -166,7 +167,7 @@ fn io_read_write_self_referential_record() {
166167
let buf = writer.into_inner().unwrap();
167168

168169
// read
169-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
170+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
170171
for i in reader {
171172
let _: LongList = from_value(&i).unwrap();
172173
}
@@ -204,7 +205,7 @@ fn enum_read_write() {
204205
let buf = writer.into_inner().unwrap();
205206

206207
// read
207-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
208+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
208209
for i in reader {
209210
let _: Suit = from_value(&i).unwrap();
210211
}
@@ -230,7 +231,7 @@ fn array_read_write() {
230231
let buf = writer.into_inner().unwrap();
231232

232233
// read
233-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
234+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
234235
for i in reader {
235236
let _: Vec<&str> = from_value(&i).unwrap();
236237
}
@@ -258,7 +259,7 @@ fn map_read_write() {
258259
let buf = writer.into_inner().unwrap();
259260

260261
// read
261-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
262+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
262263
for i in reader {
263264
let _: HashMap<String, i64> = from_value(&i).unwrap();
264265
}
@@ -284,7 +285,7 @@ fn union_read_write() {
284285
let buf = writer.into_inner().unwrap();
285286

286287
// read
287-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
288+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
288289
for i in reader {
289290
let val = i.as_ref().unwrap();
290291
match val {
@@ -322,7 +323,7 @@ fn fixed_read_write() {
322323
let buf = writer.into_inner().unwrap();
323324

324325
// read
325-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
326+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
326327
for i in reader {
327328
let a: [u8; 16] = from_value(&i).unwrap();
328329
assert_eq!(a.len(), 16);
@@ -341,7 +342,7 @@ fn bytes_read_write() {
341342
let buf = writer.into_inner().unwrap();
342343
// let mut v: Vec<u8> = vec![];
343344

344-
let reader = Reader::with_schema(buf.as_slice(), schema).unwrap();
345+
let reader = Reader::with_schema(buf.as_slice(), &schema).unwrap();
345346
for i in reader {
346347
// dbg!(i);
347348
let b: &[u8] = from_value(&i).unwrap();

tests/schema_resolution.rs

+17-17
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fn null_fails_with_other_primitive_schema() {
2121
let buf = writer.into_inner().unwrap();
2222

2323
let reader_schema = MockSchema.prim("boolean");
24-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
24+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
2525

2626
for i in reader {
2727
let _ = i.unwrap();
@@ -41,7 +41,7 @@ fn writer_to_reader_promotion_primitives() {
4141
let buf = writer.into_inner().unwrap();
4242

4343
let reader_schema = MockSchema.prim(reader_schema);
44-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
44+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
4545
for i in reader {
4646
assert!(i.is_ok());
4747
let _a = i.unwrap();
@@ -59,7 +59,7 @@ fn writer_to_reader_promotion_primitives() {
5959
let buf = writer.into_inner().unwrap();
6060

6161
let reader_schema = MockSchema.prim(reader_schema);
62-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
62+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
6363
for i in reader {
6464
assert!(i.is_ok());
6565
}
@@ -76,7 +76,7 @@ fn writer_to_reader_promotion_primitives() {
7676
let buf = writer.into_inner().unwrap();
7777

7878
let reader_schema = MockSchema.prim(reader_schema);
79-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
79+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
8080
for i in reader {
8181
assert!(i.is_ok());
8282
}
@@ -93,7 +93,7 @@ fn writer_to_reader_promotion_primitives() {
9393
let buf = writer.into_inner().unwrap();
9494

9595
let reader_schema = MockSchema.prim(reader_schema);
96-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
96+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
9797
for i in reader {
9898
assert!(i.is_ok());
9999
let a = i.unwrap();
@@ -112,7 +112,7 @@ fn writer_to_reader_promotion_primitives() {
112112
let buf = writer.into_inner().unwrap();
113113

114114
let reader_schema = MockSchema.prim(reader_schema);
115-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
115+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
116116
for i in reader {
117117
assert!(i.is_ok());
118118
let a = i.unwrap();
@@ -144,7 +144,7 @@ fn enum_fails_schema_resolution() {
144144
// Reading a symbol which does not exist in writer's schema should fail
145145
let reader_schema =
146146
Schema::from_str(r##"{"type": "enum", "name": "Foo", "symbols": ["F"] }"##).unwrap();
147-
let reader = Reader::with_schema(buf.as_slice(), reader_schema).unwrap();
147+
let reader = Reader::with_schema(buf.as_slice(), &reader_schema).unwrap();
148148

149149
// let reader = reader_with_schema(reader_schema, name);
150150
for i in reader {
@@ -167,7 +167,7 @@ fn schema_resolution_map() {
167167
// // Reading a symbol which does not exist in writer's schema should fail
168168
let reader_schema = Schema::from_str(r##"{"type": "map", "values": "int"}"##).unwrap();
169169

170-
let reader = reader_with_schema(reader_schema, buf);
170+
let reader = reader_with_schema(&reader_schema, buf);
171171
for i in reader {
172172
let _ = i.unwrap();
173173
}
@@ -200,7 +200,7 @@ fn record_schema_resolution_with_default_value() {
200200
let buf = writer.into_inner().unwrap();
201201

202202
let schema = MockSchema.record_default();
203-
let reader = reader_with_schema(schema, buf);
203+
let reader = reader_with_schema(&schema, buf);
204204
for i in reader {
205205
let rec: Result<LongListDefault, _> = from_value(&i);
206206
assert!(rec.is_ok());
@@ -219,7 +219,7 @@ fn writer_is_a_union_but_reader_is_not() {
219219

220220
let schema_str = r##""int""##;
221221
let reader_schema = Schema::from_str(schema_str).unwrap();
222-
let mut reader = reader_with_schema(reader_schema, buf);
222+
let mut reader = reader_with_schema(&reader_schema, buf);
223223
assert!(reader.next().unwrap().is_err());
224224
assert!(reader.next().unwrap().is_ok());
225225
}
@@ -234,12 +234,12 @@ fn reader_is_a_union_but_writer_is_not() {
234234

235235
// err
236236
let reader_schema = Schema::from_str(r##"["null", "string"]"##).unwrap();
237-
let mut reader = reader_with_schema(reader_schema, buf.clone());
237+
let mut reader = reader_with_schema(&reader_schema, buf.clone());
238238
assert!(reader.next().unwrap().is_err());
239239

240240
// ok
241241
let reader_schema = Schema::from_str(r##"["null", "int"]"##).unwrap();
242-
let mut reader = reader_with_schema(reader_schema, buf);
242+
let mut reader = reader_with_schema(&reader_schema, buf);
243243
assert!(reader.next().unwrap().is_ok());
244244
}
245245

@@ -252,7 +252,7 @@ fn both_are_unions_but_different() {
252252
let buf = writer.into_inner().unwrap();
253253

254254
let reader_schema = Schema::from_str(r##"["boolean", "string"]"##).unwrap();
255-
let mut reader = reader_with_schema(reader_schema, buf);
255+
let mut reader = reader_with_schema(&reader_schema, buf);
256256

257257
// err
258258
assert!(reader.next().unwrap().is_err());
@@ -271,7 +271,7 @@ fn both_are_map() {
271271
// let reader_schema =
272272
// Schema::from_str(r##"["boolean", {"type":"map", "values": "string"}]"##).unwrap();
273273
let reader_schema = Schema::from_str(r##"{"type": "map", "values": "string"}"##).unwrap();
274-
let mut reader = reader_with_schema(reader_schema, buf);
274+
let mut reader = reader_with_schema(&reader_schema, buf);
275275
assert!(reader.next().unwrap().is_ok());
276276
}
277277

@@ -284,7 +284,7 @@ fn both_are_arrays() {
284284
let buf = writer.into_inner().unwrap();
285285

286286
let reader_schema = Schema::from_str(r##"{"type": "array", "items": "int"}"##).unwrap();
287-
let mut reader = reader_with_schema(reader_schema, buf);
287+
let mut reader = reader_with_schema(&reader_schema, buf);
288288
assert!(reader.next().unwrap().is_ok());
289289
}
290290

@@ -297,7 +297,7 @@ fn both_are_enums() {
297297
let buf = writer.into_inner().unwrap();
298298

299299
let reader_schema = Schema::from_str(r##"{"type": "array", "items": "int"}"##).unwrap();
300-
let mut reader = reader_with_schema(reader_schema, buf);
300+
let mut reader = reader_with_schema(&reader_schema, buf);
301301
assert!(reader.next().unwrap().is_ok());
302302
}
303303

@@ -310,6 +310,6 @@ fn null() {
310310
let buf = writer.into_inner().unwrap();
311311

312312
let reader_schema = Schema::from_str(r##"{"type": "null"}"##).unwrap();
313-
let mut reader = reader_with_schema(reader_schema, buf);
313+
let mut reader = reader_with_schema(&reader_schema, buf);
314314
assert!(reader.next().unwrap().is_ok());
315315
}

0 commit comments

Comments
 (0)