Skip to main content

voxcpm_rs/
error.rs

1use thiserror::Error;
2
3/// Crate-wide result alias.
4pub type Result<T> = std::result::Result<T, Error>;
5
6/// Errors produced by `voxcpm-rs`.
7#[derive(Debug, Error)]
8pub enum Error {
9    #[error("I/O error: {0}")]
10    Io(#[from] std::io::Error),
11
12    #[error("JSON parse error: {0}")]
13    Json(#[from] serde_json::Error),
14
15    #[error("Safetensors error: {0}")]
16    Safetensors(#[from] safetensors::SafeTensorError),
17
18    #[error("Tokenizer error: {0}")]
19    Tokenizer(String),
20
21    #[error("Audio decode error: {0}")]
22    AudioDecode(String),
23
24    #[error("WAV error: {0}")]
25    Wav(#[from] hound::Error),
26
27    #[error("Resampler error: {0}")]
28    Resampler(String),
29
30    #[error("Invalid config: {0}")]
31    InvalidConfig(String),
32
33    #[error("Missing weight tensor: {0}")]
34    MissingWeight(String),
35
36    #[error("Shape mismatch for `{name}`: expected {expected:?}, got {actual:?}")]
37    ShapeMismatch {
38        name: String,
39        expected: Vec<usize>,
40        actual: Vec<usize>,
41    },
42
43    #[error("File not found: {0}")]
44    NotFound(String),
45
46    #[error("Unsupported: {0}")]
47    Unsupported(String),
48
49    /// Generation was cancelled via [`crate::CancelToken`].
50    #[error("generation cancelled")]
51    Cancelled,
52
53    #[error("{0}")]
54    Other(String),
55}
56
57impl From<tokenizers::Error> for Error {
58    fn from(e: tokenizers::Error) -> Self {
59        Error::Tokenizer(e.to_string())
60    }
61}