diff --git a/actix_ws/all.html b/actix_ws/all.html index 2110a037d..514d1ea3a 100644 --- a/actix_ws/all.html +++ b/actix_ws/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Functions

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Functions

\ No newline at end of file diff --git a/actix_ws/enum.Item.html b/actix_ws/enum.Item.html new file mode 100644 index 000000000..ad8beb297 --- /dev/null +++ b/actix_ws/enum.Item.html @@ -0,0 +1,25 @@ +Item in actix_ws - Rust

Enum actix_ws::Item

pub enum Item {
+    FirstText(Bytes),
+    FirstBinary(Bytes),
+    Continue(Bytes),
+    Last(Bytes),
+}
Expand description

A WebSocket continuation item.

+

Variants§

§

FirstText(Bytes)

§

FirstBinary(Bytes)

§

Continue(Bytes)

§

Last(Bytes)

Trait Implementations§

§

impl Debug for Item

§

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

Formats the value using the given formatter. Read more
§

impl PartialEq for Item

§

fn eq(&self, other: &Item) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
§

impl Eq for Item

§

impl StructuralPartialEq for Item

Auto Trait Implementations§

§

impl !Freeze for Item

§

impl RefUnwindSafe for Item

§

impl Send for Item

§

impl Sync for Item

§

impl Unpin for Item

§

impl UnwindSafe for Item

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.

+
§

impl<T> Instrument for T

§

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

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

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

§

type Output = T

Should always be Self
source§

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

§

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

§

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

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/actix_ws/enum.Message.html b/actix_ws/enum.Message.html index c99a2dc63..75dab00a3 100644 --- a/actix_ws/enum.Message.html +++ b/actix_ws/enum.Message.html @@ -1,7 +1,7 @@ Message in actix_ws - Rust

Enum actix_ws::Message

pub enum Message {
     Text(ByteString),
     Binary(Bytes),
-    Continuation(Item),
+    Continuation(Item),
     Ping(Bytes),
     Pong(Bytes),
     Close(Option<CloseReason>),
@@ -9,7 +9,7 @@
 }
Expand description

A WebSocket message.

Variants§

§

Text(ByteString)

Text message.

§

Binary(Bytes)

Binary message.

-
§

Continuation(Item)

Continuation.

+
§

Continuation(Item)

Continuation.

§

Ping(Bytes)

Ping message.

§

Pong(Bytes)

Pong message.

§

Close(Option<CloseReason>)

Close message with optional reason.

diff --git a/actix_ws/index.html b/actix_ws/index.html index dbc613504..6cb9eada3 100644 --- a/actix_ws/index.html +++ b/actix_ws/index.html @@ -1,3 +1,3 @@ actix_ws - Rust

Crate actix_ws

source ·
Expand description

WebSockets for Actix Web, without actors.

For usage, see documentation on handle().

-

Structs§

  • Reason for closing the connection
  • The error representing a closed websocket session
  • A stream of Messages from a websocket client
  • A handle into the websocket session.
  • A response body for Websocket HTTP Requests

Enums§

  • Status code used to indicate why an endpoint is closing the WebSocket connection.
  • A WebSocket message.
  • WebSocket protocol errors.

Functions§

  • Begin handling websocket traffic
\ No newline at end of file +

Structs§

  • Reason for closing the connection
  • The error representing a closed websocket session
  • A stream of Messages from a websocket client
  • A handle into the websocket session.
  • A response body for Websocket HTTP Requests

Enums§

  • Status code used to indicate why an endpoint is closing the WebSocket connection.
  • A WebSocket continuation item.
  • A WebSocket message.
  • WebSocket protocol errors.

Functions§

  • Begin handling websocket traffic
\ No newline at end of file diff --git a/actix_ws/sidebar-items.js b/actix_ws/sidebar-items.js index f8ddef9d4..02f1472dc 100644 --- a/actix_ws/sidebar-items.js +++ b/actix_ws/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["CloseCode","Message","ProtocolError"],"fn":["handle"],"struct":["CloseReason","Closed","MessageStream","Session","StreamingBody"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["CloseCode","Item","Message","ProtocolError"],"fn":["handle"],"struct":["CloseReason","Closed","MessageStream","Session","StreamingBody"]}; \ No newline at end of file diff --git a/actix_ws/struct.MessageStream.html b/actix_ws/struct.MessageStream.html index bec19c2c3..c697b0f1e 100644 --- a/actix_ws/struct.MessageStream.html +++ b/actix_ws/struct.MessageStream.html @@ -1,11 +1,11 @@ MessageStream in actix_ws - Rust

Struct actix_ws::MessageStream

source ·
pub struct MessageStream { /* private fields */ }
Expand description

A stream of Messages from a websocket client

Messages can be accessed via the stream’s .next() method

-

Implementations§

source§

impl MessageStream

source

pub async fn recv(&mut self) -> Option<Result<Message, ProtocolError>>

Wait for the next item from the message stream

+

Implementations§

source§

impl MessageStream

source

pub async fn recv(&mut self) -> Option<Result<Message, ProtocolError>>

Wait for the next item from the message stream

-
while let Some(Ok(msg)) = stream.recv().await {
+
while let Some(Ok(msg)) = stream.recv().await {
     // handle message
 }
-

Trait Implementations§

source§

impl Stream for MessageStream

§

type Item = Result<Message, ProtocolError>

Values yielded by the stream.
source§

fn poll_next( +

Trait Implementations§

source§

impl Stream for MessageStream

§

type Item = Result<Message, ProtocolError>

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the diff --git a/actix_ws/struct.Session.html b/actix_ws/struct.Session.html index 29694ef92..8d193aa2b 100644 --- a/actix_ws/struct.Session.html +++ b/actix_ws/struct.Session.html @@ -1,34 +1,46 @@ -Session in actix_ws - Rust

Struct actix_ws::Session

source ·
pub struct Session { /* private fields */ }
Expand description

A handle into the websocket session.

+Session in actix_ws - Rust

Struct actix_ws::Session

source ·
pub struct Session { /* private fields */ }
Expand description

A handle into the websocket session.

This type can be used to send messages into the websocket.

-

Implementations§

source§

impl Session

source

pub async fn text(&mut self, msg: impl Into<ByteString>) -> Result<(), Closed>

Send text into the websocket

+

Implementations§

source§

impl Session

source

pub async fn text(&mut self, msg: impl Into<ByteString>) -> Result<(), Closed>

Send text into the websocket

-
if session.text("Some text").await.is_err() {
+
if session.text("Some text").await.is_err() {
     // session closed
 }
-
source

pub async fn binary(&mut self, msg: impl Into<Bytes>) -> Result<(), Closed>

Send raw bytes into the websocket

+
source

pub async fn binary(&mut self, msg: impl Into<Bytes>) -> Result<(), Closed>

Send raw bytes into the websocket

-
if session.binary(b"some bytes").await.is_err() {
+
if session.binary(&b"some bytes"[..]).await.is_err() {
     // session closed
 }
-
source

pub async fn ping(&mut self, msg: &[u8]) -> Result<(), Closed>

Ping the client

+
source

pub async fn ping(&mut self, msg: &[u8]) -> Result<(), Closed>

Ping the client

For many applications, it will be important to send regular pings to keep track of if the client has disconnected

-
if session.ping(b"").await.is_err() {
+
if session.ping(b"").await.is_err() {
     // session is closed
 }
-
source

pub async fn pong(&mut self, msg: &[u8]) -> Result<(), Closed>

Pong the client

+
source

pub async fn pong(&mut self, msg: &[u8]) -> Result<(), Closed>

Pong the client

-
match msg {
+
match msg {
     Message::Ping(bytes) => {
         let _ = session.pong(&bytes).await;
     }
     _ => (),
 }
-
source

pub async fn close(self, reason: Option<CloseReason>) -> Result<(), Closed>

Send a close message, and consume the session

+
source

pub async fn continuation(&mut self, msg: Item) -> Result<(), Closed>

Manually control sending continuations

+

Be wary of this method. Continuations represent multiple frames that, when combined, are +presented as a single message. They are useful when the entire contents of a message are +not avilable all at once. However, continuations MUST NOT be interrupted by other Text or +Binary messages. Control messages such as Ping, Pong, or Close are allowed to interrupt a +continuation.

+

Continuations must be initialized with a First variant, and must be terminated by a Last +variant, with only Continue variants sent in between.

+ +
session.continuation(Item::FirstText("Hello".into())).await?;
+session.continuation(Item::Continue(b", World"[..].into())).await?;
+session.continuation(Item::Last(b"!"[..].into())).await?;
+
source

pub async fn close(self, reason: Option<CloseReason>) -> Result<(), Closed>

Send a close message, and consume the session

All clones will return Err(Closed) if used after this call

-
session.close(None).await
+
session.close(None).await

Trait Implementations§

source§

impl Clone for Session

source§

fn clone(&self) -> Session

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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 diff --git a/actix_ws/struct.StreamingBody.html b/actix_ws/struct.StreamingBody.html index 5692fd911..31d09b032 100644 --- a/actix_ws/struct.StreamingBody.html +++ b/actix_ws/struct.StreamingBody.html @@ -1,5 +1,5 @@ StreamingBody in actix_ws - Rust

Struct actix_ws::StreamingBody

source ·
pub struct StreamingBody { /* private fields */ }
Expand description

A response body for Websocket HTTP Requests

-

Trait Implementations§

source§

impl Stream for StreamingBody

§

type Item = Result<Bytes, Error>

Values yielded by the stream.
source§

fn poll_next( +

Trait Implementations§

source§

impl Stream for StreamingBody

§

type Item = Result<Bytes, Error>

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the diff --git a/help.html b/help.html index 57907bb7f..623dd794e 100644 --- a/help.html +++ b/help.html @@ -1 +1 @@ -Help

Rustdoc help

Back
\ No newline at end of file +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/search-index.js b/search-index.js index f6fa96012..62436b46d 100644 --- a/search-index.js +++ b/search-index.js @@ -6,7 +6,7 @@ var searchIndex = new Map(JSON.parse('[\ ["actix_session",{"t":"PPPFKFFFGPNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNFPGPPFPPGFPGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFPGPPPFFGPPFKGNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNMNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNMNNNNNNNNN","n":["Changed","Purged","Renewed","Session","SessionExt","SessionGetError","SessionInsertError","SessionMiddleware","SessionStatus","Unchanged","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","builder","clear","clone","clone","clone","clone_into","clone_into","clone_into","config","default","entries","eq","error_response","error_response","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_request","get","get_session","insert","into","into","into","into","into","new","new_transform","purge","remove","remove_as","renew","source","source","status","storage","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","BrowserSession","BrowserSession","CookieContentSecurity","OnEveryRequest","OnStateChanges","PersistentSession","PersistentSession","Private","SessionLifecycle","SessionMiddlewareBuilder","Signed","TtlExtensionPolicy","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cookie_content_security","cookie_domain","cookie_http_only","cookie_name","cookie_path","cookie_same_site","cookie_secure","default","default","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","into","into","session_lifecycle","session_ttl","session_ttl_extension_policy","state_ttl","state_ttl_extension_policy","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","CookieSessionStore","Deserialization","LoadError","Other","Other","Other","RedisSessionStore","RedisSessionStoreBuilder","SaveError","Serialization","Serialization","SessionKey","SessionStore","UpdateError","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","builder","cache_keygen","clone","clone_into","default","delete","delete","delete","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into","into","load","load","load","new","save","save","save","source","source","source","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update","update","update","update_ttl","update_ttl","update_ttl","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"actix_session"],[90,"actix_session::config"],[187,"actix_session::storage"],[296,"cookie::secure::key"],[297,"actix_session::storage::interface"],[298,"actix_session::session"],[299,"actix_session::middleware"],[300,"core::clone"],[301,"alloc::string"],[302,"std::collections::hash::map"],[303,"core::cell"],[304,"actix_http::body::boxed"],[305,"actix_web::response::response"],[306,"core::fmt"],[307,"anyhow"],[308,"actix_web::request"],[309,"actix_http::payload"],[310,"core::option"],[311,"core::result"],[312,"serde::de"],[313,"actix_session::session_ext"],[314,"core::convert"],[315,"serde::ser"],[316,"actix_http::body::message_body"],[317,"actix_web::service"],[318,"actix_web::error::error"],[319,"actix_service"],[320,"core::error"],[321,"core::any"],[322,"cookie::draft"],[323,"time::duration"],[324,"actix_session::storage::session_key"],[325,"actix_session::storage::redis_rs"],[326,"core::ops::function"],[327,"core::marker"],[328,"actix_session::storage::cookie"],[329,"core::future::future"]],"i":[10,10,10,0,0,0,0,0,0,10,8,6,10,15,18,8,6,10,15,18,8,6,8,6,10,8,6,10,0,10,6,10,15,18,10,15,15,18,18,8,6,10,15,15,18,18,6,6,28,6,8,6,10,15,18,8,8,6,6,6,6,15,18,6,0,8,6,10,15,18,8,6,10,15,18,8,6,10,15,18,8,6,10,15,18,8,6,10,15,18,0,40,0,43,43,0,40,44,0,0,44,0,4,40,41,42,43,44,4,40,41,42,43,44,4,40,41,42,43,44,40,41,42,43,44,4,4,4,4,4,4,4,41,42,40,41,42,43,44,4,40,40,40,41,42,43,44,4,40,41,42,43,44,4,42,42,41,41,40,41,42,43,44,4,40,41,42,43,44,4,40,41,42,43,44,4,40,41,42,43,44,4,40,41,42,43,44,0,56,0,56,57,58,0,0,0,57,58,0,0,0,47,48,56,57,58,47,54,49,48,56,57,58,47,54,49,48,49,48,49,49,54,5,54,49,47,56,56,57,57,58,58,47,48,56,57,58,47,54,49,48,56,57,58,47,54,49,5,54,49,49,5,54,49,56,57,58,49,56,57,58,48,56,57,58,47,47,54,49,48,56,57,58,47,54,49,48,56,57,58,47,54,49,5,54,49,5,54,49,48,56,57,58,47,54,49],"f":"``````````{{{b{c}}}{{b{e}}}{}{}}0000{{{b{dc}}}{{b{de}}}{}{}}0000{{cf}{{h{c}}}j}{{{b{l}}}n}{{{b{{A`{c}}}}}{{A`{c}}}{Abj}}{{{b{l}}}l}{{{b{Ad}}}Ad}{{{b{c}}{b{de}}}n{}{}}00`{{}Ad}{{{b{l}}}{{Aj{{Ah{AfAf}}}}}}{{{b{Ad}}{b{Ad}}}Al}{{{b{An}}}{{Bb{B`}}}}{{{b{Bd}}}{{Bb{B`}}}}{{{b{Ad}}{b{dBf}}}Bh}{{{b{An}}{b{dBf}}}Bh}0{{{b{Bd}}{b{dBf}}}Bh}0{cc{}}00{BjAn}11{BjBd}{{{b{Bl}}{b{dBn}}}c{}}{{{b{l}}{b{C`}}}{{Cd{{Cb{c}}An}}}Cf}{{{b{Ch}}}l}{{{b{l}}ce}{{Cd{nBd}}}{{Cj{Af}}}Cl}{ce{}{}}0000{{cf}{{A`{c}}}j}{{{b{{A`{c}}}}g}ijCn{{Dj{D`}{{Db{{Dd{e}}}}{Df{Dh}}}}}{}}{{{b{l}}}n}{{{b{l}}{b{C`}}}{{Cb{Af}}}}{{{b{l}}{b{C`}}}{{Cb{{Cd{cAf}}}}}Cf}2{{{b{An}}}{{Cb{{b{Dl}}}}}}{{{b{Bd}}}{{Cb{{b{Dl}}}}}}{{{b{l}}}Ad}`{{{b{c}}}e{}{}}00{{{b{c}}}Af{}}0{c{{Cd{e}}}{}{}}000000000{{{b{c}}}Dn{}}0000<<<<<````````````{{{b{c}}}{{b{e}}}{}{}}00000{{{b{dc}}}{{b{de}}}{}{}}00000{{{h{c}}}{{A`{c}}}j}{{{b{E`}}}E`}{{{b{Eb}}}Eb}{{{b{Ed}}}Ed}{{{b{Ef}}}Ef}{{{b{Eh}}}Eh}{{{b{c}}{b{de}}}n{}{}}0000{{{h{c}}Eh}{{h{c}}}j}{{{h{c}}{Cb{Af}}}{{h{c}}}j}{{{h{c}}Al}{{h{c}}}j}{{{h{c}}Af}{{h{c}}}j}0{{{h{c}}Ej}{{h{c}}}j}2{{}Eb}{{}Ed}{{{b{E`}}{b{dBf}}}Bh}{{{b{Eb}}{b{dBf}}}Bh}{{{b{Ed}}{b{dBf}}}Bh}{{{b{Ef}}{b{dBf}}}Bh}{{{b{Eh}}{b{dBf}}}Bh}{cc{}}{EdE`}{EbE`}22222{ce{}{}}00000{{{h{c}}e}{{h{c}}}j{{Cj{E`}}}}{{EdEl}Ed}{{EdEf}Ed}{{EbEl}Eb}{{EbEf}Eb}{{{b{c}}}e{}{}}0000{c{{Cd{e}}}{}{}}00000000000{{{b{c}}}Dn{}}00000888888``````````````{{{b{En}}}{{b{C`}}}}{{{b{c}}}{{b{e}}}{}{}}000000{{{b{dc}}}{{b{de}}}{}{}}000000{F`{{Cd{FbBj}}}}{cF`{{Cj{Af}}}}{{F`c}F`{{Ff{{b{C`}}}{{Fd{Af}}}}FhFj}}{{{b{Fb}}}Fb}{{{b{c}}{b{de}}}n{}{}}{{}Fl}{{{b{j}}{b{En}}}{{`{{Fn{}{{Fd{{Cd{nBj}}}}}}}}}}{{{b{Fl}}{b{En}}}{{Cd{nBj}}}}{{{b{Fb}}{b{En}}}{{Cd{nBj}}}}{{{b{En}}{b{En}}}Al}{{{b{G`}}{b{dBf}}}Bh}0{{{b{Gb}}{b{dBf}}}Bh}0{{{b{Gd}}{b{dBf}}}Bh}0{{{b{En}}{b{dBf}}}Bh}{cc{}}000000{ce{}{}}000000{{{b{j}}{b{En}}}{{`{{Fn{}{{Fd{{Cd{{Cb{{Ah{AfAf}}}}G`}}}}}}}}}}{{{b{Fl}}{b{En}}}{{Cd{{Cb{{Ah{AfAf}}}}G`}}}}{{{b{Fb}}{b{En}}}{{Cd{{Cb{{Ah{AfAf}}}}G`}}}}{c{{Cd{FbBj}}}{{Cj{Af}}}}{{{b{j}}{Ah{AfAf}}{b{El}}}{{`{{Fn{}{{Fd{{Cd{EnGb}}}}}}}}}}{{{b{Fl}}{Ah{AfAf}}{b{El}}}{{Cd{EnGb}}}}{{{b{Fb}}{Ah{AfAf}}{b{El}}}{{Cd{EnGb}}}}{{{b{G`}}}{{Cb{{b{Dl}}}}}}{{{b{Gb}}}{{Cb{{b{Dl}}}}}}{{{b{Gd}}}{{Cb{{b{Dl}}}}}}{{{b{c}}}e{}{}}{{{b{c}}}Af{}}00{c{{Cd{e}}}{}{}}000{Af{{Cd{Enc}}}{}}1111111111{{{b{c}}}Dn{}}000000{{{b{j}}En{Ah{AfAf}}{b{El}}}{{`{{Fn{}{{Fd{{Cd{EnGd}}}}}}}}}}{{{b{Fl}}En{Ah{AfAf}}{b{El}}}{{Cd{EnGd}}}}{{{b{Fb}}En{Ah{AfAf}}{b{El}}}{{Cd{EnGd}}}}{{{b{j}}{b{En}}{b{El}}}{{`{{Fn{}{{Fd{{Cd{nBj}}}}}}}}}}{{{b{Fl}}{b{En}}{b{El}}}{{Cd{nBj}}}}{{{b{Fb}}{b{En}}{b{El}}}{{Cd{nBj}}}}{ce{}{}}000000","D":"Mj","p":[[1,"reference"],[0,"mut"],[5,"Key",296],[5,"SessionMiddlewareBuilder",90],[10,"SessionStore",187,297],[5,"Session",0,298],[1,"unit"],[5,"SessionMiddleware",0,299],[10,"Clone",300],[6,"SessionStatus",0,298],[5,"String",301],[5,"HashMap",302],[5,"Ref",303],[1,"bool"],[5,"SessionGetError",0,298],[5,"BoxBody",304],[5,"HttpResponse",305],[5,"SessionInsertError",0,298],[5,"Formatter",306],[8,"Result",306],[5,"Error",307],[5,"HttpRequest",308],[6,"Payload",309],[1,"str"],[6,"Option",310],[6,"Result",311],[10,"DeserializeOwned",312],[10,"SessionExt",0,313],[10,"Into",314],[10,"Serialize",315],[10,"MessageBody",316],[5,"ServiceRequest",317],[17,"Response"],[5,"ServiceResponse",317],[17,"Error"],[5,"Error",318],[10,"Service",319],[10,"Error",320],[5,"TypeId",321],[6,"SessionLifecycle",90],[5,"BrowserSession",90],[5,"PersistentSession",90],[6,"TtlExtensionPolicy",90],[6,"CookieContentSecurity",90],[6,"SameSite",322],[5,"Duration",323],[5,"SessionKey",187,324],[5,"RedisSessionStoreBuilder",187,325],[5,"RedisSessionStore",187,325],[17,"Output"],[10,"Fn",326],[10,"Send",327],[10,"Sync",327],[5,"CookieSessionStore",187,328],[10,"Future",329],[6,"LoadError",187,297],[6,"SaveError",187,297],[6,"UpdateError",187,297]],"r":[[3,298],[4,313],[5,298],[6,298],[7,299],[8,298],[187,328],[189,297],[193,325],[194,325],[195,297],[198,324],[199,297],[200,297]],"b":[[35,"impl-Display-for-SessionGetError"],[36,"impl-Debug-for-SessionGetError"],[37,"impl-Display-for-SessionInsertError"],[38,"impl-Debug-for-SessionInsertError"],[140,"impl-From%3CPersistentSession%3E-for-SessionLifecycle"],[141,"impl-From%3CBrowserSession%3E-for-SessionLifecycle"],[226,"impl-Debug-for-LoadError"],[227,"impl-Display-for-LoadError"],[228,"impl-Display-for-SaveError"],[229,"impl-Debug-for-SaveError"],[230,"impl-Display-for-UpdateError"],[231,"impl-Debug-for-UpdateError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAALsAFQALAAkAFwAFAB4AAAAgAAcAKwAAAC4AAQA5AAAAPgABAEIAGABnAAsAdAAJAIUABgCNAAEAnwAcAMoADgDcAAIA4AAJAPkAAQD9AB4AHQEBACABCAA=","a":{"expires":[154],"max age":[154],"max_age":[154]}}],\ ["actix_settings",{"t":"FFKGFPPPPPPPPPGPPPGPPPPGGPGFGPKPPPPPPIGFPOOOOMONNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNOOOOONNMNNNNNNNNNOOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOO","n":["ActixSettings","Address","ApplySettings","Backlog","BasicSettings","Default","Default","Default","Default","Default","Default","Development","Disabled","EnvVarError","Error","FileExists","InvalidValue","IoError","KeepAlive","Manual","Manual","Manual","Manual","MaxConnectionRate","MaxConnections","Milliseconds","Mode","NoSettings","NumWorkers","Os","Parse","ParseAddressError","ParseBoolError","ParseIntError","Production","Seconds","Seconds","Settings","Timeout","Tls","TomlError","actix","actix","application","application","apply_settings","backlog","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","certificate","client_shutdown","client_timeout","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","enable_compression","enable_log","enabled","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_default_template","from_template","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","host","hosts","into","into","into","into","into","into","into","into","into","into","into","into","into","keep_alive","max_connection_rate","max_connections","mode","num_workers","override_field","override_field_with_env_var","parse","parse","parse","parse","parse","parse","parse","parse","parse","parse_toml","port","private_key","shutdown_timeout","source","tls","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write_toml_file","column","expected","file","got","line"],"q":[[0,"actix_settings"],[312,"actix_settings::Error"],[317,"actix_settings::settings::address"],[318,"actix_settings::settings::backlog"],[319,"actix_settings::settings::keep_alive"],[320,"actix_settings::settings::max_connection_rate"],[321,"actix_settings::settings::max_connections"],[322,"actix_settings::settings::mode"],[323,"actix_settings::settings::num_workers"],[324,"actix_settings::settings::timeout"],[325,"actix_settings::settings::tls"],[326,"actix_settings::settings"],[327,"core::clone"],[328,"core::result"],[329,"serde::de"],[330,"core::cmp"],[331,"actix_settings::error"],[332,"core::fmt"],[333,"std::io::error"],[334,"core::num::error"],[335,"core::str::error"],[336,"std::env"],[337,"toml::de"],[338,"core::hash"],[339,"actix_settings::parse"],[340,"core::convert"],[341,"std::path"],[342,"core::error"],[343,"core::option"],[344,"alloc::string"],[345,"core::any"]],"i":[0,0,0,0,0,5,6,7,8,10,11,9,6,23,0,23,23,23,0,5,7,8,10,0,0,11,0,0,0,6,0,23,23,23,9,6,11,0,0,0,23,43,14,43,14,1,13,23,4,5,6,7,8,9,10,11,12,13,14,16,23,4,5,6,7,8,9,10,11,12,13,14,16,12,13,13,4,5,6,7,8,9,10,11,12,13,14,16,4,5,6,7,8,9,10,11,12,13,14,16,4,5,6,7,8,9,10,11,12,13,14,16,13,13,12,4,5,6,7,8,9,10,11,12,13,14,16,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,16,16,16,23,23,4,5,6,7,8,9,10,11,12,13,14,16,23,23,23,23,23,23,4,5,6,7,8,9,10,11,12,13,14,16,14,14,4,5,6,7,8,9,10,11,12,13,14,16,4,13,23,4,5,6,7,8,9,10,11,12,13,14,16,13,13,13,13,13,14,14,36,4,5,6,7,8,9,10,11,14,4,12,13,23,13,4,5,6,7,8,9,10,11,12,13,14,16,23,23,4,5,6,7,8,9,10,11,12,13,14,16,23,4,5,6,7,8,9,10,11,12,13,14,16,23,4,5,6,7,8,9,10,11,12,13,14,16,23,4,5,6,7,8,9,10,11,12,13,14,16,14,44,44,44,44,44],"f":"`````````````````````````````````````````````{{b{d{c}}}b{}}`{{{d{c}}}{{d{e}}}{}{}}000000000000{{{d{fc}}}{{d{fe}}}{}{}}000000000000```{{{d{h}}}h}{{{d{j}}}j}{{{d{l}}}l}{{{d{n}}}n}{{{d{A`}}}A`}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{Af}}}Af}{{{d{Ah}}}Ah}{{{d{Aj}}}Aj}{{{d{{Al{c}}}}}{{Al{c}}}An}{{{d{B`}}}B`}{{{d{c}}{d{fe}}}Bb{}{}}00000000000{c{{Bd{h}}}Bf}{c{{Bd{j}}}Bf}{c{{Bd{l}}}Bf}{c{{Bd{n}}}Bf}{c{{Bd{A`}}}Bf}{c{{Bd{Ab}}}Bf}{c{{Bd{Ad}}}Bf}{c{{Bd{Af}}}Bf}{c{{Bd{Ah}}}Bf}{c{{Bd{Aj}}}Bf}{c{{Bd{{Al{e}}}}}BfBh}{c{{Bd{B`}}}Bf}```{{{d{h}}{d{h}}}Bj}{{{d{j}}{d{j}}}Bj}{{{d{l}}{d{l}}}Bj}{{{d{n}}{d{n}}}Bj}{{{d{A`}}{d{A`}}}Bj}{{{d{Ab}}{d{Ab}}}Bj}{{{d{Ad}}{d{Ad}}}Bj}{{{d{Af}}{d{Af}}}Bj}{{{d{Ah}}{d{Ah}}}Bj}{{{d{Aj}}{d{Aj}}}Bj}{{{d{{Al{c}}}}{d{{Al{c}}}}}BjBl}{{{d{B`}}{d{B`}}}Bj}{{{d{c}}{d{e}}}Bj{}{}}00000000000000000000000000000000000{{{d{Bn}}{d{fC`}}}Cb}0{{{d{h}}{d{fC`}}}Cb}{{{d{j}}{d{fC`}}}Cb}{{{d{l}}{d{fC`}}}Cb}{{{d{n}}{d{fC`}}}Cb}{{{d{A`}}{d{fC`}}}Cb}{{{d{Ab}}{d{fC`}}}Cb}{{{d{Ad}}{d{fC`}}}Cb}{{{d{Af}}{d{fC`}}}Cb}{{{d{Ah}}{d{fC`}}}Cb}{{{d{Aj}}{d{fC`}}}Cb}{{{d{{Al{c}}}}{d{fC`}}}CbCd}{{{d{B`}}{d{fC`}}}Cb}{CfBn}{cc{}}{ChBn}{CjBn}{ClBn}{CnBn}444444444444{{}{{Al{c}}}D`}{{{d{Db}}}{{Bd{{Al{c}}Bn}}}D`}{{{d{h}}{d{fc}}}BbDd}{{{d{j}}{d{fc}}}BbDd}{{{d{l}}{d{fc}}}BbDd}{{{d{n}}{d{fc}}}BbDd}{{{d{A`}}{d{fc}}}BbDd}{{{d{Ab}}{d{fc}}}BbDd}{{{d{Ad}}{d{fc}}}BbDd}{{{d{Af}}{d{fc}}}BbDd}{{{d{Ah}}{d{fc}}}BbDd}{{{d{Aj}}{d{fc}}}BbDd}{{{d{{Al{c}}}}{d{fe}}}BbDfDd}{{{d{B`}}{d{fc}}}BbDd}``{ce{}{}}000000000000`````{{{d{fc}}e}{{Bd{BbBn}}}Dh{{Dj{Db}}}}0{{{d{Db}}}{{Bd{DhBn}}}}{{{d{Db}}}{{Bd{hBn}}}}{{{d{Db}}}{{Bd{jBn}}}}{{{d{Db}}}{{Bd{lBn}}}}{{{d{Db}}}{{Bd{nBn}}}}{{{d{Db}}}{{Bd{A`Bn}}}}{{{d{Db}}}{{Bd{AbBn}}}}{{{d{Db}}}{{Bd{AdBn}}}}{{{d{Db}}}{{Bd{AfBn}}}}{c{{Bd{{Al{e}}Bn}}}{{Dj{Dl}}}D`}```{{{d{Bn}}}{{E`{{d{Dn}}}}}}`{{{d{c}}}e{}{}}00000000000{{{d{c}}}Eb{}}{c{{Bd{e}}}{}{}}0000000000000000000000000{{{d{c}}}Ed{}}000000000000{ce{}{}}000000000000{c{{Bd{BbBn}}}{{Dj{Dl}}}}`````","D":"Ld","p":[[10,"ApplySettings",0],[1,"reference"],[0,"mut"],[5,"Address",0,317],[6,"Backlog",0,318],[6,"KeepAlive",0,319],[6,"MaxConnectionRate",0,320],[6,"MaxConnections",0,321],[6,"Mode",0,322],[6,"NumWorkers",0,323],[6,"Timeout",0,324],[5,"Tls",0,325],[5,"ActixSettings",0,326],[5,"BasicSettings",0],[10,"Clone",327],[5,"NoSettings",0],[1,"unit"],[6,"Result",328],[10,"Deserializer",329],[10,"Deserialize",329],[1,"bool"],[10,"PartialEq",330],[6,"Error",0,331],[5,"Formatter",332],[8,"Result",332],[10,"Debug",332],[5,"Error",333],[5,"ParseIntError",334],[5,"ParseBoolError",335],[6,"VarError",336],[5,"Error",337],[10,"DeserializeOwned",329],[1,"str"],[10,"Hasher",338],[10,"Hash",338],[10,"Parse",0,339],[10,"AsRef",340],[5,"Path",341],[10,"Error",342],[6,"Option",343],[5,"String",344],[5,"TypeId",345],[8,"Settings",0],[15,"InvalidValue",312]],"r":[[0,326],[1,317],[3,318],[14,331],[18,319],[23,320],[24,321],[26,322],[28,323],[30,339],[38,324],[39,325]],"b":[[163,"impl-Display-for-Error"],[164,"impl-Debug-for-Error"],[177,"impl-From%3CError%3E-for-Error"],[179,"impl-From%3CParseIntError%3E-for-Error"],[180,"impl-From%3CParseBoolError%3E-for-Error"],[181,"impl-From%3CVarError%3E-for-Error"],[182,"impl-From%3CError%3E-for-Error"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAANsACQAwABkATQAjAHQAPgC0AAMAxgALAOkABwD1AAAA9wBAADkBBAA=","a":{"https":[39],"ssl":[39]}}],\ ["actix_web_httpauth",{"t":"CCCKFRCCNNNNNNNNNMNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFGPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCFPFFPPPGKPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKFCCNNNNNNNNNNNNNNMNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNFFGPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNN","n":["extractors","headers","middleware","AuthExtractorConfig","AuthenticationError","Inner","basic","bearer","borrow","borrow_mut","challenge_mut","error_response","fmt","fmt","from","from","into","into_inner","new","status_code","status_code_mut","to_string","try_from","try_into","type_id","vzip","with_error","with_error_description","with_error_uri","BasicAuth","Config","as_ref","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","default","fmt","fmt","from","from","from","from_request","into","into","into_inner","password","realm","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","user_id","vzip","vzip","BearerAuth","Config","Error","InsufficientScope","InvalidRequest","InvalidToken","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","eq","fmt","fmt","fmt","fmt","from","from","from","from_request","hash","into","into","into","into_inner","partial_cmp","realm","scope","status_code","to_owned","to_owned","to_owned","to_string","token","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","authorization","www_authenticate","Authorization","Base64DecodeError","Basic","Bearer","Invalid","MissingField","MissingScheme","ParseError","Scheme","ToStrError","Utf8Error","as_mut","as_ref","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","cmp","default","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","hash","into","into","into","into","into_scheme","name","new","new","parse","parse","parse","parse","partial_cmp","partial_cmp","partial_cmp","password","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","token","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into_pair","try_into_value","try_into_value","try_into_value","type_id","type_id","type_id","type_id","user_id","vzip","vzip","vzip","vzip","Challenge","WwwAuthenticate","basic","bearer","borrow","borrow_mut","clone","clone_into","cmp","default","eq","fmt","from","hash","into","name","parse","partial_cmp","to_bytes","to_owned","try_from","try_into","try_into_pair","try_into_value","type_id","vzip","Basic","borrow","borrow_mut","clone","clone_into","cmp","default","eq","fmt","fmt","from","hash","into","new","partial_cmp","to_owned","to_string","try_from","try_into","try_into_value","type_id","vzip","with_realm","Bearer","BearerBuilder","Error","InsufficientScope","InvalidRequest","InvalidToken","borrow","borrow","borrow_mut","borrow_mut","build","clone","clone_into","cmp","default","default","eq","error","error_description","error_uri","finish","fmt","fmt","fmt","from","from","hash","into","into","partial_cmp","realm","scope","to_owned","to_string","try_from","try_from","try_into","try_into","try_into_value","type_id","type_id","vzip","vzip","HttpAuthentication","basic","bearer","borrow","borrow_mut","clone","clone_into","fmt","from","into","new_transform","to_owned","try_from","try_into","type_id","vzip","with_fn"],"q":[[0,"actix_web_httpauth"],[3,"actix_web_httpauth::extractors"],[29,"actix_web_httpauth::extractors::basic"],[63,"actix_web_httpauth::extractors::bearer"],[119,"actix_web_httpauth::headers"],[121,"actix_web_httpauth::headers::authorization"],[218,"actix_web_httpauth::headers::www_authenticate"],[244,"actix_web_httpauth::headers::www_authenticate::basic"],[267,"actix_web_httpauth::headers::www_authenticate::bearer"],[310,"actix_web_httpauth::middleware"],[327,"actix_web_httpauth::extractors::errors"],[328,"actix_web_httpauth::headers::www_authenticate::challenge"],[329,"actix_web::response::response"],[330,"core::fmt"],[331,"actix_web_httpauth::extractors::config"],[332,"http::status"],[333,"alloc::string"],[334,"core::result"],[335,"core::any"],[336,"actix_web_httpauth::headers::www_authenticate::challenge::bearer::challenge"],[337,"actix_web_httpauth::headers::www_authenticate::challenge::bearer::errors"],[338,"alloc::borrow"],[339,"core::convert"],[340,"actix_web_httpauth::headers::www_authenticate::challenge::basic"],[341,"actix_web_httpauth::headers::authorization::scheme::basic"],[342,"actix_web::request"],[343,"actix_http::payload"],[344,"core::option"],[345,"core::cmp"],[346,"core::hash"],[347,"actix_web_httpauth::headers::authorization::header"],[348,"actix_web_httpauth::headers::authorization::scheme"],[349,"core::clone"],[350,"actix_web_httpauth::headers::authorization::scheme::bearer"],[351,"core::default"],[352,"actix_web_httpauth::headers::authorization::errors"],[353,"http::header::value"],[354,"base64::decode"],[355,"core::str::error"],[356,"http::header::name"],[357,"actix_http::error"],[358,"actix_http::http_message"],[359,"core::error"],[360,"actix_web_httpauth::headers::www_authenticate::header"],[361,"bytes::bytes"],[362,"actix_web_httpauth::headers::www_authenticate::challenge::bearer::builder"],[363,"actix_web::service"],[364,"actix_web::error::error"],[365,"core::future::future"],[366,"core::ops::function"],[367,"actix_web::extract"],[368,"actix_http::body::message_body"],[369,"actix_service"]],"i":[0,0,0,0,0,9,0,0,3,3,3,3,3,3,3,3,3,9,3,3,3,3,3,3,3,3,3,3,3,0,0,20,20,22,20,22,20,22,20,22,20,20,22,20,22,22,22,20,22,20,22,20,20,22,20,22,20,22,20,22,22,20,22,0,0,0,16,16,16,28,28,29,16,28,29,16,28,29,16,28,29,16,16,28,16,28,29,16,16,28,29,16,29,16,28,29,16,28,16,28,28,16,28,29,16,16,29,28,29,16,28,29,16,28,29,16,28,29,16,0,0,0,40,0,0,40,40,40,0,0,40,40,33,33,40,33,24,36,40,33,24,36,33,24,36,33,24,36,33,24,36,33,33,24,36,40,40,33,33,24,24,36,36,40,40,40,40,33,33,24,36,33,40,33,24,36,33,33,24,36,34,33,24,36,33,24,36,24,40,33,24,36,40,33,24,36,36,40,33,24,36,40,33,24,36,33,33,24,36,40,33,24,36,24,40,33,24,36,0,0,0,0,52,52,52,52,52,52,52,52,52,52,52,52,52,52,4,52,52,52,52,52,52,52,0,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,0,16,16,16,55,15,55,15,15,15,15,15,55,15,15,55,55,55,55,55,15,15,55,15,15,55,15,15,55,55,15,15,55,15,55,15,15,55,15,55,15,0,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56],"f":"````````{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}{{{b{d{f{c}}}}}{{b{dc}}}h}{{{b{{f{c}}}}}jh}{{{b{{f{c}}}}{b{dl}}}nh}{{{b{{f{c}}}}{b{dl}}}n{A`h}}{cc{}}{cfAb}{ce{}{}}{{{Ab{}{{Ad{c}}}}}ch}{c{{f{c}}}h}{{{b{{f{c}}}}}Afh}{{{b{d{f{c}}}}}{{b{dAf}}}h}{{{b{c}}}Ah{}}{c{{Aj{e}}}{}{}}0{{{b{c}}}Al{}}7{{{f{An}}B`}{{f{An}}}}{{{f{An}}c}{{f{An}}}{{Bf{{Bd{Bb}}}}}}0``{{{b{Bh}}}{{b{Bj}}}}{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{{b{Bh}}}Bh}{{{b{Bl}}}Bl}{{{b{c}}{b{de}}}Bn{}{}}0{{}Bh}{{{b{Bh}}{b{dl}}}n}{{{b{Bl}}{b{dl}}}n}{cc{}}0{C`Bl}{{{b{Cb}}{b{dCd}}}c{}}{ce{}{}}0{Bhc{}}{{{b{Bl}}}{{Cf{{b{Bb}}}}}}{{Bhc}Bh{{Bf{{Bd{Bb}}}}}}{{{b{c}}}e{}{}}0{c{{Aj{e}}}{}{}}000{{{b{c}}}Al{}}0{{{b{Bl}}}{{b{Bb}}}}77``````{{{b{Ch}}}{{b{An}}}}{{{b{c}}}{{b{e}}}{}{}}00{{{b{dc}}}{{b{de}}}{}{}}00{{{b{Ch}}}Ch}{{{b{Cj}}}Cj}{{{b{B`}}}B`}{{{b{c}}{b{de}}}Bn{}{}}00{{{b{B`}}{b{B`}}}Cl}{{}Ch}{{{b{B`}}{b{B`}}}Cn}{{{b{Ch}}{b{dl}}}n}{{{b{Cj}}{b{dl}}}n}{{{b{B`}}{b{dl}}}n}0{cc{}}00{{{b{Cb}}{b{dCd}}}c{}}{{{b{B`}}{b{dc}}}BnD`}{ce{}{}}00{Chc{}}{{{b{B`}}{b{B`}}}{{Cf{Cl}}}}{{Chc}Ch{{Bf{{Bd{Bb}}}}}}0{{{b{B`}}}Af}{{{b{c}}}e{}{}}00{{{b{c}}}Ah{}}{{{b{Cj}}}{{b{Bb}}}}{c{{Aj{e}}}{}{}}00000{{{b{c}}}Al{}}00999`````````````{{{b{d{Db{c}}}}}{{b{dc}}}Dd}{{{b{{Db{c}}}}}{{b{c}}}Dd}{{{b{c}}}{{b{e}}}{}{}}000{{{b{dc}}}{{b{de}}}{}{}}000{{{b{{Db{c}}}}}{{Db{c}}}{DfDd}}{{{b{C`}}}C`}{{{b{Dh}}}Dh}{{{b{c}}{b{de}}}Bn{}{}}00{{{b{{Db{c}}}}{b{{Db{c}}}}}Cl{DjDd}}{{{b{C`}}{b{C`}}}Cl}{{{b{Dh}}{b{Dh}}}Cl}{{}{{Db{c}}}{DlDd}}{{{b{{Db{c}}}}{b{{Db{c}}}}}Cn{DnDd}}{{{b{C`}}{b{C`}}}Cn}{{{b{Dh}}{b{Dh}}}Cn}{{{b{E`}}{b{dl}}}n}0{{{b{{Db{c}}}}{b{dl}}}n{A`Dd}}{{{b{{Db{c}}}}{b{dl}}}nDd}{{{b{C`}}{b{dl}}}n}0{{{b{Dh}}{b{dl}}}n}0{EbE`}{EdE`}{cc{}}{EfE`}1{c{{Db{c}}}Dd}22{{{b{{Db{c}}}}{b{de}}}Bn{EhDd}D`}{ce{}{}}000{{{Db{c}}}cDd}{{}Ej}{{c{Cf{e}}}C`{{Bf{{Bd{Bb}}}}}{{Bf{{Bd{Bb}}}}}}{cDh{{Bf{{Bd{Bb}}}}}}{{{b{El}}}{{Aj{DdE`}}}}{{{b{c}}}{{Aj{{Db{e}}En}}}F`Dd}{{{b{El}}}{{Aj{C`E`}}}}{{{b{El}}}{{Aj{DhE`}}}}{{{b{{Db{c}}}}{b{{Db{c}}}}}{{Cf{Cl}}}{FbDd}}{{{b{C`}}{b{C`}}}{{Cf{Cl}}}}{{{b{Dh}}{b{Dh}}}{{Cf{Cl}}}}{{{b{C`}}}{{Cf{{b{Bb}}}}}}{{{b{E`}}}{{Cf{{b{Fd}}}}}}{{{b{c}}}e{}{}}00{{{b{c}}}Ah{}}000{{{b{Dh}}}{{b{Bb}}}}{c{{Aj{e}}}{}{}}0000000{c{{Aj{{Ff{EjEl}}}}}{}}{{{Db{c}}}{{Aj{Ele}}}Dd{}}{C`{{Aj{Elc}}}{}}{Dh{{Aj{Elc}}}{}}{{{b{c}}}Al{}}000{{{b{C`}}}{{b{Bb}}}}{ce{}{}}000````{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}{{{b{{Fh{c}}}}}{{Fh{c}}}{Dfh}}{{{b{c}}{b{de}}}Bn{}{}}{{{b{{Fh{c}}}}{b{{Fh{c}}}}}Cl{Djh}}{{}{{Fh{c}}}{Dlh}}{{{b{{Fh{c}}}}{b{{Fh{c}}}}}Cn{Dnh}}{{{b{{Fh{c}}}}{b{dl}}}n{A`h}}{cc{}}{{{b{{Fh{c}}}}{b{de}}}Bn{Ehh}D`}:{{}Ej}{{{b{c}}}{{Aj{{Fh{e}}En}}}F`h}{{{b{{Fh{c}}}}{b{{Fh{c}}}}}{{Cf{Cl}}}{Fbh}}{{{b{h}}}Fj}{{{b{c}}}e{}{}}{c{{Aj{e}}}{}{}}0{c{{Aj{{Ff{EjEl}}}}}{}}{{{Fh{c}}}{{Aj{Ele}}}h{}}{{{b{c}}}Al{}}{ce{}{}}`{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}{{{b{Bj}}}Bj}{{{b{c}}{b{de}}}Bn{}{}}{{{b{Bj}}{b{Bj}}}Cl}{{}Bj}{{{b{Bj}}{b{Bj}}}Cn}{{{b{Bj}}{b{dl}}}n}{{{b{Bj}}{b{dl}}}{{Aj{BnFl}}}}{cc{}}{{{b{Bj}}{b{dc}}}BnD`};5{{{b{Bj}}{b{Bj}}}{{Cf{Cl}}}}{{{b{c}}}e{}{}}{{{b{c}}}Ah{}}{c{{Aj{e}}}{}{}}0{Bj{{Aj{Elc}}}{}}{{{b{c}}}Al{}}{ce{}{}}{cBj{{Bf{{Bd{Bb}}}}}}``````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{}Fn}{{{b{An}}}An}{{{b{c}}{b{de}}}Bn{}{}}{{{b{An}}{b{An}}}Cl}3{{}An}{{{b{An}}{b{An}}}Cn}{{FnB`}Fn}{{Fnc}Fn{{Bf{{Bd{Bb}}}}}}0{FnAn}{{{b{Fn}}{b{dl}}}n}{{{b{An}}{b{dl}}}n}{{{b{An}}{b{dl}}}{{Aj{BnFl}}}}{cc{}}0{{{b{An}}{b{dc}}}BnD`}{ce{}{}}0{{{b{An}}{b{An}}}{{Cf{Cl}}}}88{{{b{c}}}e{}{}}{{{b{c}}}Ah{}}{c{{Aj{e}}}{}{}}000{An{{Aj{Elc}}}{}}{{{b{c}}}Al{}}066`{e{{G`{Ble}}}{{Gh{}{{Gb{{Aj{Gd{Ff{GfGd}}}}}}}}}{{Gj{GdBl}{{Gb{c}}}}}}{e{{G`{Cje}}}{{Gh{}{{Gb{{Aj{Gd{Ff{GfGd}}}}}}}}}{{Gj{GdCj}{{Gb{c}}}}}}{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}{{{b{{G`{ce}}}}}{{G`{ce}}}{GlDf}Df}{{{b{c}}{b{de}}}Bn{}{}}{{{b{{G`{ce}}}}{b{dl}}}n{GlA`}A`}?={{{b{{G`{cg}}}}k}mGl{{Gh{}{{Gb{{Aj{GdFf}}}}}}}{{Gj{Gdc}{{Gb{e}}}}}Gn{{Hf{Gd}{{H`{{Hb{i}}}}{Hd{Gf}}}}}{}}<::8>{g{{G`{cg}}}Gl{{Gh{}{{Gb{{Aj{Gd{Ff{GfGd}}}}}}}}}{{Gj{Gdc}{{Gb{e}}}}}}","D":"Md","p":[[1,"reference"],[0,"mut"],[5,"AuthenticationError",3,327],[10,"Challenge",218,328],[5,"HttpResponse",329],[5,"Formatter",330],[8,"Result",330],[10,"Debug",330],[10,"AuthExtractorConfig",3,331],[17,"Inner"],[5,"StatusCode",332],[5,"String",333],[6,"Result",334],[5,"TypeId",335],[5,"Bearer",267,336],[6,"Error",63,337],[1,"str"],[6,"Cow",338],[10,"Into",339],[5,"Config",29],[5,"Basic",244,340],[5,"BasicAuth",29],[1,"unit"],[5,"Basic",121,341],[5,"HttpRequest",342],[6,"Payload",343],[6,"Option",344],[5,"Config",63],[5,"BearerAuth",63],[6,"Ordering",345],[1,"bool"],[10,"Hasher",346],[5,"Authorization",121,347],[10,"Scheme",121,348],[10,"Clone",349],[5,"Bearer",121,350],[10,"Ord",345],[10,"Default",351],[10,"PartialEq",345],[6,"ParseError",121,352],[5,"ToStrError",353],[6,"DecodeError",354],[5,"Utf8Error",355],[10,"Hash",346],[5,"HeaderName",356],[5,"HeaderValue",353],[6,"ParseError",357],[10,"HttpMessage",358],[10,"PartialOrd",345],[10,"Error",359],[1,"tuple"],[5,"WwwAuthenticate",218,360],[5,"Bytes",361],[5,"Error",330],[5,"BearerBuilder",267,362],[5,"HttpAuthentication",310],[17,"Output"],[5,"ServiceRequest",363],[5,"Error",364],[10,"Future",365],[10,"Fn",366],[10,"FromRequest",367],[10,"MessageBody",368],[17,"Response"],[5,"ServiceResponse",363],[17,"Error"],[10,"Service",369]],"r":[[3,331],[4,327],[65,337],[121,347],[123,341],[124,350],[128,352],[129,348],[218,328],[219,360],[220,328],[221,328],[244,340],[267,336],[268,362],[269,337]],"b":[[12,"impl-Display-for-AuthenticationError%3CC%3E"],[13,"impl-Debug-for-AuthenticationError%3CC%3E"],[87,"impl-Display-for-Error"],[88,"impl-Debug-for-Error"],[155,"impl-Debug-for-ParseError"],[156,"impl-Display-for-ParseError"],[157,"impl-Debug-for-Authorization%3CS%3E"],[158,"impl-Display-for-Authorization%3CS%3E"],[159,"impl-Display-for-Basic"],[160,"impl-Debug-for-Basic"],[161,"impl-Debug-for-Bearer"],[162,"impl-Display-for-Bearer"],[163,"impl-From%3CToStrError%3E-for-ParseError"],[164,"impl-From%3CDecodeError%3E-for-ParseError"],[166,"impl-From%3CUtf8Error%3E-for-ParseError"],[252,"impl-Debug-for-Basic"],[253,"impl-Display-for-Basic"],[289,"impl-Debug-for-Bearer"],[290,"impl-Display-for-Bearer"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAN0AJwAJAAEADAACABAAAAAUAAAAFgAEACAACwAuAAEAMgAAADUABwA+AAEARgATAF0AAQBiAAEAZwADAGwACwCFACAApwAAAKkAAACsAAAAsgAAALYABQC9AAcAxgAPANcAAwDfAAcA6AAAAOoAAgDuAAYA9gAIAAABAAADAQcAEgEDABcBBQAhAQIAJgEAACkBAAAsAQoAOgEEAEEBBQA="}],\ -["actix_ws",{"t":"PPPPPPGFFPPPPPPPPPPPGFPPPPPPPGPFPFPPPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Abnormal","Again","Away","BadOpCode","Binary","Close","CloseCode","CloseReason","Closed","Continuation","ContinuationFragment","ContinuationNotStarted","ContinuationStarted","Error","Extension","Invalid","InvalidLength","InvalidOpcode","Io","MaskedFrame","Message","MessageStream","Nop","Normal","Overflow","Ping","Policy","Pong","Protocol","ProtocolError","Restart","Session","Size","StreamingBody","Text","UnmaskedFrame","Unsupported","binary","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","close","code","description","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","handle","into","into","into","into","into","into","into","into","ping","poll_next","poll_next","pong","recv","source","text","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_poll_next","try_poll_next","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"actix_ws"],[143,"actix_ws::session"],[144,"core::result"],[145,"bytes::bytes"],[146,"core::convert"],[147,"actix_http::ws::proto"],[148,"core::option"],[149,"actix_http::ws::codec"],[150,"core::fmt"],[151,"actix_http::ws"],[152,"alloc::string"],[153,"std::io::error"],[154,"actix_web::request"],[155,"actix_web::types::payload"],[156,"actix_web::response::response"],[157,"actix_ws::fut"],[158,"actix_web::error::error"],[159,"core::pin"],[160,"core::task::wake"],[161,"core::task::poll"],[162,"core::error"],[163,"bytestring"],[164,"core::any"]],"i":[9,9,9,17,12,12,0,0,0,12,17,17,17,9,9,9,17,17,17,17,0,0,12,9,17,12,9,12,9,0,9,0,9,0,12,17,9,2,31,28,2,5,12,9,10,17,31,28,2,5,12,9,10,17,2,9,10,2,9,10,2,10,10,12,9,10,5,5,12,9,10,17,17,31,28,2,5,12,9,9,10,10,10,17,17,17,17,17,0,31,28,2,5,12,9,10,17,2,31,28,2,28,17,2,2,9,10,5,17,31,28,2,5,12,9,10,17,31,28,2,5,12,9,10,17,31,28,31,28,2,5,12,9,10,17,31,28,2,5,12,9,10,17],"f":"`````````````````````````````````````{{{f{bd}}c}{{l{hj}}}{{A`{n}}}}{{{f{c}}}{{f{e}}}{}{}}0000000{{{f{bc}}}{{f{be}}}{}{}}0000000{{{f{d}}}d}{{{f{Ab}}}Ab}{{{f{Ad}}}Ad}{{{f{c}}{f{be}}}h{}{}}00{{d{Af{Ad}}}{{l{hj}}}}``{{{f{Ah}}{f{Ah}}}Aj}{{{f{Ab}}{f{Ab}}}Aj}{{{f{Ad}}{f{Ad}}}Aj}{{{f{j}}{f{bAl}}}An}0{{{f{Ah}}{f{bAl}}}{{l{hB`}}}}{{{f{Ab}}{f{bAl}}}{{l{hB`}}}}{{{f{Ad}}{f{bAl}}}{{l{hB`}}}}{{{f{Bb}}{f{bAl}}}{{l{hB`}}}}0{cc{}}00000{BdAb}1{AbAd}{{{Bf{Abc}}}Ad{{A`{Bh}}}}{BjBb}4{BlBb}{BnBb}{C`Bb}{{{f{Cb}}Cd}{{l{{Bf{CfdCh}}Cj}}}}{ce{}{}}0000000{{{f{bd}}{f{{Cl{Bl}}}}}{{l{hj}}}}{{{D`{{f{bCn}}}}{f{bDb}}}{{Dd{{Af{c}}}}}{}}{{{D`{{f{bCh}}}}{f{bDb}}}{{Dd{{Af{c}}}}}{}}2{{{f{bCh}}}{{Af{{l{AhBb}}}}}}{{{f{Bb}}}{{Af{{f{Df}}}}}}{{{f{bd}}c}{{l{hj}}}{{A`{Dh}}}}{{{f{c}}}e{}{}}00{{{f{c}}}Bh{}}0{c{{l{e}}}{}{}}000000000000000{{{D`{{f{bc}}}}{f{bDb}}}{{Dd{{Af{l}}}}}{}}0{{{f{c}}}Dj{}}0000000;;;;;;;;","D":"Gn","p":[[0,"mut"],[5,"Session",0,143],[1,"reference"],[1,"unit"],[5,"Closed",0,143],[6,"Result",144],[5,"Bytes",145],[10,"Into",146],[6,"CloseCode",0,147],[5,"CloseReason",0,147],[6,"Option",148],[6,"Message",0,149],[1,"bool"],[5,"Formatter",150],[8,"Result",150],[5,"Error",150],[6,"ProtocolError",0,151],[1,"u16"],[1,"tuple"],[5,"String",152],[5,"Error",153],[1,"u8"],[1,"usize"],[6,"OpCode",147],[5,"HttpRequest",154],[5,"Payload",155],[5,"HttpResponse",156],[5,"MessageStream",0,157],[5,"Error",158],[1,"slice"],[5,"StreamingBody",0,157],[5,"Pin",159],[5,"Context",160],[6,"Poll",161],[10,"Error",162],[5,"ByteString",163],[5,"TypeId",164]],"r":[[6,147],[7,147],[8,143],[20,149],[21,157],[29,151],[31,143],[33,157]],"b":[[66,"impl-Debug-for-Closed"],[67,"impl-Display-for-Closed"],[71,"impl-Debug-for-ProtocolError"],[72,"impl-Display-for-ProtocolError"],[81,"impl-From%3CCloseCode%3E-for-CloseReason"],[82,"impl-From%3C(CloseCode,+T)%3E-for-CloseReason"],[83,"impl-From%3CError%3E-for-ProtocolError"],[85,"impl-From%3Cu8%3E-for-ProtocolError"],[86,"impl-From%3Cusize%3E-for-ProtocolError"],[87,"impl-From%3COpCode%3E-for-ProtocolError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFAACAAnABUAQAAJAFAAAABSAAIAVgACAGMAAQBnAAAAaQAmAA=="}]\ +["actix_ws",{"t":"PPPPPPGFFPPPPPPPPPPPPPGPPGFPPPPPPPGPFPFPPPNNNNNNNNNNNNNNNNNNNNNNNNNNONONNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Abnormal","Again","Away","BadOpCode","Binary","Close","CloseCode","CloseReason","Closed","Continuation","ContinuationFragment","ContinuationNotStarted","ContinuationStarted","Continue","Error","Extension","FirstBinary","FirstText","Invalid","InvalidLength","InvalidOpcode","Io","Item","Last","MaskedFrame","Message","MessageStream","Nop","Normal","Overflow","Ping","Policy","Pong","Protocol","ProtocolError","Restart","Session","Size","StreamingBody","Text","UnmaskedFrame","Unsupported","binary","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","close","code","continuation","description","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","handle","into","into","into","into","into","into","into","into","into","ping","poll_next","poll_next","pong","recv","source","text","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_poll_next","try_poll_next","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"actix_ws"],[159,"actix_ws::session"],[160,"core::result"],[161,"bytes::bytes"],[162,"core::convert"],[163,"actix_http::ws::proto"],[164,"core::option"],[165,"actix_http::ws::codec"],[166,"core::fmt"],[167,"actix_http::ws"],[168,"alloc::string"],[169,"std::io::error"],[170,"actix_web::request"],[171,"actix_web::types::payload"],[172,"actix_web::response::response"],[173,"actix_ws::fut"],[174,"actix_web::error::error"],[175,"core::pin"],[176,"core::task::wake"],[177,"core::task::poll"],[178,"core::error"],[179,"bytestring"],[180,"core::any"]],"i":[9,9,9,18,13,13,0,0,0,13,18,18,18,12,9,9,12,12,9,18,18,18,0,12,18,0,0,13,9,18,13,9,13,9,0,9,0,9,0,13,18,9,2,32,29,2,5,13,12,9,10,18,32,29,2,5,13,12,9,10,18,2,9,10,2,9,10,2,10,2,10,13,12,9,10,5,5,13,12,9,10,18,18,32,29,2,5,13,12,9,9,10,10,10,18,18,18,18,18,0,32,29,2,5,13,12,9,10,18,2,32,29,2,29,18,2,2,9,10,5,18,32,29,2,5,13,12,9,10,18,32,29,2,5,13,12,9,10,18,32,29,32,29,2,5,13,12,9,10,18,32,29,2,5,13,12,9,10,18],"f":"``````````````````````````````````````````{{{f{bd}}c}{{l{hj}}}{{A`{n}}}}{{{f{c}}}{{f{e}}}{}{}}00000000{{{f{bc}}}{{f{be}}}{}{}}00000000{{{f{d}}}d}{{{f{Ab}}}Ab}{{{f{Ad}}}Ad}{{{f{c}}{f{be}}}h{}{}}00{{d{Af{Ad}}}{{l{hj}}}}`{{{f{bd}}Ah}{{l{hj}}}}`{{{f{Aj}}{f{Aj}}}Al}{{{f{Ah}}{f{Ah}}}Al}{{{f{Ab}}{f{Ab}}}Al}{{{f{Ad}}{f{Ad}}}Al}{{{f{j}}{f{bAn}}}B`}0{{{f{Aj}}{f{bAn}}}{{l{hBb}}}}{{{f{Ah}}{f{bAn}}}{{l{hBb}}}}{{{f{Ab}}{f{bAn}}}{{l{hBb}}}}{{{f{Ad}}{f{bAn}}}{{l{hBb}}}}{{{f{Bd}}{f{bAn}}}{{l{hBb}}}}0{cc{}}00000{BfAb}1{AbAd}{{{Bh{Abc}}}Ad{{A`{Bj}}}}3{BlBd}4{BnBd}{C`Bd}{CbBd}{{{f{Cd}}Cf}{{l{{Bh{ChdCj}}Cl}}}}{ce{}{}}00000000{{{f{bd}}{f{{Cn{C`}}}}}{{l{hj}}}}{{{Db{{f{bD`}}}}{f{bDd}}}{{Df{{Af{c}}}}}{}}{{{Db{{f{bCj}}}}{f{bDd}}}{{Df{{Af{c}}}}}{}}2{{{f{bCj}}}{{Af{{l{AjBd}}}}}}{{{f{Bd}}}{{Af{{f{Dh}}}}}}{{{f{bd}}c}{{l{hj}}}{{A`{Dj}}}}{{{f{c}}}e{}{}}00{{{f{c}}}Bj{}}0{c{{l{e}}}{}{}}00000000000000000{{{Db{{f{bc}}}}{f{bDd}}}{{Df{{Af{l}}}}}{}}0{{{f{c}}}Dl{}}00000000;;;;;;;;;","D":"Hf","p":[[0,"mut"],[5,"Session",0,159],[1,"reference"],[1,"unit"],[5,"Closed",0,159],[6,"Result",160],[5,"Bytes",161],[10,"Into",162],[6,"CloseCode",0,163],[5,"CloseReason",0,163],[6,"Option",164],[6,"Item",0,165],[6,"Message",0,165],[1,"bool"],[5,"Formatter",166],[8,"Result",166],[5,"Error",166],[6,"ProtocolError",0,167],[1,"u16"],[1,"tuple"],[5,"String",168],[6,"OpCode",163],[1,"usize"],[1,"u8"],[5,"Error",169],[5,"HttpRequest",170],[5,"Payload",171],[5,"HttpResponse",172],[5,"MessageStream",0,173],[5,"Error",174],[1,"slice"],[5,"StreamingBody",0,173],[5,"Pin",175],[5,"Context",176],[6,"Poll",177],[10,"Error",178],[5,"ByteString",179],[5,"TypeId",180]],"r":[[6,163],[7,163],[8,159],[22,165],[25,165],[26,173],[34,167],[36,159],[38,173]],"b":[[75,"impl-Display-for-Closed"],[76,"impl-Debug-for-Closed"],[81,"impl-Display-for-ProtocolError"],[82,"impl-Debug-for-ProtocolError"],[91,"impl-From%3CCloseCode%3E-for-CloseReason"],[92,"impl-From%3C(CloseCode,+T)%3E-for-CloseReason"],[94,"impl-From%3COpCode%3E-for-ProtocolError"],[96,"impl-From%3Cusize%3E-for-ProtocolError"],[97,"impl-From%3Cu8%3E-for-ProtocolError"],[98,"impl-From%3CError%3E-for-ProtocolError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFwADAAOAAAAEQABABgAAAAsABcASAALAFoAAABcAAEAXwAAAGEAAgBvAAEAcwAAAHUAKgA="}]\ ]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); diff --git a/search.desc/actix_ws/actix_ws-desc-0-.js b/search.desc/actix_ws/actix_ws-desc-0-.js index dfaf422a1..360c20ae6 100644 --- a/search.desc/actix_ws/actix_ws-desc-0-.js +++ b/search.desc/actix_ws/actix_ws-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("actix_ws", 0, "WebSockets for Actix Web, without actors.\nIndicates an abnormal closure. If the abnormal closure was …\nIndicates that the server is overloaded and the client …\nIndicates that an endpoint is “going away”, such as a …\nBad opcode.\nBinary message.\nClose message with optional reason.\nStatus code used to indicate why an endpoint is closing …\nReason for closing the connection\nThe error representing a closed websocket session\nContinuation.\nUnknown continuation fragment.\nContinuation has not started.\nReceived new continuation but it is already started.\nIndicates that a server is terminating the connection …\nIndicates that an endpoint (client) is terminating the …\nIndicates that an endpoint is terminating the connection …\nInvalid control frame length\nEncountered invalid opcode.\nI/O error.\nReceived a masked frame from server.\nA WebSocket message.\nA stream of Messages from a websocket client\nNo-op. Useful for low-level services.\nIndicates a normal closure, meaning that the purpose for …\nA payload reached size limit.\nPing message.\nIndicates that an endpoint is terminating the connection …\nPong message.\nIndicates that an endpoint is terminating the connection …\nWebSocket protocol errors.\nIndicates that the server is restarting. A client may …\nA handle into the websocket session.\nIndicates that an endpoint is terminating the connection …\nA response body for Websocket HTTP Requests\nText message.\nReceived an unmasked frame from client.\nIndicates that an endpoint is terminating the connection …\nSend raw bytes into the websocket\nSend a close message, and consume the session\nExit code\nOptional description of the exit code\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nBegin handling websocket traffic\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nPing the client\nPong the client\nWait for the next item from the message stream\nSend text into the websocket") \ No newline at end of file +searchState.loadedDescShard("actix_ws", 0, "WebSockets for Actix Web, without actors.\nIndicates an abnormal closure. If the abnormal closure was …\nIndicates that the server is overloaded and the client …\nIndicates that an endpoint is “going away”, such as a …\nBad opcode.\nBinary message.\nClose message with optional reason.\nStatus code used to indicate why an endpoint is closing …\nReason for closing the connection\nThe error representing a closed websocket session\nContinuation.\nUnknown continuation fragment.\nContinuation has not started.\nReceived new continuation but it is already started.\nIndicates that a server is terminating the connection …\nIndicates that an endpoint (client) is terminating the …\nIndicates that an endpoint is terminating the connection …\nInvalid control frame length\nEncountered invalid opcode.\nI/O error.\nA WebSocket continuation item.\nReceived a masked frame from server.\nA WebSocket message.\nA stream of Messages from a websocket client\nNo-op. Useful for low-level services.\nIndicates a normal closure, meaning that the purpose for …\nA payload reached size limit.\nPing message.\nIndicates that an endpoint is terminating the connection …\nPong message.\nIndicates that an endpoint is terminating the connection …\nWebSocket protocol errors.\nIndicates that the server is restarting. A client may …\nA handle into the websocket session.\nIndicates that an endpoint is terminating the connection …\nA response body for Websocket HTTP Requests\nText message.\nReceived an unmasked frame from client.\nIndicates that an endpoint is terminating the connection …\nSend raw bytes into the websocket\nSend a close message, and consume the session\nExit code\nManually control sending continuations\nOptional description of the exit code\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nBegin handling websocket traffic\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nPing the client\nPong the client\nWait for the next item from the message stream\nSend text into the websocket") \ No newline at end of file diff --git a/settings.html b/settings.html index fe551eac5..d2a480464 100644 --- a/settings.html +++ b/settings.html @@ -1 +1 @@ -Settings

Rustdoc settings

Back
\ No newline at end of file +Settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/src/actix_ws/fut.rs.html b/src/actix_ws/fut.rs.html index 3ac2586a4..07bec18dd 100644 --- a/src/actix_ws/fut.rs.html +++ b/src/actix_ws/fut.rs.html @@ -181,6 +181,9 @@ 181 182 183 +184 +185 +186
use std::{
     collections::VecDeque,
     future::poll_fn,
@@ -248,10 +251,13 @@
 
     /// Wait for the next item from the message stream
     ///
-    /// ```rust,ignore
+    /// ```rust,no_run
+    /// # use actix_ws::MessageStream;
+    /// # async fn test(mut stream: MessageStream) {
     /// while let Some(Ok(msg)) = stream.recv().await {
     ///     // handle message
     /// }
+    /// # }
     /// ```
     pub async fn recv(&mut self) -> Option<Result<Message, ProtocolError>> {
         poll_fn(|cx| Pin::new(&mut *self).poll_next(cx)).await
diff --git a/src/actix_ws/lib.rs.html b/src/actix_ws/lib.rs.html
index 710d041f0..9782d2531 100644
--- a/src/actix_ws/lib.rs.html
+++ b/src/actix_ws/lib.rs.html
@@ -92,7 +92,7 @@
 #![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
 #![cfg_attr(docsrs, feature(doc_auto_cfg))]
 
-pub use actix_http::ws::{CloseCode, CloseReason, Message, ProtocolError};
+pub use actix_http::ws::{CloseCode, CloseReason, Item, Message, ProtocolError};
 use actix_http::{
     body::{BodyStream, MessageBody},
     ws::handshake,
diff --git a/src/actix_ws/session.rs.html b/src/actix_ws/session.rs.html
index ca780b8d7..d70adf8e7 100644
--- a/src/actix_ws/session.rs.html
+++ b/src/actix_ws/session.rs.html
@@ -141,12 +141,59 @@
 141
 142
 143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
 
use std::sync::{
     atomic::{AtomicBool, Ordering},
     Arc,
 };
 
-use actix_http::ws::{CloseReason, Message};
+use actix_http::ws::{CloseReason, Item, Message};
 use actix_web::web::Bytes;
 use bytestring::ByteString;
 use tokio::sync::mpsc::Sender;
@@ -188,10 +235,13 @@
 
     /// Send text into the websocket
     ///
-    /// ```rust,ignore
+    /// ```rust,no_run
+    /// # use actix_ws::Session;
+    /// # async fn test(mut session: Session) {
     /// if session.text("Some text").await.is_err() {
     ///     // session closed
     /// }
+    /// # }
     /// ```
     pub async fn text(&mut self, msg: impl Into<ByteString>) -> Result<(), Closed> {
         self.pre_check();
@@ -207,10 +257,13 @@
 
     /// Send raw bytes into the websocket
     ///
-    /// ```rust,ignore
-    /// if session.binary(b"some bytes").await.is_err() {
+    /// ```rust,no_run
+    /// # use actix_ws::Session;
+    /// # async fn test(mut session: Session) {
+    /// if session.binary(&b"some bytes"[..]).await.is_err() {
     ///     // session closed
     /// }
+    /// # }
     /// ```
     pub async fn binary(&mut self, msg: impl Into<Bytes>) -> Result<(), Closed> {
         self.pre_check();
@@ -229,10 +282,13 @@
     /// For many applications, it will be important to send regular pings to keep track of if the
     /// client has disconnected
     ///
-    /// ```rust,ignore
+    /// ```rust,no_run
+    /// # use actix_ws::Session;
+    /// # async fn test(mut session: Session) {
     /// if session.ping(b"").await.is_err() {
     ///     // session is closed
     /// }
+    /// # }
     /// ```
     pub async fn ping(&mut self, msg: &[u8]) -> Result<(), Closed> {
         self.pre_check();
@@ -248,13 +304,16 @@
 
     /// Pong the client
     ///
-    /// ```rust,ignore
+    /// ```rust,no_run
+    /// # use actix_ws::{Message, Session};
+    /// # async fn test(mut session: Session, msg: Message) {
     /// match msg {
     ///     Message::Ping(bytes) => {
     ///         let _ = session.pong(&bytes).await;
     ///     }
     ///     _ => (),
     /// }
+    /// # }
     pub async fn pong(&mut self, msg: &[u8]) -> Result<(), Closed> {
         self.pre_check();
         if let Some(inner) = self.inner.as_mut() {
@@ -267,12 +326,47 @@
         }
     }
 
+    /// Manually control sending continuations
+    ///
+    /// Be wary of this method. Continuations represent multiple frames that, when combined, are
+    /// presented as a single message. They are useful when the entire contents of a message are
+    /// not avilable all at once. However, continuations MUST NOT be interrupted by other Text or
+    /// Binary messages. Control messages such as Ping, Pong, or Close are allowed to interrupt a
+    /// continuation.
+    ///
+    /// Continuations must be initialized with a First variant, and must be terminated by a Last
+    /// variant, with only Continue variants sent in between.
+    ///
+    /// ```rust,no_run
+    /// # use actix_ws::{Item, Session};
+    /// # async fn test(mut session: Session) -> Result<(), Box<dyn std::error::Error>> {
+    /// session.continuation(Item::FirstText("Hello".into())).await?;
+    /// session.continuation(Item::Continue(b", World"[..].into())).await?;
+    /// session.continuation(Item::Last(b"!"[..].into())).await?;
+    /// # Ok(())
+    /// # }
+    /// ```
+    pub async fn continuation(&mut self, msg: Item) -> Result<(), Closed> {
+        self.pre_check();
+        if let Some(inner) = self.inner.as_mut() {
+            inner
+                .send(Message::Continuation(msg))
+                .await
+                .map_err(|_| Closed)
+        } else {
+            Err(Closed)
+        }
+    }
+
     /// Send a close message, and consume the session
     ///
     /// All clones will return `Err(Closed)` if used after this call
     ///
-    /// ```rust,ignore
+    /// ```rust,no_run
+    /// # use actix_ws::{Closed, Session};
+    /// # async fn test(mut session: Session) -> Result<(), Closed> {
     /// session.close(None).await
+    /// # }
     /// ```
     pub async fn close(mut self, reason: Option<CloseReason>) -> Result<(), Closed> {
         self.pre_check();