use axum::{ response::Html as AxumHtml, routing::get, Router, }; use std::env; #[tokio::main] async fn main() { let app = Router::new() .route("/", get(index_handler)) .route("/health", get(|| async { "ok" })); let port = env::var("PORT").unwrap_or_else(|_| "7860".to_string()); let addr = format!("0.0.0.0:{}", port); let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); axum::serve(listener, app).await.unwrap(); } async fn index_handler() -> AxumHtml { // Список товаров let products = vec![ ("Rust Ferris", "29.99 $", "https://rustacean.net/assets/rustacean-flat-gesture.png", "Мягкий краб Феррис."), ("Turbo Engine", "49.99 $", "https://foundation.rust-lang.org/img/rust-logo-blk.svg", "Максимальная скорость."), ("Safe Shield", "15.00 $", "https://www.rust-lang.org/static/images/rust-logo-blk.svg", "Безопасность памяти."), ]; let mut cards = String::new(); for p in products { cards.push_str(&format!( r#"

{}

{}

{}
"#, p.2, p.0, p.3, p.1 )); } let html = format!( r#" Rust Store

Надежный мерч на Rust

Скомпилировано для вашего комфорта

{}
"#, cards ); AxumHtml(html) }