66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
/* Copyright (C) 2020-2021 Purism SPC
 | 
						|
 * SPDX-License-Identifier: GPL-3.0+
 | 
						|
 */
 | 
						|
 | 
						|
/*! Combined module for dealing with layout files */
 | 
						|
 | 
						|
pub mod loading;
 | 
						|
pub mod parsing;
 | 
						|
 | 
						|
use std::io;
 | 
						|
use std::fmt;
 | 
						|
 | 
						|
use ::keyboard::FormattingError;
 | 
						|
 | 
						|
/// Errors encountered loading the layout into yaml
 | 
						|
#[derive(Debug)]
 | 
						|
pub enum Error {
 | 
						|
    Yaml(serde_yaml::Error),
 | 
						|
    Io(io::Error),
 | 
						|
    /// The file was missing.
 | 
						|
    /// It's distinct from Io in order to make it matchable
 | 
						|
    /// without calling io::Error::kind()
 | 
						|
    Missing(io::Error),
 | 
						|
}
 | 
						|
 | 
						|
impl fmt::Display for Error {
 | 
						|
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
						|
        match self {
 | 
						|
            Error::Yaml(e) => write!(f, "YAML: {}", e),
 | 
						|
            Error::Io(e) => write!(f, "IO: {}", e),
 | 
						|
            Error::Missing(e) => write!(f, "Missing: {}", e),
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
impl From<io::Error> for Error {
 | 
						|
    fn from(e: io::Error) -> Self {
 | 
						|
        let kind = e.kind();
 | 
						|
        match kind {
 | 
						|
            io::ErrorKind::NotFound => Error::Missing(e),
 | 
						|
            _ => Error::Io(e),
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#[derive(Debug)]
 | 
						|
pub enum LoadError {
 | 
						|
    BadData(Error),
 | 
						|
    MissingResource,
 | 
						|
    BadResource(serde_yaml::Error),
 | 
						|
    BadKeyMap(FormattingError),
 | 
						|
}
 | 
						|
 | 
						|
impl fmt::Display for LoadError {
 | 
						|
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
						|
        use self::LoadError::*;
 | 
						|
        match self {
 | 
						|
            BadData(e) => write!(f, "Bad data: {}", e),
 | 
						|
            MissingResource => write!(f, "Missing resource"),
 | 
						|
            BadResource(e) => write!(f, "Bad resource: {}", e),
 | 
						|
            BadKeyMap(e) => write!(f, "Bad key map: {}", e),
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |