1
0
mirror of https://github.com/fafhrd91/actix-net synced 2024-12-18 19:03:11 +01:00
actix-net/actix-server-config/src/lib.rs

133 lines
2.6 KiB
Rust
Raw Normal View History

2019-03-09 16:27:56 +01:00
use std::cell::Cell;
2019-03-11 20:46:12 +01:00
use std::fmt;
2019-03-09 16:27:56 +01:00
use std::net::SocketAddr;
use std::rc::Rc;
#[derive(Debug, Clone)]
pub struct ServerConfig {
addr: SocketAddr,
secure: Rc<Cell<bool>>,
}
impl ServerConfig {
pub fn new(addr: SocketAddr) -> Self {
ServerConfig {
addr,
secure: Rc::new(Cell::new(false)),
}
}
/// Returns the address of the local half of this TCP server socket
pub fn local_addr(&self) -> SocketAddr {
self.addr
}
/// Returns true if connection is secure (tls enabled)
pub fn secure(&self) -> bool {
self.secure.as_ref().get()
}
/// Set secure flag
pub fn set_secure(&self) {
self.secure.as_ref().set(true)
}
}
2019-03-11 20:01:55 +01:00
2019-03-11 21:37:30 +01:00
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
2019-03-11 20:01:55 +01:00
pub enum Protocol {
Unknown,
Http10,
Http11,
Http2,
Proto1,
Proto2,
Proto3,
Proto4,
Proto5,
Proto6,
}
pub struct Io<T, P = ()> {
io: T,
proto: Protocol,
params: P,
}
impl<T> Io<T, ()> {
pub fn new(io: T) -> Self {
Self {
io,
proto: Protocol::Unknown,
params: (),
}
}
}
impl<T, P> Io<T, P> {
2019-03-11 20:46:12 +01:00
/// Reconstruct from a parts.
2019-03-11 20:01:55 +01:00
pub fn from_parts(io: T, params: P, proto: Protocol) -> Self {
Self { io, params, proto }
}
2019-03-11 20:46:12 +01:00
/// Deconstruct into a parts.
2019-03-11 20:01:55 +01:00
pub fn into_parts(self) -> (T, P, Protocol) {
(self.io, self.params, self.proto)
}
2019-03-11 20:46:12 +01:00
/// Returns a shared reference to the underlying stream.
pub fn get_ref(&self) -> &T {
2019-03-11 20:01:55 +01:00
&self.io
}
2019-03-11 20:46:12 +01:00
/// Returns a mutable reference to the underlying stream.
pub fn get_mut(&mut self) -> &mut T {
2019-03-11 20:01:55 +01:00
&mut self.io
}
2019-03-11 20:46:12 +01:00
/// Get selected protocol
2019-03-11 20:01:55 +01:00
pub fn protocol(&self) -> Protocol {
self.proto
}
/// Return new Io object with new parameter.
pub fn set<U>(self, params: U) -> Io<T, U> {
Io {
io: self.io,
proto: self.proto,
params: params,
}
}
2019-03-11 20:01:55 +01:00
/// Maps an Io<_, P> to Io<_, U> by applying a function to a contained value.
pub fn map<U, F>(self, op: F) -> Io<T, U>
where
F: FnOnce(P) -> U,
{
Io {
io: self.io,
proto: self.proto,
params: op(self.params),
}
}
}
2019-03-11 20:46:12 +01:00
2019-03-12 21:12:22 +01:00
impl<T, P> std::ops::Deref for Io<T, P> {
type Target = T;
fn deref(&self) -> &T {
&self.io
}
}
impl<T, P> std::ops::DerefMut for Io<T, P> {
fn deref_mut(&mut self) -> &mut T {
&mut self.io
}
}
2019-03-11 20:46:12 +01:00
impl<T: fmt::Debug, P> fmt::Debug for Io<T, P> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Io {{{:?}}}", self.io)
}
}