make it a library crate
This commit is contained in:
parent
93aeb80c56
commit
603c2fbe48
@ -18,7 +18,7 @@ pub enum HandlerError {
|
||||
impl ResponseError for HandlerError {
|
||||
fn status(&self) -> StatusCode {
|
||||
match &self {
|
||||
HandlerError::OpdsError(e) => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
HandlerError::OpdsError(_) => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
HandlerError::DataError(e) => match e {
|
||||
DataStoreError::NoResults(_) => StatusCode::NOT_FOUND,
|
||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
@ -30,7 +30,7 @@ impl ResponseError for HandlerError {
|
||||
let id = Uuid::new_v4();
|
||||
let internal_msg = format!("{:?}", self);
|
||||
let external_msg = match &self {
|
||||
HandlerError::OpdsError(e) => "internal server error",
|
||||
HandlerError::OpdsError(_) => "internal server error",
|
||||
HandlerError::DataError(e) => match e {
|
||||
DataStoreError::NoResults(_) => "item not found",
|
||||
_ => "internal server error",
|
||||
|
70
rusty-library/src/lib.rs
Normal file
70
rusty-library/src/lib.rs
Normal file
@ -0,0 +1,70 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use app_state::AppState;
|
||||
use calibre_db::calibre::Calibre;
|
||||
use config::Config;
|
||||
use poem::{
|
||||
endpoint::EmbeddedFilesEndpoint, get, listener::TcpListener, middleware::Tracing, EndpointExt,
|
||||
Route, Server,
|
||||
};
|
||||
use rust_embed::RustEmbed;
|
||||
|
||||
pub mod app_state;
|
||||
pub mod basic_auth;
|
||||
pub mod cli;
|
||||
pub mod config;
|
||||
pub mod data {
|
||||
pub mod book;
|
||||
}
|
||||
pub mod handlers {
|
||||
pub mod author;
|
||||
pub mod authors;
|
||||
pub mod books;
|
||||
pub mod cover;
|
||||
pub mod download;
|
||||
pub mod error;
|
||||
pub mod opds;
|
||||
pub mod paginated;
|
||||
pub mod recents;
|
||||
pub mod series;
|
||||
pub mod series_single;
|
||||
}
|
||||
pub mod opds;
|
||||
pub mod templates;
|
||||
|
||||
#[derive(RustEmbed)]
|
||||
#[folder = "static"]
|
||||
pub struct Files;
|
||||
|
||||
pub async fn run(config: Config) -> Result<(), std::io::Error> {
|
||||
let calibre = Calibre::load(&config.metadata_path).expect("failed to load calibre database");
|
||||
let app_state = Arc::new(AppState { calibre, config });
|
||||
|
||||
let app = Route::new()
|
||||
.at("/", get(handlers::recents::handler))
|
||||
.at("/opds", get(handlers::opds::handler))
|
||||
.at("/books", get(handlers::books::handler_init))
|
||||
.at("/books/:cursor/:sort_order", get(handlers::books::handler))
|
||||
.at("/series", get(handlers::series::handler_init))
|
||||
.at(
|
||||
"/series/:cursor/:sort_order",
|
||||
get(handlers::series::handler),
|
||||
)
|
||||
.at("/series/:id", get(handlers::series_single::handler))
|
||||
.at("/authors", get(handlers::authors::handler_init))
|
||||
.at("/authors/:id", get(handlers::author::handler))
|
||||
.at(
|
||||
"/authors/:cursor/:sort_order",
|
||||
get(handlers::authors::handler),
|
||||
)
|
||||
.at("/cover/:id", get(handlers::cover::handler))
|
||||
.at("/book/:id/:format", get(handlers::download::handler))
|
||||
.nest("/static", EmbeddedFilesEndpoint::<Files>::new())
|
||||
.data(app_state)
|
||||
.with(Tracing);
|
||||
|
||||
Server::new(TcpListener::bind("[::]:3000"))
|
||||
.name("cops-web")
|
||||
.run(app)
|
||||
.await
|
||||
}
|
@ -1,42 +1,5 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use app_state::AppState;
|
||||
use calibre_db::calibre::Calibre;
|
||||
use clap::Parser;
|
||||
use cli::Cli;
|
||||
use config::Config;
|
||||
use poem::{
|
||||
endpoint::EmbeddedFilesEndpoint, get, listener::TcpListener, middleware::Tracing, EndpointExt,
|
||||
Route, Server,
|
||||
};
|
||||
use rust_embed::RustEmbed;
|
||||
|
||||
mod app_state;
|
||||
mod basic_auth;
|
||||
mod cli;
|
||||
mod config;
|
||||
mod data {
|
||||
pub mod book;
|
||||
}
|
||||
mod handlers {
|
||||
pub mod author;
|
||||
pub mod authors;
|
||||
pub mod books;
|
||||
pub mod cover;
|
||||
pub mod download;
|
||||
pub mod error;
|
||||
pub mod opds;
|
||||
pub mod paginated;
|
||||
pub mod recents;
|
||||
pub mod series;
|
||||
pub mod series_single;
|
||||
}
|
||||
mod opds;
|
||||
mod templates;
|
||||
|
||||
#[derive(RustEmbed)]
|
||||
#[folder = "static"]
|
||||
pub struct Files;
|
||||
use rusty_library::{cli::Cli, config::Config};
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), std::io::Error> {
|
||||
@ -48,34 +11,5 @@ async fn main() -> Result<(), std::io::Error> {
|
||||
let args = Cli::parse();
|
||||
let config = Config::load(&args).expect("failed to load configuration");
|
||||
|
||||
let calibre = Calibre::load(&config.metadata_path).expect("failed to load calibre database");
|
||||
let app_state = Arc::new(AppState { calibre, config });
|
||||
|
||||
let app = Route::new()
|
||||
.at("/", get(handlers::recents::handler))
|
||||
.at("/opds", get(handlers::opds::handler))
|
||||
.at("/books", get(handlers::books::handler_init))
|
||||
.at("/books/:cursor/:sort_order", get(handlers::books::handler))
|
||||
.at("/series", get(handlers::series::handler_init))
|
||||
.at(
|
||||
"/series/:cursor/:sort_order",
|
||||
get(handlers::series::handler),
|
||||
)
|
||||
.at("/series/:id", get(handlers::series_single::handler))
|
||||
.at("/authors", get(handlers::authors::handler_init))
|
||||
.at("/authors/:id", get(handlers::author::handler))
|
||||
.at(
|
||||
"/authors/:cursor/:sort_order",
|
||||
get(handlers::authors::handler),
|
||||
)
|
||||
.at("/cover/:id", get(handlers::cover::handler))
|
||||
.at("/book/:id/:format", get(handlers::download::handler))
|
||||
.nest("/static", EmbeddedFilesEndpoint::<Files>::new())
|
||||
.data(app_state)
|
||||
.with(Tracing);
|
||||
|
||||
Server::new(TcpListener::bind("[::]:3000"))
|
||||
.name("cops-web")
|
||||
.run(app)
|
||||
.await
|
||||
rusty_library::run(config).await
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ impl Feed {
|
||||
}
|
||||
Ok(Event::Eof) => break,
|
||||
Ok(e) => writer.write_event(e)?,
|
||||
Err(e) => (),
|
||||
Err(e) => return Err(e)?,
|
||||
}
|
||||
}
|
||||
let result = writer.into_inner().into_inner();
|
||||
|
Loading…
Reference in New Issue
Block a user