shimmy 0.1.1

5MB Ollama alternative with dynamic port management and zero-friction LoRA serving. 95%+ test coverage, <100ms startup.
Documentation
use thiserror::Error;
use std::path::PathBuf;

#[derive(Error, Debug)]
pub enum ShimmyError {
    #[error("Model not found: {name}")]
    ModelNotFound { name: String },
    
    #[error("Model loading failed: {path}")]
    ModelLoadError { 
        path: PathBuf,
        #[source]
        source: anyhow::Error,
    },
    
    #[error("Generation failed: {reason}")]
    GenerationError { reason: String },
    
    #[error("Invalid configuration: {field} = {value}")]
    ConfigError { field: String, value: String },
    
    #[error("Backend not available: {backend}")]
    BackendNotAvailable { backend: String },
    
    #[error("Template rendering failed: {template}")]
    TemplateError { 
        template: String,
        #[source]
        source: Box<dyn std::error::Error + Send + Sync>,
    },
    
    #[error("Async runtime error")]
    AsyncError(#[from] tokio::task::JoinError),
    
    #[error("IO error")]
    IoError(#[from] std::io::Error),
    
    #[error("Serialization error")]
    SerdeError(#[from] serde_json::Error),
}

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

impl From<anyhow::Error> for ShimmyError {
    fn from(err: anyhow::Error) -> Self {
        ShimmyError::GenerationError { 
            reason: err.to_string() 
        }
    }
}