@@ -311,19 +311,31 @@ type error =
311311 | Unexpected_status of result_status * string * result_status list
312312 | Cancel_failure of string
313313
314+ let trim_trailing_newlines s =
315+ let rec find_end i =
316+ if i = 0 then 0
317+ else match s.[i - 1 ] with '\n' | '\r' -> find_end (i - 1 ) | _ -> i
318+ in
319+ String. sub s 0 (find_end (String. length s))
320+
321+ let format_error_with_detail prefix detail =
322+ let detail = trim_trailing_newlines detail in
323+ if detail = " " then prefix else prefix ^ " : " ^ detail
324+
314325let string_of_error = function
315326 | Field_out_of_range (i , n ) ->
316327 sprintf " Field number %i is out of range [0..%i]" i (n - 1 )
317328 | Tuple_out_of_range (i , n ) ->
318329 sprintf " Tuple number %i is out of range [0..%i]" i (n - 1 )
319330 | Binary -> sprintf " This function does not accept binary tuples"
320- | Connection_failure s -> " Connection failure: " ^ s
331+ | Connection_failure s -> format_error_with_detail " Connection failure" s
321332 | Unexpected_status (s , msg , sl ) ->
322- sprintf " Result status %s unexpected (expected status:%s); %s"
323- (result_status s)
324- (String. concat " ," (List. map result_status sl))
333+ format_error_with_detail
334+ (sprintf " Result status %s unexpected (expected status: %s)"
335+ (result_status s)
336+ (String. concat " ," (List. map result_status sl)))
325337 msg
326- | Cancel_failure s -> " Cancel failure: " ^ s
338+ | Cancel_failure s -> format_error_with_detail " Cancel failure" s
327339
328340exception Error of error
329341
0 commit comments