1use js_sys::Object;
2use thiserror::Error;
3use wasm_bindgen::{JsCast, JsValue};
4
5#[derive(Debug, Error, PartialEq)]
7pub enum Error {
8 #[error("failed to add a value: {}", js_object_display(.0))]
10 AddFailed(JsValue),
11
12 #[error("failed to clear object store: {}", js_object_display(.0))]
14 ClearFailed(JsValue),
15
16 #[error("failed to get count of records: {}", js_object_display(.0))]
18 CountFailed(JsValue),
19
20 #[error("failed to advance cursor: {}", js_object_display(.0))]
22 CursorAdvanceFailed(JsValue),
23
24 #[error("failed to continue cursor: {}", js_object_display(.0))]
26 CursorContinueFailed(JsValue),
27
28 #[error("failed to get cursor key: {}", js_object_display(.0))]
30 CursorKeyNotFound(JsValue),
31
32 #[error("failed to get cursor primary key: {}", js_object_display(.0))]
34 CursorPrimaryKeyNotFound(JsValue),
35
36 #[error("failed to get cursor value: {}", js_object_display(.0))]
38 CursorValueNotFound(JsValue),
39
40 #[error("failed to delete a value: {}", js_object_display(.0))]
42 DeleteFailed(JsValue),
43
44 #[error("failed to get event target")]
46 EventTargetNotFound,
47
48 #[error("failed to get all values: {}", js_object_display(.0))]
50 GetAllFailed(JsValue),
51
52 #[error("failed to get all keys: {}", js_object_display(.0))]
54 GetAllKeysFailed(JsValue),
55
56 #[error("failed to get a value: {}", js_object_display(.0))]
58 GetFailed(JsValue),
59
60 #[error("failed to get a key: {}", js_object_display(.0))]
62 GetKeyFailed(JsValue),
63
64 #[error("failed to create new index: {}", js_object_display(.0))]
66 IndexCreateFailed(JsValue),
67
68 #[error("failed to delete index: {}", js_object_display(.0))]
70 IndexDeleteFailed(JsValue),
71
72 #[error("failed to delete indexed db: {}", js_object_display(.0))]
74 IndexedDbDeleteFailed(JsValue),
75
76 #[error("indexed db not found")]
78 IndexedDbNotFound(JsValue),
79
80 #[error("failed to open indexed db: {}", js_object_display(.0))]
82 IndexedDbOpenFailed(JsValue),
83
84 #[error("failed to get index: {}", js_object_display(.0))]
86 IndexNotFound(JsValue),
87
88 #[error("invalid cursor direction")]
90 InvalidCursorDirection,
91
92 #[error("invalid key path of an object store")]
94 InvalidKeyPath,
95
96 #[error("invalid request ready state")]
98 InvalidReqeustReadyState,
99
100 #[error("invalid storage type")]
102 InvalidStorageType,
103
104 #[error("invalid transaction mode")]
106 InvalidTransactionMode,
107
108 #[error("failed to get key path of an object store: {}", js_object_display(.0))]
110 KeyPathNotFound(JsValue),
111
112 #[error("failed to get key range bound: {}", js_object_display(.0))]
114 KeyRangeBoundNotFound(JsValue),
115
116 #[error("failed to create key range: {}", js_object_display(.0))]
118 KeyRangeCreateFailed(JsValue),
119
120 #[error("failed to check if a value is included in key range: {}", js_object_display(.0))]
122 KeyRangeIncludesFailed(JsValue),
123
124 #[error("number conversion error")]
126 NumberConversionError,
127
128 #[error("failed to create new object store: {}", js_object_display(.0))]
130 ObjectStoreCreateFailed(JsValue),
131
132 #[error("failed to delete object store: {}", js_object_display(.0))]
134 ObjectStoreDeleteFailed(JsValue),
135
136 #[error("failed to get object store: {}", js_object_display(.0))]
138 ObjectStoreNotFound(JsValue),
139
140 #[error("failed to open cursor: {}", js_object_display(.0))]
142 OpenCursorFailed(JsValue),
143
144 #[error("failed to open key cursor: {}", js_object_display(.0))]
146 OpenKeyCursorFailed(JsValue),
147
148 #[error("failed to get request error: {}", js_object_display(.0))]
150 RequestErrorNotFound(JsValue),
151
152 #[error("failed to get request source: {}", js_object_display(.0))]
154 RequestResultNotFound(JsValue),
155
156 #[error("failed to get request source")]
158 RequestSourceNotFound,
159
160 #[error("failed to abort transaction: {}", js_object_display(.0))]
162 TransactionAbortError(JsValue),
163
164 #[error("failed to commit transaction: {}", js_object_display(.0))]
166 TransactionCommitError(JsValue),
167
168 #[error("failed to get transaction mode: {}", js_object_display(.0))]
170 TransactionModeNotFound(JsValue),
171
172 #[error("failed to open new transaction: {}", js_object_display(.0))]
174 TransactionOpenFailed(JsValue),
175
176 #[error("unexpected JS type. expected: {}, found: {}", .0, js_object_display(.1))]
178 UnexpectedJsType(&'static str, JsValue),
179
180 #[error("failed to update a value: {}", js_object_display(.0))]
182 UpdateFailed(JsValue),
183}
184
185fn js_object_display(option: &JsValue) -> String {
186 let object: &Object = option.unchecked_ref();
187 ToString::to_string(&object.to_string())
188}