Add init call to create config.toml
This commit is contained in:
parent
5f2b40ad43
commit
ada105fa6f
20
config.toml
20
config.toml
@ -1,21 +1,17 @@
|
|||||||
[website]
|
[website]
|
||||||
website_name = "Test Website Name!"
|
website_name = "Test Website"
|
||||||
built_pages = ["test_page/about.toml", "test_page/other.toml"]
|
built_pages = []
|
||||||
use_default_css = true
|
use_default_css = true
|
||||||
javascript = []
|
javascript = []
|
||||||
css = []
|
css = []
|
||||||
|
|
||||||
[navbar]
|
[navbar]
|
||||||
items = ["about", "other", "google"]
|
items = ["test", "other"]
|
||||||
|
[navbar.item.test]
|
||||||
[navbar.item.google]
|
title = "Home"
|
||||||
title = "Google!"
|
link = "/home.html"
|
||||||
link = "https://google.com"
|
image_url = "/img/image.png"
|
||||||
|
|
||||||
[navbar.item.other]
|
[navbar.item.other]
|
||||||
title = "Other"
|
title = "Other"
|
||||||
link = "/other"
|
link = "/other.html"
|
||||||
|
|
||||||
[navbar.item.about]
|
|
||||||
title = "About"
|
|
||||||
link = "/"
|
|
||||||
|
73
src/main.rs
73
src/main.rs
@ -19,10 +19,15 @@ mod builder;
|
|||||||
mod new_page;
|
mod new_page;
|
||||||
mod file_writer;
|
mod file_writer;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::error::Error;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
|
|
||||||
use logger::{LogLevel, Logger};
|
use logger::{LogLevel, Logger};
|
||||||
use options::{Opt, Subcommands};
|
use options::{Opt, Subcommands};
|
||||||
|
use config_toml::{GlobalConfigToml, NavbarConfig, NavbarItem, WebsiteConfig};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let opt = Opt::from_args();
|
let opt = Opt::from_args();
|
||||||
@ -48,5 +53,73 @@ fn main() {
|
|||||||
logger.log(LogLevel::SEVERE, "Aborting building due to error.");
|
logger.log(LogLevel::SEVERE, "Aborting building due to error.");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Subcommands::Initialize(ops) => {
|
||||||
|
logger.log(LogLevel::DETAIL, "Generating config.toml");
|
||||||
|
|
||||||
|
let mut navbar = None;
|
||||||
|
if !ops.no_default_navbar {
|
||||||
|
let mut hashmap = HashMap::new();
|
||||||
|
hashmap.insert(
|
||||||
|
"test".to_owned(),
|
||||||
|
NavbarItem {
|
||||||
|
title: "Home".to_owned(),
|
||||||
|
link: "/home.html".to_owned(),
|
||||||
|
image_url: Some("/img/image.png".to_owned()),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
hashmap.insert(
|
||||||
|
"other".to_owned(),
|
||||||
|
NavbarItem {
|
||||||
|
title: "Other".to_owned(),
|
||||||
|
link: "/other.html".to_owned(),
|
||||||
|
image_url: None,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
navbar = Some(NavbarConfig {
|
||||||
|
items: vec!["test".to_owned(), "other".to_owned()],
|
||||||
|
item_map: hashmap,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let config = GlobalConfigToml {
|
||||||
|
website: WebsiteConfig {
|
||||||
|
website_name: ops.name,
|
||||||
|
built_pages: Vec::new(),
|
||||||
|
use_default_css: true,
|
||||||
|
javascript: Vec::new(),
|
||||||
|
css: Vec::new(),
|
||||||
|
favicon: ops.favicon,
|
||||||
|
before_navbar_url: None,
|
||||||
|
before_content_url: None,
|
||||||
|
after_content_url: None,
|
||||||
|
twitter_author: ops.twitter_author,
|
||||||
|
google_robots: None,
|
||||||
|
google_site_verification: None,
|
||||||
|
},
|
||||||
|
navbar: navbar,
|
||||||
|
};
|
||||||
|
|
||||||
|
match toml::ser::to_string(&config) {
|
||||||
|
Ok(text) => {
|
||||||
|
match file_writer::write_file(PathBuf::from("config.toml"), text, ops.overwrite)
|
||||||
|
{
|
||||||
|
Ok(_) => logger.log(LogLevel::INFO, "config.toml successfully generated"),
|
||||||
|
Err(err) => logger.log(
|
||||||
|
LogLevel::SEVERE,
|
||||||
|
format!(
|
||||||
|
"Failed to write config.toml: {}",
|
||||||
|
err.description().to_owned()
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => logger.log(
|
||||||
|
LogLevel::SEVERE,
|
||||||
|
format!(
|
||||||
|
"Failed to serialize config.toml: {}",
|
||||||
|
err.description().to_owned()
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,9 @@ pub enum Subcommands {
|
|||||||
/// Create a new page
|
/// Create a new page
|
||||||
#[structopt(name = "new")]
|
#[structopt(name = "new")]
|
||||||
New(NewOps),
|
New(NewOps),
|
||||||
|
/// Initializes a config.toml
|
||||||
|
#[structopt(name = "init")]
|
||||||
|
Initialize(InitializeOps),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(StructOpt, Debug)]
|
#[derive(StructOpt, Debug)]
|
||||||
@ -54,3 +57,22 @@ pub struct NewOps {
|
|||||||
#[structopt(short = "n", long = "no-modify-config")]
|
#[structopt(short = "n", long = "no-modify-config")]
|
||||||
pub no_modify_config: bool,
|
pub no_modify_config: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(StructOpt, Debug)]
|
||||||
|
pub struct InitializeOps {
|
||||||
|
/// Name of the webpage
|
||||||
|
#[structopt()]
|
||||||
|
pub name: String,
|
||||||
|
/// Favicon
|
||||||
|
#[structopt(short = "f", long = "favicon")]
|
||||||
|
pub favicon: Option<String>,
|
||||||
|
/// Twitter author
|
||||||
|
#[structopt(short = "t", long = "twitter")]
|
||||||
|
pub twitter_author: Option<String>,
|
||||||
|
/// Overwrites existing config.toml
|
||||||
|
#[structopt(short = "o", long = "overwrite")]
|
||||||
|
pub overwrite: bool,
|
||||||
|
/// Disables the default navbar
|
||||||
|
#[structopt(short = "n", long = "no-navbar")]
|
||||||
|
pub no_default_navbar: bool,
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user