@@ -167,6 +167,116 @@ func Try6[T, R, S, Q, U any](callback func() (T, R, S, Q, U, error)) bool {
167
167
})
168
168
}
169
169
170
+ // TryOr has the same behavior than Must, but returns a default value in case of error.
171
+ func TryOr [A any ](callback func () (A , error ), fallbackA A ) (A , bool ) {
172
+ return TryOr1 (callback , fallbackA )
173
+ }
174
+
175
+ // TryOr1 has the same behavior than Must, but returns a default value in case of error.
176
+ func TryOr1 [A any ](callback func () (A , error ), fallbackA A ) (A , bool ) {
177
+ ok := false
178
+
179
+ Try0 (func () {
180
+ a , err := callback ()
181
+ if err == nil {
182
+ fallbackA = a
183
+ ok = true
184
+ }
185
+ })
186
+
187
+ return fallbackA , ok
188
+ }
189
+
190
+ // TryOr2 has the same behavior than Must, but returns a default value in case of error.
191
+ func TryOr2 [A any , B any ](callback func () (A , B , error ), fallbackA A , fallbackB B ) (A , B , bool ) {
192
+ ok := false
193
+
194
+ Try0 (func () {
195
+ a , b , err := callback ()
196
+ if err == nil {
197
+ fallbackA = a
198
+ fallbackB = b
199
+ ok = true
200
+ }
201
+ })
202
+
203
+ return fallbackA , fallbackB , ok
204
+ }
205
+
206
+ // TryOr3 has the same behavior than Must, but returns a default value in case of error.
207
+ func TryOr3 [A any , B any , C any ](callback func () (A , B , C , error ), fallbackA A , fallbackB B , fallbackC C ) (A , B , C , bool ) {
208
+ ok := false
209
+
210
+ Try0 (func () {
211
+ a , b , c , err := callback ()
212
+ if err == nil {
213
+ fallbackA = a
214
+ fallbackB = b
215
+ fallbackC = c
216
+ ok = true
217
+ }
218
+ })
219
+
220
+ return fallbackA , fallbackB , fallbackC , ok
221
+ }
222
+
223
+ // TryOr4 has the same behavior than Must, but returns a default value in case of error.
224
+ func TryOr4 [A any , B any , C any , D any ](callback func () (A , B , C , D , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D ) (A , B , C , D , bool ) {
225
+ ok := false
226
+
227
+ Try0 (func () {
228
+ a , b , c , d , err := callback ()
229
+ if err == nil {
230
+ fallbackA = a
231
+ fallbackB = b
232
+ fallbackC = c
233
+ fallbackD = d
234
+ ok = true
235
+ }
236
+ })
237
+
238
+ return fallbackA , fallbackB , fallbackC , fallbackD , ok
239
+ }
240
+
241
+ // TryOr5 has the same behavior than Must, but returns a default value in case of error.
242
+ func TryOr5 [A any , B any , C any , D any , E any ](callback func () (A , B , C , D , E , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D , fallbackE E ) (A , B , C , D , E , bool ) {
243
+ ok := false
244
+
245
+ Try0 (func () {
246
+ a , b , c , d , e , err := callback ()
247
+ if err == nil {
248
+ fallbackA = a
249
+ fallbackB = b
250
+ fallbackC = c
251
+ fallbackD = d
252
+ fallbackE = e
253
+ ok = true
254
+ }
255
+ })
256
+
257
+ return fallbackA , fallbackB , fallbackC , fallbackD , fallbackE , ok
258
+ }
259
+
260
+ // TryOr6 has the same behavior than Must, but returns a default value in case of error.
261
+ func TryOr6 [A any , B any , C any , D any , E any , F any ](callback func () (A , B , C , D , E , F , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D , fallbackE E , fallbackF F ) (A , B , C , D , E , F , bool ) {
262
+ ok := false
263
+
264
+ Try0 (func () {
265
+ a , b , c , d , e , f , err := callback ()
266
+ if err == nil {
267
+ fallbackA = a
268
+ fallbackB = b
269
+ fallbackC = c
270
+ fallbackD = d
271
+ fallbackE = e
272
+ fallbackF = f
273
+ ok = true
274
+ }
275
+ })
276
+
277
+ return fallbackA , fallbackB , fallbackC , fallbackD , fallbackE , fallbackF , ok
278
+ }
279
+
170
280
// TryWithErrorValue has the same behavior than Try, but also returns value passed to panic.
171
281
func TryWithErrorValue (callback func () error ) (errorValue any , ok bool ) {
172
282
ok = true
0 commit comments