xesite/src/app.rs

72 lines
1.7 KiB
Rust
Raw Normal View History

2020-07-12 18:42:09 +00:00
use crate::signalboost::Person;
use anyhow::Result;
use serde::Deserialize;
2020-07-12 23:26:53 +00:00
use std::{fs, path::PathBuf};
use comrak::{markdown_to_html, ComrakOptions};
2020-07-12 18:42:09 +00:00
mod defaults {
use std::path::PathBuf;
pub fn clacks() -> Vec<String> {
vec!["Ashlynn".to_string()]
}
pub fn signalboost_fname() -> PathBuf {
"./signalboost.dhall".into()
}
2020-07-12 23:26:53 +00:00
2020-07-12 18:42:09 +00:00
pub fn port() -> u16 {
34252
}
2020-07-12 23:26:53 +00:00
pub fn resume_fname() -> PathBuf {
"./static/resume/resume.md".into()
}
2020-07-12 18:42:09 +00:00
}
#[derive(Clone, Deserialize)]
pub struct Config {
#[serde(default = "defaults::clacks")]
clack_set: Vec<String>,
#[serde(default = "defaults::signalboost_fname")]
signalboost_fname: PathBuf,
#[serde(default = "defaults::port")]
port: u16,
2020-07-12 23:26:53 +00:00
#[serde(default = "defaults::resume_fname")]
resume_fname: PathBuf,
2020-07-12 18:42:09 +00:00
}
2020-07-12 23:30:01 +00:00
pub fn markdown(inp: &str) -> String {
let mut options = ComrakOptions::default();
options.extension.autolink = true;
options.extension.table = true;
options.extension.description_lists = true;
options.extension.superscript = true;
options.extension.strikethrough = true;
options.extension.footnotes = true;
options.render.unsafe_ = true;
markdown_to_html(inp, &options)
}
2020-07-12 18:42:09 +00:00
pub struct State {
pub cfg: Config,
pub signalboost: Vec<Person>,
2020-07-12 23:26:53 +00:00
pub resume: String,
2020-07-12 18:42:09 +00:00
}
pub fn init<'a>() -> Result<State> {
let cfg: Config = envy::from_env()?;
let sb = serde_dhall::from_file(cfg.signalboost_fname.clone()).parse()?;
2020-07-12 23:26:53 +00:00
let resume = fs::read_to_string(cfg.resume_fname.clone())?;
2020-07-12 23:30:01 +00:00
let resume: String = markdown(&resume);
2020-07-12 18:42:09 +00:00
Ok(State {
cfg: cfg,
signalboost: sb,
2020-07-12 23:26:53 +00:00
resume: resume,
2020-07-12 18:42:09 +00:00
})
}