31 lines
875 B
Rust
31 lines
875 B
Rust
use crate::{Request, RequestParser};
|
|
use mio::{net::TcpStream, Token};
|
|
use std::net::SocketAddr;
|
|
|
|
pub struct Connection<Req: Request> {
|
|
pub stream: TcpStream,
|
|
pub state: ConnectionState<Req>,
|
|
pub client_address: SocketAddr,
|
|
pub token: Token,
|
|
}
|
|
|
|
impl<Req: Request> Connection<Req> {
|
|
pub fn new(stream: TcpStream, client_address: SocketAddr, token: Token) -> Self {
|
|
Self {
|
|
stream,
|
|
client_address,
|
|
token,
|
|
state: ConnectionState::Incoming(Req::Parser::new(client_address)),
|
|
}
|
|
}
|
|
}
|
|
|
|
pub enum ConnectionState<Req: Request> {
|
|
/// The request has not yet been fully received.
|
|
Incoming(Req::Parser),
|
|
/// The request is valid and needs to be processed.
|
|
Processing(Req),
|
|
/// A response has been generated for the request and is waiting to be sent.
|
|
Outgoing(Req::Response),
|
|
}
|