{"record":{"id":"b314bb2555b019ea","repo":"flxzt/rnote","slug":"pdfimportpagespacing-try-from-u32-for-value","errorCode":null,"errorMessage":"PdfImportPageSpacing try_from::<u32>() for value {} failed","messagePattern":"PdfImportPageSpacing try_from::<u32>\\(\\) for value (.+?) failed","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/rnote-engine/src/engine/import.rs","lineNumber":73,"sourceCode":"pub enum PdfImportPageSpacing {\n    #[serde(rename = \"continuous\")]\n    Continuous = 0,\n    #[serde(rename = \"one_per_document_page\")]\n    OnePerDocumentPage,\n}\n\nimpl Default for PdfImportPageSpacing {\n    fn default() -> Self {\n        Self::Continuous\n    }\n}\n\nimpl TryFrom<u32> for PdfImportPageSpacing {\n    type Error = anyhow::Error;\n\n    fn try_from(value: u32) -> Result<Self, Self::Error> {\n        num_traits::FromPrimitive::from_u32(value).ok_or_else(|| {\n            anyhow::anyhow!(\n                \"PdfImportPageSpacing try_from::<u32>() for value {} failed\",\n                value\n            )\n        })\n    }\n}\n\n/// Pdf import preferences.\n#[derive(Debug, Clone, Copy, Serialize, Deserialize)]\n#[serde(default, rename = \"pdf_import_prefs\")]\npub struct PdfImportPrefs {\n    /// Pdf page width in percentage to the format width.\n    #[serde(rename = \"page_width_perc\")]\n    pub page_width_perc: f64,\n    /// Pdf page spacing.\n    #[serde(rename = \"page_spacing\")]\n    pub page_spacing: PdfImportPageSpacing,\n    /// Pdf pages import type.","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/flxzt/rnote/blob/bbc5354502ba2fc83eec2670b535348825e679a6/crates/rnote-engine/src/engine/import.rs#L55-L91","documentation":"TryFrom<u32> for PdfImportPageSpacing converts a raw u32 into the page-spacing enum using num_traits::FromPrimitive and fails with this error when no variant matches. It protects against invalid spacing values coming from persisted settings or UI state.","triggerScenarios":"Calling PdfImportPageSpacing::try_from(v) with a u32 outside the enum's discriminants — corrupted prefs, values from a different rnote version, or an unchecked numeric input passed into the PDF import settings.","commonSituations":"Restoring PDF import preferences from an old backup or hand-edited settings file where the spacing field contains an out-of-range number; enum variants added/removed between versions.","solutions":["Validate the u32 before conversion and fall back to the default spacing variant on failure","Correct the stored prefs value to a valid discriminant","Add a prefs migration step for versions where the enum changed"],"exampleFix":"// before\nlet spacing = PdfImportPageSpacing::try_from(raw_u32)?;\n// after\nlet spacing = PdfImportPageSpacing::try_from(raw_u32)\n    .unwrap_or_default();","handlingStrategy":"validation","validationCode":"let spacing = PdfImportPageSpacing::try_from(raw_u32)\n    .unwrap_or_else(|_| PdfImportPageSpacing::default());","typeGuard":"fn valid_page_spacing(v: u32) -> bool {\n    PdfImportPageSpacing::from_u32(v).is_some()\n}","tryCatchPattern":"match PdfImportPageSpacing::try_from(raw_u32) {\n    Ok(s) => s,\n    Err(e) => {\n        log::warn!(\"invalid PdfImportPageSpacing {}, using default\", raw_u32);\n        PdfImportPageSpacing::default()\n    }\n}","preventionTips":["Validate spacing values read from prefs before conversion","Migrate stored settings when the enum changes","Prefer defaulting over failing when the value comes from user config"],"tags":["pdf-import","enum","conversion","rust"],"backgroundTag":"invalid-enum-value","analyzedSha":"bbc5354502ba2fc83eec2670b535348825e679a6","analyzedAt":"2026-09-08T13:20:33.747Z","contentChangedAt":"2026-09-08T13:20:33.747Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}