11use crate :: { errors:: Error , indexes:: Index } ;
22use serde:: { de:: DeserializeOwned , Deserialize , Serialize , Serializer } ;
3+ use serde_json:: { Map , Value } ;
34use std:: collections:: HashMap ;
45
56#[ derive( Deserialize , Debug , PartialEq ) ]
@@ -17,7 +18,7 @@ pub struct SearchResult<T> {
1718 pub result : T ,
1819 /// The formatted result.
1920 #[ serde( rename = "_formatted" ) ]
20- pub formatted_result : Option < T > ,
21+ pub formatted_result : Option < Map < String , Value > > ,
2122 /// The object that contains information about the matches.
2223 #[ serde( rename = "_matchesInfo" ) ]
2324 pub matches_info : Option < HashMap < String , Vec < MatchRange > > > ,
@@ -284,6 +285,7 @@ impl<'a> Query<'a> {
284285mod tests {
285286 use crate :: { client:: * , document, search:: * } ;
286287 use serde:: { Deserialize , Serialize } ;
288+ use serde_json:: { Map , Value } ;
287289 use std:: thread:: sleep;
288290 use std:: time:: Duration ;
289291 use futures_await_test:: async_test;
@@ -303,6 +305,14 @@ mod tests {
303305 }
304306 }
305307
308+ impl PartialEq < Map < String , Value > > for Document {
309+ fn eq ( & self , rhs : & Map < String , Value > ) -> bool {
310+ self . id . to_string ( ) == rhs[ "id" ]
311+ && self . value == rhs[ "value" ]
312+ && self . kind == rhs[ "kind" ]
313+ }
314+ }
315+
306316 #[ allow( unused_must_use) ]
307317 async fn setup_test_index < ' a > ( client : & ' a Client , name : & ' a str ) -> Index {
308318 // try to delete
@@ -486,23 +496,23 @@ mod tests {
486496 query. with_query ( "lorem ipsum" ) ;
487497 query. with_attributes_to_crop ( Selectors :: All ) ;
488498 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
489- assert_eq ! ( results . hits [ 0 ] . formatted_result . as_ref ( ) . unwrap ( ) , & Document {
499+ assert_eq ! ( & Document {
490500 id: 0 ,
491501 value: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" . to_string( ) ,
492502 kind: "text" . to_string( )
493- } ) ;
503+ } , results . hits [ 0 ] . formatted_result . as_ref ( ) . unwrap ( ) ) ;
494504
495505 let mut query = Query :: new ( & index) ;
496506 query. with_query ( "lorem ipsum" ) ;
497507 query. with_attributes_to_crop ( Selectors :: Some ( & [ ( "value" , Some ( 50 ) ) , ( "kind" , None ) ] ) ) ;
498508 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
499509 assert_eq ! (
500- results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ,
501510 & Document {
502511 id: 0 ,
503512 value: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" . to_string( ) ,
504513 kind: "text" . to_string( )
505- }
514+ } ,
515+ results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( )
506516 ) ;
507517
508518 client
@@ -521,24 +531,25 @@ mod tests {
521531 query. with_attributes_to_crop ( Selectors :: All ) ;
522532 query. with_crop_length ( 200 ) ;
523533 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
524- assert_eq ! ( results . hits [ 0 ] . formatted_result . as_ref ( ) . unwrap ( ) , & Document {
534+ assert_eq ! ( & Document {
525535 id: 0 ,
526536 value: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" . to_string( ) ,
527- kind: "text" . to_string( )
528- } ) ;
537+ kind: "text" . to_string( ) ,
538+ } ,
539+ results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ) ;
529540
530541 let mut query = Query :: new ( & index) ;
531542 query. with_query ( "lorem ipsum" ) ;
532543 query. with_attributes_to_crop ( Selectors :: All ) ;
533544 query. with_crop_length ( 50 ) ;
534545 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
535546 assert_eq ! (
536- results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ,
537547 & Document {
538548 id: 0 ,
539549 value: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" . to_string( ) ,
540550 kind: "text" . to_string( )
541- }
551+ } ,
552+ results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( )
542553 ) ;
543554
544555 client. delete_index ( "test_query_crop_lenght" ) . await . unwrap ( ) ;
@@ -554,25 +565,25 @@ mod tests {
554565 query. with_attributes_to_highlight ( Selectors :: All ) ;
555566 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
556567 assert_eq ! (
557- results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ,
558568 & Document {
559569 id: 1 ,
560570 value: "<em>dolor</em> sit amet, consectetur adipiscing elit" . to_string( ) ,
561571 kind: "<em>text</em>" . to_string( )
562- }
572+ } ,
573+ results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ,
563574 ) ;
564575
565576 let mut query = Query :: new ( & index) ;
566577 query. with_query ( "dolor text" ) ;
567578 query. with_attributes_to_highlight ( Selectors :: Some ( & [ "value" ] ) ) ;
568579 let results: SearchResults < Document > = index. execute_query ( & query) . await . unwrap ( ) ;
569580 assert_eq ! (
570- results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( ) ,
571581 & Document {
572582 id: 1 ,
573583 value: "<em>dolor</em> sit amet, consectetur adipiscing elit" . to_string( ) ,
574584 kind: "text" . to_string( )
575- }
585+ } ,
586+ results. hits[ 0 ] . formatted_result. as_ref( ) . unwrap( )
576587 ) ;
577588
578589 client
0 commit comments