|
1 | 1 | defmodule Mongo.Error do
|
2 | 2 | alias Mongo.Events
|
3 | 3 |
|
4 |
| - defexception [:message, :code, :host, :fail_command, :error_labels, :resumable, :retryable_reads, :retryable_writes, :not_writable_primary_or_recovering] |
| 4 | + defexception [:message, :code, :host, :fail_command, :error_labels, :resumable, :retryable_reads, :retryable_writes, :not_writable_primary_or_recovering, :error_info] |
5 | 5 |
|
6 | 6 | @exceeded_time_limit 262
|
7 | 7 | @failed_to_satisfy_read_preference 133
|
@@ -90,7 +90,8 @@ defmodule Mongo.Error do
|
90 | 90 | resumable: boolean,
|
91 | 91 | retryable_reads: boolean,
|
92 | 92 | retryable_writes: boolean,
|
93 |
| - not_writable_primary_or_recovering: boolean |
| 93 | + not_writable_primary_or_recovering: boolean, |
| 94 | + error_info: map() |
94 | 95 | }
|
95 | 96 |
|
96 | 97 | def message(e) do
|
@@ -125,6 +126,7 @@ defmodule Mongo.Error do
|
125 | 126 | retryable_writes: retryable_writes,
|
126 | 127 | not_writable_primary_or_recovering: not_writable_primary_or_recovering
|
127 | 128 | }
|
| 129 | + |> maybe_add_error_info(doc) |
128 | 130 | end
|
129 | 131 |
|
130 | 132 | def exception(message: message, code: code) do
|
@@ -212,6 +214,13 @@ defmodule Mongo.Error do
|
212 | 214 | def fail_command?(%Mongo.Error{fail_command: fail_command}) do
|
213 | 215 | fail_command
|
214 | 216 | end
|
| 217 | + |
| 218 | + defp maybe_add_error_info(error, %{"errInfo" => info}) do |
| 219 | + error |
| 220 | + |> Map.put_new(:error_info, info) |
| 221 | + end |
| 222 | + |
| 223 | + defp maybe_add_error_info(error, _), do: error |
215 | 224 | end
|
216 | 225 |
|
217 | 226 | defmodule Mongo.WriteError do
|
|
0 commit comments