feat(server):构建基本服务。

This commit is contained in:
徐涛
2024-04-02 16:59:40 +08:00
parent 242a36a61c
commit cd88b97102
4 changed files with 87 additions and 3 deletions

View File

@@ -0,0 +1,28 @@
use chrono::Local;
use tracing_subscriber::{
fmt::{self, format::Writer, time::FormatTime},
layer::SubscriberExt,
util::SubscriberInitExt,
EnvFilter, Registry,
};
struct LocalTimer;
impl FormatTime for LocalTimer {
fn format_time(&self, w: &mut Writer<'_>) -> std::fmt::Result {
write!(w, "{}", Local::now().format("%FT%T%.3f"))
}
}
pub fn initialize_logging() {
let console_layer = fmt::layer()
.pretty()
.with_file(false)
.with_timer(LocalTimer)
.with_writer(std::io::stderr);
Registry::default()
.with(EnvFilter::new("debug"))
.with(console_layer)
.init();
}

View File

@@ -1,3 +1,19 @@
fn main() {
println!("Hello, world!");
#![feature(diagnostic_namespace)]
#![allow(dead_code)]
use tracing::{error, info};
mod logging;
mod products;
#[tokio::main]
async fn main() {
// 初始化日志系统
logging::initialize_logging();
// 加载产品数据
match products::load_products().await {
Err(e) => error!("Failed to load products: {}", e),
Ok(_) => info!("Products loaded successfully"),
}
}

View File

@@ -0,0 +1,25 @@
use std::sync::OnceLock;
use serde::Deserialize;
use tokio::{fs::File, io::AsyncReadExt};
#[derive(Debug, Deserialize)]
pub struct Product {
pub id: String,
pub name: String,
}
static PRODUCTS: OnceLock<Vec<Product>> = OnceLock::new();
pub fn get() -> &'static Vec<Product> {
PRODUCTS.get().unwrap()
}
pub async fn load_products() -> anyhow::Result<()> {
let mut products_file = File::open("./products.json").await?;
let mut contents = String::new();
products_file.read_to_string(&mut contents).await?;
let products: Vec<Product> = serde_json::from_str(&contents)?;
PRODUCTS.set(products).unwrap();
Ok(())
}