(v any, encoder func(any) ([]byte, error), format string)
| 341 | } |
| 342 | |
| 343 | func encodeSharedStateValue(v any, encoder func(any) ([]byte, error), format string) ([]byte, error) { |
| 344 | if encoder == nil { |
| 345 | return nil, sharedStateCodecNotConfiguredError(format, "encoder") |
| 346 | } |
| 347 | |
| 348 | var ( |
| 349 | encoded []byte |
| 350 | err error |
| 351 | recovered any |
| 352 | ) |
| 353 | func() { |
| 354 | // App-configured codecs may be nil or may still use Fiber's |
| 355 | // binder.Unimplemented* placeholders, which panic instead of returning an |
| 356 | // error, so recover here and surface a regular error. |
| 357 | defer func() { |
| 358 | recovered = recover() |
| 359 | }() |
| 360 | |
| 361 | encoded, err = encoder(v) |
| 362 | }() |
| 363 | |
| 364 | if recovered != nil { |
| 365 | return nil, sharedStateCodecPanicError("encode", format, recovered) |
| 366 | } |
| 367 | if err != nil { |
| 368 | return nil, fmt.Errorf("fiber: failed to encode shared state %s value: %w", format, err) |
| 369 | } |
| 370 | |
| 371 | return encoded, nil |
| 372 | } |
| 373 | |
| 374 | func decodeSharedStateValue(data []byte, out any, decoder func([]byte, any) error, format string) error { |
| 375 | if decoder == nil { |
no test coverage detected