pub struct Server { /* private fields */ }Expand description
The main HTTP server - NestJS-like experience
§Example
use elif_http::{Server, HttpConfig};
use elif_core::{Container, container::test_implementations::*};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = Arc::new(create_test_config());
let database = Arc::new(TestDatabase::new()) as Arc<dyn elif_core::DatabaseConnection>;
let container = Container::builder()
.config(config)
.database(database)
.build()?;
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: Container, config: HttpConfig) -> HttpResult<Self>
pub fn new(container: Container, config: HttpConfig) -> HttpResult<Self>
Create a new server instance
Sourcepub fn with_container(
container: Arc<Container>,
config: HttpConfig,
) -> HttpResult<Self>
pub fn with_container( container: Arc<Container>, config: HttpConfig, ) -> HttpResult<Self>
Create a new server with existing Arc
Sourcepub fn use_router(&mut self, router: ElifRouter) -> &mut Self
pub fn use_router(&mut self, router: ElifRouter) -> &mut Self
Set custom routes using framework router
§Example
use elif_http::{Server, ElifRouter, HttpConfig};
use elif_core::{Container, container::test_implementations::*};
use std::sync::Arc;
let config = Arc::new(create_test_config());
let database = Arc::new(TestDatabase::new()) as Arc<dyn elif_core::DatabaseConnection>;
let container = Container::builder()
.config(config)
.database(database)
.build()?;
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 Selfwhere
M: Middleware + 'static,
pub fn use_middleware<M>(&mut self, middleware: M) -> &mut Selfwhere
M: Middleware + 'static,
Add middleware to the server
§Example
use elif_http::{Server, HttpConfig};
use elif_core::{Container, container::test_implementations::*};
use std::sync::Arc;
let config = Arc::new(create_test_config());
let database = Arc::new(TestDatabase::new()) as Arc<dyn elif_core::DatabaseConnection>;
let container = Container::builder()
.config(config)
.database(database)
.build()?;
let mut server = Server::new(container, HttpConfig::default())?;
server.use_middleware(LoggingMiddleware::default());Sourcepub async fn listen_on(self, addr: SocketAddr) -> HttpResult<()>
pub async fn listen_on(self, addr: SocketAddr) -> HttpResult<()>
Start the server on the specified SocketAddr
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