pub fn run() -> Result<()>
Main entry point of application - is seperate from main.rs and as a library for more ergonomic testing