1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum Error {
5 #[error("QR encoding failed: {0}")]
6 QrEncode(String),
7
8 #[error("Image encoding failed: {0}")]
9 ImageEncode(String),
10
11 #[error("SVG rendering failed: {0}")]
12 SvgRender(String),
13
14 #[error("Invalid color: {0}")]
15 InvalidColor(String),
16
17 #[error("Invalid parameter: {0}")]
18 InvalidParameter(String),
19
20 #[error("GIF encoding failed: {0}")]
21 GifEncode(String),
22
23 #[error("ffmpeg not found on PATH — install ffmpeg for ProRes output")]
24 FfmpegNotFound,
25
26 #[error("ffmpeg failed: {0}")]
27 FfmpegFailed(String),
28
29 #[error(
30 "QR code too dense: {module_count} modules exceeds limit of \
31 {max_modules} (reduce data size, lower error correction, \
32 or increase --max-modules)"
33 )]
34 QrCodeTooDense {
35 module_count: usize,
36 max_modules: usize,
37 },
38
39 #[error(
40 "insufficient frames: {requested} requested but message \
41 requires at least {fragments} fragments"
42 )]
43 InsufficientFrames { requested: usize, fragments: usize },
44
45 #[error("IO error: {0}")]
46 Io(#[from] std::io::Error),
47
48 #[error("UR error: {0}")]
49 Ur(#[from] bc_ur::Error),
50}
51
52pub type Result<T> = std::result::Result<T, Error>;