|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  use serde::Deserialize;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +use crate::errors::IncompleteMappingError;
 | 
	
		
			
				|  |  |  use crate::image::{Image, Pixel};
 | 
	
		
			
				|  |  |  use std::collections::{HashMap, HashSet};
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -12,28 +13,6 @@ struct ColorEntry {
 | 
	
		
			
				|  |  |  #[derive(Deserialize, Debug)]
 | 
	
		
			
				|  |  |  pub struct Mapping(HashMap<Pixel, String>);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#[derive(Debug)]
 | 
	
		
			
				|  |  | -pub struct IncompleteMappingError {
 | 
	
		
			
				|  |  | -    path: std::path::PathBuf,
 | 
	
		
			
				|  |  | -    missing_colors: Vec<Pixel>,
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -impl std::fmt::Display for IncompleteMappingError {
 | 
	
		
			
				|  |  | -    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
	
		
			
				|  |  | -        writeln!(
 | 
	
		
			
				|  |  | -            f,
 | 
	
		
			
				|  |  | -            "`{:?}` is missing entries for the following pixel colors:",
 | 
	
		
			
				|  |  | -            self.path
 | 
	
		
			
				|  |  | -        )?;
 | 
	
		
			
				|  |  | -        for color in self.missing_colors.iter() {
 | 
	
		
			
				|  |  | -            writeln!(f, "  - {:?}", color)?;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        Ok(())
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -impl std::error::Error for IncompleteMappingError {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  impl Mapping {
 | 
	
		
			
				|  |  |      pub fn load(
 | 
	
		
			
				|  |  |          path: impl AsRef<std::path::Path>,
 |