kreuzberg 4.1.2 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -2
  3. data/README.md +1 -1
  4. data/ext/kreuzberg_rb/native/Cargo.lock +26 -17
  5. data/ext/kreuzberg_rb/native/libpdfium.so +0 -0
  6. data/kreuzberg.gemspec +13 -1
  7. data/lib/kreuzberg/cli.rb +16 -6
  8. data/lib/kreuzberg/cli_proxy.rb +3 -1
  9. data/lib/kreuzberg/config.rb +121 -39
  10. data/lib/kreuzberg/djot_content.rb +225 -0
  11. data/lib/kreuzberg/extraction_api.rb +20 -4
  12. data/lib/kreuzberg/result.rb +12 -2
  13. data/lib/kreuzberg/version.rb +1 -1
  14. data/lib/kreuzberg.rb +1 -0
  15. data/sig/kreuzberg.rbs +28 -12
  16. data/spec/binding/batch_operations_spec.rb +80 -0
  17. data/spec/binding/batch_spec.rb +6 -5
  18. data/spec/binding/error_recovery_spec.rb +3 -3
  19. data/spec/binding/metadata_types_spec.rb +77 -57
  20. data/spec/binding/tables_spec.rb +11 -2
  21. data/spec/serialization_spec.rb +134 -0
  22. data/spec/unit/config/output_format_spec.rb +380 -0
  23. data/vendor/Cargo.toml +1 -1
  24. data/vendor/kreuzberg/Cargo.toml +1 -1
  25. data/vendor/kreuzberg/README.md +1 -1
  26. data/vendor/kreuzberg/src/api/startup.rs +15 -1
  27. data/vendor/kreuzberg/src/core/config_validation/sections.rs +16 -4
  28. data/vendor/kreuzberg/src/core/extractor/file.rs +1 -2
  29. data/vendor/kreuzberg/src/core/extractor/mod.rs +2 -1
  30. data/vendor/kreuzberg/src/core/io.rs +7 -7
  31. data/vendor/kreuzberg/src/core/mime.rs +4 -4
  32. data/vendor/kreuzberg/src/embeddings.rs +4 -4
  33. data/vendor/kreuzberg/src/extraction/pptx/parser.rs +6 -0
  34. data/vendor/kreuzberg/src/mcp/format.rs +237 -39
  35. data/vendor/kreuzberg/src/mcp/params.rs +26 -33
  36. data/vendor/kreuzberg/src/mcp/server.rs +6 -3
  37. data/vendor/kreuzberg/src/mcp/tools/extraction.rs +16 -23
  38. data/vendor/kreuzberg/src/plugins/mod.rs +1 -0
  39. data/vendor/kreuzberg/src/plugins/registry/extractor.rs +251 -5
  40. data/vendor/kreuzberg/src/plugins/registry/ocr.rs +150 -2
  41. data/vendor/kreuzberg/src/plugins/registry/processor.rs +213 -5
  42. data/vendor/kreuzberg/src/plugins/registry/validator.rs +220 -4
  43. data/vendor/kreuzberg/src/plugins/startup_validation.rs +385 -0
  44. data/vendor/kreuzberg/tests/api_chunk.rs +40 -30
  45. data/vendor/kreuzberg/tests/api_consistency.rs +349 -0
  46. data/vendor/kreuzberg/tests/api_embed.rs +84 -50
  47. data/vendor/kreuzberg/tests/api_large_pdf_extraction_diagnostics.rs +8 -2
  48. data/vendor/kreuzberg/tests/api_tests.rs +298 -139
  49. data/vendor/kreuzberg/tests/archive_integration.rs +63 -56
  50. data/vendor/kreuzberg/tests/batch_orchestration.rs +22 -14
  51. data/vendor/kreuzberg/tests/batch_pooling_benchmark.rs +13 -13
  52. data/vendor/kreuzberg/tests/batch_processing.rs +13 -9
  53. data/vendor/kreuzberg/tests/bibtex_parity_test.rs +10 -10
  54. data/vendor/kreuzberg/tests/concurrency_stress.rs +10 -6
  55. data/vendor/kreuzberg/tests/config_behavioral.rs +416 -0
  56. data/vendor/kreuzberg/tests/config_features.rs +19 -15
  57. data/vendor/kreuzberg/tests/config_integration_test.rs +68 -68
  58. data/vendor/kreuzberg/tests/config_loading_tests.rs +71 -62
  59. data/vendor/kreuzberg/tests/contract_mcp.rs +314 -0
  60. data/vendor/kreuzberg/tests/core_integration.rs +57 -57
  61. data/vendor/kreuzberg/tests/docbook_extractor_tests.rs +23 -23
  62. data/vendor/kreuzberg/tests/docx_metadata_extraction_test.rs +15 -14
  63. data/vendor/kreuzberg/tests/docx_vs_pandoc_comparison.rs +4 -4
  64. data/vendor/kreuzberg/tests/email_integration.rs +7 -7
  65. data/vendor/kreuzberg/tests/epub_native_extractor_tests.rs +2 -2
  66. data/vendor/kreuzberg/tests/error_handling.rs +13 -11
  67. data/vendor/kreuzberg/tests/fictionbook_extractor_tests.rs +2 -2
  68. data/vendor/kreuzberg/tests/html_table_test.rs +11 -11
  69. data/vendor/kreuzberg/tests/instrumentation_test.rs +18 -13
  70. data/vendor/kreuzberg/tests/jats_extractor_tests.rs +17 -17
  71. data/vendor/kreuzberg/tests/jupyter_extractor_tests.rs +9 -9
  72. data/vendor/kreuzberg/tests/keywords_integration.rs +25 -25
  73. data/vendor/kreuzberg/tests/keywords_quality.rs +9 -9
  74. data/vendor/kreuzberg/tests/latex_extractor_tests.rs +2 -2
  75. data/vendor/kreuzberg/tests/markdown_extractor_tests.rs +1 -1
  76. data/vendor/kreuzberg/tests/mcp_integration.rs +849 -0
  77. data/vendor/kreuzberg/tests/mime_detection.rs +75 -43
  78. data/vendor/kreuzberg/tests/ocr_errors.rs +10 -4
  79. data/vendor/kreuzberg/tests/ocr_language_registry.rs +1 -1
  80. data/vendor/kreuzberg/tests/ocr_stress.rs +3 -3
  81. data/vendor/kreuzberg/tests/odt_extractor_tests.rs +6 -6
  82. data/vendor/kreuzberg/tests/opml_extractor_tests.rs +2 -2
  83. data/vendor/kreuzberg/tests/orgmode_extractor_tests.rs +2 -2
  84. data/vendor/kreuzberg/tests/page_markers.rs +1 -1
  85. data/vendor/kreuzberg/tests/pdf_hierarchy_detection.rs +6 -6
  86. data/vendor/kreuzberg/tests/pdf_text_merging.rs +2 -2
  87. data/vendor/kreuzberg/tests/pipeline_integration.rs +77 -61
  88. data/vendor/kreuzberg/tests/plugin_ocr_backend_test.rs +97 -77
  89. data/vendor/kreuzberg/tests/plugin_postprocessor_test.rs +78 -61
  90. data/vendor/kreuzberg/tests/plugin_system.rs +49 -46
  91. data/vendor/kreuzberg/tests/plugin_validator_test.rs +109 -97
  92. data/vendor/kreuzberg/tests/pptx_regression_tests.rs +324 -31
  93. data/vendor/kreuzberg/tests/registry_integration_tests.rs +26 -23
  94. data/vendor/kreuzberg/tests/rst_extractor_tests.rs +1 -1
  95. data/vendor/kreuzberg/tests/rtf_extractor_tests.rs +18 -18
  96. data/vendor/kreuzberg/tests/security_validation.rs +20 -19
  97. data/vendor/kreuzberg/tests/serialization_integration.rs +112 -0
  98. data/vendor/kreuzberg/tests/stopwords_integration_test.rs +36 -36
  99. data/vendor/kreuzberg/tests/test_fastembed.rs +8 -8
  100. data/vendor/kreuzberg/tests/typst_extractor_tests.rs +9 -9
  101. data/vendor/kreuzberg/tests/xlsx_metadata_extraction_test.rs +12 -9
  102. data/vendor/kreuzberg-tesseract/Cargo.toml +1 -1
  103. metadata +12 -2
@@ -48,7 +48,7 @@ impl OcrBackend for MockOcrBackend {
48
48
  async fn process_image(&self, image_bytes: &[u8], config: &OcrConfig) -> Result<ExtractionResult> {
49
49
  self.call_count.fetch_add(1, Ordering::SeqCst);
50
50
 
51
- *self.last_language.lock().unwrap() = config.language.clone();
51
+ *self.last_language.lock().expect("Operation failed") = config.language.clone();
52
52
 
53
53
  if image_bytes.is_empty() {
54
54
  return Err(KreuzbergError::validation("Empty image data".to_string()));
@@ -240,8 +240,8 @@ fn test_register_custom_ocr_backend() {
240
240
  let registry = get_ocr_backend_registry();
241
241
 
242
242
  {
243
- let mut reg = registry.write().unwrap();
244
- reg.shutdown_all().unwrap();
243
+ let mut reg = registry.write().expect("Operation failed");
244
+ reg.shutdown_all().expect("Operation failed");
245
245
  }
246
246
 
247
247
  let backend = Arc::new(MockOcrBackend {
@@ -253,7 +253,7 @@ fn test_register_custom_ocr_backend() {
253
253
  });
254
254
 
255
255
  {
256
- let mut reg = registry.write().unwrap();
256
+ let mut reg = registry.write().expect("Operation failed");
257
257
  let result = reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>);
258
258
  assert!(result.is_ok(), "Failed to register OCR backend: {:?}", result.err());
259
259
  }
@@ -264,15 +264,15 @@ fn test_register_custom_ocr_backend() {
264
264
  );
265
265
 
266
266
  let list = {
267
- let reg = registry.read().unwrap();
267
+ let reg = registry.read().expect("Operation failed");
268
268
  reg.list()
269
269
  };
270
270
 
271
271
  assert!(list.contains(&"test-ocr".to_string()));
272
272
 
273
273
  {
274
- let mut reg = registry.write().unwrap();
275
- reg.shutdown_all().unwrap();
274
+ let mut reg = registry.write().expect("Operation failed");
275
+ reg.shutdown_all().expect("Operation failed");
276
276
  }
277
277
  }
278
278
 
@@ -283,8 +283,8 @@ fn test_ocr_backend_used_for_image_extraction() {
283
283
  let registry = get_ocr_backend_registry();
284
284
 
285
285
  {
286
- let mut reg = registry.write().unwrap();
287
- reg.shutdown_all().unwrap();
286
+ let mut reg = registry.write().expect("Operation failed");
287
+ reg.shutdown_all().expect("Operation failed");
288
288
  }
289
289
 
290
290
  let backend = Arc::new(MockOcrBackend {
@@ -296,8 +296,9 @@ fn test_ocr_backend_used_for_image_extraction() {
296
296
  });
297
297
 
298
298
  {
299
- let mut reg = registry.write().unwrap();
300
- reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>).unwrap();
299
+ let mut reg = registry.write().expect("Operation failed");
300
+ reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>)
301
+ .expect("Operation failed");
301
302
  }
302
303
 
303
304
  let ocr_config = OcrConfig {
@@ -317,7 +318,7 @@ fn test_ocr_backend_used_for_image_extraction() {
317
318
 
318
319
  assert!(result.is_ok(), "Extraction failed: {:?}", result.err());
319
320
 
320
- let extraction_result = result.unwrap();
321
+ let extraction_result = result.expect("Operation failed");
321
322
  assert!(
322
323
  extraction_result.content.contains("CUSTOM OCR TEXT"),
323
324
  "Custom OCR backend was not used. Content: {}",
@@ -331,8 +332,8 @@ fn test_ocr_backend_used_for_image_extraction() {
331
332
  );
332
333
 
333
334
  {
334
- let mut reg = registry.write().unwrap();
335
- reg.shutdown_all().unwrap();
335
+ let mut reg = registry.write().expect("Operation failed");
336
+ reg.shutdown_all().expect("Operation failed");
336
337
  }
337
338
  }
338
339
 
@@ -343,8 +344,8 @@ fn test_ocr_backend_receives_correct_parameters() {
343
344
  let registry = get_ocr_backend_registry();
344
345
 
345
346
  {
346
- let mut reg = registry.write().unwrap();
347
- reg.shutdown_all().unwrap();
347
+ let mut reg = registry.write().expect("Operation failed");
348
+ reg.shutdown_all().expect("Operation failed");
348
349
  }
349
350
 
350
351
  let backend = Arc::new(MockOcrBackend {
@@ -356,8 +357,9 @@ fn test_ocr_backend_receives_correct_parameters() {
356
357
  });
357
358
 
358
359
  {
359
- let mut reg = registry.write().unwrap();
360
- reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>).unwrap();
360
+ let mut reg = registry.write().expect("Operation failed");
361
+ reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>)
362
+ .expect("Operation failed");
361
363
  }
362
364
 
363
365
  let ocr_config = OcrConfig {
@@ -377,15 +379,15 @@ fn test_ocr_backend_receives_correct_parameters() {
377
379
 
378
380
  assert!(result.is_ok());
379
381
 
380
- let last_lang = backend.last_language.lock().unwrap();
382
+ let last_lang = backend.last_language.lock().expect("Operation failed");
381
383
  assert_eq!(*last_lang, "deu", "Language parameter not passed correctly");
382
384
 
383
- let extraction_result = result.unwrap();
385
+ let extraction_result = result.expect("Operation failed");
384
386
  assert!(extraction_result.content.contains("(lang: deu)"));
385
387
 
386
388
  {
387
- let mut reg = registry.write().unwrap();
388
- reg.shutdown_all().unwrap();
389
+ let mut reg = registry.write().expect("Operation failed");
390
+ reg.shutdown_all().expect("Operation failed");
389
391
  }
390
392
  }
391
393
 
@@ -396,8 +398,8 @@ fn test_ocr_backend_returns_correct_format() {
396
398
  let registry = get_ocr_backend_registry();
397
399
 
398
400
  {
399
- let mut reg = registry.write().unwrap();
400
- reg.shutdown_all().unwrap();
401
+ let mut reg = registry.write().expect("Operation failed");
402
+ reg.shutdown_all().expect("Operation failed");
401
403
  }
402
404
 
403
405
  let backend = Arc::new(MetadataOcrBackend {
@@ -405,8 +407,8 @@ fn test_ocr_backend_returns_correct_format() {
405
407
  });
406
408
 
407
409
  {
408
- let mut reg = registry.write().unwrap();
409
- reg.register(backend as Arc<dyn OcrBackend>).unwrap();
410
+ let mut reg = registry.write().expect("Operation failed");
411
+ reg.register(backend as Arc<dyn OcrBackend>).expect("Operation failed");
410
412
  }
411
413
 
412
414
  let ocr_config = OcrConfig {
@@ -426,7 +428,7 @@ fn test_ocr_backend_returns_correct_format() {
426
428
 
427
429
  assert!(result.is_ok());
428
430
 
429
- let extraction_result = result.unwrap();
431
+ let extraction_result = result.expect("Operation failed");
430
432
 
431
433
  assert!(!extraction_result.content.is_empty());
432
434
  assert_eq!(extraction_result.mime_type, "image/png");
@@ -435,8 +437,8 @@ fn test_ocr_backend_returns_correct_format() {
435
437
  assert!(extraction_result.metadata.additional.contains_key("ocr_language"));
436
438
 
437
439
  {
438
- let mut reg = registry.write().unwrap();
439
- reg.shutdown_all().unwrap();
440
+ let mut reg = registry.write().expect("Operation failed");
441
+ reg.shutdown_all().expect("Operation failed");
440
442
  }
441
443
  }
442
444
 
@@ -447,8 +449,8 @@ fn test_ocr_backend_error_handling() {
447
449
  let registry = get_ocr_backend_registry();
448
450
 
449
451
  {
450
- let mut reg = registry.write().unwrap();
451
- reg.shutdown_all().unwrap();
452
+ let mut reg = registry.write().expect("Operation failed");
453
+ reg.shutdown_all().expect("Operation failed");
452
454
  }
453
455
 
454
456
  let backend = Arc::new(FailingOcrBackend {
@@ -456,8 +458,8 @@ fn test_ocr_backend_error_handling() {
456
458
  });
457
459
 
458
460
  {
459
- let mut reg = registry.write().unwrap();
460
- reg.register(backend as Arc<dyn OcrBackend>).unwrap();
461
+ let mut reg = registry.write().expect("Operation failed");
462
+ reg.register(backend as Arc<dyn OcrBackend>).expect("Operation failed");
461
463
  }
462
464
 
463
465
  let ocr_config = OcrConfig {
@@ -477,7 +479,7 @@ fn test_ocr_backend_error_handling() {
477
479
 
478
480
  assert!(result.is_err(), "Expected OCR to fail");
479
481
 
480
- match result.err().unwrap() {
482
+ match result.expect_err("Operation failed") {
481
483
  KreuzbergError::Ocr { message, .. } => {
482
484
  assert!(message.contains("intentionally failed"));
483
485
  }
@@ -485,8 +487,8 @@ fn test_ocr_backend_error_handling() {
485
487
  }
486
488
 
487
489
  {
488
- let mut reg = registry.write().unwrap();
489
- reg.shutdown_all().unwrap();
490
+ let mut reg = registry.write().expect("Operation failed");
491
+ reg.shutdown_all().expect("Operation failed");
490
492
  }
491
493
  }
492
494
 
@@ -497,8 +499,8 @@ fn test_ocr_backend_validation_error() {
497
499
  let registry = get_ocr_backend_registry();
498
500
 
499
501
  {
500
- let mut reg = registry.write().unwrap();
501
- reg.shutdown_all().unwrap();
502
+ let mut reg = registry.write().expect("Operation failed");
503
+ reg.shutdown_all().expect("Operation failed");
502
504
  }
503
505
 
504
506
  let backend = Arc::new(ValidatingOcrBackend {
@@ -507,8 +509,8 @@ fn test_ocr_backend_validation_error() {
507
509
  });
508
510
 
509
511
  {
510
- let mut reg = registry.write().unwrap();
511
- reg.register(backend as Arc<dyn OcrBackend>).unwrap();
512
+ let mut reg = registry.write().expect("Operation failed");
513
+ reg.register(backend as Arc<dyn OcrBackend>).expect("Operation failed");
512
514
  }
513
515
 
514
516
  let ocr_config = OcrConfig {
@@ -528,7 +530,7 @@ fn test_ocr_backend_validation_error() {
528
530
 
529
531
  assert!(result.is_err(), "Expected validation to fail");
530
532
 
531
- match result.err().unwrap() {
533
+ match result.expect_err("Operation failed") {
532
534
  KreuzbergError::Validation { message, .. } => {
533
535
  assert!(message.contains("Image too small"));
534
536
  }
@@ -536,8 +538,8 @@ fn test_ocr_backend_validation_error() {
536
538
  }
537
539
 
538
540
  {
539
- let mut reg = registry.write().unwrap();
540
- reg.shutdown_all().unwrap();
541
+ let mut reg = registry.write().expect("Operation failed");
542
+ reg.shutdown_all().expect("Operation failed");
541
543
  }
542
544
  }
543
545
 
@@ -548,8 +550,8 @@ fn test_switching_between_ocr_backends() {
548
550
  let registry = get_ocr_backend_registry();
549
551
 
550
552
  {
551
- let mut reg = registry.write().unwrap();
552
- reg.shutdown_all().unwrap();
553
+ let mut reg = registry.write().expect("Operation failed");
554
+ reg.shutdown_all().expect("Operation failed");
553
555
  }
554
556
 
555
557
  let backend1 = Arc::new(MockOcrBackend {
@@ -569,9 +571,11 @@ fn test_switching_between_ocr_backends() {
569
571
  });
570
572
 
571
573
  {
572
- let mut reg = registry.write().unwrap();
573
- reg.register(Arc::clone(&backend1) as Arc<dyn OcrBackend>).unwrap();
574
- reg.register(Arc::clone(&backend2) as Arc<dyn OcrBackend>).unwrap();
574
+ let mut reg = registry.write().expect("Operation failed");
575
+ reg.register(Arc::clone(&backend1) as Arc<dyn OcrBackend>)
576
+ .expect("Operation failed");
577
+ reg.register(Arc::clone(&backend2) as Arc<dyn OcrBackend>)
578
+ .expect("Operation failed");
575
579
  }
576
580
 
577
581
  let ocr_config1 = OcrConfig {
@@ -589,7 +593,12 @@ fn test_switching_between_ocr_backends() {
589
593
 
590
594
  let result1 = extract_file_sync(test_image, None, &config1);
591
595
  assert!(result1.is_ok());
592
- assert!(result1.unwrap().content.contains("BACKEND ONE OUTPUT"));
596
+ assert!(
597
+ result1
598
+ .expect("Operation failed")
599
+ .content
600
+ .contains("BACKEND ONE OUTPUT")
601
+ );
593
602
  assert_eq!(backend1.call_count.load(Ordering::SeqCst), 1);
594
603
  assert_eq!(backend2.call_count.load(Ordering::SeqCst), 0);
595
604
 
@@ -608,13 +617,18 @@ fn test_switching_between_ocr_backends() {
608
617
 
609
618
  let result2 = extract_file_sync(test_image, None, &config2);
610
619
  assert!(result2.is_ok());
611
- assert!(result2.unwrap().content.contains("BACKEND TWO OUTPUT"));
620
+ assert!(
621
+ result2
622
+ .expect("Operation failed")
623
+ .content
624
+ .contains("BACKEND TWO OUTPUT")
625
+ );
612
626
  assert_eq!(backend1.call_count.load(Ordering::SeqCst), 1);
613
627
  assert_eq!(backend2.call_count.load(Ordering::SeqCst), 1);
614
628
 
615
629
  {
616
- let mut reg = registry.write().unwrap();
617
- reg.shutdown_all().unwrap();
630
+ let mut reg = registry.write().expect("Operation failed");
631
+ reg.shutdown_all().expect("Operation failed");
618
632
  }
619
633
  }
620
634
 
@@ -624,8 +638,8 @@ fn test_ocr_backend_language_support() {
624
638
  let registry = get_ocr_backend_registry();
625
639
 
626
640
  {
627
- let mut reg = registry.write().unwrap();
628
- reg.shutdown_all().unwrap();
641
+ let mut reg = registry.write().expect("Operation failed");
642
+ reg.shutdown_all().expect("Operation failed");
629
643
  }
630
644
 
631
645
  let backend = Arc::new(MockOcrBackend {
@@ -637,8 +651,9 @@ fn test_ocr_backend_language_support() {
637
651
  });
638
652
 
639
653
  {
640
- let mut reg = registry.write().unwrap();
641
- reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>).unwrap();
654
+ let mut reg = registry.write().expect("Operation failed");
655
+ reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>)
656
+ .expect("Operation failed");
642
657
  }
643
658
 
644
659
  assert!(backend.supports_language("eng"));
@@ -653,8 +668,8 @@ fn test_ocr_backend_language_support() {
653
668
  assert!(supported.contains(&"fra".to_string()));
654
669
 
655
670
  {
656
- let mut reg = registry.write().unwrap();
657
- reg.shutdown_all().unwrap();
671
+ let mut reg = registry.write().expect("Operation failed");
672
+ reg.shutdown_all().expect("Operation failed");
658
673
  }
659
674
  }
660
675
 
@@ -678,8 +693,8 @@ fn test_ocr_backend_invalid_name() {
678
693
  let registry = get_ocr_backend_registry();
679
694
 
680
695
  {
681
- let mut reg = registry.write().unwrap();
682
- reg.shutdown_all().unwrap();
696
+ let mut reg = registry.write().expect("Operation failed");
697
+ reg.shutdown_all().expect("Operation failed");
683
698
  }
684
699
 
685
700
  let backend = Arc::new(MockOcrBackend {
@@ -691,16 +706,19 @@ fn test_ocr_backend_invalid_name() {
691
706
  });
692
707
 
693
708
  {
694
- let mut reg = registry.write().unwrap();
709
+ let mut reg = registry.write().expect("Operation failed");
695
710
  let result = reg.register(backend);
696
711
 
697
712
  assert!(result.is_err());
698
- assert!(matches!(result.err().unwrap(), KreuzbergError::Validation { .. }));
713
+ assert!(matches!(
714
+ result.expect_err("Operation failed"),
715
+ KreuzbergError::Validation { .. }
716
+ ));
699
717
  }
700
718
 
701
719
  {
702
- let mut reg = registry.write().unwrap();
703
- reg.shutdown_all().unwrap();
720
+ let mut reg = registry.write().expect("Operation failed");
721
+ reg.shutdown_all().expect("Operation failed");
704
722
  }
705
723
  }
706
724
 
@@ -710,8 +728,8 @@ fn test_ocr_backend_initialization_lifecycle() {
710
728
  let registry = get_ocr_backend_registry();
711
729
 
712
730
  {
713
- let mut reg = registry.write().unwrap();
714
- reg.shutdown_all().unwrap();
731
+ let mut reg = registry.write().expect("Operation failed");
732
+ reg.shutdown_all().expect("Operation failed");
715
733
  }
716
734
 
717
735
  let backend = Arc::new(MockOcrBackend {
@@ -728,8 +746,9 @@ fn test_ocr_backend_initialization_lifecycle() {
728
746
  );
729
747
 
730
748
  {
731
- let mut reg = registry.write().unwrap();
732
- reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>).unwrap();
749
+ let mut reg = registry.write().expect("Operation failed");
750
+ reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>)
751
+ .expect("Operation failed");
733
752
  }
734
753
 
735
754
  assert!(
@@ -738,8 +757,8 @@ fn test_ocr_backend_initialization_lifecycle() {
738
757
  );
739
758
 
740
759
  {
741
- let mut reg = registry.write().unwrap();
742
- reg.shutdown_all().unwrap();
760
+ let mut reg = registry.write().expect("Operation failed");
761
+ reg.shutdown_all().expect("Operation failed");
743
762
  }
744
763
 
745
764
  assert!(
@@ -754,8 +773,8 @@ fn test_unregister_ocr_backend() {
754
773
  let registry = get_ocr_backend_registry();
755
774
 
756
775
  {
757
- let mut reg = registry.write().unwrap();
758
- reg.shutdown_all().unwrap();
776
+ let mut reg = registry.write().expect("Operation failed");
777
+ reg.shutdown_all().expect("Operation failed");
759
778
  }
760
779
 
761
780
  let backend = Arc::new(MockOcrBackend {
@@ -767,17 +786,18 @@ fn test_unregister_ocr_backend() {
767
786
  });
768
787
 
769
788
  {
770
- let mut reg = registry.write().unwrap();
771
- reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>).unwrap();
789
+ let mut reg = registry.write().expect("Operation failed");
790
+ reg.register(Arc::clone(&backend) as Arc<dyn OcrBackend>)
791
+ .expect("Operation failed");
772
792
  }
773
793
 
774
794
  {
775
- let mut reg = registry.write().unwrap();
776
- reg.remove("unregister-ocr").unwrap();
795
+ let mut reg = registry.write().expect("Operation failed");
796
+ reg.remove("unregister-ocr").expect("Operation failed");
777
797
  }
778
798
 
779
799
  let list = {
780
- let reg = registry.read().unwrap();
800
+ let reg = registry.read().expect("Operation failed");
781
801
  reg.list()
782
802
  };
783
803