move config things to config.rs
This commit is contained in:
@@ -1,7 +1,16 @@
|
|||||||
use std::io::{self, Write};
|
use std::{
|
||||||
|
env::var,
|
||||||
|
error::Error,
|
||||||
|
io::{self, Write},
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
use env_logger::fmt::Formatter;
|
use env_logger::fmt::Formatter;
|
||||||
use log::Record;
|
use log::{LevelFilter, Record};
|
||||||
|
use sqlx::PgPool;
|
||||||
|
|
||||||
|
/// Mnemosyne, the mother of the nine muses
|
||||||
|
pub const DEFAULT_PORT: u16 = 0x9999; // 39321
|
||||||
|
|
||||||
pub const REFERENCE_SPLASHES: &[&str] = &[
|
pub const REFERENCE_SPLASHES: &[&str] = &[
|
||||||
"quote engine",
|
"quote engine",
|
||||||
@@ -17,6 +26,44 @@ pub const REFERENCE_SPLASHES: &[&str] = &[
|
|||||||
"over 100 lines of git history!",
|
"over 100 lines of git history!",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
pub async fn init_pool() -> Result<PgPool, Box<dyn Error>> {
|
||||||
|
Ok(sqlx::postgres::PgPoolOptions::new()
|
||||||
|
.max_connections(20)
|
||||||
|
.acquire_timeout(Duration::from_secs(3))
|
||||||
|
.idle_timeout(Duration::from_secs(60))
|
||||||
|
.connect(var("DATABASE_URL")?.as_str())
|
||||||
|
.await?)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn port() -> Result<u16, Box<dyn Error>> {
|
||||||
|
Ok(match std::env::var("PORT") {
|
||||||
|
Ok(p) => p.parse::<u16>()?,
|
||||||
|
Err(e) => match e {
|
||||||
|
std::env::VarError::NotPresent => DEFAULT_PORT,
|
||||||
|
_ => return Err(e)?,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn dotenv() -> Result<(), Box<dyn Error>> {
|
||||||
|
if let Err(e) = dotenvy::dotenv()
|
||||||
|
&& !e.not_found()
|
||||||
|
{
|
||||||
|
return Err(e.into());
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn env_logger() -> Result<(), Box<dyn Error>> {
|
||||||
|
env_logger::builder()
|
||||||
|
.filter_level(LevelFilter::Info)
|
||||||
|
.filter_module("sqlx", LevelFilter::Warn)
|
||||||
|
.parse_default_env()
|
||||||
|
.format(envlogger_write_format)
|
||||||
|
.init();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn envlogger_write_format(buf: &mut Formatter, rec: &Record) -> io::Result<()> {
|
pub fn envlogger_write_format(buf: &mut Formatter, rec: &Record) -> io::Result<()> {
|
||||||
let level_string = format!("{}", rec.level());
|
let level_string = format!("{}", rec.level());
|
||||||
let level_style = buf.default_level_style(rec.level());
|
let level_style = buf.default_level_style(rec.level());
|
||||||
|
|||||||
28
src/main.rs
28
src/main.rs
@@ -1,8 +1,6 @@
|
|||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
use axum::Router;
|
use axum::Router;
|
||||||
use dotenvy::var;
|
|
||||||
use log::LevelFilter;
|
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
|
|
||||||
@@ -17,9 +15,6 @@ mod tags;
|
|||||||
mod users;
|
mod users;
|
||||||
mod web;
|
mod web;
|
||||||
|
|
||||||
/// Mnemosyne, the mother of the nine muses
|
|
||||||
const DEFAULT_PORT: u16 = 0x9999; // 39321
|
|
||||||
|
|
||||||
/// The string to be returned alongside HTTP 500
|
/// The string to be returned alongside HTTP 500
|
||||||
const ISE_MSG: &str = "Internal server error";
|
const ISE_MSG: &str = "Internal server error";
|
||||||
|
|
||||||
@@ -30,31 +25,16 @@ pub struct MnemoState {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error>> {
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
if let Err(e) = dotenvy::dotenv()
|
config::dotenv()?;
|
||||||
&& !e.not_found()
|
config::env_logger()?;
|
||||||
{
|
|
||||||
return Err(e.into());
|
|
||||||
}
|
|
||||||
env_logger::builder()
|
|
||||||
.filter_level(LevelFilter::Info)
|
|
||||||
.filter_module("sqlx", LevelFilter::Warn)
|
|
||||||
.parse_default_env()
|
|
||||||
.format(config::envlogger_write_format)
|
|
||||||
.init();
|
|
||||||
|
|
||||||
let pool = PgPool::connect(var("DATABASE_URL")?.as_str()).await?;
|
let pool = config::init_pool().await?;
|
||||||
sqlx::migrate!("src/database/migrations").run(&pool).await?;
|
sqlx::migrate!("src/database/migrations").run(&pool).await?;
|
||||||
log::info!("Migrations applied successfully.");
|
log::info!("Migrations applied successfully.");
|
||||||
users::auth::init_password_dummies();
|
users::auth::init_password_dummies();
|
||||||
users::setup::initialise_reserved_users_if_needed(&pool).await?;
|
users::setup::initialise_reserved_users_if_needed(&pool).await?;
|
||||||
|
|
||||||
let port = match std::env::var("PORT") {
|
let port = config::port()?;
|
||||||
Ok(p) => p.parse::<u16>()?,
|
|
||||||
Err(e) => match e {
|
|
||||||
std::env::VarError::NotPresent => DEFAULT_PORT,
|
|
||||||
_ => return Err(e)?,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
let r = Router::new()
|
let r = Router::new()
|
||||||
.merge(api::api_router())
|
.merge(api::api_router())
|
||||||
.merge(web::web_router())
|
.merge(web::web_router())
|
||||||
|
|||||||
Reference in New Issue
Block a user