diff --git a/actix_settings/enum.Error.html b/actix_settings/enum.Error.html
index 7a98ec09f..559e9539a 100644
--- a/actix_settings/enum.Error.html
+++ b/actix_settings/enum.Error.html
@@ -22,7 +22,7 @@
ParseIntError(ParseIntError)
Value is not an integer.
Value is not an address.
Error deserializing as TOML.
-Returns the argument unchanged.
diff --git a/actix_ws/all.html b/actix_ws/all.html new file mode 100644 index 000000000..6f8a490b2 --- /dev/null +++ b/actix_ws/all.html @@ -0,0 +1 @@ +pub enum CloseCode {
+ Normal,
+ Away,
+ Protocol,
+ Unsupported,
+ Abnormal,
+ Invalid,
+ Policy,
+ Size,
+ Extension,
+ Error,
+ Restart,
+ Again,
+ // some variants omitted
+}
Status code used to indicate why an endpoint is closing the WebSocket connection.
+Indicates a normal closure, meaning that the purpose for which the connection was +established has been fulfilled.
+Indicates that an endpoint is “going away”, such as a server going down or a browser having +navigated away from a page.
+Indicates that an endpoint is terminating the connection due to a protocol error.
+Indicates that an endpoint is terminating the connection because it has received a type of +data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it +receives a binary message).
+Indicates an abnormal closure. If the abnormal closure was due to an error, this close code
+will not be used. Instead, the on_error
method of the handler will be called with
+the error. However, if the connection is simply dropped, without an error, this close code
+will be sent to the handler.
Indicates that an endpoint is terminating the connection because it has received data within +a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC 3629] +data within a text message).
+Indicates that an endpoint is terminating the connection because it has received a message +that violates its policy. This is a generic status code that can be returned when there is +no other more suitable status code (e.g., Unsupported or Size) or if there is a need to hide +specific details about the policy.
+Indicates that an endpoint is terminating the connection because it has received a message +that is too big for it to process.
+Indicates that an endpoint (client) is terminating the connection because it has expected +the server to negotiate one or more extension, but the server didn’t return them in the +response message of the WebSocket handshake. The list of extensions that are needed should +be given as the reason for closing. Note that this status code is not used by the server, +because it can fail the WebSocket handshake instead.
+Indicates that a server is terminating the connection because it encountered an unexpected +condition that prevented it from fulfilling the request.
+Indicates that the server is restarting. A client may choose to reconnect, and if it does, +it should use a randomized delay of 5-30 seconds between attempts.
+Indicates that the server is overloaded and the client should either connect to a different +IP (when multiple targets exist), or reconnect to the same IP when a user has performed +an action.
+Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub enum Message {
+ Text(ByteString),
+ Binary(Bytes),
+ Continuation(Item),
+ Ping(Bytes),
+ Pong(Bytes),
+ Close(Option<CloseReason>),
+ Nop,
+}
A WebSocket message.
+Text message.
+Binary message.
+Continuation.
+Ping message.
+Pong message.
+Close message with optional reason.
+No-op. Useful for low-level services.
+Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub enum ProtocolError {
+ UnmaskedFrame,
+ MaskedFrame,
+ InvalidOpcode(u8),
+ InvalidLength(usize),
+ BadOpCode,
+ Overflow,
+ ContinuationNotStarted,
+ ContinuationStarted,
+ ContinuationFragment(OpCode),
+ Io(Error),
+}
WebSocket protocol errors.
+Received an unmasked frame from client.
+Received a masked frame from server.
+Encountered invalid opcode.
+Invalid control frame length
+Bad opcode.
+A payload reached size limit.
+Continuation has not started.
+Received new continuation but it is already started.
+Unknown continuation fragment.
+I/O error.
+Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub fn handle(
+ req: &HttpRequest,
+ body: Payload
+) -> Result<(HttpResponse, Session, MessageStream), Error>
Begin handling websocket traffic
+ +use actix_web::{middleware::Logger, web, App, Error, HttpRequest, HttpResponse, HttpServer};
+use actix_ws::Message;
+use futures::stream::StreamExt as _;
+
+async fn ws(req: HttpRequest, body: web::Payload) -> Result<HttpResponse, Error> {
+ let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?;
+
+ actix_rt::spawn(async move {
+ while let Some(Ok(msg)) = msg_stream.next().await {
+ match msg {
+ Message::Ping(bytes) => {
+ if session.pong(&bytes).await.is_err() {
+ return;
+ }
+ }
+ Message::Text(s) => println!("Got text, {}", s),
+ _ => break,
+ }
+ }
+
+ let _ = session.close(None).await;
+ });
+
+ Ok(response)
+}
+
+#[actix_rt::main]
+async fn main() -> Result<(), anyhow::Error> {
+ HttpServer::new(move || {
+ App::new()
+ .wrap(Logger::default())
+ .route("/ws", web::get().to(ws))
+ })
+ .bind("127.0.0.1:8080")?
+ .run()
+ .await?;
+
+ Ok(())
+}
Redirecting to ../../actix_ws/struct.MessageStream.html...
+ + + \ No newline at end of file diff --git a/actix_ws/fut/struct.StreamingBody.html b/actix_ws/fut/struct.StreamingBody.html new file mode 100644 index 000000000..3e4415011 --- /dev/null +++ b/actix_ws/fut/struct.StreamingBody.html @@ -0,0 +1,11 @@ + + + + +Redirecting to ../../actix_ws/struct.StreamingBody.html...
+ + + \ No newline at end of file diff --git a/actix_ws/index.html b/actix_ws/index.html new file mode 100644 index 000000000..d4a9282ae --- /dev/null +++ b/actix_ws/index.html @@ -0,0 +1,4 @@ +WebSockets for Actix Web, without actors.
+For usage, see documentation on handle()
.
Redirecting to ../../actix_ws/struct.Closed.html...
+ + + \ No newline at end of file diff --git a/actix_ws/session/struct.Session.html b/actix_ws/session/struct.Session.html new file mode 100644 index 000000000..596ff3d84 --- /dev/null +++ b/actix_ws/session/struct.Session.html @@ -0,0 +1,11 @@ + + + + +Redirecting to ../../actix_ws/struct.Session.html...
+ + + \ No newline at end of file diff --git a/actix_ws/sidebar-items.js b/actix_ws/sidebar-items.js new file mode 100644 index 000000000..f8ddef9d4 --- /dev/null +++ b/actix_ws/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["CloseCode","Message","ProtocolError"],"fn":["handle"],"struct":["CloseReason","Closed","MessageStream","Session","StreamingBody"]}; \ No newline at end of file diff --git a/actix_ws/struct.CloseReason.html b/actix_ws/struct.CloseReason.html new file mode 100644 index 000000000..bd3b3cde1 --- /dev/null +++ b/actix_ws/struct.CloseReason.html @@ -0,0 +1,27 @@ +pub struct CloseReason {
+ pub code: CloseCode,
+ pub description: Option<String>,
+}
Reason for closing the connection
+code: CloseCode
Exit code
+description: Option<String>
Optional description of the exit code
+source
. Read moreself
and other
values to be equal, and is used
+by ==
.Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub struct Closed;
The error representing a closed websocket session
+Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub struct MessageStream { /* private fields */ }
A stream of Messages from a websocket client
+Messages can be accessed via the stream’s .next()
method
true
if any element in stream satisfied a predicate. Read moretrue
if all element in stream satisfied a predicate. Read moreStreamExt::map
] but flattens nested Stream
s
+and polls them concurrently, yielding items in any order, as they made
+available. Read moreStreamExt::fold
] that holds internal state
+and produces a new stream. Read moretrue
. Read moretrue
. Read moren
items of the underlying stream. Read moren
items of the underlying stream. Read morepeek
method. Read moreStream::poll_next
] on Unpin
+stream types.f
. Read moref
. Read moretrue
. Read moretrue
. Read moreTryStream::try_poll_next
] on Unpin
+stream types.AsyncBufRead
. Read moreErr
is encountered or if an Ok
item is found
+that does not satisfy the predicate. Read moreErr
is encountered or if an Ok
item is found
+that satisfies the predicate. Read moreSubscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub struct Session { /* private fields */ }
A handle into the websocket session.
+This type can be used to send messages into the websocket.
+Send text into the websocket
+ +if session.text("Some text").await.is_err() {
+ // session closed
+}
Send raw bytes into the websocket
+ +if session.binary(b"some bytes").await.is_err() {
+ // session 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() {
+ // session is closed
+}
Subscriber
to this type, returning a
+[WithDispatch
] wrapper. Read morepub struct StreamingBody { /* private fields */ }
A response body for Websocket HTTP Requests
+true
if any element in stream satisfied a predicate. Read moretrue
if all element in stream satisfied a predicate. Read moreStreamExt::map
] but flattens nested Stream
s
+and polls them concurrently, yielding items in any order, as they made
+available. Read moreStreamExt::fold
] that holds internal state
+and produces a new stream. Read moretrue
. Read moretrue
. Read moren
items of the underlying stream. Read moren
items of the underlying stream. Read morepeek
method. Read moreStream::poll_next
] on Unpin
+stream types.f
. Read moref
. Read moretrue
. Read moretrue
. Read moreTryStream::try_poll_next
] on Unpin
+stream types.AsyncBufRead
. Read moreErr
is encountered or if an Ok
item is found
+that does not satisfy the predicate. Read moreErr
is encountered or if an Ok
item is found
+that satisfies the predicate. Read moreSubscriber
to this type, returning a
+[WithDispatch
] wrapper. Read moreU::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","","Change max size of payload. By default max size is 256Kb","Change max size of payload. By default max size is 256Kb","Create ProtoBufMessage
for request.","","","","","","","","","","","","","","","","","","","","","","",""],"i":[4,4,4,4,0,0,0,0,0,4,2,1,15,4,2,1,15,4,1,2,2,4,2,2,4,4,2,1,15,4,4,4,2,2,1,15,4,15,1,15,15,15,25,2,2,2,4,2,1,15,4,2,1,15,4,15,2,1,15,4,2,1,15,4],"f":[0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],1],[[[2,[-1]]],-1,3],[[[2,[-1]]],-1,3],[4,5],[[[2,[-1]],6],7,[8,3]],[[[2,[-1]],6],7,[9,3]],[[4,6],7],[[4,6],7],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[10,4],[11,4],[[12,13]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[[1,14],1],[[[15,[-1]],14],[[15,[-1]]],[3,16]],[[12,13],[[15,[-1]]],[3,16]],[[[17,[[15,[-1]]]],18],19,[3,16]],[[-1,-2],[[21,[5,20]]],[],3],[-1,22,[]],[[[2,[-1]],12],5,[3,16]],[-1,23,[]],[-1,23,[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[[[17,[-1]],18],19,[]],[-1,24,[]],[-1,24,[]],[-1,24,[]],[-1,24,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]]],"c":[],"p":[[3,"ProtoBufConfig",0],[3,"ProtoBuf",0],[8,"Message",64],[4,"ProtoBufPayloadError",0],[3,"HttpResponse",65],[3,"Formatter",66],[6,"Result",66],[8,"Display",66],[8,"Debug",66],[3,"DecodeError",67],[4,"PayloadError",68],[3,"HttpRequest",69],[4,"Payload",70],[15,"usize"],[3,"ProtoBufMessage",0],[8,"Default",71],[3,"Pin",72],[3,"Context",73],[4,"Poll",74],[3,"Error",75],[4,"Result",76],[3,"Path",77],[3,"String",78],[3,"TypeId",79],[8,"ProtoBufResponseBuilder",0]],"b":[[22,"impl-Display-for-ProtoBuf%3CT%3E"],[23,"impl-Debug-for-ProtoBuf%3CT%3E"],[24,"impl-Display-for-ProtoBufPayloadError"],[25,"impl-Debug-for-ProtoBufPayloadError"],[30,"impl-From%3CDecodeError%3E-for-ProtoBufPayloadError"],[31,"impl-From%3CPayloadError%3E-for-ProtoBufPayloadError"]]},\
"actix_redis":{"doc":"Redis integration for actix
.","t":"NNDNNENNNNNNNDNNEENNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Array","BulkString","Command","Connection","Disconnected","Error","Error","IO","Integer","Internal","Nil","NotConnected","Redis","RedisActor","Remote","Resp","RespError","RespValue","SimpleString","Unexpected","append","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","error","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_resp_int","handle","handle","into","into","into","into","into","push","resp_array","restarting","source","source","start","started","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"],"q":[[0,"actix_redis"],[97,"core::iter::traits::collect"],[98,"std::io::error"],[99,"actix::actor"],[100,"core::fmt"],[101,"core::fmt"],[102,"alloc::string"],[103,"alloc::vec"],[104,"alloc::sync"],[105,"futures_channel::mpsc"],[106,"core::marker"],[107,"core::convert"],[108,"core::error"],[109,"core::option"],[110,"actix::address"],[111,"actix::context"],[112,"core::any"]],"d":["Zero, one or more other RespValue
s.","A bulk string. In Redis terminology a string is a …","Command for sending data to Redis.","Error creating a connection, or an error with a connection …","Cancel all waiters when connection is dropped.","General purpose actix-redis
error.","An error from the Redis server","An IO error occurred","Redis documentation defines an integer as being a signed …","A non-specific internal error that prevented an operation …","","Receiving message during reconnecting.","","Redis communication actor.","A remote error","A RESP parsing/serialising error occurred","","A single RESP value, this owns the data that is read/to-be …","","An unexpected error. In this context “unexpected” …","Convenience function for building dynamic Redis commands …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Push item to Resp array","Macro to create a RESP array, useful for preparing …","","","","Start new Supervisor
with RedisActor
.","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,0,3,12,0,1,3,1,3,1,12,12,0,3,3,0,0,1,3,1,6,9,12,1,3,6,9,12,1,3,1,3,1,3,1,6,9,12,12,1,3,3,6,9,12,12,1,1,1,1,1,1,1,1,3,3,3,1,6,6,6,9,12,1,3,1,0,6,12,3,6,6,1,3,12,3,6,9,12,1,3,6,9,12,1,3,6,9,12,1,3,6,9,12,1,3],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,-1],1,2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[3,3],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[1,1],5],[[6,7],8],[[9,10],11],[[12,10],11],[[12,10],11],[[1,10],[[14,[4,13]]]],[[3,10],[[14,[4,13]]]],[[3,10],[[14,[4,13]]]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[3,12],[15,1],[16,1],[[[18,[17]]],1],[19,1],[16,1],[[[20,[17]]],1],[[[21,[19]]],1],[-1,-1,[]],[7,3],[[[22,[-1]]],3,23],[-1,-1,[]],[1,[[14,[1,3]]]],[[6,9]],[[6,[14,[1,3]]],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[1,-1],4,[[24,[1]]]],0,[6,4],[12,[[26,[25]]]],[3,[[26,[25]]]],[-1,[[27,[6]]],[[24,[16]]]],[[6,[28,[6]]],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,16,[]],[-1,16,[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,29,[]],[-1,29,[]],[-1,29,[]],[-1,29,[]],[-1,29,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]]],"c":[],"p":[[4,"RespValue",0],[8,"IntoIterator",97],[4,"RespError",0],[15,"tuple"],[15,"bool"],[3,"RedisActor",0],[3,"Error",98],[4,"Running",99],[3,"Command",0],[3,"Formatter",100],[6,"Result",100],[4,"Error",0],[3,"Error",100],[4,"Result",101],[15,"usize"],[3,"String",102],[15,"u8"],[3,"Vec",103],[15,"str"],[15,"slice"],[3,"Arc",104],[3,"TrySendError",105],[8,"Send",106],[8,"Into",107],[8,"Error",108],[4,"Option",109],[3,"Addr",110],[3,"Context",111],[3,"TypeId",112]],"b":[[38,"impl-Debug-for-Error"],[39,"impl-Display-for-Error"],[41,"impl-Debug-for-Error"],[42,"impl-Display-for-Error"],[47,"impl-From%3Cusize%3E-for-RespValue"],[48,"impl-From%3C%26String%3E-for-RespValue"],[49,"impl-From%3CVec%3Cu8%3E%3E-for-RespValue"],[50,"impl-From%3C%26str%3E-for-RespValue"],[51,"impl-From%3CString%3E-for-RespValue"],[52,"impl-From%3C%26%5Bu8%5D%3E-for-RespValue"],[53,"impl-From%3CArc%3Cstr%3E%3E-for-RespValue"],[55,"impl-From%3CError%3E-for-Error"],[56,"impl-From%3CTrySendError%3CT%3E%3E-for-Error"],[59,"impl-Handler%3CCommand%3E-for-RedisActor"],[60,"impl-StreamHandler%3CResult%3CRespValue,+Error%3E%3E-for-RedisActor"]]},\
"actix_session":{"doc":"Session management for Actix Web.","t":"NNNDIDDDENLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLDNENNDNNEDNELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDNENNNDDDDENNDIELLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLLLLLLLLLLLL","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","RedisActorSessionStore","RedisActorSessionStoreBuilder","RedisSessionStore","RedisSessionStoreBuilder","SaveError","Serialization","Serialization","SessionKey","SessionStore","UpdateError","as_ref","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","build","build","builder","builder","cache_keygen","cache_keygen","clone","clone_into","default","delete","delete","delete","delete","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","load","load","load","load","new","new","save","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_from","try_from","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","update","update","update","update","update_ttl","update_ttl","update_ttl","update_ttl","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"actix_session"],[90,"actix_session::config"],[187,"actix_session::storage"],[323,"cookie::secure::key"],[324,"core::clone"],[325,"alloc::string"],[326,"std::collections::hash::map"],[327,"core::cell"],[328,"actix_http::body::boxed"],[329,"actix_web::response::response"],[330,"core::fmt"],[331,"core::fmt"],[332,"actix_web::request"],[333,"actix_http::payload"],[334,"core::option"],[335,"core::result"],[336,"serde::de"],[337,"core::convert"],[338,"serde::ser"],[339,"actix_web::service"],[340,"actix_service"],[341,"core::error"],[342,"core::any"],[343,"cookie::draft"],[344,"time::duration"],[345,"core::ops::function"],[346,"core::marker"],[347,"core::marker"],[348,"alloc::boxed"],[349,"core::pin"]],"d":["Session state has been updated - the changes will have to …","The session has been flagged for deletion - the session …","The session has been flagged for renewal.","The primary interface to access and modify session state.","Extract a Session
object from various actix-web
types …","Error returned by Session::get
.","Error returned by Session::insert
.","A middleware for session management in Actix Web …","Status of a Session
.","The session state has not been modified since its …","","","","","","","","","","","A fluent API to configure SessionMiddleware
.","Clear the session.","","","","","","","Configuration options to tune the behaviour of …","","Get all raw key-value data from the session.","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","Get a value
from the session.","Extract a Session
object.","Inserts a key-value pair into the session.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Use SessionMiddleware::new
to initialize the session …","","Removes session both client and server side.","Remove value from the session.","Remove value from the session and deserialize.","Renews the session key, assigning existing session state …","","","Returns session status.","Pluggable storage backends for session state.","","","","","","","","","","","","","","","","","","","","","","","","","","A session lifecycle strategy where the session cookie …","The session cookie will expire when the current browser …","Determines how to secure the content of the session cookie.","The TTL is refreshed every time the server receives a …","The TTL is refreshed every time the session state changes …","A session lifecycle strategy where the session cookie will …","The session cookie will be a persistent cookie.","The cookie content is encrypted when using …","Determines what type of session cookie should be used and …","A fluent, customized SessionMiddleware
builder.","The cookie content is signed when using …","Configuration for which events should trigger an extension …","","","","","","","","","","","","","Finalise the builder and return a SessionMiddleware
…","","","","","","","","","","","Choose how the session cookie content should be secured.","Set the Domain
attribute for the cookie used to store the …","Set the HttpOnly
attribute for the cookie used to store …","Set the name of the cookie used to store the session ID.","Set the Path
attribute for the cookie used to store the …","Set the SameSite
attribute for the cookie used to store …","Set the Secure
attribute for the cookie used to store the …","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Determines what type of session cookie should be used and …","Specifies how long the session cookie should live.","Determines under what circumstances the TTL of your …","Sets a time-to-live (TTL) when storing the session state …","Determine under what circumstances the TTL of your session …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Use the session key, stored in the session cookie, as …","Failed to deserialize session state.","Possible failures modes for SessionStore::load
.","Something went wrong when retrieving the session state.","Something went wrong when persisting the session state.","Something went wrong when updating the session state.","Use Redis as session storage backend.","A fluent builder to construct a RedisActorSessionStore
…","Use Redis as session storage backend.","A fluent builder to construct a RedisSessionStore
instance …","Possible failures modes for SessionStore::save
.","Failed to serialize session state.","Failed to serialize session state.","A session key, the string stored in a client-side cookie …","The interface to retrieve and save the current session …","Possible failures modes for SessionStore::update
.","","","","","","","","","","","","","","","","","","","","Finalise the builder and return a RedisActorSessionStore
…","Finalise the builder and return a RedisActorSessionStore
…","A fluent API to configure RedisActorSessionStore
.","A fluent API to configure RedisSessionStore
. It takes as …","Set a custom cache key generation strategy, expecting a …","Set a custom cache key generation strategy, expecting a …","","","","Deletes a session from the store.","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Loads the session state associated to a session key.","","","","Create a new instance of RedisActorSessionStore
using the …","Create a new instance of RedisSessionStore
using the …","Persist the session state for a newly created session.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Updates the session state associated to a pre-existing …","","","","Updates the TTL of the session state associated to a …","","","","","","","","","","","",""],"i":[8,8,8,0,0,0,0,0,0,8,6,4,8,13,16,6,4,8,13,16,6,4,6,4,8,6,4,8,0,8,4,8,13,16,8,13,13,16,16,6,4,8,13,13,16,16,4,4,54,4,6,4,8,13,16,6,6,4,4,4,4,13,16,4,0,6,4,8,13,16,6,4,8,13,16,6,4,8,13,16,6,4,8,13,16,6,4,8,13,16,0,32,0,35,35,0,32,36,0,0,36,0,2,32,33,34,35,36,2,32,33,34,35,36,2,32,33,34,35,36,32,33,34,35,36,2,2,2,2,2,2,2,33,34,32,33,34,35,36,2,32,32,32,33,34,35,36,2,32,33,34,35,36,2,34,34,33,33,32,33,34,35,36,2,32,33,34,35,36,2,32,33,34,35,36,2,32,33,34,35,36,2,32,33,34,35,36,0,51,0,51,52,53,0,0,0,0,0,52,53,0,0,0,39,41,40,42,51,52,53,39,47,43,41,40,42,51,52,53,39,47,43,40,42,41,43,40,42,43,43,47,3,41,47,43,39,51,51,52,52,53,53,39,41,40,42,51,52,53,39,47,43,41,40,42,51,52,53,39,47,43,3,41,47,43,41,43,3,41,47,43,51,52,53,43,51,52,53,41,40,42,51,52,53,39,39,47,43,41,40,42,51,52,53,39,47,43,41,40,42,51,52,53,39,47,43,3,41,47,43,3,41,47,43,41,40,42,51,52,53,39,47,43],"f":[0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[-1,1],[[2,[-1]]],3],[4,5],[[[6,[-1]]],[[6,[-1]]],[7,3]],[4,4],[8,8],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],0,[[],8],[4,[[11,[[10,[9,9]]]]]],[[8,8],12],[13,[[15,[14]]]],[16,[[15,[14]]]],[[8,17],18],[[13,17],18],[[13,17],18],[[16,17],18],[[16,17],18],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[19,13],[-1,-1,[]],[19,16],[[20,21]],[[4,22],[[24,[[23,[-1]],13]]],25],[-1,4,[]],[[4,-1,-2],[[24,[5,16]]],[[26,[9]]],27],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[-1,1],[[6,[-1]]],3],[[[6,[-1]],-2],[],3,[[29,[28]]]],[4,5],[[4,22],[[23,[9]]]],[[4,22],[[23,[[24,[-1,9]]]]],25],[4,5],[13,[[23,[30]]]],[16,[[23,[30]]]],[4,8],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,9,[]],[-1,9,[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[2,[-1]]],[[6,[-1]]],3],[32,32],[33,33],[34,34],[35,35],[36,36],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[[2,[-1]],36],[[2,[-1]]],3],[[[2,[-1]],[23,[9]]],[[2,[-1]]],3],[[[2,[-1]],12],[[2,[-1]]],3],[[[2,[-1]],9],[[2,[-1]]],3],[[[2,[-1]],9],[[2,[-1]]],3],[[[2,[-1]],37],[[2,[-1]]],3],[[[2,[-1]],12],[[2,[-1]]],3],[[],33],[[],34],[[32,17],18],[[33,17],18],[[34,17],18],[[35,17],18],[[36,17],18],[-1,-1,[]],[34,32],[33,32],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[2,[-1]],-2],[[2,[-1]]],3,[[26,[32]]]],[[34,38],34],[[34,35],34],[[33,38],33],[[33,35],33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[39,22],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[40,41],[42,[[24,[43,19]]]],[-1,40,[[26,[9]]]],[-1,42,[[26,[9]]]],[[40,-1],40,44],[[42,-1],42,[44,45,46]],[43,43],[[-1,-2],5,[],[]],[[],47],[[-1,39],[[50,[[49,[48]]]]],[]],[[41,39],[[50,[[49,[48]]]]]],[[47,39],[[50,[[49,[48]]]]]],[[43,39],[[50,[[49,[48]]]]]],[[39,39],12],[[51,17],18],[[51,17],18],[[52,17],18],[[52,17],18],[[53,17],18],[[53,17],18],[[39,17],18],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[-1,39],[[50,[[49,[48]]]]],[]],[[41,39],[[50,[[49,[48]]]]]],[[47,39],[[50,[[49,[48]]]]]],[[43,39],[[50,[[49,[48]]]]]],[-1,41,[[26,[9]]]],[-1,[[24,[43,19]]],[[26,[9]]]],[[-1,[10,[9,9]],38],[[50,[[49,[48]]]]],[]],[[41,[10,[9,9]],38],[[50,[[49,[48]]]]]],[[47,[10,[9,9]],38],[[50,[[49,[48]]]]]],[[43,[10,[9,9]],38],[[50,[[49,[48]]]]]],[51,[[23,[30]]]],[52,[[23,[30]]]],[53,[[23,[30]]]],[-1,-2,[],[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[9,[[24,[39]]]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[-1,31,[]],[[-1,39,[10,[9,9]],38],[[50,[[49,[48]]]]],[]],[[41,39,[10,[9,9]],38],[[50,[[49,[48]]]]]],[[47,39,[10,[9,9]],38],[[50,[[49,[48]]]]]],[[43,39,[10,[9,9]],38],[[50,[[49,[48]]]]]],[[-1,39,38],[[50,[[49,[48]]]]],[]],[[41,39,38],[[50,[[49,[48]]]]]],[[47,39,38],[[50,[[49,[48]]]]]],[[43,39,38],[[50,[[49,[48]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]]],"c":[],"p":[[3,"Key",323],[3,"SessionMiddlewareBuilder",90],[8,"SessionStore",187],[3,"Session",0],[15,"tuple"],[3,"SessionMiddleware",0],[8,"Clone",324],[4,"SessionStatus",0],[3,"String",325],[3,"HashMap",326],[3,"Ref",327],[15,"bool"],[3,"SessionGetError",0],[3,"BoxBody",328],[3,"HttpResponse",329],[3,"SessionInsertError",0],[3,"Formatter",330],[6,"Result",330],[3,"Error",331],[3,"HttpRequest",332],[4,"Payload",333],[15,"str"],[4,"Option",334],[4,"Result",335],[8,"DeserializeOwned",336],[8,"Into",337],[8,"Serialize",338],[3,"ServiceRequest",339],[8,"Service",340],[8,"Error",341],[3,"TypeId",342],[4,"SessionLifecycle",90],[3,"BrowserSession",90],[3,"PersistentSession",90],[4,"TtlExtensionPolicy",90],[4,"CookieContentSecurity",90],[4,"SameSite",343],[3,"Duration",344],[3,"SessionKey",187],[3,"RedisActorSessionStoreBuilder",187],[3,"RedisActorSessionStore",187],[3,"RedisSessionStoreBuilder",187],[3,"RedisSessionStore",187],[8,"Fn",345],[8,"Send",346],[8,"Sync",346],[3,"CookieSessionStore",187],[8,"Future",347],[3,"Box",348],[3,"Pin",349],[4,"LoadError",187],[4,"SaveError",187],[4,"UpdateError",187],[8,"SessionExt",0]],"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"],[236,"impl-Display-for-LoadError"],[237,"impl-Debug-for-LoadError"],[238,"impl-Display-for-SaveError"],[239,"impl-Debug-for-SaveError"],[240,"impl-Debug-for-UpdateError"],[241,"impl-Display-for-UpdateError"]]},\
-"actix_settings":{"doc":"Easily manage Actix Web’s settings from a TOML file and …","t":"DDIEDNNNNNNNNNENNNENNNNEENEDENINNNNNNGEDNMMMMKMLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLMMMMMLLKLLLLLLLLLMMMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMM","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,"core::clone"],[318,"core::result"],[319,"serde::de"],[320,"serde::de"],[321,"core::fmt"],[322,"core::fmt"],[323,"std::env"],[324,"toml::de"],[325,"std::io::error"],[326,"core::str::error"],[327,"serde::de"],[328,"core::hash"],[329,"std::path"],[330,"core::error"],[331,"core::option"],[332,"alloc::string"],[333,"core::any"]],"d":["Settings types for Actix Web.","A host/port pair for the server to bind to.","Extension trait for applying parsed settings to the server …","The maximum number of pending connections.","Wrapper for server and application-specific settings.","The default number of connections. See struct docs.","The default keep-alive as defined by Actix Web.","The default connection limit. See struct docs.","The default number of connections. See struct docs.","The default number of workers. See struct docs.","The default timeout. Depends on context.","Marks development environment.","Disable keep-alive.","Environment variable does not exists or is invalid.","Errors that can be returned from methods in this crate.","File already exists on disk.","Invalid value.","I/O error.","The server keep-alive preference.","A specific number of connections.","A specific connection limit.","A specific number of connections.","A specific number of workers.","The maximum per-worker concurrent TLS connection limit.","The maximum per-worker number of concurrent connections.","Timeout in milliseconds.","Marker of intended deployment environment.","Marker type representing no defined application-specific …","The number of workers that the server should start.","Let the OS determine keep-alive duration.","A specialized FromStr
trait that returns Error
errors","Value is not an address.","Value is not a boolean.","Value is not an integer.","Marks production environment.","A specific keep-alive duration (in seconds).","Timeout in seconds.","Convenience type alias for BasicSettings
with no defined …","A timeout duration in milliseconds or seconds.","TLS (HTTPS) configuration.","Error deserializing as TOML.","Actix Web server settings.","Actix Web server settings.","Application-specific settings.","Application-specific settings.","Apply some settings object value to self
.","The maximum number of pending connections.","","","","","","","","","","","","","","","","","","","","","","","","","","","Path to certificate .pem
file.","Timeout duration for connection shutdown.","Timeout duration for reading client request header.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","True if the Compress
middleware should be enabled.","True if the Logger
middleware should be enabled.","Tru if accepting TLS connections should be enabled.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Parse an instance of Self
straight from the default TOML …","Parse an instance of Self
straight from the default TOML …","","","","","","","","","","","","","Host part of address.","List of addresses for the server to bind to.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Server keep-alive preference.","The per-worker maximum concurrent TLS connection limit.","The per-worker maximum number of concurrent connections.","Marker of intended deployment environment.","The number of workers that the server should start.","Attempts to parse value
and override the referenced field
.","Attempts to read an environment variable, parse it, and …","Parse Self
from string
.","","","","","","","","","Parse an instance of Self
from a TOML file located at …","Port part of address.","Path to private key .pem
file.","Timeout duration for graceful worker shutdown.","","TLS (HTTPS) configuration.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Writes the default TOML template to a new file, located at …","","","","",""],"i":[0,0,0,0,0,2,3,4,5,7,8,6,3,20,0,20,20,20,0,2,4,5,7,0,0,8,0,0,0,3,0,20,20,20,6,3,8,0,0,0,20,40,11,40,11,41,10,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,9,10,10,1,2,3,4,5,6,7,8,9,10,11,13,1,2,3,4,5,6,7,8,9,10,11,13,1,2,3,4,5,6,7,8,9,10,11,13,10,10,9,1,2,3,4,5,6,7,8,9,10,11,13,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,13,13,13,20,20,1,2,3,4,5,6,7,8,9,10,11,13,20,20,20,20,20,20,1,2,3,4,5,6,7,8,9,10,11,13,11,11,1,2,3,4,5,6,7,8,9,10,11,13,1,10,20,1,2,3,4,5,6,7,8,9,10,11,13,10,10,10,10,10,11,11,33,1,2,3,4,5,6,7,8,11,1,9,10,20,10,1,2,3,4,5,6,7,8,9,10,11,13,20,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,11,42,42,42,42,42],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,-2],-1,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[[[11,[-1]]],[[11,[-1]]],12],[13,13],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[-1,[[15,[1]]],16],[-1,[[15,[2]]],16],[-1,[[15,[3]]],16],[-1,[[15,[4]]],16],[-1,[[15,[5]]],16],[-1,[[15,[6]]],16],[-1,[[15,[7]]],16],[-1,[[15,[8]]],16],[-1,[[15,[9]]],16],[-1,[[15,[10]]],16],[-1,[[15,[[11,[-2]]]]],16,17],[-1,[[15,[13]]],16],0,0,0,[[1,1],18],[[2,2],18],[[3,3],18],[[4,4],18],[[5,5],18],[[6,6],18],[[7,7],18],[[8,8],18],[[9,9],18],[[10,10],18],[[[11,[-1]],[11,[-1]]],18,19],[[13,13],18],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[20,21],22],[[20,21],22],[[1,21],22],[[2,21],22],[[3,21],22],[[4,21],22],[[5,21],22],[[6,21],22],[[7,21],22],[[8,21],22],[[9,21],22],[[10,21],22],[[[11,[-1]],21],22,23],[[13,21],22],[24,20],[25,20],[26,20],[27,20],[28,20],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[],[[11,[-1]]],29],[30,[[15,[[11,[-1]],20]]],29],[[1,-1],14,31],[[2,-1],14,31],[[3,-1],14,31],[[4,-1],14,31],[[5,-1],14,31],[[6,-1],14,31],[[7,-1],14,31],[[8,-1],14,31],[[9,-1],14,31],[[10,-1],14,31],[[[11,[-1]],-2],14,32,31],[[13,-1],14,31],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,[[-1,-2],[[15,[14,20]]],33,[[34,[30]]]],[[-1,-2],[[15,[14,20]]],33,[[34,[30]]]],[30,[[15,[-1,20]]],[]],[30,[[15,[1,20]]]],[30,[[15,[2,20]]]],[30,[[15,[3,20]]]],[30,[[15,[4,20]]]],[30,[[15,[5,20]]]],[30,[[15,[6,20]]]],[30,[[15,[7,20]]]],[30,[[15,[8,20]]]],[-1,[[15,[[11,[-2]],20]]],[[34,[35]]],29],0,0,0,[20,[[37,[36]]]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,38,[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[15,[14,20]]],[[34,[35]]]],0,0,0,0,0],"c":[],"p":[[3,"Address",0],[4,"Backlog",0],[4,"KeepAlive",0],[4,"MaxConnectionRate",0],[4,"MaxConnections",0],[4,"Mode",0],[4,"NumWorkers",0],[4,"Timeout",0],[3,"Tls",0],[3,"ActixSettings",0],[3,"BasicSettings",0],[8,"Clone",317],[3,"NoSettings",0],[15,"tuple"],[4,"Result",318],[8,"Deserializer",319],[8,"Deserialize",319],[15,"bool"],[8,"PartialEq",320],[4,"Error",0],[3,"Formatter",321],[6,"Result",321],[8,"Debug",321],[3,"ParseIntError",322],[4,"VarError",323],[3,"Error",324],[3,"Error",325],[3,"ParseBoolError",326],[8,"DeserializeOwned",319],[15,"str"],[8,"Hasher",327],[8,"Hash",327],[8,"Parse",0],[8,"AsRef",328],[3,"Path",329],[8,"Error",330],[4,"Option",331],[3,"String",332],[3,"TypeId",333],[6,"Settings",0],[8,"ApplySettings",0],[13,"InvalidValue",312]],"b":[[163,"impl-Display-for-Error"],[164,"impl-Debug-for-Error"],[177,"impl-From%3CParseIntError%3E-for-Error"],[178,"impl-From%3CVarError%3E-for-Error"],[179,"impl-From%3CError%3E-for-Error"],[180,"impl-From%3CError%3E-for-Error"],[181,"impl-From%3CParseBoolError%3E-for-Error"]],"a":{"https":[39],"ssl":[39]}},\
-"actix_web_httpauth":{"doc":"HTTP authentication schemes for Actix Web.","t":"AAAIDQAALLLLLLLLLKLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAADNDDNNNEINNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIDAALLLLLLLLLLLLLLKLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLDDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLL","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","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"],[219,"actix_web_httpauth::headers::www_authenticate"],[245,"actix_web_httpauth::headers::www_authenticate::basic"],[268,"actix_web_httpauth::headers::www_authenticate::bearer"],[311,"actix_web_httpauth::middleware"],[328,"actix_web::response::response"],[329,"core::fmt"],[330,"core::fmt"],[331,"alloc::string"],[332,"core::result"],[333,"core::any"],[334,"alloc::borrow"],[335,"core::convert"],[336,"actix_web::request"],[337,"actix_http::payload"],[338,"core::option"],[339,"core::cmp"],[340,"core::hash"],[341,"core::clone"],[342,"core::cmp"],[343,"core::cmp"],[344,"base64::decode"],[345,"http::header::value"],[346,"core::hash"],[347,"http::header::value"],[348,"actix_http::http_message"],[349,"core::cmp"],[350,"bytes::bytes"],[351,"core::fmt"],[352,"actix_web::extract"],[353,"actix_web::service"],[354,"actix_service"]],"d":["Type-safe authentication information extractors.","Typed HTTP headers.","HTTP Authentication middleware.","Trait implemented for types that provides configuration …","Authentication error returned by authentication extractors.","Associated challenge type.","Extractor for the “Basic” HTTP Authentication Scheme.","Extractor for the “Bearer” HTTP Authentication Scheme.","","","Returns mutable reference to the inner challenge instance.","","","","Returns the argument unchanged.","","Calls U::from(self)
.","Convert the config instance into a HTTP challenge.","Creates new authentication error from the provided …","","Returns mutable reference to the inner status code.","","","","","","Attach Error
to the current Authentication error.","Attach error description to the current Authentication …","Attach error URI to the current Authentication error.","Extractor for HTTP Basic auth.","BasicAuth
extractor configuration used for WWW-Authenticate
…","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","","Returns client’s password.","Set challenge realm
attribute.","","","","","","","","","Returns client’s user-ID.","","","Extractor for HTTP Bearer auth","BearerAuth
extractor configuration.","Bearer authorization error types, described in RFC 6750.","The request requires higher privileges than provided by …","The request is missing a required parameter, includes an …","The access token provided is expired, revoked, malformed, …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","","","Set challenge realm
attribute.","Set challenge scope
attribute.","Returns HTTP status code suitable for current error type.","","","","","Returns bearer token provided by client.","","","","","","","","","","","","","Authorization
header and various auth schemes.","WWW-Authenticate
header and various auth challenges.","Authorization
header, defined in RFC 7235","Malformed base64 string.","Credentials for Basic
authentication scheme, defined in …","Credentials for Bearer
authentication scheme, defined in …","Header value is malformed.","Required authentication field is missing.","Authentication scheme is missing.","Possible errors while parsing Authorization
header.","Authentication scheme for Authorization
header.","Unable to convert header into the str.","Malformed UTF-8 string.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Consumes Authorization
header and returns inner Scheme
…","","Creates Basic
credentials with provided user_id
and …","Creates new Bearer
credentials with the token provided.","Try to parse an authentication scheme from the …","","","","","","","Returns client’s password if provided.","","","","","","","","","Gets reference to the credentials token.","","","","","","","","","","","","","","","","","Returns client’s user-ID.","","","","","Authentication challenge for WWW-Authenticate
header.","WWW-Authenticate
header, described in RFC 7235.","Challenge for the “Basic” HTTP Authentication Scheme.","Challenge for the “Bearer” HTTP Authentication Scheme.","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self)
.","","","","Converts the challenge into a bytes suitable for HTTP …","","","","","","","","Challenge for WWW-Authenticate
header with HTTP Basic auth …","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self)
.","Creates new Basic
challenge with an empty realm
field.","","","","","","","","","Creates new Basic
challenge from the provided realm
field …","Challenge for WWW-Authenticate
header with HTTP Bearer …","Builder for the Bearer
challenge.","Bearer authorization error types, described in RFC 6750.","The request requires higher privileges than provided by …","The request is missing a required parameter, includes an …","The access token provided is expired, revoked, malformed, …","","","","","Creates the builder for Bearer
challenge.","","","","","","","Provides the error
attribute, as defined in [RFC 6750, …","Provides the error_description
attribute, as defined in […","Provides the error_uri
attribute, as defined in [RFC 6750 …","Consumes the builder and returns built Bearer
instance.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","","Provides the realm
attribute, as defined in RFC 2617.","Provides the scope
attribute, as defined in RFC 6749 §3.3.","","","","","","","","","","","","Middleware for checking HTTP authentication.","Construct HttpAuthentication
middleware for the HTTP “…","Construct HttpAuthentication
middleware for the HTTP “…","","","","","","Returns the argument unchanged.","Calls U::from(self)
.","","","","","","","Construct HttpAuthentication
middleware with the provided …"],"i":[0,0,0,0,0,7,0,0,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,0,0,17,17,19,17,19,17,19,17,19,17,17,19,17,19,19,19,17,19,17,19,17,17,19,17,19,17,19,17,19,19,17,19,0,0,0,13,13,13,25,25,26,13,25,26,13,25,26,13,25,26,13,13,25,13,25,26,13,13,25,26,13,26,13,25,26,13,25,13,25,25,13,25,26,13,13,26,25,26,13,25,26,13,25,26,13,25,26,13,0,0,0,37,0,0,37,37,37,0,0,37,37,30,30,37,30,21,33,37,30,21,33,30,21,33,30,21,33,30,21,33,30,30,21,33,37,37,30,30,21,21,33,33,37,37,37,37,30,30,30,21,33,30,37,30,21,33,30,30,21,33,31,30,21,33,30,21,33,21,37,30,21,33,37,30,21,33,33,37,30,21,33,37,30,21,33,30,30,21,33,37,30,21,33,21,37,30,21,33,0,0,0,0,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,49,49,49,49,49,49,49,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,13,13,13,52,12,52,12,12,12,12,12,52,12,12,52,52,52,52,52,12,12,52,12,12,52,12,12,52,52,12,12,52,12,52,12,12,52,12,52,12,0,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53],"f":[0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[1,[-1]]],-1,2],[[[1,[-1]]],3,2],[[[1,[-1]],4],5,[6,2]],[[[1,[-1]],4],5,2],[-1,-1,[]],[-1,1,7],[-1,-2,[],[]],[-1,[],[]],[-1,[[1,[-1]]],2],[[[1,[-1]]],8,2],[[[1,[-1]]],8,2],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,-2,[],[]],[[[1,[12]],13],[[1,[12]]]],[[[1,[12]],-1],[[1,[12]]],[[16,[[15,[14]]]]]],[[[1,[12]],-1],[[1,[12]]],[[16,[[15,[14]]]]]],0,0,[17,18],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[17,17],[19,19],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[],17],[[17,4],5],[[19,4],5],[-1,-1,[]],[21,19],[-1,-1,[]],[[22,23]],[-1,-2,[],[]],[-1,-2,[],[]],[17],[19,[[24,[14]]]],[[17,-1],17,[[16,[[15,[14]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,11,[]],[19,14],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,[25,12],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[26,26],[13,13],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[13,13],27],[[],25],[[13,13],28],[[25,4],5],[[26,4],5],[[13,4],5],[[13,4],5],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[22,23]],[[13,-1],20,29],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25],[[13,13],[[24,[27]]]],[[25,-1],25,[[16,[[15,[14]]]]]],[[25,-1],25,[[16,[[15,[14]]]]]],[13,8],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,9,[]],[26,14],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[[30,[-1]]],-1,31],[[[30,[-1]]],-1,31],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[30,[-1]]],[[30,[-1]]],[32,31]],[21,21],[33,33],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[[30,[-1]],[30,[-1]]],27,[34,31]],[[21,21],27],[[33,33],27],[[],[[30,[-1]]],[35,31]],[[[30,[-1]],[30,[-1]]],28,[36,31]],[[21,21],28],[[33,33],28],[[37,4],5],[[37,4],5],[[[30,[-1]],4],5,[6,31]],[[[30,[-1]],4],5,31],[[21,4],5],[[21,4],5],[[33,4],5],[[33,4],5],[38,37],[-1,-1,[]],[39,37],[40,37],[-1,[[30,[-1]]],31],[-1,-1,[]],[41,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[30,[-1]],-2],20,[42,31],29],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[30,[-1]]],-1,31],[[],43],[[-1,[24,[-2]]],21,[[16,[[15,[14]]]]],[[16,[[15,[14]]]]]],[-1,33,[[16,[[15,[14]]]]]],[44,[[10,[-1,37]]],[]],[-1,[[10,[[30,[-2]],45]]],46,31],[44,[[10,[21,37]]]],[44,[[10,[33,37]]]],[[[30,[-1]],[30,[-1]]],[[24,[27]]],[47,31]],[[21,21],[[24,[27]]]],[[33,33],[[24,[27]]]],[21,[[24,[14]]]],[37,[[24,[48]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[33,14],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[[20,[43,44]]]]],[]],[[[30,[-1]]],[[10,[44]]],31],[21,[[10,[44]]]],[33,[[10,[44]]]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[21,14],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[49,[-1]]],[[49,[-1]]],[32,2]],[[-1,-2],20,[],[]],[[[49,[-1]],[49,[-1]]],27,[34,2]],[[],[[49,[-1]]],[35,2]],[[[49,[-1]],[49,[-1]]],28,[36,2]],[[[49,[-1]],4],5,[6,2]],[-1,-1,[]],[[[49,[-1]],-2],20,[42,2],29],[-1,-2,[],[]],[[],43],[-1,[[10,[[49,[-2]],45]]],46,2],[[[49,[-1]],[49,[-1]]],[[24,[27]]],[47,2]],[-1,50,[]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[[20,[43,44]]]]],[]],[[[49,[-1]]],[[10,[44]]],2],[-1,11,[]],[-1,-2,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[18,18],[[-1,-2],20,[],[]],[[18,18],27],[[],18],[[18,18],28],[[18,4],[[10,[20,51]]]],[[18,4],5],[-1,-1,[]],[[18,-1],20,29],[-1,-2,[],[]],[[],18],[[18,18],[[24,[27]]]],[-1,-2,[],[]],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[18,[[10,[44]]]],[-1,11,[]],[-1,-2,[],[]],[-1,18,[[16,[[15,[14]]]]]],0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],52],[12,12],[[-1,-2],20,[],[]],[[12,12],27],[[],52],[[],12],[[12,12],28],[[52,13],52],[[52,-1],52,[[16,[[15,[14]]]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[52,12],[[52,4],5],[[12,4],[[10,[20,51]]]],[[12,4],5],[-1,-1,[]],[-1,-1,[]],[[12,-1],20,29],[-1,-2,[],[]],[-1,-2,[],[]],[[12,12],[[24,[27]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[-1,-2,[],[]],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[12,[[10,[44]]]],[-1,11,[]],[-1,11,[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[-1,[[53,[19,-1]]],54],[-1,[[53,[26,-1]]],54],[-1,-2,[],[]],[-1,-2,[],[]],[[[53,[-1,-2]]],[[53,[-1,-2]]],[55,32],32],[[-1,-2],20,[],[]],[[[53,[-1,-2]],4],5,[55,6],6],[-1,-1,[]],[-1,-2,[],[]],[[[53,[-1,-2]],-3],[],55,54,[[57,[56]]]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,-2,[],[]],[-1,[[53,[-2,-1]]],54,55]],"c":[],"p":[[3,"AuthenticationError",3],[8,"Challenge",219],[3,"HttpResponse",328],[3,"Formatter",329],[6,"Result",329],[8,"Debug",329],[8,"AuthExtractorConfig",3],[3,"StatusCode",330],[3,"String",331],[4,"Result",332],[3,"TypeId",333],[3,"Bearer",268],[4,"Error",63],[15,"str"],[4,"Cow",334],[8,"Into",335],[3,"Config",29],[3,"Basic",245],[3,"BasicAuth",29],[15,"tuple"],[3,"Basic",121],[3,"HttpRequest",336],[4,"Payload",337],[4,"Option",338],[3,"Config",63],[3,"BearerAuth",63],[4,"Ordering",339],[15,"bool"],[8,"Hasher",340],[3,"Authorization",121],[8,"Scheme",121],[8,"Clone",341],[3,"Bearer",121],[8,"Ord",339],[8,"Default",342],[8,"PartialEq",339],[4,"ParseError",121],[3,"Utf8Error",343],[4,"DecodeError",344],[3,"ToStrError",345],[15,"never"],[8,"Hash",340],[3,"HeaderName",346],[3,"HeaderValue",345],[4,"ParseError",347],[8,"HttpMessage",348],[8,"PartialOrd",339],[8,"Error",349],[3,"WwwAuthenticate",219],[3,"Bytes",350],[3,"Error",329],[3,"BearerBuilder",268],[3,"HttpAuthentication",311],[8,"Fn",351],[8,"FromRequest",352],[3,"ServiceRequest",353],[8,"Service",354]],"b":[[12,"impl-Debug-for-AuthenticationError%3CC%3E"],[13,"impl-Display-for-AuthenticationError%3CC%3E"],[87,"impl-Debug-for-Error"],[88,"impl-Display-for-Error"],[155,"impl-Display-for-ParseError"],[156,"impl-Debug-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-Display-for-Bearer"],[162,"impl-Debug-for-Bearer"],[163,"impl-From%3CUtf8Error%3E-for-ParseError"],[165,"impl-From%3CDecodeError%3E-for-ParseError"],[166,"impl-From%3CToStrError%3E-for-ParseError"],[253,"impl-Display-for-Basic"],[254,"impl-Debug-for-Basic"],[290,"impl-Display-for-Bearer"],[291,"impl-Debug-for-Bearer"]]}\
+"actix_settings":{"doc":"Easily manage Actix Web’s settings from a TOML file and …","t":"DDIEDNNNNNNNNNENNNENNNNEENEDENINNNNNNGEDNMMMMKMLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLMMMMMLLKLLLLLLLLLMMMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMM","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,"core::clone"],[318,"core::result"],[319,"serde::de"],[320,"serde::de"],[321,"core::fmt"],[322,"core::fmt"],[323,"toml::de"],[324,"std::env"],[325,"std::io::error"],[326,"core::num::error"],[327,"serde::de"],[328,"core::hash"],[329,"std::path"],[330,"core::error"],[331,"core::option"],[332,"alloc::string"],[333,"core::any"]],"d":["Settings types for Actix Web.","A host/port pair for the server to bind to.","Extension trait for applying parsed settings to the server …","The maximum number of pending connections.","Wrapper for server and application-specific settings.","The default number of connections. See struct docs.","The default keep-alive as defined by Actix Web.","The default connection limit. See struct docs.","The default number of connections. See struct docs.","The default number of workers. See struct docs.","The default timeout. Depends on context.","Marks development environment.","Disable keep-alive.","Environment variable does not exists or is invalid.","Errors that can be returned from methods in this crate.","File already exists on disk.","Invalid value.","I/O error.","The server keep-alive preference.","A specific number of connections.","A specific connection limit.","A specific number of connections.","A specific number of workers.","The maximum per-worker concurrent TLS connection limit.","The maximum per-worker number of concurrent connections.","Timeout in milliseconds.","Marker of intended deployment environment.","Marker type representing no defined application-specific …","The number of workers that the server should start.","Let the OS determine keep-alive duration.","A specialized FromStr
trait that returns Error
errors","Value is not an address.","Value is not a boolean.","Value is not an integer.","Marks production environment.","A specific keep-alive duration (in seconds).","Timeout in seconds.","Convenience type alias for BasicSettings
with no defined …","A timeout duration in milliseconds or seconds.","TLS (HTTPS) configuration.","Error deserializing as TOML.","Actix Web server settings.","Actix Web server settings.","Application-specific settings.","Application-specific settings.","Apply some settings object value to self
.","The maximum number of pending connections.","","","","","","","","","","","","","","","","","","","","","","","","","","","Path to certificate .pem
file.","Timeout duration for connection shutdown.","Timeout duration for reading client request header.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","True if the Compress
middleware should be enabled.","True if the Logger
middleware should be enabled.","Tru if accepting TLS connections should be enabled.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Parse an instance of Self
straight from the default TOML …","Parse an instance of Self
straight from the default TOML …","","","","","","","","","","","","","Host part of address.","List of addresses for the server to bind to.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Server keep-alive preference.","The per-worker maximum concurrent TLS connection limit.","The per-worker maximum number of concurrent connections.","Marker of intended deployment environment.","The number of workers that the server should start.","Attempts to parse value
and override the referenced field
.","Attempts to read an environment variable, parse it, and …","Parse Self
from string
.","","","","","","","","","Parse an instance of Self
from a TOML file located at …","Port part of address.","Path to private key .pem
file.","Timeout duration for graceful worker shutdown.","","TLS (HTTPS) configuration.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Writes the default TOML template to a new file, located at …","","","","",""],"i":[0,0,0,0,0,2,3,4,5,7,8,6,3,20,0,20,20,20,0,2,4,5,7,0,0,8,0,0,0,3,0,20,20,20,6,3,8,0,0,0,20,40,11,40,11,41,10,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,9,10,10,1,2,3,4,5,6,7,8,9,10,11,13,1,2,3,4,5,6,7,8,9,10,11,13,1,2,3,4,5,6,7,8,9,10,11,13,10,10,9,1,2,3,4,5,6,7,8,9,10,11,13,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,13,13,13,20,20,1,2,3,4,5,6,7,8,9,10,11,13,20,20,20,20,20,20,1,2,3,4,5,6,7,8,9,10,11,13,11,11,1,2,3,4,5,6,7,8,9,10,11,13,1,10,20,1,2,3,4,5,6,7,8,9,10,11,13,10,10,10,10,10,11,11,33,1,2,3,4,5,6,7,8,11,1,9,10,20,10,1,2,3,4,5,6,7,8,9,10,11,13,20,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,20,1,2,3,4,5,6,7,8,9,10,11,13,11,42,42,42,42,42],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,-2],-1,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[[[11,[-1]]],[[11,[-1]]],12],[13,13],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[[-1,-2],14,[],[]],[-1,[[15,[1]]],16],[-1,[[15,[2]]],16],[-1,[[15,[3]]],16],[-1,[[15,[4]]],16],[-1,[[15,[5]]],16],[-1,[[15,[6]]],16],[-1,[[15,[7]]],16],[-1,[[15,[8]]],16],[-1,[[15,[9]]],16],[-1,[[15,[10]]],16],[-1,[[15,[[11,[-2]]]]],16,17],[-1,[[15,[13]]],16],0,0,0,[[1,1],18],[[2,2],18],[[3,3],18],[[4,4],18],[[5,5],18],[[6,6],18],[[7,7],18],[[8,8],18],[[9,9],18],[[10,10],18],[[[11,[-1]],[11,[-1]]],18,19],[[13,13],18],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[-1,-2],18,[],[]],[[20,21],22],[[20,21],22],[[1,21],22],[[2,21],22],[[3,21],22],[[4,21],22],[[5,21],22],[[6,21],22],[[7,21],22],[[8,21],22],[[9,21],22],[[10,21],22],[[[11,[-1]],21],22,23],[[13,21],22],[24,20],[25,20],[-1,-1,[]],[26,20],[27,20],[28,20],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[],[[11,[-1]]],29],[30,[[15,[[11,[-1]],20]]],29],[[1,-1],14,31],[[2,-1],14,31],[[3,-1],14,31],[[4,-1],14,31],[[5,-1],14,31],[[6,-1],14,31],[[7,-1],14,31],[[8,-1],14,31],[[9,-1],14,31],[[10,-1],14,31],[[[11,[-1]],-2],14,32,31],[[13,-1],14,31],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,[[-1,-2],[[15,[14,20]]],33,[[34,[30]]]],[[-1,-2],[[15,[14,20]]],33,[[34,[30]]]],[30,[[15,[-1,20]]],[]],[30,[[15,[1,20]]]],[30,[[15,[2,20]]]],[30,[[15,[3,20]]]],[30,[[15,[4,20]]]],[30,[[15,[5,20]]]],[30,[[15,[6,20]]]],[30,[[15,[7,20]]]],[30,[[15,[8,20]]]],[-1,[[15,[[11,[-2]],20]]],[[34,[35]]],29],0,0,0,[20,[[37,[36]]]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,38,[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,[[15,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[15,[14,20]]],[[34,[35]]]],0,0,0,0,0],"c":[],"p":[[3,"Address",0],[4,"Backlog",0],[4,"KeepAlive",0],[4,"MaxConnectionRate",0],[4,"MaxConnections",0],[4,"Mode",0],[4,"NumWorkers",0],[4,"Timeout",0],[3,"Tls",0],[3,"ActixSettings",0],[3,"BasicSettings",0],[8,"Clone",317],[3,"NoSettings",0],[15,"tuple"],[4,"Result",318],[8,"Deserializer",319],[8,"Deserialize",319],[15,"bool"],[8,"PartialEq",320],[4,"Error",0],[3,"Formatter",321],[6,"Result",321],[8,"Debug",321],[3,"ParseBoolError",322],[3,"Error",323],[4,"VarError",324],[3,"Error",325],[3,"ParseIntError",326],[8,"DeserializeOwned",319],[15,"str"],[8,"Hasher",327],[8,"Hash",327],[8,"Parse",0],[8,"AsRef",328],[3,"Path",329],[8,"Error",330],[4,"Option",331],[3,"String",332],[3,"TypeId",333],[6,"Settings",0],[8,"ApplySettings",0],[13,"InvalidValue",312]],"b":[[163,"impl-Debug-for-Error"],[164,"impl-Display-for-Error"],[177,"impl-From%3CParseBoolError%3E-for-Error"],[178,"impl-From%3CError%3E-for-Error"],[180,"impl-From%3CVarError%3E-for-Error"],[181,"impl-From%3CError%3E-for-Error"],[182,"impl-From%3CParseIntError%3E-for-Error"]],"a":{"https":[39],"ssl":[39]}},\
+"actix_web_httpauth":{"doc":"HTTP authentication schemes for Actix Web.","t":"AAAIDQAALLLLLLLLLKLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAADNDDNNNEINNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIDAALLLLLLLLLLLLLLKLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLDDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLL","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","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"],[219,"actix_web_httpauth::headers::www_authenticate"],[245,"actix_web_httpauth::headers::www_authenticate::basic"],[268,"actix_web_httpauth::headers::www_authenticate::bearer"],[311,"actix_web_httpauth::middleware"],[328,"actix_web::response::response"],[329,"core::fmt"],[330,"core::fmt"],[331,"alloc::string"],[332,"core::result"],[333,"core::any"],[334,"alloc::borrow"],[335,"core::convert"],[336,"actix_web::request"],[337,"actix_http::payload"],[338,"core::option"],[339,"core::cmp"],[340,"core::hash"],[341,"core::clone"],[342,"core::cmp"],[343,"core::cmp"],[344,"base64::decode"],[345,"http::header::value"],[346,"core::hash"],[347,"http::header::value"],[348,"actix_http::http_message"],[349,"core::cmp"],[350,"bytes::bytes"],[351,"core::fmt"],[352,"actix_web::extract"],[353,"actix_web::service"],[354,"actix_service"]],"d":["Type-safe authentication information extractors.","Typed HTTP headers.","HTTP Authentication middleware.","Trait implemented for types that provides configuration …","Authentication error returned by authentication extractors.","Associated challenge type.","Extractor for the “Basic” HTTP Authentication Scheme.","Extractor for the “Bearer” HTTP Authentication Scheme.","","","Returns mutable reference to the inner challenge instance.","","","","Returns the argument unchanged.","","Calls U::from(self)
.","Convert the config instance into a HTTP challenge.","Creates new authentication error from the provided …","","Returns mutable reference to the inner status code.","","","","","","Attach Error
to the current Authentication error.","Attach error description to the current Authentication …","Attach error URI to the current Authentication error.","Extractor for HTTP Basic auth.","BasicAuth
extractor configuration used for WWW-Authenticate
…","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","","Returns client’s password.","Set challenge realm
attribute.","","","","","","","","","Returns client’s user-ID.","","","Extractor for HTTP Bearer auth","BearerAuth
extractor configuration.","Bearer authorization error types, described in RFC 6750.","The request requires higher privileges than provided by …","The request is missing a required parameter, includes an …","The access token provided is expired, revoked, malformed, …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","","","Set challenge realm
attribute.","Set challenge scope
attribute.","Returns HTTP status code suitable for current error type.","","","","","Returns bearer token provided by client.","","","","","","","","","","","","","Authorization
header and various auth schemes.","WWW-Authenticate
header and various auth challenges.","Authorization
header, defined in RFC 7235","Malformed base64 string.","Credentials for Basic
authentication scheme, defined in …","Credentials for Bearer
authentication scheme, defined in …","Header value is malformed.","Required authentication field is missing.","Authentication scheme is missing.","Possible errors while parsing Authorization
header.","Authentication scheme for Authorization
header.","Unable to convert header into the str.","Malformed UTF-8 string.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Consumes Authorization
header and returns inner Scheme
…","","Creates Basic
credentials with provided user_id
and …","Creates new Bearer
credentials with the token provided.","Try to parse an authentication scheme from the …","","","","","","","Returns client’s password if provided.","","","","","","","","","Gets reference to the credentials token.","","","","","","","","","","","","","","","","","Returns client’s user-ID.","","","","","Authentication challenge for WWW-Authenticate
header.","WWW-Authenticate
header, described in RFC 7235.","Challenge for the “Basic” HTTP Authentication Scheme.","Challenge for the “Bearer” HTTP Authentication Scheme.","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self)
.","","","","Converts the challenge into a bytes suitable for HTTP …","","","","","","","","Challenge for WWW-Authenticate
header with HTTP Basic auth …","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self)
.","Creates new Basic
challenge with an empty realm
field.","","","","","","","","","Creates new Basic
challenge from the provided realm
field …","Challenge for WWW-Authenticate
header with HTTP Bearer …","Builder for the Bearer
challenge.","Bearer authorization error types, described in RFC 6750.","The request requires higher privileges than provided by …","The request is missing a required parameter, includes an …","The access token provided is expired, revoked, malformed, …","","","","","Creates the builder for Bearer
challenge.","","","","","","","Provides the error
attribute, as defined in [RFC 6750, …","Provides the error_description
attribute, as defined in […","Provides the error_uri
attribute, as defined in [RFC 6750 …","Consumes the builder and returns built Bearer
instance.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self)
.","Calls U::from(self)
.","","Provides the realm
attribute, as defined in RFC 2617.","Provides the scope
attribute, as defined in RFC 6749 §3.3.","","","","","","","","","","","","Middleware for checking HTTP authentication.","Construct HttpAuthentication
middleware for the HTTP “…","Construct HttpAuthentication
middleware for the HTTP “…","","","","","","Returns the argument unchanged.","Calls U::from(self)
.","","","","","","","Construct HttpAuthentication
middleware with the provided …"],"i":[0,0,0,0,0,7,0,0,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,0,0,17,17,19,17,19,17,19,17,19,17,17,19,17,19,19,19,17,19,17,19,17,17,19,17,19,17,19,17,19,19,17,19,0,0,0,13,13,13,25,25,26,13,25,26,13,25,26,13,25,26,13,13,25,13,25,26,13,13,25,26,13,26,13,25,26,13,25,13,25,25,13,25,26,13,13,26,25,26,13,25,26,13,25,26,13,25,26,13,0,0,0,37,0,0,37,37,37,0,0,37,37,30,30,37,30,21,33,37,30,21,33,30,21,33,30,21,33,30,21,33,30,30,21,33,37,37,30,30,21,21,33,33,37,37,37,37,30,30,30,21,33,30,37,30,21,33,30,30,21,33,31,30,21,33,30,21,33,21,37,30,21,33,37,30,21,33,33,37,30,21,33,37,30,21,33,30,30,21,33,37,30,21,33,21,37,30,21,33,0,0,0,0,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,49,49,49,49,49,49,49,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,13,13,13,52,12,52,12,12,12,12,12,52,12,12,52,52,52,52,52,12,12,52,12,12,52,12,12,52,52,12,12,52,12,52,12,12,52,12,52,12,0,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53],"f":[0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[1,[-1]]],-1,2],[[[1,[-1]]],3,2],[[[1,[-1]],4],5,[6,2]],[[[1,[-1]],4],5,2],[-1,-1,[]],[-1,1,7],[-1,-2,[],[]],[-1,[],[]],[-1,[[1,[-1]]],2],[[[1,[-1]]],8,2],[[[1,[-1]]],8,2],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,-2,[],[]],[[[1,[12]],13],[[1,[12]]]],[[[1,[12]],-1],[[1,[12]]],[[16,[[15,[14]]]]]],[[[1,[12]],-1],[[1,[12]]],[[16,[[15,[14]]]]]],0,0,[17,18],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[17,17],[19,19],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[],17],[[17,4],5],[[19,4],5],[-1,-1,[]],[21,19],[-1,-1,[]],[[22,23]],[-1,-2,[],[]],[-1,-2,[],[]],[17],[19,[[24,[14]]]],[[17,-1],17,[[16,[[15,[14]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,11,[]],[19,14],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,[25,12],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[26,26],[13,13],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[13,13],27],[[],25],[[13,13],28],[[25,4],5],[[26,4],5],[[13,4],5],[[13,4],5],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[22,23]],[[13,-1],20,29],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25],[[13,13],[[24,[27]]]],[[25,-1],25,[[16,[[15,[14]]]]]],[[25,-1],25,[[16,[[15,[14]]]]]],[13,8],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,9,[]],[26,14],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[[30,[-1]]],-1,31],[[[30,[-1]]],-1,31],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[30,[-1]]],[[30,[-1]]],[32,31]],[21,21],[33,33],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[-1,-2],20,[],[]],[[[30,[-1]],[30,[-1]]],27,[34,31]],[[21,21],27],[[33,33],27],[[],[[30,[-1]]],[35,31]],[[[30,[-1]],[30,[-1]]],28,[36,31]],[[21,21],28],[[33,33],28],[[37,4],5],[[37,4],5],[[[30,[-1]],4],5,[6,31]],[[[30,[-1]],4],5,31],[[21,4],5],[[21,4],5],[[33,4],5],[[33,4],5],[38,37],[-1,-1,[]],[39,37],[40,37],[-1,[[30,[-1]]],31],[-1,-1,[]],[41,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[30,[-1]],-2],20,[42,31],29],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[30,[-1]]],-1,31],[[],43],[[-1,[24,[-2]]],21,[[16,[[15,[14]]]]],[[16,[[15,[14]]]]]],[-1,33,[[16,[[15,[14]]]]]],[44,[[10,[-1,37]]],[]],[-1,[[10,[[30,[-2]],45]]],46,31],[44,[[10,[21,37]]]],[44,[[10,[33,37]]]],[[[30,[-1]],[30,[-1]]],[[24,[27]]],[47,31]],[[21,21],[[24,[27]]]],[[33,33],[[24,[27]]]],[21,[[24,[14]]]],[37,[[24,[48]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[33,14],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[[20,[43,44]]]]],[]],[[[30,[-1]]],[[10,[44]]],31],[21,[[10,[44]]]],[33,[[10,[44]]]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[-1,11,[]],[21,14],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[49,[-1]]],[[49,[-1]]],[32,2]],[[-1,-2],20,[],[]],[[[49,[-1]],[49,[-1]]],27,[34,2]],[[],[[49,[-1]]],[35,2]],[[[49,[-1]],[49,[-1]]],28,[36,2]],[[[49,[-1]],4],5,[6,2]],[-1,-1,[]],[[[49,[-1]],-2],20,[42,2],29],[-1,-2,[],[]],[[],43],[-1,[[10,[[49,[-2]],45]]],46,2],[[[49,[-1]],[49,[-1]]],[[24,[27]]],[47,2]],[-1,50,[]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[[20,[43,44]]]]],[]],[[[49,[-1]]],[[10,[44]]],2],[-1,11,[]],[-1,-2,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[18,18],[[-1,-2],20,[],[]],[[18,18],27],[[],18],[[18,18],28],[[18,4],[[10,[20,51]]]],[[18,4],5],[-1,-1,[]],[[18,-1],20,29],[-1,-2,[],[]],[[],18],[[18,18],[[24,[27]]]],[-1,-2,[],[]],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[18,[[10,[44]]]],[-1,11,[]],[-1,-2,[],[]],[-1,18,[[16,[[15,[14]]]]]],0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],52],[12,12],[[-1,-2],20,[],[]],[[12,12],27],[[],52],[[],12],[[12,12],28],[[52,13],52],[[52,-1],52,[[16,[[15,[14]]]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[52,12],[[52,4],5],[[12,4],[[10,[20,51]]]],[[12,4],5],[-1,-1,[]],[-1,-1,[]],[[12,-1],20,29],[-1,-2,[],[]],[-1,-2,[],[]],[[12,12],[[24,[27]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[[52,-1],52,[[16,[[15,[14]]]]]],[-1,-2,[],[]],[-1,9,[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[12,[[10,[44]]]],[-1,11,[]],[-1,11,[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[-1,[[53,[19,-1]]],54],[-1,[[53,[26,-1]]],54],[-1,-2,[],[]],[-1,-2,[],[]],[[[53,[-1,-2]]],[[53,[-1,-2]]],[55,32],32],[[-1,-2],20,[],[]],[[[53,[-1,-2]],4],5,[55,6],6],[-1,-1,[]],[-1,-2,[],[]],[[[53,[-1,-2]],-3],[],55,54,[[57,[56]]]],[-1,-2,[],[]],[-1,[[10,[-2]]],[],[]],[-1,[[10,[-2]]],[],[]],[-1,11,[]],[-1,-2,[],[]],[-1,[[53,[-2,-1]]],54,55]],"c":[],"p":[[3,"AuthenticationError",3],[8,"Challenge",219],[3,"HttpResponse",328],[3,"Formatter",329],[6,"Result",329],[8,"Debug",329],[8,"AuthExtractorConfig",3],[3,"StatusCode",330],[3,"String",331],[4,"Result",332],[3,"TypeId",333],[3,"Bearer",268],[4,"Error",63],[15,"str"],[4,"Cow",334],[8,"Into",335],[3,"Config",29],[3,"Basic",245],[3,"BasicAuth",29],[15,"tuple"],[3,"Basic",121],[3,"HttpRequest",336],[4,"Payload",337],[4,"Option",338],[3,"Config",63],[3,"BearerAuth",63],[4,"Ordering",339],[15,"bool"],[8,"Hasher",340],[3,"Authorization",121],[8,"Scheme",121],[8,"Clone",341],[3,"Bearer",121],[8,"Ord",339],[8,"Default",342],[8,"PartialEq",339],[4,"ParseError",121],[3,"Utf8Error",343],[4,"DecodeError",344],[3,"ToStrError",345],[15,"never"],[8,"Hash",340],[3,"HeaderName",346],[3,"HeaderValue",345],[4,"ParseError",347],[8,"HttpMessage",348],[8,"PartialOrd",339],[8,"Error",349],[3,"WwwAuthenticate",219],[3,"Bytes",350],[3,"Error",329],[3,"BearerBuilder",268],[3,"HttpAuthentication",311],[8,"Fn",351],[8,"FromRequest",352],[3,"ServiceRequest",353],[8,"Service",354]],"b":[[12,"impl-Debug-for-AuthenticationError%3CC%3E"],[13,"impl-Display-for-AuthenticationError%3CC%3E"],[87,"impl-Debug-for-Error"],[88,"impl-Display-for-Error"],[155,"impl-Display-for-ParseError"],[156,"impl-Debug-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-Display-for-Bearer"],[162,"impl-Debug-for-Bearer"],[163,"impl-From%3CUtf8Error%3E-for-ParseError"],[165,"impl-From%3CDecodeError%3E-for-ParseError"],[166,"impl-From%3CToStrError%3E-for-ParseError"],[253,"impl-Display-for-Basic"],[254,"impl-Debug-for-Basic"],[290,"impl-Display-for-Bearer"],[291,"impl-Debug-for-Bearer"]]},\
+"actix_ws":{"doc":"WebSockets for Actix Web, without actors.","t":"NNNNNNEDDNNNNNNNNNNNEDNNNNNNNENDNDNNNLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","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,"core::result"],[144,"bytes::bytes"],[145,"core::convert"],[146,"core::option"],[147,"core::fmt"],[148,"core::fmt"],[149,"std::io::error"],[150,"actix_http::ws::proto"],[151,"actix_web::request"],[152,"actix_web::types::payload"],[153,"actix_web::response::response"],[154,"actix_web::error::error"],[155,"core::pin"],[156,"core::task::wake"],[157,"core::task::poll"],[158,"core::error"],[159,"bytestring"],[160,"core::any"]],"d":["Indicates an abnormal closure. If the abnormal closure was …","Indicates that the server is overloaded and the client …","Indicates that an endpoint is “going away”, such as a …","Bad opcode.","Binary message.","Close message with optional reason.","Status code used to indicate why an endpoint is closing …","Reason for closing the connection","The error representing a closed websocket session","Continuation.","Unknown continuation fragment.","Continuation has not started.","Received new continuation but it is already started.","Indicates that a server is terminating the connection …","Indicates that an endpoint (client) is terminating the …","Indicates that an endpoint is terminating the connection …","Invalid control frame length","Encountered invalid opcode.","I/O error.","Received a masked frame from server.","A WebSocket message.","A stream of Messages from a websocket client","No-op. Useful for low-level services.","Indicates a normal closure, meaning that the purpose for …","A payload reached size limit.","Ping message.","Indicates that an endpoint is terminating the connection …","Pong message.","Indicates that an endpoint is terminating the connection …","WebSocket protocol errors.","Indicates that the server is restarting. A client may …","A handle into the websocket session.","Indicates that an endpoint is terminating the connection …","A response body for Websocket HTTP Requests","Text message.","Received an unmasked frame from client.","Indicates that an endpoint is terminating the connection …","Send raw bytes into the websocket","","","","","","","","","","","","","","","","","","","","","","","Send a close message, and consume the session","Exit code","Optional description of the exit code","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","Begin handling websocket traffic","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Ping the client","","","Pong the client","Wait for the next item from the message stream","","Send text into the websocket","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[7,7,7,15,10,10,0,0,0,10,15,15,15,7,7,7,15,15,15,15,0,0,10,7,15,10,7,10,7,0,7,0,7,0,10,15,7,1,28,25,1,3,10,7,8,15,28,25,1,3,10,7,8,15,1,7,8,1,7,8,1,8,8,10,7,8,3,3,10,7,8,15,15,28,25,1,3,10,7,7,8,8,8,15,15,15,15,15,0,28,25,1,3,10,7,8,15,1,28,25,1,25,15,1,1,7,8,3,15,28,25,1,3,10,7,8,15,28,25,1,3,10,7,8,15,28,25,28,25,1,3,10,7,8,15,28,25,1,3,10,7,8,15],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,-1],[[4,[2,3]]],[[6,[5]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[7,7],[8,8],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[1,[9,[8]]],[[4,[2,3]]]],0,0,[[10,10],11],[[7,7],11],[[8,8],11],[[3,12],13],[[3,12],13],[[10,12],[[4,[2,14]]]],[[7,12],[[4,[2,14]]]],[[8,12],[[4,[2,14]]]],[[15,12],[[4,[2,14]]]],[[15,12],[[4,[2,14]]]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[16,7],[[[2,[7,-1]]],8,[[6,[17]]]],[-1,-1,[]],[7,8],[18,15],[-1,-1,[]],[19,15],[20,15],[21,15],[[22,23],[[4,[[2,[24,1,25]],26]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[1,[27,[18]]],[[4,[2,3]]]],[[[29,[28]],30],[[31,[9]]]],[[[29,[25]],30],[[31,[9]]]],[[1,[27,[18]]],[[4,[2,3]]]],[25,[[9,[[4,[10,15]]]]]],[15,[[9,[32]]]],[[1,-1],[[4,[2,3]]],[[6,[33]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,17,[]],[-1,17,[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[[[29,[-1]],30],[[31,[[9,[4]]]]],[]],[[[29,[-1]],30],[[31,[[9,[4]]]]],[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,34,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]]],"c":[],"p":[[3,"Session",0],[15,"tuple"],[3,"Closed",0],[4,"Result",143],[3,"Bytes",144],[8,"Into",145],[4,"CloseCode",0],[3,"CloseReason",0],[4,"Option",146],[4,"Message",0],[15,"bool"],[3,"Formatter",147],[6,"Result",147],[3,"Error",147],[4,"ProtocolError",0],[15,"u16"],[3,"String",148],[15,"u8"],[15,"usize"],[3,"Error",149],[4,"OpCode",150],[3,"HttpRequest",151],[3,"Payload",152],[3,"HttpResponse",153],[3,"MessageStream",0],[3,"Error",154],[15,"slice"],[3,"StreamingBody",0],[3,"Pin",155],[3,"Context",156],[4,"Poll",157],[8,"Error",158],[3,"ByteString",159],[3,"TypeId",160]],"b":[[66,"impl-Display-for-Closed"],[67,"impl-Debug-for-Closed"],[71,"impl-Display-for-ProtocolError"],[72,"impl-Debug-for-ProtocolError"],[80,"impl-From%3C(CloseCode,+T)%3E-for-CloseReason"],[82,"impl-From%3CCloseCode%3E-for-CloseReason"],[83,"impl-From%3Cu8%3E-for-ProtocolError"],[85,"impl-From%3Cusize%3E-for-ProtocolError"],[86,"impl-From%3CError%3E-for-ProtocolError"],[87,"impl-From%3COpCode%3E-for-ProtocolError"]]}\
}');
if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/src-files.js b/src-files.js
index 43a5983d7..9f3748280 100644
--- a/src-files.js
+++ b/src-files.js
@@ -6,6 +6,7 @@ var srcIndex = JSON.parse('{\
"actix_redis":["",[],["lib.rs","redis.rs"]],\
"actix_session":["",[["storage",[],["cookie.rs","interface.rs","mod.rs","redis_actor.rs","redis_rs.rs","session_key.rs","utils.rs"]]],["config.rs","lib.rs","middleware.rs","session.rs","session_ext.rs"]],\
"actix_settings":["",[["settings",[],["address.rs","backlog.rs","keep_alive.rs","max_connection_rate.rs","max_connections.rs","mod.rs","mode.rs","num_workers.rs","timeout.rs","tls.rs"]]],["error.rs","lib.rs","parse.rs"]],\
-"actix_web_httpauth":["",[["extractors",[],["basic.rs","bearer.rs","config.rs","errors.rs","mod.rs"]],["headers",[["authorization",[["scheme",[],["basic.rs","bearer.rs","mod.rs"]]],["errors.rs","header.rs","mod.rs"]],["www_authenticate",[["challenge",[["bearer",[],["builder.rs","challenge.rs","errors.rs","mod.rs"]]],["basic.rs","mod.rs"]]],["header.rs","mod.rs"]]],["mod.rs"]]],["lib.rs","middleware.rs","utils.rs"]]\
+"actix_web_httpauth":["",[["extractors",[],["basic.rs","bearer.rs","config.rs","errors.rs","mod.rs"]],["headers",[["authorization",[["scheme",[],["basic.rs","bearer.rs","mod.rs"]]],["errors.rs","header.rs","mod.rs"]],["www_authenticate",[["challenge",[["bearer",[],["builder.rs","challenge.rs","errors.rs","mod.rs"]]],["basic.rs","mod.rs"]]],["header.rs","mod.rs"]]],["mod.rs"]]],["lib.rs","middleware.rs","utils.rs"]],\
+"actix_ws":["",[],["fut.rs","lib.rs","session.rs"]]\
}');
createSrcSidebar();
diff --git a/src/actix_ws/fut.rs.html b/src/actix_ws/fut.rs.html
new file mode 100644
index 000000000..3f9d99f33
--- /dev/null
+++ b/src/actix_ws/fut.rs.html
@@ -0,0 +1,367 @@
+1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +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 +
use std::{
+ collections::VecDeque,
+ future::poll_fn,
+ io,
+ pin::Pin,
+ task::{Context, Poll},
+};
+
+use actix_codec::{Decoder, Encoder};
+use actix_http::{
+ ws::{Codec, Frame, Message, ProtocolError},
+ Payload,
+};
+use actix_web::{
+ web::{Bytes, BytesMut},
+ Error,
+};
+use futures_core::stream::Stream;
+use tokio::sync::mpsc::Receiver;
+
+/// A response body for Websocket HTTP Requests
+pub struct StreamingBody {
+ session_rx: Receiver<Message>,
+
+ messages: VecDeque<Message>,
+ buf: BytesMut,
+ codec: Codec,
+ closing: bool,
+}
+
+/// A stream of Messages from a websocket client
+///
+/// Messages can be accessed via the stream's `.next()` method
+pub struct MessageStream {
+ payload: Payload,
+
+ messages: VecDeque<Message>,
+ buf: BytesMut,
+ codec: Codec,
+ closing: bool,
+}
+
+impl StreamingBody {
+ pub(super) fn new(session_rx: Receiver<Message>) -> Self {
+ StreamingBody {
+ session_rx,
+ messages: VecDeque::new(),
+ buf: BytesMut::new(),
+ codec: Codec::new(),
+ closing: false,
+ }
+ }
+}
+
+impl MessageStream {
+ pub(super) fn new(payload: Payload) -> Self {
+ MessageStream {
+ payload,
+ messages: VecDeque::new(),
+ buf: BytesMut::new(),
+ codec: Codec::new(),
+ closing: false,
+ }
+ }
+
+ /// Wait for the next item from the message stream
+ ///
+ /// ```rust,ignore
+ /// 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
+ }
+}
+
+impl Stream for StreamingBody {
+ type Item = Result<Bytes, Error>;
+
+ fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
+ let this = self.get_mut();
+
+ if this.closing {
+ return Poll::Ready(None);
+ }
+
+ loop {
+ match Pin::new(&mut this.session_rx).poll_recv(cx) {
+ Poll::Ready(Some(msg)) => {
+ this.messages.push_back(msg);
+ }
+ Poll::Ready(None) => {
+ this.closing = true;
+ break;
+ }
+ Poll::Pending => break,
+ }
+ }
+
+ while let Some(msg) = this.messages.pop_front() {
+ if let Err(e) = this.codec.encode(msg, &mut this.buf) {
+ return Poll::Ready(Some(Err(e.into())));
+ }
+ }
+
+ if !this.buf.is_empty() {
+ return Poll::Ready(Some(Ok(this.buf.split().freeze())));
+ }
+
+ Poll::Pending
+ }
+}
+
+impl Stream for MessageStream {
+ type Item = Result<Message, ProtocolError>;
+
+ fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
+ let this = self.get_mut();
+
+ // Return the first message in the queue if one exists
+ //
+ // This is faster than polling and parsing
+ if let Some(msg) = this.messages.pop_front() {
+ return Poll::Ready(Some(Ok(msg)));
+ }
+
+ if !this.closing {
+ // Read in bytes until there's nothing left to read
+ loop {
+ match Pin::new(&mut this.payload).poll_next(cx) {
+ Poll::Ready(Some(Ok(bytes))) => {
+ this.buf.extend_from_slice(&bytes);
+ }
+ Poll::Ready(Some(Err(e))) => {
+ return Poll::Ready(Some(Err(ProtocolError::Io(io::Error::new(
+ io::ErrorKind::Other,
+ e.to_string(),
+ )))));
+ }
+ Poll::Ready(None) => {
+ this.closing = true;
+ break;
+ }
+ Poll::Pending => break,
+ }
+ }
+ }
+
+ // Create messages until there's no more bytes left
+ while let Some(frame) = this.codec.decode(&mut this.buf)? {
+ let message = match frame {
+ Frame::Text(bytes) => {
+ let s = std::str::from_utf8(&bytes)
+ .map_err(|e| {
+ ProtocolError::Io(io::Error::new(io::ErrorKind::Other, e.to_string()))
+ })?
+ .to_string();
+ Message::Text(s.into())
+ }
+ Frame::Binary(bytes) => Message::Binary(bytes),
+ Frame::Ping(bytes) => Message::Ping(bytes),
+ Frame::Pong(bytes) => Message::Pong(bytes),
+ Frame::Close(reason) => Message::Close(reason),
+ Frame::Continuation(item) => Message::Continuation(item),
+ };
+
+ this.messages.push_back(message);
+ }
+
+ // Return the first message in the queue
+ if let Some(msg) = this.messages.pop_front() {
+ return Poll::Ready(Some(Ok(msg)));
+ }
+
+ // If we've exhausted our message queue and we're closing, close the stream
+ if this.closing {
+ return Poll::Ready(None);
+ }
+
+ Poll::Pending
+ }
+}
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +
//! WebSockets for Actix Web, without actors.
+//!
+//! For usage, see documentation on [`handle()`].
+
+#![deny(rust_2018_idioms, nonstandard_style, future_incompatible)]
+#![warn(missing_docs)]
+#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
+#![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};
+use actix_http::{
+ body::{BodyStream, MessageBody},
+ ws::handshake,
+};
+use actix_web::{web, HttpRequest, HttpResponse};
+use tokio::sync::mpsc::channel;
+
+mod fut;
+mod session;
+
+pub use self::{
+ fut::{MessageStream, StreamingBody},
+ session::{Closed, Session},
+};
+
+/// Begin handling websocket traffic
+///
+/// ```no_run
+/// use actix_web::{middleware::Logger, web, App, Error, HttpRequest, HttpResponse, HttpServer};
+/// use actix_ws::Message;
+/// use futures::stream::StreamExt as _;
+///
+/// async fn ws(req: HttpRequest, body: web::Payload) -> Result<HttpResponse, Error> {
+/// let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?;
+///
+/// actix_rt::spawn(async move {
+/// while let Some(Ok(msg)) = msg_stream.next().await {
+/// match msg {
+/// Message::Ping(bytes) => {
+/// if session.pong(&bytes).await.is_err() {
+/// return;
+/// }
+/// }
+/// Message::Text(s) => println!("Got text, {}", s),
+/// _ => break,
+/// }
+/// }
+///
+/// let _ = session.close(None).await;
+/// });
+///
+/// Ok(response)
+/// }
+///
+/// #[actix_rt::main]
+/// async fn main() -> Result<(), anyhow::Error> {
+/// HttpServer::new(move || {
+/// App::new()
+/// .wrap(Logger::default())
+/// .route("/ws", web::get().to(ws))
+/// })
+/// .bind("127.0.0.1:8080")?
+/// .run()
+/// .await?;
+///
+/// Ok(())
+/// }
+/// ```
+pub fn handle(
+ req: &HttpRequest,
+ body: web::Payload,
+) -> Result<(HttpResponse, Session, MessageStream), actix_web::Error> {
+ let mut response = handshake(req.head())?;
+ let (tx, rx) = channel(32);
+
+ Ok((
+ response
+ .message_body(BodyStream::new(StreamingBody::new(rx)).boxed())?
+ .into(),
+ Session::new(tx),
+ MessageStream::new(body.into_inner()),
+ ))
+}
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +
use std::sync::{
+ atomic::{AtomicBool, Ordering},
+ Arc,
+};
+
+use actix_http::ws::{CloseReason, Message};
+use actix_web::web::Bytes;
+use bytestring::ByteString;
+use tokio::sync::mpsc::Sender;
+
+/// A handle into the websocket session.
+///
+/// This type can be used to send messages into the websocket.
+#[derive(Clone)]
+pub struct Session {
+ inner: Option<Sender<Message>>,
+ closed: Arc<AtomicBool>,
+}
+
+/// The error representing a closed websocket session
+#[derive(Debug)]
+pub struct Closed;
+
+impl std::fmt::Display for Closed {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "Session is closed")
+ }
+}
+
+impl std::error::Error for Closed {}
+
+impl Session {
+ pub(super) fn new(inner: Sender<Message>) -> Self {
+ Session {
+ inner: Some(inner),
+ closed: Arc::new(AtomicBool::new(false)),
+ }
+ }
+
+ fn pre_check(&mut self) {
+ if self.closed.load(Ordering::Relaxed) {
+ self.inner.take();
+ }
+ }
+
+ /// Send text into the websocket
+ ///
+ /// ```rust,ignore
+ /// 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();
+ if let Some(inner) = self.inner.as_mut() {
+ inner
+ .send(Message::Text(msg.into()))
+ .await
+ .map_err(|_| Closed)
+ } else {
+ Err(Closed)
+ }
+ }
+
+ /// Send raw bytes into the websocket
+ ///
+ /// ```rust,ignore
+ /// 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();
+ if let Some(inner) = self.inner.as_mut() {
+ inner
+ .send(Message::Binary(msg.into()))
+ .await
+ .map_err(|_| Closed)
+ } else {
+ Err(Closed)
+ }
+ }
+
+ /// Ping the client
+ ///
+ /// For many applications, it will be important to send regular pings to keep track of if the
+ /// client has disconnected
+ ///
+ /// ```rust,ignore
+ /// if session.ping(b"").await.is_err() {
+ /// // session is closed
+ /// }
+ /// ```
+ pub async fn ping(&mut self, msg: &[u8]) -> Result<(), Closed> {
+ self.pre_check();
+ if let Some(inner) = self.inner.as_mut() {
+ inner
+ .send(Message::Ping(Bytes::copy_from_slice(msg)))
+ .await
+ .map_err(|_| Closed)
+ } else {
+ Err(Closed)
+ }
+ }
+
+ /// Pong the client
+ ///
+ /// ```rust,ignore
+ /// 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() {
+ inner
+ .send(Message::Pong(Bytes::copy_from_slice(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
+ /// session.close(None).await
+ /// ```
+ pub async fn close(mut self, reason: Option<CloseReason>) -> Result<(), Closed> {
+ self.pre_check();
+ if let Some(inner) = self.inner.take() {
+ self.closed.store(true, Ordering::Relaxed);
+ inner.send(Message::Close(reason)).await.map_err(|_| Closed)
+ } else {
+ Err(Closed)
+ }
+ }
+}
+
Parse an instance of Self
from a TOML file located at filepath
.
If the file doesn’t exist, it is generated from the default TOML template, after which the\nnewly generated file is read in and parsed.
\nParse an instance of Self
straight from the default TOML template.
Parse an instance of Self
straight from the default TOML template.
Writes the default TOML template to a new file, located at filepath
.
Returns a FileExists
error if a file already exists at that\nlocation.
Attempts to parse value
and override the referenced field
.
use actix_settings::{Settings, Mode};\n\nlet mut settings = Settings::from_default_template();\nassert_eq!(settings.actix.mode, Mode::Development);\n\nSettings::override_field(&mut settings.actix.mode, "production")?;\nassert_eq!(settings.actix.mode, Mode::Production);
Attempts to read an environment variable, parse it, and override the referenced field
.
use actix_settings::{Settings, Mode};\n\nstd::env::set_var("OVERRIDE__MODE", "production");\n\nlet mut settings = Settings::from_default_template();\nassert_eq!(settings.actix.mode, Mode::Development);\n\nSettings::override_field_with_env_var(&mut settings.actix.mode, "OVERRIDE__MODE")?;\nassert_eq!(settings.actix.mode, Mode::Production);
source
. Read moreself
and other
values to be equal, and is used\nby ==
.Parse an instance of Self
from a TOML file located at filepath
.
If the file doesn’t exist, it is generated from the default TOML template, after which the\nnewly generated file is read in and parsed.
\nParse an instance of Self
straight from the default TOML template.
Parse an instance of Self
straight from the default TOML template.
Writes the default TOML template to a new file, located at filepath
.
Returns a FileExists
error if a file already exists at that\nlocation.
Attempts to parse value
and override the referenced field
.
use actix_settings::{Settings, Mode};\n\nlet mut settings = Settings::from_default_template();\nassert_eq!(settings.actix.mode, Mode::Development);\n\nSettings::override_field(&mut settings.actix.mode, "production")?;\nassert_eq!(settings.actix.mode, Mode::Production);
Attempts to read an environment variable, parse it, and override the referenced field
.
use actix_settings::{Settings, Mode};\n\nstd::env::set_var("OVERRIDE__MODE", "production");\n\nlet mut settings = Settings::from_default_template();\nassert_eq!(settings.actix.mode, Mode::Development);\n\nSettings::override_field_with_env_var(&mut settings.actix.mode, "OVERRIDE__MODE")?;\nassert_eq!(settings.actix.mode, Mode::Production);
source
. Read moreself
and other
values to be equal, and is used\nby ==
.