Skip to main content

qr_code_styling/config/
qr_options.rs

1//! QR code generation options.
2
3use crate::types::{ErrorCorrectionLevel, Mode};
4
5/// Options for QR code generation.
6#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct QROptions {
9    /// QR code version/type number (0 = auto, 1-40 for specific versions).
10    pub type_number: u8,
11    /// Error correction level.
12    pub error_correction_level: ErrorCorrectionLevel,
13    /// Encoding mode (None = auto-detect).
14    pub mode: Option<Mode>,
15}
16
17impl Default for QROptions {
18    fn default() -> Self {
19        Self {
20            type_number: 0, // Auto
21            error_correction_level: ErrorCorrectionLevel::Q,
22            mode: None, // Auto-detect
23        }
24    }
25}
26
27impl QROptions {
28    /// Create new QR options with default settings.
29    pub fn new() -> Self {
30        Self::default()
31    }
32
33    /// Set the type/version number.
34    pub fn with_type_number(mut self, type_number: u8) -> Self {
35        self.type_number = type_number.min(40);
36        self
37    }
38
39    /// Set the error correction level.
40    pub fn with_error_correction_level(mut self, level: ErrorCorrectionLevel) -> Self {
41        self.error_correction_level = level;
42        self
43    }
44
45    /// Set the encoding mode.
46    pub fn with_mode(mut self, mode: Mode) -> Self {
47        self.mode = Some(mode);
48        self
49    }
50}