pub mod router;
pub mod middleware;
pub mod context;
pub mod server;
pub mod config;
pub mod static_files;
pub mod websocket;
pub mod pool;
pub use router::Router;
pub use middleware::{Middleware, MiddlewareChain};
pub use context::Context;
pub use server::Server;
pub use config::{AppConfig, ServerConfig, LoggingConfig, CorsConfig};
pub use websocket::{WebSocket, Message};
pub use pool::{ConnectionPool, SharedPool, PoolStats};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Method {
GET,
POST,
PUT,
DELETE,
PATCH,
HEAD,
OPTIONS,
}
impl Method {
pub fn as_str(&self) -> &'static str {
match self {
Method::GET => "GET",
Method::POST => "POST",
Method::PUT => "PUT",
Method::DELETE => "DELETE",
Method::PATCH => "PATCH",
Method::HEAD => "HEAD",
Method::OPTIONS => "OPTIONS",
}
}
}
#[derive(Debug)]
pub struct Response {
pub status: u16,
pub headers: Vec<(String, String)>,
pub body: Vec<u8>,
}
impl Response {
pub fn new(status: u16, body: impl Into<Vec<u8>>) -> Self {
Self {
status,
headers: vec![
("Content-Type".to_string(), "text/plain;charset=utf-8".to_string()),
],
body: body.into(),
}
}
pub fn json(body: impl Into<Vec<u8>>) -> Self {
let mut resp = Self::new(200, body);
resp.headers = vec![("Content-Type".to_string(), "application/json".to_string())];
resp
}
pub fn html(body: impl Into<Vec<u8>>) -> Self {
let mut resp = Self::new(200, body);
resp.headers = vec![("Content-Type".to_string(), "text/html".to_string())];
resp
}
pub fn not_found() -> Self {
Self::new(404, "404 Not Found")
}
pub fn internal_error() -> Self {
Self::new(500, "500 Internal Server Error")
}
}
impl From<&str> for Response {
fn from(s: &str) -> Self {
Response::html(s.to_string())
}
}
impl From<String> for Response {
fn from(s: String) -> Self {
Response::html(s)
}
}
impl From<Vec<u8>> for Response {
fn from(data: Vec<u8>) -> Self {
Response::new(200, data)
}
}