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()
    .tcp(std::net::TcpListener::bind("localhost:4433").unwrap())
    .config(rustls::ServerConfig::new(rustls::NoClientAuth::new()))
    .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 cert 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 config(self, config: ServerConfig) -> 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.

Source

pub fn tls_acceptor(self, acceptor: Arc<dyn CustomTlsAcceptor>) -> Self

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.

Source

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

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.

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 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>

§

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>

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

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