in lang/csharp/src/apache/main/Generic/PreresolvingDatumReader.cs [113:185]
private ReadItem ResolveReader(Schema writerSchema, Schema readerSchema)
{
if (readerSchema.Tag == Schema.Type.Union && writerSchema.Tag != Schema.Type.Union)
{
readerSchema = FindBranch(readerSchema as UnionSchema, writerSchema);
}
switch (writerSchema.Tag)
{
case Schema.Type.Null:
return ReadNull;
case Schema.Type.Boolean:
return ReadBoolean;
case Schema.Type.Int:
{
switch (readerSchema.Tag)
{
case Schema.Type.Long:
return Read(d => (long) d.ReadInt());
case Schema.Type.Float:
return Read(d => (float) d.ReadInt());
case Schema.Type.Double:
return Read(d => (double) d.ReadInt());
default:
return Read(d => d.ReadInt());
}
}
case Schema.Type.Long:
{
switch (readerSchema.Tag)
{
case Schema.Type.Float:
return Read(d => (float) d.ReadLong());
case Schema.Type.Double:
return Read(d => (double) d.ReadLong());
default:
return Read(d => d.ReadLong());
}
}
case Schema.Type.Float:
{
switch (readerSchema.Tag)
{
case Schema.Type.Double:
return Read(d => (double) d.ReadFloat());
default:
return Read(d => d.ReadFloat());
}
}
case Schema.Type.Double:
return Read(d => d.ReadDouble());
case Schema.Type.String:
return Read(d => d.ReadString());
case Schema.Type.Bytes:
return Read(d => d.ReadBytes());
case Schema.Type.Error:
case Schema.Type.Record:
return ResolveRecord((RecordSchema)writerSchema, (RecordSchema)readerSchema);
case Schema.Type.Enumeration:
return ResolveEnum((EnumSchema)writerSchema, (EnumSchema)readerSchema);
case Schema.Type.Fixed:
return ResolveFixed((FixedSchema)writerSchema, (FixedSchema)readerSchema);
case Schema.Type.Array:
return ResolveArray((ArraySchema)writerSchema, (ArraySchema)readerSchema);
case Schema.Type.Map:
return ResolveMap((MapSchema)writerSchema, (MapSchema)readerSchema);
case Schema.Type.Union:
return ResolveUnion((UnionSchema)writerSchema, readerSchema);
case Schema.Type.Logical:
return ResolveLogical((LogicalSchema)writerSchema, (LogicalSchema)readerSchema);
default:
throw new AvroException("Unknown schema type: " + writerSchema);
}
}