diff --git a/src/main.rs b/src/main.rs index fde2adc..5853b46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,50 +1,57 @@ +use axum::{serve, Router}; +use notify::{Config, RecommendedWatcher, RecursiveMode, Watcher}; use std::{ - cell::OnceCell, path::{Path, PathBuf}, str::FromStr, + sync::OnceLock, }; use tokio::sync::mpsc::channel; +use tower_http::services::ServeDir; +use tower_livereload::{LiveReloadLayer, Reloader}; +pub use tracing::{debug, error, info, warn}; -use notify::{Config, RecommendedWatcher, RecursiveMode, Watcher}; +type Berr = Box; +type Besult = Result; mod observe { - use tracing::level_filters::LevelFilter; - use tracing_subscriber::EnvFilter; - pub fn setup_logging() { color_eyre::install().expect("Failed to install color_eyre"); - let filter = EnvFilter::builder() - .with_default_directive(LevelFilter::TRACE.into()) - .parse_lossy("info,chatbot=trace"); + let filter = tracing_subscriber::EnvFilter::builder() + .with_default_directive(::from( + tracing::level_filters::LevelFilter::TRACE, + )) + .parse_lossy("info,lyrs=trace"); tracing_subscriber::fmt().with_env_filter(filter).init(); } } -mod prelude { - #![allow(unused_imports)] - pub use tracing::{debug, error, info, warn}; -} - -use axum::{serve, Router}; -use tower_http::services::ServeDir; -use tower_livereload::LiveReloadLayer; - -use crate::prelude::*; - -const LIVE_RELOADING: bool = true; -const STATIC_FILE_PATH: OnceCell = OnceCell::new(); - -fn static_file_dir() -> &'static Path { - STATIC_FILE_PATH.get_or_init(|| PathBuf::from_str("static").unwrap()) +fn static_file_dir() -> &'static PathBuf { + static STATIC_FILE_DIR: OnceLock = OnceLock::new(); + STATIC_FILE_DIR.get_or_init(|| PathBuf::from_str("static").unwrap()) } #[tokio::main] -async fn main() -> Result<(), Box> { +async fn main() -> Besult<()> { // load configuration? observe::setup_logging(); + let rl_layer = live_reload_layer()?; + + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + info!("Listening on {listener:#?}"); + Ok(serve(listener, static_files()?.layer(rl_layer)).await?) +} + +fn live_reload_layer() -> Besult { + let rl_layer = LiveReloadLayer::new(); + let rl = rl_layer.reloader(); + static_file_watcher(rl)?; + Ok(rl_layer) +} + +fn static_file_watcher(reloader: Reloader) -> Result<(), Box> { info!("Creating async watcher..."); let (tx, mut rx) = channel(1); @@ -63,9 +70,6 @@ async fn main() -> Result<(), Box> { watcher.watch(static_file_dir(), RecursiveMode::Recursive)?; - let rl_layer = LiveReloadLayer::new(); - let rl = rl_layer.reloader(); - tokio::spawn(async move { info!("Recieving..."); while let Some(res) = rx.recv().await { @@ -73,16 +77,14 @@ async fn main() -> Result<(), Box> { match res { Ok(event) => { info!("fs event: {event:#?}"); - rl.reload() + reloader.reload() } Err(e) => println!("watch error: {:?}", e), } } }); - let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); - info!("Listening on {listener:#?}"); - Ok(serve(listener, static_files()?.layer(rl_layer)).await?) + Ok(()) } fn static_files() -> Result { diff --git a/static/index.html b/static/index.html index 158e7b4..ee0791c 100644 --- a/static/index.html +++ b/static/index.html @@ -1,2 +1,2 @@ -Sup Dawgyyyyyyyyy +Sup Dawgy