add start of error handling

This commit is contained in:
askiiart 2025-01-17 10:45:06 -06:00
parent 4cbd6fcf2b
commit 66424f704d
Signed by untrusted user who does not match committer: askiiart
GPG key ID: 6A32977DAF31746A
6 changed files with 1457 additions and 15 deletions

1421
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -8,9 +8,12 @@ readme = "README.md"
[dependencies]
alphanumeric-sort = "1.5.3"
better-commands = "1.0.2"
clap = { version = "4.5.23", features = ["derive"] }
clap_complete = "4.5.40"
serde = { version = "1.0.216", features = ["derive"] }
sqlx = "0.8.3"
thiserror = "2.0.11"
toml = "0.8.19"
uuid = { version = "1.11.0", features = ["v7", "fast-rng"] }

View file

@ -0,0 +1,14 @@
services:
postgres:
image: 'docker.io/library/postgres:17-alpine'
environment:
POSTGRES_PASSWORD: 'ChangeMeeeeeeeeeeeeee'
# if there's already a he/him gregory down the hall, then change it to gregory_it_its, to make sure you know it's gregory, the program, not gregory the he/him down the hall
# ig if there's an it/its gregory already then they just have to change their name to Its Majesty Queen Henry the Eighth
# oops sorry it/its gregory down the hall, correction: it just has to changes its name
POSTGRES_USER: 'gregory'
POSTGRES_DB: 'gregory'
volumes:
- './gregory-pg:/var/lib/postgresql/data'
ports:
- '5432:5432'

View file

@ -1,5 +1,6 @@
//! Data structs. used by gregory and stuff for handling them
use crate::errors::Error;
use serde::Deserialize;
use std::time;
use std::{collections::HashMap, fs, thread};
@ -83,7 +84,7 @@ pub(crate) struct Package {
pub(crate) struct JobExitStatus {
pub(crate) job: Job,
/// The [`Job`] this status is from
///
///
/// This is stored as a u16 rather than a u8 so that 65535 can be returned if there is no exit code rather than doing an Option or something, which I fear will probably come back to haunt me, but whatever
pub(crate) exit_code: u16,
/// Where the log is
@ -97,9 +98,18 @@ pub(crate) struct JobExitStatus {
pub(crate) container_name: String,
}
pub(crate) fn config_from_file(filename: String) -> Config {
let toml: Config = toml::from_str(fs::read_to_string(filename).unwrap().as_str()).unwrap();
return toml;
pub(crate) fn config_from_file(filename: String) -> Result<Config, Error> {
match fs::read_to_string(filename) {
Ok(raw_data) => match toml::from_str(raw_data.as_str()) {
Ok(conf) => return Ok(conf),
Err(e) => {
return Err(Error::DeserError(e));
}
},
Err(e) => {
return Err(Error::IOError(e));
}
}
}
// ==========================

13
src/errors.rs Normal file
View file

@ -0,0 +1,13 @@
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("io error: {0}")]
IOError(#[from] std::io::Error),
#[error("error while deserializing TOML: {0}")]
DeserError(#[from] toml::de::Error),
#[error("Podman error: {0}")]
PodmanError(String),
}

View file

@ -18,6 +18,7 @@ use uuid::Uuid;
mod cli;
mod data;
mod tests;
mod errors;
fn main() {
let cli = Cli::parse();
@ -48,7 +49,7 @@ fn main() {
}
fn run(config_path: String) {
let config = config_from_file(config_path);
let config = config_from_file(config_path).unwrap();
println!("{:#?}", config);