Archived
45 lines
1.3 KiB
Rust
45 lines
1.3 KiB
Rust
use std::path::PathBuf;
|
|
use std::sync::Arc;
|
|
use tracing::info;
|
|
use tracing_subscriber::EnvFilter;
|
|
|
|
mod auth;
|
|
mod error;
|
|
mod routes;
|
|
mod state;
|
|
|
|
use state::AppState;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(
|
|
EnvFilter::from_default_env()
|
|
.add_directive("neuron_api=info".parse().unwrap()),
|
|
)
|
|
.init();
|
|
|
|
let db_path_raw = std::env::var("NEURON_DB_PATH")
|
|
.unwrap_or_else(|_| "~/.neuron/engram".to_string());
|
|
let db_path = PathBuf::from(
|
|
db_path_raw
|
|
.replace('~', &std::env::var("HOME").unwrap_or_else(|_| ".".to_string())),
|
|
);
|
|
std::fs::create_dir_all(&db_path).expect("failed to create db directory");
|
|
|
|
let api_key = std::env::var("NEURON_API_KEY").unwrap_or_else(|_| "neuron-dev".to_string());
|
|
let bind = std::env::var("NEURON_BIND").unwrap_or_else(|_| "0.0.0.0:7770".to_string());
|
|
|
|
info!("opening engram db at {}", db_path.display());
|
|
let state = AppState::new(&db_path, api_key).expect("failed to initialize app state");
|
|
let state = Arc::new(state);
|
|
|
|
let app = routes::build_router(state);
|
|
|
|
let listener = tokio::net::TcpListener::bind(&bind)
|
|
.await
|
|
.expect("failed to bind");
|
|
info!("neuron-api listening on {}", bind);
|
|
axum::serve(listener, app).await.expect("server error");
|
|
}
|