Skip to main content

rpdfium_render/
error.rs

1// Derived from PDFium's core/fpdfapi/render/ error handling
2// Original: Copyright 2014 The PDFium Authors
3// Licensed under BSD-3-Clause / Apache-2.0
4// See pdfium-upstream/LICENSE for the original license.
5
6//! Error types for the rendering pipeline.
7
8use rpdfium_core::PdfError;
9use rpdfium_page::PageError;
10
11/// Errors that can occur during rendering.
12#[derive(Debug, thiserror::Error)]
13pub enum RenderError {
14    /// Failed to create a rendering surface.
15    #[error("failed to create rendering surface")]
16    SurfaceCreation,
17
18    /// Failed to decode an image.
19    #[error("image decode error: {0}")]
20    ImageDecode(String),
21
22    /// An invalid color was encountered.
23    #[error("invalid color: {0}")]
24    InvalidColor(String),
25
26    /// A page interpretation error occurred.
27    #[error(transparent)]
28    Page(#[from] PageError),
29
30    /// An underlying PDF error occurred.
31    #[error(transparent)]
32    Pdf(#[from] PdfError),
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn test_render_error_display() {
41        let err = RenderError::SurfaceCreation;
42        assert_eq!(format!("{err}"), "failed to create rendering surface");
43    }
44
45    #[test]
46    fn test_render_error_image_decode() {
47        let err = RenderError::ImageDecode("bad format".to_string());
48        assert!(format!("{err}").contains("bad format"));
49    }
50
51    #[test]
52    fn test_render_error_is_send_sync() {
53        fn assert_send_sync<T: Send + Sync>() {}
54        assert_send_sync::<RenderError>();
55    }
56}