1
0
Fork 0

Add config

This commit is contained in:
Honbra 2023-10-19 00:18:18 +02:00
parent 74ea5fc59a
commit ee22233788
Signed by: honbra
GPG key ID: B61CC9ADABE2D952
5 changed files with 181 additions and 12 deletions

139
Cargo.lock generated
View file

@ -52,6 +52,15 @@ dependencies = [
"syn 2.0.38", "syn 2.0.38",
] ]
[[package]]
name = "atomic"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@ -166,6 +175,12 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad152d03a2c813c80bb94fedbf3a3f02b28f793e39e7c214c8a0bcc196343de7" checksum = "ad152d03a2c813c80bb94fedbf3a3f02b28f793e39e7c214c8a0bcc196343de7"
[[package]]
name = "bytemuck"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
[[package]] [[package]]
name = "bytes" name = "bytes"
version = "1.5.0" version = "1.5.0"
@ -380,6 +395,20 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
[[package]]
name = "figment"
version = "0.10.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a014ac935975a70ad13a3bff2463b1c1b083b35ae4cb6309cfc59476aa7a181f"
dependencies = [
"atomic",
"pear",
"serde",
"toml",
"uncased",
"version_check",
]
[[package]] [[package]]
name = "fnv" name = "fnv"
version = "1.0.7" version = "1.0.7"
@ -525,6 +554,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"axum", "axum",
"eyre", "eyre",
"figment",
"http", "http",
"lazy_static", "lazy_static",
"maud", "maud",
@ -684,6 +714,12 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "inlinable_string"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
[[package]] [[package]]
name = "ipnet" name = "ipnet"
version = "2.8.0" version = "2.8.0"
@ -916,6 +952,29 @@ dependencies = [
"windows-targets", "windows-targets",
] ]
[[package]]
name = "pear"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c"
dependencies = [
"inlinable_string",
"pear_codegen",
"yansi",
]
[[package]]
name = "pear_codegen"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f0f13dac8069c139e8300a6510e3f4143ecf5259c60b116a9b271b4ca0d54"
dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.38",
]
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.3.0" version = "2.3.0"
@ -993,6 +1052,19 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "proc-macro2-diagnostics"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"version_check",
"yansi",
]
[[package]] [[package]]
name = "pulldown-cmark" name = "pulldown-cmark"
version = "0.9.3" version = "0.9.3"
@ -1257,6 +1329,15 @@ dependencies = [
"serde", "serde",
] ]
[[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 = "serde_urlencoded" name = "serde_urlencoded"
version = "0.7.1" version = "0.7.1"
@ -1563,6 +1644,40 @@ dependencies = [
"tracing", "tracing",
] ]
[[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 2.0.2",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]] [[package]]
name = "tower" name = "tower"
version = "0.4.13" version = "0.4.13"
@ -1680,6 +1795,15 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "uncased"
version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
dependencies = [
"version_check",
]
[[package]] [[package]]
name = "unicase" name = "unicase"
version = "2.7.0" version = "2.7.0"
@ -1961,6 +2085,15 @@ 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 = "winreg" name = "winreg"
version = "0.50.0" version = "0.50.0"
@ -1970,3 +2103,9 @@ dependencies = [
"cfg-if", "cfg-if",
"windows-sys", "windows-sys",
] ]
[[package]]
name = "yansi"
version = "1.0.0-rc.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377"

View file

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
axum = { version = "0.6.20", default-features = false, features = ["http1", "json", "macros", "matched-path", "tokio", "tower-log", "tracing"] } axum = { version = "0.6.20", default-features = false, features = ["http1", "json", "macros", "matched-path", "tokio", "tower-log", "tracing"] }
eyre = "0.6.8" eyre = "0.6.8"
figment = { version = "0.10.11", features = ["env", "toml"] }
http = "0.2.9" http = "0.2.9"
lazy_static = "1.4.0" lazy_static = "1.4.0"
maud = { version = "0.25.0", features = ["axum"] } maud = { version = "0.25.0", features = ["axum"] }

View file

@ -5,7 +5,9 @@ use http::Request;
use tower_http::trace::{DefaultOnRequest, DefaultOnResponse, TraceLayer}; use tower_http::trace::{DefaultOnRequest, DefaultOnResponse, TraceLayer};
use tracing::{field, span, Level}; use tracing::{field, span, Level};
pub fn build_app() -> Router { use crate::config::Config;
pub fn build_app(_config: Config) -> Router {
Router::new().nest("/yt-embed", yt_embed::router()).layer( Router::new().nest("/yt-embed", yt_embed::router()).layer(
TraceLayer::new_for_http() TraceLayer::new_for_http()
.make_span_with(|request: &Request<Body>| { .make_span_with(|request: &Request<Body>| {

13
src/config.rs Normal file
View file

@ -0,0 +1,13 @@
use std::net::SocketAddr;
use serde::Deserialize;
#[derive(Clone, Debug, Deserialize)]
pub struct Config {
#[serde(default = "default_listen_addr")]
pub listen_addr: SocketAddr,
}
fn default_listen_addr() -> SocketAddr {
([0, 0, 0, 0], 3000).into()
}

View file

@ -1,18 +1,22 @@
mod app; mod app;
mod config;
mod error; mod error;
mod reqwest; mod reqwest;
mod youtube; mod youtube;
use std::net::SocketAddr;
use eyre::Context; use eyre::Context;
use figment::{
providers::{Env, Format, Toml},
Figment,
};
use tokio::runtime::Runtime;
use tracing::{debug, field, Level}; use tracing::{debug, field, Level};
use tracing_subscriber::{filter, layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{filter, layer::SubscriberExt, util::SubscriberInitExt};
use self::app::build_app; use self::app::build_app;
use crate::config::Config;
#[tokio::main] fn main() -> eyre::Result<()> {
async fn main() -> eyre::Result<()> {
let filter = filter::Targets::new() let filter = filter::Targets::new()
.with_target("honbra_api", Level::TRACE) .with_target("honbra_api", Level::TRACE)
.with_target("tower_http::trace::on_response", Level::TRACE) .with_target("tower_http::trace::on_response", Level::TRACE)
@ -28,15 +32,25 @@ async fn main() -> eyre::Result<()> {
.map_err(eyre::Error::msg) .map_err(eyre::Error::msg)
.context("failed to initialize tracing subscriber")?; .context("failed to initialize tracing subscriber")?;
let addr: SocketAddr = ([0, 0, 0, 0], 3000).into(); let config: Config = Figment::new()
.merge(Toml::file("config.toml"))
.merge(Env::raw())
.extract()
.context("failed to parse config")?;
debug!(addr = field::display(addr), "binding"); let rt = Runtime::new().context("failed to create tokio runtime")?;
axum::Server::try_bind(&addr) debug!(addr = field::display(&config.listen_addr), "binding");
rt.block_on(async move {
Ok::<(), eyre::Error>(
axum::Server::try_bind(&config.listen_addr)
.context("unable to bind to server address")? .context("unable to bind to server address")?
.serve(build_app().into_make_service()) .serve(build_app(config).into_make_service())
.await .await
.context("server encountered a runtime error")?; .context("server encountered a runtime error")?,
)
})?;
Ok(()) Ok(())
} }