Compare commits

..

3 Commits

Author SHA1 Message Date
Tom Alexander
933387eb6f
Writing the writer.toml to a folder when running init. 2023-10-18 20:21:28 -04:00
Tom Alexander
5f82d7a469
Add serde and toml for parsing the config. 2023-10-18 20:06:30 -04:00
Tom Alexander
63b0619094
Add the folder structure for the toml config. 2023-10-18 20:00:39 -04:00
7 changed files with 149 additions and 2 deletions

96
Cargo.lock generated
View File

@ -140,12 +140,24 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.28.0" version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "hashbrown"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
[[package]] [[package]]
name = "heck" name = "heck"
version = "0.4.1" version = "0.4.1"
@ -158,6 +170,16 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "indexmap"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.149" version = "0.2.149"
@ -263,6 +285,35 @@ dependencies = [
"winapi-util", "winapi-util",
] ]
[[package]]
name = "serde"
version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_spanned"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.38" version = "2.0.38"
@ -285,6 +336,40 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "toml"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.12" version = "1.0.12"
@ -404,11 +489,22 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "writer" name = "writer"
version = "0.0.1" version = "0.0.1"
dependencies = [ dependencies = [
"clap", "clap",
"organic", "organic",
"serde",
"tokio", "tokio",
"toml",
] ]

View File

@ -6,7 +6,11 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
# TODO: maybe error-context, suggestions, usage | env # error-context, suggestions, usage | env
clap = { version = "4.4.6", default-features = false, features = ["std", "color", "help", "derive"] } clap = { version = "4.4.6", default-features = false, features = ["std", "color", "help", "derive"] }
organic = "0.1.12" organic = "0.1.12"
# | alloc, rc, serde_derive, unstable
serde = { version = "1.0.189", default-features = false, features = ["std", "derive"] }
tokio = { version = "1.30.0", default-features = false, features = ["rt", "rt-multi-thread"] } tokio = { version = "1.30.0", default-features = false, features = ["rt", "rt-multi-thread"] }
# display, parse | indexmap, preserve_order
toml = "0.8.2"

View File

@ -0,0 +1,3 @@
mod runner;
pub(crate) use runner::init_writer_folder;

View File

@ -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<dyn std::error::Error>> {
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(())
}

13
src/config/definition.rs Normal file
View File

@ -0,0 +1,13 @@
use serde::Deserialize;
use serde::Serialize;
/// This is the struct for the writer.toml config file that ends up in each site's root directory.
#[derive(Deserialize, Serialize)]
pub(crate) struct Config {
foo: String,
}
impl Default for Config {
fn default() -> Self {
Config { foo: "".to_owned() }
}
}

2
src/config/mod.rs Normal file
View File

@ -0,0 +1,2 @@
mod definition;
pub(crate) use definition::Config;

View File

@ -4,8 +4,10 @@ use clap::Parser;
use self::cli::parameters::Cli; use self::cli::parameters::Cli;
use self::cli::parameters::Commands; use self::cli::parameters::Commands;
use self::command::init::init_writer_folder;
mod cli; mod cli;
mod command; mod command;
mod config;
fn main() -> Result<ExitCode, Box<dyn std::error::Error>> { fn main() -> Result<ExitCode, Box<dyn std::error::Error>> {
let rt = tokio::runtime::Runtime::new()?; let rt = tokio::runtime::Runtime::new()?;
@ -18,7 +20,9 @@ fn main() -> Result<ExitCode, Box<dyn std::error::Error>> {
async fn main_body() -> Result<ExitCode, Box<dyn std::error::Error>> { async fn main_body() -> Result<ExitCode, Box<dyn std::error::Error>> {
let args = Cli::parse(); let args = Cli::parse();
match args.command { match args.command {
Commands::Init(_args) => {} Commands::Init(args) => {
init_writer_folder(&args).await?;
}
Commands::Build(_args) => {} Commands::Build(_args) => {}
Commands::AddPost(_args) => {} Commands::AddPost(_args) => {}
}; };