@@ -134,7 +134,17 @@ impl<'de> Visitor<'de> for FieldSortVecVisitor {
134134 type Value = Vec < SortField > ;
135135
136136 fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
137- formatter. write_str ( "An array containing the sort fields." )
137+ formatter. write_str ( "A string, array, or object containing the sort fields." )
138+ }
139+
140+ fn visit_str < E > ( self , field_name : & str ) -> Result < Vec < SortField > , E >
141+ where E : serde:: de:: Error {
142+ let order = default_elasticsearch_sort_order ( field_name) ;
143+ Ok ( vec ! [ SortField {
144+ field: field_name. to_string( ) ,
145+ order,
146+ date_format: None ,
147+ } ] )
138148 }
139149
140150 fn visit_seq < A > ( self , mut seq : A ) -> Result < Vec < SortField > , A :: Error >
@@ -231,6 +241,20 @@ mod tests {
231241 assert_eq ! ( field_sorts[ 1 ] . order, SortOrder :: Asc ) ;
232242 }
233243
244+ #[ test]
245+ fn test_sort_field_str ( ) {
246+ let json = r#"
247+ {
248+ "sort": "timestamp"
249+ }
250+ "# ;
251+ let search_body: SearchBody = serde_json:: from_str ( json) . unwrap ( ) ;
252+ let field_sorts = search_body. sort . unwrap ( ) ;
253+ assert_eq ! ( field_sorts. len( ) , 1 ) ;
254+ assert_eq ! ( field_sorts[ 0 ] . field, "timestamp" ) ;
255+ assert_eq ! ( field_sorts[ 0 ] . order, SortOrder :: Asc ) ;
256+ }
257+
234258 #[ test]
235259 fn test_sort_default_orders ( ) {
236260 let json = r#"
0 commit comments