duoload 0.1.2

Export vocabulary from Duocards
Documentation
use reqwest::header::InvalidHeaderValue;
use std::io;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum DeckIdError {
    #[error("Invalid base64 encoding: {0}")]
    InvalidBase64(String),

    #[error("Invalid deck ID format: {0}")]
    InvalidFormat(String),

    #[error("Invalid UUID: {0}")]
    InvalidUuid(String),

    #[error("UUID is not version 4: {0}")]
    NotUuidV4(String),
}

#[derive(Error, Debug)]
pub enum DuoloadError {
    #[error("IO error: {0}")]
    Io(#[from] io::Error),

    #[error("HTTP request error: {0}")]
    Request(#[from] reqwest::Error),

    #[error("JSON error: {0}")]
    Json(#[from] serde_json::Error),

    #[error("API error: {0}")]
    Api(String),

    #[error("Invalid header value: {0}")]
    InvalidHeader(#[from] InvalidHeaderValue),

    #[error("Deck ID error: {0}")]
    DeckId(#[from] DeckIdError),

    #[error("Other error: {0}")]
    Other(#[from] anyhow::Error),

    #[error("Anki output is only supported for file output")]
    AnkiOutputNotSupported,
}

pub type Result<T> = std::result::Result<T, DuoloadError>;