@@ -21,7 +21,7 @@ use apache_avro::schema::RecordSchema;
2121use apache_avro:: {
2222 schema:: { Schema as AvroSchema , SchemaKind } ,
2323 types:: Value ,
24- AvroResult , Error as AvroError , Reader as AvroReader ,
24+ Error as AvroError , Reader as AvroReader ,
2525} ;
2626use arrow:: array:: {
2727 make_array, Array , ArrayBuilder , ArrayData , ArrayDataBuilder , ArrayRef ,
@@ -938,40 +938,31 @@ fn resolve_string(v: &Value) -> ArrowResult<Option<String>> {
938938 . map_err ( |e| SchemaError ( format ! ( "expected resolvable string : {e:?}" ) ) )
939939}
940940
941- fn resolve_u8 ( v : & Value ) -> AvroResult < u8 > {
942- let int = match v {
943- Value :: Int ( n) => Ok ( Value :: Int ( * n) ) ,
944- Value :: Long ( n) => Ok ( Value :: Int ( * n as i32 ) ) ,
945- other => Err ( AvroError :: GetU8 ( other. into ( ) ) ) ,
946- } ?;
947- if let Value :: Int ( n) = int {
948- if n >= 0 && n <= From :: from ( u8:: MAX ) {
949- return Ok ( n as u8 ) ;
950- }
951- }
941+ fn resolve_u8 ( v : & Value ) -> Option < u8 > {
942+ let v = match v {
943+ Value :: Union ( _, inner) => inner. as_ref ( ) ,
944+ _ => v,
945+ } ;
952946
953- Err ( AvroError :: GetU8 ( int. into ( ) ) )
947+ match v {
948+ Value :: Int ( n) => u8:: try_from ( * n) . ok ( ) ,
949+ Value :: Long ( n) => u8:: try_from ( * n) . ok ( ) ,
950+ _ => None ,
951+ }
954952}
955953
956954fn resolve_bytes ( v : & Value ) -> Option < Vec < u8 > > {
957- let v = if let Value :: Union ( _, b) = v { b } else { v } ;
955+ let v = match v {
956+ Value :: Union ( _, inner) => inner. as_ref ( ) ,
957+ _ => v,
958+ } ;
959+
958960 match v {
959- Value :: Bytes ( _) => Ok ( v. clone ( ) ) ,
960- Value :: String ( s) => Ok ( Value :: Bytes ( s. clone ( ) . into_bytes ( ) ) ) ,
961- Value :: Array ( items) => Ok ( Value :: Bytes (
962- items
963- . iter ( )
964- . map ( resolve_u8)
965- . collect :: < Result < Vec < _ > , _ > > ( )
966- . ok ( ) ?,
967- ) ) ,
968- other => Err ( AvroError :: GetBytes ( other. into ( ) ) ) ,
969- }
970- . ok ( )
971- . and_then ( |v| match v {
972- Value :: Bytes ( s) => Some ( s) ,
961+ Value :: Bytes ( bytes) => Some ( bytes. clone ( ) ) ,
962+ Value :: String ( s) => Some ( s. as_bytes ( ) . to_vec ( ) ) ,
963+ Value :: Array ( items) => items. iter ( ) . map ( resolve_u8) . collect :: < Option < Vec < u8 > > > ( ) ,
973964 _ => None ,
974- } )
965+ }
975966}
976967
977968fn resolve_fixed ( v : & Value , size : usize ) -> Option < Vec < u8 > > {
0 commit comments