@@ -505,17 +505,14 @@ impl<'a, R> CponReader<'a, R>
505505 fn read_datetime ( & mut self ) -> Result < Value , ReadError > {
506506 self . get_byte ( ) ?; // eat 'd'
507507 let v = self . read_string ( ) ?;
508- if let Value :: String ( sdata) = v {
509- match DateTime :: from_iso_str ( & sdata) {
510- Ok ( dt) => {
511- return Ok ( Value :: from ( dt) ) ;
512- }
513- Err ( err) => {
514- return Err ( self . make_error ( & err, ReadErrorReason :: InvalidCharacter ) )
515- }
508+ match DateTime :: from_iso_str ( & v) {
509+ Ok ( dt) => {
510+ Ok ( Value :: from ( dt) )
511+ }
512+ Err ( err) => {
513+ Err ( self . make_error ( & err, ReadErrorReason :: InvalidCharacter ) )
516514 }
517515 }
518- Err ( self . make_error ( "Invalid DateTime" , ReadErrorReason :: InvalidCharacter ) )
519516 }
520517 fn read_true ( & mut self ) -> Result < Value , ReadError > {
521518 self . read_text_token ( "true" ) ?;
@@ -545,7 +542,7 @@ where R: Read
545542 fn make_error ( & self , msg : & str , reason : ReadErrorReason ) -> ReadError {
546543 self . byte_reader . make_error ( & format ! ( "Cpon read error - {msg}" ) , reason)
547544 }
548- fn read_string ( & mut self ) -> Result < Value , ReadError > {
545+ fn read_string ( & mut self ) -> Result < String , ReadError > {
549546 let mut buff: Vec < u8 > = Vec :: new ( ) ;
550547 self . get_byte ( ) ?; // eat "
551548 loop {
@@ -572,9 +569,9 @@ where R: Read
572569 }
573570 }
574571 }
575- let s = std :: str :: from_utf8 ( & buff) ;
572+ let s = String :: from_utf8 ( buff) ;
576573 match s {
577- Ok ( s) => Ok ( Value :: from ( s ) ) ,
574+ Ok ( s) => Ok ( s ) ,
578575 Err ( e) => Err ( self . make_error ( & format ! ( "Invalid String, Utf8 error: {e}" ) , ReadErrorReason :: InvalidCharacter ) ) ,
579576 }
580577 }
@@ -615,7 +612,7 @@ impl<R> Reader for CponReader<'_, R>
615612 let b = self . peek_byte ( ) ?;
616613 let v = match & b {
617614 b'0' ..= b'9' | b'+' | b'-' => self . read_number ( ) ,
618- b'"' => self . read_string ( ) ,
615+ b'"' => self . read_string ( ) . map ( Value :: from ) ,
619616 b'b' => self . read_blob_esc ( ) ,
620617 b'x' => self . read_blob_hex ( ) ,
621618 b'[' => self . read_list ( ) ,
@@ -681,11 +678,7 @@ impl<R> Reader for CponReader<'_, R>
681678 if b == b'"' {
682679 // Regular map keys are strings
683680 let key = self . read_string ( ) ?;
684- if let Value :: String ( s) = key {
685- Ok ( MapKey :: String ( ( * s) . clone ( ) ) )
686- } else {
687- Err ( self . make_error ( "Expected string key in map" , ReadErrorReason :: InvalidCharacter ) )
688- }
681+ Ok ( MapKey :: String ( key) )
689682 } else if b. is_ascii_digit ( ) || b == b'+' || b == b'-' {
690683 // IMap keys are integers
691684 let ReadInt { value, is_negative, .. } = self . read_int ( 0 , false ) ?;
0 commit comments