even more improved errors
This commit is contained in:
@@ -3,9 +3,10 @@ use serde::{Deserialize, Serialize};
|
|||||||
use std::{
|
use std::{
|
||||||
error::Error,
|
error::Error,
|
||||||
fs::{self, read_to_string},
|
fs::{self, read_to_string},
|
||||||
io::Write,
|
io::{self, Write},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
};
|
};
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
conflict_resolver::ConflictSolver,
|
conflict_resolver::ConflictSolver,
|
||||||
@@ -30,7 +31,7 @@ pub struct RootConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl RootConfig {
|
impl RootConfig {
|
||||||
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, Box<dyn Error>> {
|
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, ConfigReadWriteError> {
|
||||||
trace!(
|
trace!(
|
||||||
"Loading RootConfig from file: {}",
|
"Loading RootConfig from file: {}",
|
||||||
path.as_ref().to_string_lossy()
|
path.as_ref().to_string_lossy()
|
||||||
@@ -51,10 +52,10 @@ impl RootConfig {
|
|||||||
self.mods.iter().find(|e| e.id == id).cloned()
|
self.mods.iter().find(|e| e.id == id).cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_instance_by_id(&self, id: &str) -> Result<ModdedInstance, Box<dyn Error>> {
|
pub fn load_instance_by_id(&self, id: &str) -> Result<ModdedInstance, ConfigReadWriteError> {
|
||||||
let conf = self
|
let conf = self
|
||||||
.get_instance_config(id)
|
.get_instance_config(id)
|
||||||
.ok_or("ID not found in root config")?;
|
.ok_or(ConfigReadWriteError::IDNotFound)?;
|
||||||
|
|
||||||
ModdedInstance::load_from_file(&conf.path)
|
ModdedInstance::load_from_file(&conf.path)
|
||||||
}
|
}
|
||||||
@@ -116,7 +117,7 @@ impl ModdedInstance {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, Box<dyn Error>> {
|
pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self, ConfigReadWriteError> {
|
||||||
trace!(
|
trace!(
|
||||||
"Loading ModdedInstance from file: {}",
|
"Loading ModdedInstance from file: {}",
|
||||||
path.as_ref().to_string_lossy()
|
path.as_ref().to_string_lossy()
|
||||||
@@ -128,7 +129,7 @@ impl ModdedInstance {
|
|||||||
Ok(config)
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_to_file(&self, path: impl AsRef<Path>) -> Result<(), Box<dyn Error>> {
|
pub fn save_to_file(&self, path: impl AsRef<Path>) -> Result<(), ConfigReadWriteError> {
|
||||||
trace!(
|
trace!(
|
||||||
"Saving ModdedInstance to: {}",
|
"Saving ModdedInstance to: {}",
|
||||||
path.as_ref().to_string_lossy()
|
path.as_ref().to_string_lossy()
|
||||||
@@ -290,3 +291,18 @@ impl ModFile {
|
|||||||
self.internal_priority
|
self.internal_priority
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
pub enum ConfigReadWriteError {
|
||||||
|
#[error("IO failure")]
|
||||||
|
Io(#[from] io::Error),
|
||||||
|
|
||||||
|
#[error("Failed to deserialize toml")]
|
||||||
|
Deserialize(#[from] toml::de::Error),
|
||||||
|
|
||||||
|
#[error("Failed to serialize to toml")]
|
||||||
|
Serialize(#[from] toml::ser::Error),
|
||||||
|
|
||||||
|
#[error("The provided ID could not be found")]
|
||||||
|
IDNotFound,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user