TlsListenerBuilder

Struct TlsListenerBuilder 

Source
pub struct TlsListenerBuilder<State> { /* private fields */ }
Expand description

§A builder for TlsListeners

This is created with a call to TlsListener::build. This also can be passed directly to tide::Server::listen, skipping the TlsListenerBuilder::finish call.

§Examples

let listener = TlsListener::<()>::build()
    .addrs("localhost:4433")
    .cert("./tls/localhost-4433.cert")
    .key("./tls/localhost-4433.key")
    .finish();
let listener = TlsListener::<()>::build()
    .addrs("localhost:4433")
    .cert("./tls/localhost-4433.cert")
    .key("./tls/localhost-4433.key")
    .tcp_ttl(60)
    .tcp_nodelay(true)
    .finish();

Implementations§

Source§

impl<State> TlsListenerBuilder<State>

Source

pub fn key(self, path: impl AsRef<Path>) -> Self

Provide a path to a key file, in either pkcs8 or rsa formats. This is mutually exclusive with providing a server config with [TlsListenerBuilder::config], but must be used in conjunction with TlsListenerBuilder::cert

Examples found in repository?
examples/hello_tls.rs (line 24)
13fn main() -> std::io::Result<()> {
14    async_std::task::block_on(async {
15        let mut app = tide::new();
16        app.at("*").all(endpoint);
17        app.at("/").all(endpoint);
18
19        if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20            app.listen(
21                TlsListener::build()
22                    .addrs("localhost:4433")
23                    .cert(cert)
24                    .key(key),
25            )
26            .await?;
27        } else {
28            eprintln!(
29                "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36            );
37        }
38
39        Ok(())
40    })
41}
Source

pub fn cert(self, path: impl AsRef<Path>) -> Self

Provide a path to a certificate chain file. This is mutually exclusive with providing a server config with [TlsListenerBuilder::config], but must be used in conjunction with TlsListenerBuilder::key

Examples found in repository?
examples/hello_tls.rs (line 23)
13fn main() -> std::io::Result<()> {
14    async_std::task::block_on(async {
15        let mut app = tide::new();
16        app.at("*").all(endpoint);
17        app.at("/").all(endpoint);
18
19        if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20            app.listen(
21                TlsListener::build()
22                    .addrs("localhost:4433")
23                    .cert(cert)
24                    .key(key),
25            )
26            .await?;
27        } else {
28            eprintln!(
29                "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36            );
37        }
38
39        Ok(())
40    })
41}
Source

pub fn tcp(self, tcp: impl Into<TcpListener>) -> Self

Provide a prebuilt rustls::ServerConfig with any options. This is mutually exclusive with both TlsListenerBuilder::key and TlsListenerBuilder::cert, but provides the opportunity for more configuration choices. Provides a custom acceptor for TLS connections. This is mutually exclusive with any of TlsListenerBuilder::key, TlsListenerBuilder::cert, and [TlsListenerBuilder::config], but gives total control over accepting TLS connections, including multiplexing other streams or ALPN negotiations on the same TLS connection that tide should ignore. Provides a bound tcp listener (either async-std or std) to build this tls listener on. This is mutually exclusive with TlsListenerBuilder::addrs, but one of them is mandatory.

Source

pub fn addrs(self, addrs: impl ToSocketAddrs) -> Self

Provides a std::net::ToSocketAddrs specification for this tls listener. This is mutually exclusive with TlsListenerBuilder::tcp but one of them is mandatory.

If addr yields multiple addresses, bind will be attempted with each of the addresses until one succeeds and returns the listener. If none of the addresses succeed in creating a listener, the error returned from the last attempt (the last address) is returned.

Examples found in repository?
examples/hello_tls.rs (line 22)
13fn main() -> std::io::Result<()> {
14    async_std::task::block_on(async {
15        let mut app = tide::new();
16        app.at("*").all(endpoint);
17        app.at("/").all(endpoint);
18
19        if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20            app.listen(
21                TlsListener::build()
22                    .addrs("localhost:4433")
23                    .cert(cert)
24                    .key(key),
25            )
26            .await?;
27        } else {
28            eprintln!(
29                "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36            );
37        }
38
39        Ok(())
40    })
41}
Source

pub fn tcp_nodelay(self, nodelay: bool) -> Self

Provides a TCP_NODELAY option for this tls listener.

Source

pub fn tcp_ttl(self, ttl: u32) -> Self

Provides a TTL option for this tls listener, in seconds.

Source

pub fn finish(self) -> Result<TlsListener<State>>

finishes building a TlsListener from this TlsListenerBuilder.

§Errors

this will return an error unless all of the following conditions are met:

Trait Implementations§

Source§

impl<State> Debug for TlsListenerBuilder<State>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<State> Default for TlsListenerBuilder<State>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<State: Clone + Send + Sync + 'static> ToListener<State> for TlsListenerBuilder<State>

Source§

type Listener = TlsListener<State>

What listener are we converting into?
Source§

fn to_listener(self) -> Result<Self::Listener>

Transform self into a Listener. Unless self is already bound/connected to the underlying io, converting to a listener does not initiate a connection. An Err return indicates an unsuccessful conversion to a listener, not an unsuccessful bind attempt.

Auto Trait Implementations§

§

impl<State> Freeze for TlsListenerBuilder<State>

§

impl<State> RefUnwindSafe for TlsListenerBuilder<State>
where State: RefUnwindSafe,

§

impl<State> Send for TlsListenerBuilder<State>
where State: Send,

§

impl<State> Sync for TlsListenerBuilder<State>
where State: Sync,

§

impl<State> Unpin for TlsListenerBuilder<State>
where State: Unpin,

§

impl<State> UnwindSafe for TlsListenerBuilder<State>
where State: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ErasedDestructor for T
where T: 'static,