From 933387eb6f6e38c5421baf7889521eef525e5fca Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 18 Oct 2023 20:21:28 -0400 Subject: [PATCH] Writing the writer.toml to a folder when running init. --- src/command/init/mod.rs | 3 +++ src/command/init/runner.rs | 25 +++++++++++++++++++++++++ src/config/definition.rs | 5 +++++ src/main.rs | 5 ++++- 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/command/init/runner.rs diff --git a/src/command/init/mod.rs b/src/command/init/mod.rs index e69de29..195b96e 100644 --- a/src/command/init/mod.rs +++ b/src/command/init/mod.rs @@ -0,0 +1,3 @@ +mod runner; + +pub(crate) use runner::init_writer_folder; diff --git a/src/command/init/runner.rs b/src/command/init/runner.rs new file mode 100644 index 0000000..9c84b35 --- /dev/null +++ b/src/command/init/runner.rs @@ -0,0 +1,25 @@ +use std::fs::File; +use std::io::Write; + +use crate::cli::parameters::InitArgs; +use crate::config::Config; + +pub(crate) async fn init_writer_folder(args: &InitArgs) -> Result<(), Box> { + let new_config = Config::default(); + if args.path.exists() && !args.path.is_dir() { + return Err("The supplied path exists but is not a directory. Aborting.".into()); + } + + if !args.path.exists() { + std::fs::create_dir_all(&args.path)?; + } + + let existing_entries = std::fs::read_dir(&args.path)?; + if existing_entries.count() != 0 { + return Err("The directory is not empty. Aborting.".into()); + } + + let mut config_file = File::create(args.path.join("writer.toml"))?; + config_file.write_all(toml::to_string(&new_config)?.as_bytes())?; + Ok(()) +} diff --git a/src/config/definition.rs b/src/config/definition.rs index 92fd7dc..136ae6f 100644 --- a/src/config/definition.rs +++ b/src/config/definition.rs @@ -6,3 +6,8 @@ use serde::Serialize; pub(crate) struct Config { foo: String, } +impl Default for Config { + fn default() -> Self { + Config { foo: "".to_owned() } + } +} diff --git a/src/main.rs b/src/main.rs index 14d9a7a..1a1cdb3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use clap::Parser; use self::cli::parameters::Cli; use self::cli::parameters::Commands; +use self::command::init::init_writer_folder; mod cli; mod command; mod config; @@ -19,7 +20,9 @@ fn main() -> Result> { async fn main_body() -> Result> { let args = Cli::parse(); match args.command { - Commands::Init(_args) => {} + Commands::Init(args) => { + init_writer_folder(&args).await?; + } Commands::Build(_args) => {} Commands::AddPost(_args) => {} };