|
|
|
@ -4,11 +4,13 @@ use axum::http::HeaderValue;
|
|
|
|
|
use axum::response::IntoResponse;
|
|
|
|
|
use axum::{http::StatusCode, routing::post, Json, Router};
|
|
|
|
|
use owner_tree::build_owner_tree;
|
|
|
|
|
use parse::emacs_parse_org_document;
|
|
|
|
|
use parse::{emacs_parse_org_document, get_emacs_version};
|
|
|
|
|
use tower::ServiceBuilder;
|
|
|
|
|
use tower_http::services::{ServeDir, ServeFile};
|
|
|
|
|
use tower_http::set_header::SetResponseHeaderLayer;
|
|
|
|
|
|
|
|
|
|
use crate::parse::get_org_mode_version;
|
|
|
|
|
|
|
|
|
|
mod error;
|
|
|
|
|
mod owner_tree;
|
|
|
|
|
mod parse;
|
|
|
|
@ -16,7 +18,7 @@ mod rtrim_iterator;
|
|
|
|
|
mod sexp;
|
|
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
|
async fn main() {
|
|
|
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
|
let static_files_service = {
|
|
|
|
|
let serve_dir =
|
|
|
|
|
ServeDir::new("static").not_found_service(ServeFile::new("static/index.html"));
|
|
|
|
@ -32,9 +34,15 @@ async fn main() {
|
|
|
|
|
.route("/parse", post(parse_org_mode))
|
|
|
|
|
.fallback_service(static_files_service);
|
|
|
|
|
|
|
|
|
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
|
|
|
|
let emacs_version = get_emacs_version().await?;
|
|
|
|
|
let org_mode_version = get_org_mode_version().await?;
|
|
|
|
|
println!("Using emacs version: {}", emacs_version.trim());
|
|
|
|
|
println!("Using org-mode version: {}", org_mode_version.trim());
|
|
|
|
|
|
|
|
|
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await?;
|
|
|
|
|
println!("Listening on port 3000. Pop open your browser to http://127.0.0.1:3000/ .");
|
|
|
|
|
axum::serve(listener, app).await.unwrap();
|
|
|
|
|
axum::serve(listener, app).await?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn parse_org_mode(body: String) -> Result<impl IntoResponse, (StatusCode, String)> {
|
|
|
|
|