pub struct Server { /* private fields */ }
Expand description
The main HTTP server - NestJS-like experience
§Example
use elif_http::{Server, HttpConfig};
use elif_core::container::{IocContainer, ServiceBinder};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut container = IocContainer::new();
container.build().unwrap();
let server = Server::new(container, HttpConfig::default())?;
server.listen("0.0.0.0:3000").await?;
Ok(())
}
Implementations§
Source§impl Server
impl Server
Sourcepub fn new(
container: IocContainer,
config: HttpConfig,
) -> Result<Server, HttpError>
pub fn new( container: IocContainer, config: HttpConfig, ) -> Result<Server, HttpError>
Create a new server instance
Sourcepub fn with_container(
container: Arc<IocContainer>,
config: HttpConfig,
) -> Result<Server, HttpError>
pub fn with_container( container: Arc<IocContainer>, config: HttpConfig, ) -> Result<Server, HttpError>
Create a new server with existing Arc
Sourcepub fn use_router(&mut self, router: Router) -> &mut Server
pub fn use_router(&mut self, router: Router) -> &mut Server
Set custom routes using framework router
§Example
use elif_http::{Server, ElifRouter, HttpConfig, ElifRequest, HttpResult};
use elif_core::container::{IocContainer, ServiceBinder};
use std::sync::Arc;
let mut container = IocContainer::new();
container.build().unwrap();
let mut server = Server::new(container, HttpConfig::default())?;
let router = ElifRouter::new()
.get("/users", get_users)
.post("/users", create_user);
server.use_router(router);
Sourcepub fn use_middleware<M>(&mut self, middleware: M) -> &mut Serverwhere
M: Middleware + 'static,
pub fn use_middleware<M>(&mut self, middleware: M) -> &mut Serverwhere
M: Middleware + 'static,
Add middleware to the server
§Example
use elif_http::{Server, HttpConfig};
use elif_core::container::{IocContainer, ServiceBinder};
use std::sync::Arc;
let mut container = IocContainer::new();
container.build().unwrap();
let mut server = Server::new(container, HttpConfig::default())?;
server.use_middleware(LoggingMiddleware::default());
Sourcepub fn debug_middleware(&mut self, enable: bool) -> &mut Server
pub fn debug_middleware(&mut self, enable: bool) -> &mut Server
Enable debug mode for detailed middleware execution logs
§Example
use elif_http::{Server, HttpConfig};
use elif_core::container::{IocContainer, ServiceBinder};
let mut container = IocContainer::new();
container.build().unwrap();
let mut server = Server::new(container, HttpConfig::default())?;
server.debug_middleware(true);
Sourcepub fn inspect_middleware(&self)
pub fn inspect_middleware(&self)
Inspect all registered middleware and show execution order
§Example
use elif_http::{Server, HttpConfig};
use elif_core::container::{IocContainer, ServiceBinder};
let mut container = IocContainer::new();
container.build().unwrap();
let server = Server::new(container, HttpConfig::default())?;
server.inspect_middleware();
Sourcepub fn use_profiler(&mut self) -> &mut Server
pub fn use_profiler(&mut self) -> &mut Server
Add profiler middleware to log timing for each request
§Example
use elif_http::{Server, HttpConfig};
use elif_core::container::{IocContainer, ServiceBinder};
let mut container = IocContainer::new();
container.build().unwrap();
let mut server = Server::new(container, HttpConfig::default())?;
server.use_profiler();
Sourcepub async fn listen_on(self, addr: SocketAddr) -> Result<(), HttpError>
pub async fn listen_on(self, addr: SocketAddr) -> Result<(), HttpError>
Start the server on the specified SocketAddr
pub fn container(&self) -> &Arc<IocContainer>
pub fn config(&self) -> &HttpConfig
pub fn router(&self) -> Option<&Router>
pub fn middleware(&self) -> &MiddlewarePipelineV2
Auto Trait Implementations§
impl Freeze for Server
impl !RefUnwindSafe for Server
impl Send for Server
impl Sync for Server
impl Unpin for Server
impl !UnwindSafe for Server
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more