feat: add display of a custom favicon
Diff
src/main.rs | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
@@ -171,8 +171,16 @@ async fn main() -> Result<(), anyhow::Error> {
.set(build_asset_hash(dark_css))
.unwrap();
let static_favicon = |content: &'static [u8]| {
let static_favicon = |file: String| {
move || async move {
let content = std::fs::read(&PathBuf::from(&file)).unwrap_or_else(|_| {
if !file.is_empty() {
warn!("Unable to load custom favicon. Loading fallback.");
}
include_bytes!("../statics/favicon.ico").to_vec()
});
let mut resp = Response::new(Body::from(content));
resp.headers_mut().insert(
http::header::CONTENT_TYPE,
@@ -193,6 +201,8 @@ async fn main() -> Result<(), anyhow::Error> {
}
};
let config = configuration::AppConfig::load(args.config);
let app = Router::new()
.route("/", get(methods::index::handle))
.route(
@@ -210,10 +220,7 @@ async fn main() -> Result<(), anyhow::Error> {
),
get(static_css(dark_css)),
)
.route(
"/favicon.ico",
get(static_favicon(include_bytes!("../statics/favicon.ico"))),
)
.route("/favicon.ico", get(static_favicon(config.favicon.clone())))
.route("/about", get(methods::about::handle))
.fallback(methods::repo::service)
.layer(TimeoutLayer::new(args.request_timeout.into()))
@@ -221,7 +228,7 @@ async fn main() -> Result<(), anyhow::Error> {
.layer(Extension(Arc::new(Git::new(syntax_set))))
.layer(Extension(db))
.layer(Extension(Arc::new(args.scan_path)))
.layer(Extension(configuration::AppConfig::load(args.config)))
.layer(Extension(config))
.layer(CorsLayer::new());
let listener = TcpListener::bind(&args.bind_address).await?;