diff --git a/actix_limitation/all.html b/actix_limitation/all.html new file mode 100644 index 000000000..5e2238b2b --- /dev/null +++ b/actix_limitation/all.html @@ -0,0 +1,7 @@ +
pub const DEFAULT_COOKIE_NAME: &str = "sid";
pub const DEFAULT_PERIOD_SECS: u64 = 3600;
pub const DEFAULT_REQUEST_LIMIT: usize = 5000;
pub const DEFAULT_SESSION_KEY: &str = "rate-api-id";
Redirecting to ../../../actix_limitation/struct.Builder.html...
+ + + \ No newline at end of file diff --git a/actix_limitation/core/errors/enum.Error.html b/actix_limitation/core/errors/enum.Error.html new file mode 100644 index 000000000..674dbd1f5 --- /dev/null +++ b/actix_limitation/core/errors/enum.Error.html @@ -0,0 +1,11 @@ + + + + +Redirecting to ../../../actix_limitation/enum.Error.html...
+ + + \ No newline at end of file diff --git a/actix_limitation/core/status/struct.Status.html b/actix_limitation/core/status/struct.Status.html new file mode 100644 index 000000000..8fe5ac2e3 --- /dev/null +++ b/actix_limitation/core/status/struct.Status.html @@ -0,0 +1,11 @@ + + + + +Redirecting to ../../../actix_limitation/struct.Status.html...
+ + + \ No newline at end of file diff --git a/actix_limitation/enum.Error.html b/actix_limitation/enum.Error.html new file mode 100644 index 000000000..d31e60e02 --- /dev/null +++ b/actix_limitation/enum.Error.html @@ -0,0 +1,45 @@ +pub enum Error {
+ Client(RedisError),
+ LimitExceeded(Status),
+ Time(ComponentRange),
+ Other(String),
+}
Client(RedisError)
The Redis client failed to connect or run a query.
+LimitExceeded(Status)
The limit is exceeded for a key.
+Time(ComponentRange)
A time conversion failed.
+Other(String)
The lower-level source of this error, if any. Read more
+backtrace
)Returns a stack backtrace, if available, of where this error occurred. Read more
+use the Display impl or to_string()
+Mutably borrows from an owned value. Read more
+Attaches the provided Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Rate limiter using a fixed window counter for arbitrary keys, backed by Redis for Actix Web
+[dependencies]
+actix-limitation = "0.1.4"
+actix-web = "4"
use std::time::Duration;
+use actix_web::{get, web, App, HttpServer, Responder};
+use actix_limitation::{Limiter, RateLimiter};
+
+#[get("/{id}/{name}")]
+async fn index(info: web::Path<(u32, String)>) -> impl Responder {
+ format!("Hello {}! id:{}", info.1, info.0)
+}
+
+#[actix_web::main]
+async fn main() -> std::io::Result<()> {
+ let limiter = web::Data::new(
+ Limiter::build("redis://127.0.0.1")
+ .cookie_name("session-id".to_owned())
+ .session_key("rate-api-id".to_owned())
+ .limit(5000)
+ .period(Duration::from_secs(3600)) // 60 minutes
+ .finish()
+ .expect("Can't build actix-limiter"),
+ );
+
+ HttpServer::new(move || {
+ App::new()
+ .wrap(RateLimiter)
+ .app_data(limiter.clone())
+ .service(index)
+ })
+ .bind("127.0.0.1:8080")?
+ .run()
+ .await
+}
Redirecting to ../../actix_limitation/struct.RateLimiter.html...
+ + + \ No newline at end of file diff --git a/actix_limitation/sidebar-items.js b/actix_limitation/sidebar-items.js new file mode 100644 index 000000000..fee221c25 --- /dev/null +++ b/actix_limitation/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"constant":[["DEFAULT_COOKIE_NAME",""],["DEFAULT_PERIOD_SECS",""],["DEFAULT_REQUEST_LIMIT",""],["DEFAULT_SESSION_KEY",""]],"enum":[["Error",""]],"struct":[["Builder",""],["Limiter",""],["RateLimiter",""],["Status","A report for a given key containing the limit status."]]}); \ No newline at end of file diff --git a/actix_limitation/struct.Builder.html b/actix_limitation/struct.Builder.html new file mode 100644 index 000000000..75fc1bd60 --- /dev/null +++ b/actix_limitation/struct.Builder.html @@ -0,0 +1,31 @@ +pub struct Builder<'builder> { /* private fields */ }
Mutably borrows from an owned value. Read more
+Attaches the provided Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
pub struct Limiter { /* private fields */ }
Mutably borrows from an owned value. Read more
+The resulting type after obtaining ownership.
+toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
+Attaches the provided Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
pub struct RateLimiter;
Responses produced by the service.
+Errors produced by the service.
+The TransformService
value created by this factory
Creates and returns a new Transform component, asynchronously
+Mutably borrows from an owned value. Read more
+Attaches the provided Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
pub struct Status { /* private fields */ }
A report for a given key containing the limit status.
+The status contains the following information:
+limit
]: the maximum number of requests allowed in the current periodremaining
]: how many requests are left in the current periodreset_epoch_utc
]: a UNIX timestamp in UTC approximately when the next period will beginMutably borrows from an owned value. Read more
+The resulting type after obtaining ownership.
+toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
+Attaches the provided Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
+WithDispatch
wrapper. Read more
Access-Control-Request-Headers
has an …","Request header Access-Control-Request-Method
has an …","Builder for CORS middleware.","Errors that can occur when processing CORS guarded …","One or more request headers are not allowed.","Request method is not allowed.","Request header Origin
is required but was not provided.","Request header Access-Control-Request-Method
is required …","Origin is not allowed to make this request.","Allowed origin argument must not be wildcard (*
).","Resets allowed request header list to a state where any …","Resets allowed methods list to all methods.","Resets allowed origin list to a state where any origin is …","Add an allowed request header.","Set a list of request header field names which can be used …","Set a list of methods which allowed origins can perform.","Add an origin that is allowed to make requests.","Determinate allowed origins by processing requests which …","","","","","","","A restrictive (security paranoid) set of defaults.","Disable support for preflight requests.","Disable Vary
header support.","","Resets exposed response header list to a state where any …","Set a list of headers which are safe to expose to the API …","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self)
.","Calls U::from(self)
.","Set a maximum time (in seconds) for which this CORS …","","A very permissive set of default for quick development. …","Set to use wildcard origins.","","Allows users to make authenticated requests","","","","","","","","","",""],"i":[1,1,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,1,2,2,2,1,1,2,1,2,1,2,2,2,2,1,2,1,1,2,1,2,1,2,1,2,1],"f":[null,null,null,null,null,null,null,null,null,null,[[],["cors",3]],[[],["cors",3]],[[],["cors",3]],[[],["cors",3]],[[],["cors",3]],[[],["cors",3]],[[["str",0]],["cors",3]],[[],["cors",3]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["corserror",4]],[[["",0],["",0]]],[[],["cors",3]],[[],["cors",3]],[[],["cors",3]],[[["",0]],["httpresponse",3]],[[],["cors",3]],[[],["cors",3]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],["cors",3]],[[["",0]]],[[]],[[],["cors",3]],[[["",0]],["statuscode",3]],[[],["cors",3]],[[["",0]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]]],"p":[[4,"CorsError"],[3,"Cors"]]},\
"actix_identity":{"doc":"Opinionated request identity service for Actix Web apps.","t":[3,16,3,8,3,8,16,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["CookieIdentityPolicy","Future","Identity","IdentityPolicy","IdentityService","RequestIdentity","ResponseFuture","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","domain","forget","from","from","from","from_request","from_request","from_request","get_identity","http_only","identity","into","into","into","login_deadline","max_age","max_age_secs","name","new","new","new_transform","path","remember","same_site","secure","to_owned","to_response","to_response","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","visit_deadline","vzip","vzip","vzip"],"q":["actix_identity","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Use cookies for request identity storage.","The return type of the middleware","The extractor type to obtain your identity from a request.","Identity policy.","Request identity middleware","Helper trait that allows to get Identity.","The return type of the middleware","","","","","","","","","Sets the Domain
attribute of issued cookies.","This method is used to ‘forget’ the current identity …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Parse the session from request and load data from a …","","","","Sets the HttpOnly
attribute of issued cookies.","Return the claimed identity of the user associated request …","Calls U::from(self)
.","Calls U::from(self)
.","Calls U::from(self)
.","Accepts only users who authenticated within the given …","Sets the Max-Age
attribute of issued cookies.","Sets the Max-Age
attribute of issued cookies with given …","Sets the name of issued cookies.","Create new CookieIdentityPolicy
instance.","Create new identity service with specified backend.","","Sets the Path
attribute of issued cookies.","Remember identity.","Sets the SameSite
attribute of issued cookies.","Sets the Secure
attribute of issued cookies.","","Write changes to response","","","","","","","","","","","Accepts only users who have visited within given deadline.","","",""],"i":[0,1,0,0,0,0,1,2,3,4,2,3,4,4,4,2,4,2,3,4,1,2,4,5,2,4,2,3,4,2,2,2,2,2,3,3,2,4,2,2,4,1,2,2,3,4,2,3,4,2,3,4,2,2,3,4],"f":[null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["identity",3]],[[["",0],["",0]]],[[],["cookieidentitypolicy",3]],[[["",0]]],[[]],[[]],[[]],[[["",0],["servicerequest",3]]],[[["",0],["servicerequest",3]]],[[["httprequest",3],["payload",4]]],[[["",0]],["option",4,[["string",3]]]],[[["bool",0]]],[[["",0]],["option",4,[["string",3]]]],[[]],[[]],[[]],[[["duration",3]],["cookieidentitypolicy",3]],[[["duration",3]],["cookieidentitypolicy",3]],[[["i64",0]],["cookieidentitypolicy",3]],[[],["cookieidentitypolicy",3]],[[],["cookieidentitypolicy",3]],[[]],[[["",0]]],[[],["cookieidentitypolicy",3]],[[["",0],["string",3]]],[[["samesite",4]]],[[["bool",0]],["cookieidentitypolicy",3]],[[["",0]]],[[["",0],["option",4,[["string",3]]],["bool",0],["serviceresponse",3]]],[[["",0],["option",4,[["string",3]]],["bool",0],["serviceresponse",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["duration",3]],["cookieidentitypolicy",3]],[[]],[[]],[[]]],"p":[[8,"IdentityPolicy"],[3,"CookieIdentityPolicy"],[3,"IdentityService"],[3,"Identity"],[8,"RequestIdentity"]]},\
+"actix_limitation":{"doc":"Rate limiter using a fixed window counter for arbitrary …","t":[3,13,17,17,17,17,4,13,3,13,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12],"n":["Builder","Client","DEFAULT_COOKIE_NAME","DEFAULT_PERIOD_SECS","DEFAULT_REQUEST_LIMIT","DEFAULT_SESSION_KEY","Error","LimitExceeded","Limiter","Other","RateLimiter","Status","Time","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone_into","clone_into","cookie_name","count","finish","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","limit","limit","new_transform","period","remaining","reset_epoch_utc","session_key","source","to_owned","to_owned","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","0","0","0","0"],"q":["actix_limitation","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","actix_limitation::Error","","",""],"d":["","The Redis client failed to connect or run a query.","","","","","","The limit is exceeded for a key.","","","","A report for a given key containing the limit status.","A time conversion failed.","","","","","","","","","","","","","","","","","","Finializes and returns a Limiter
.","","","","","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)
.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,1,0,0,0,0,0,1,0,1,0,0,1,2,3,4,1,5,2,3,4,1,5,4,4,5,4,5,2,4,2,4,1,1,5,2,3,4,1,1,1,5,2,3,4,1,5,2,5,3,2,5,5,2,1,4,5,1,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,6,7,8,9],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["str",0]],["builder",3]],[[["",0]],["limiter",3]],[[["",0]],["status",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["string",3]],["",0]],[[["",0],["into",8,[["string",3]]]]],[[["",0]],["result",4,[["limiter",3],["error",4]]]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["componentrange",3]]],[[["rediserror",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0],["usize",0]],["",0]],[[["",0]],["usize",0]],[[["",0]]],[[["",0],["duration",3]],["",0]],[[["",0]],["usize",0]],[[["",0]],["usize",0]],[[["",0],["string",3]],["",0]],[[["",0]],["option",4,[["error",8]]]],[[["",0]]],[[["",0]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null],"p":[[4,"Error"],[3,"Builder"],[3,"RateLimiter"],[3,"Limiter"],[3,"Status"],[13,"Client"],[13,"LimitExceeded"],[13,"Time"],[13,"Other"]]},\
"actix_protobuf":{"doc":"","t":[12,13,13,13,13,3,3,3,4,8,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12],"n":["0","ContentType","Deserialize","Overflow","Payload","ProtoBuf","ProtoBufConfig","ProtoBufMessage","ProtoBufPayloadError","ProtoBufResponseBuilder","Serialize","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","default","deref","deref_mut","error_response","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_request","into","into","into","into","into_future","limit","limit","new","poll","protobuf","resource_path","respond_to","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_poll","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","0","0","0"],"q":["actix_protobuf","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","actix_protobuf::ProtoBufPayloadError","",""],"d":["","Content type error","Deserialize error","Payload size is bigger than 256k","Payload error","","","","","","Serialize error","","","","","","","","","","","","","","","","","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)
.","","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":[1,2,2,2,2,0,0,0,0,0,2,1,3,4,2,1,3,4,2,3,1,1,2,1,1,2,2,1,3,4,2,2,2,1,1,3,4,2,4,3,4,4,4,5,1,1,1,2,1,3,4,2,1,3,4,2,4,1,3,4,2,1,3,4,2,6,7,8],"f":[null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["httpresponse",3]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[["payloaderror",4]],["protobufpayloaderror",4]],[[["protobufdecodeerror",3]],["protobufpayloaderror",4]],[[]],[[["httprequest",3],["payload",4]]],[[]],[[]],[[]],[[]],[[]],[[["",0],["usize",0]],["",0]],[[["usize",0]]],[[["httprequest",3],["payload",4]]],[[["pin",3],["context",3]],["poll",4]],[[["",0],["message",8]],["result",4,[["httpresponse",3],["error",3]]]],[[["",0]],["path",3]],[[["httprequest",3]],["httpresponse",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["pin",3],["context",3]],["poll",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],null,null,null],"p":[[3,"ProtoBuf"],[4,"ProtoBufPayloadError"],[3,"ProtoBufConfig"],[3,"ProtoBufMessage"],[8,"ProtoBufResponseBuilder"],[13,"Serialize"],[13,"Deserialize"],[13,"Payload"]]},\
"actix_redis":{"doc":"Redis integration for actix
.","t":[12,13,13,3,13,13,4,13,13,13,13,13,13,13,3,13,13,4,4,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12],"n":["0","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_into","eq","equivalent","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","ne","push","resp_array","restarting","source","source","start","started","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","0","0","0","0","0","0","0","1","0","0","0","0","0"],"q":["actix_redis","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","actix_redis::Error","actix_redis::RespError","","","","","","","actix_redis::RespValue","","","",""],"d":["","Zero, one or more other RespValue
s.","A bulk string. In Redis terminology a string is a …","Command for send data to Redis","Error creating a connection, or an error with a connection …","Cancel all waters when connection get 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,2,2,0,3,4,0,2,3,2,3,2,4,4,0,3,3,0,0,2,3,2,5,1,4,2,3,5,1,4,2,3,2,2,2,2,5,1,4,4,2,3,3,5,1,4,4,2,2,2,2,2,2,2,2,3,3,3,2,5,5,5,1,4,2,3,2,2,0,5,4,3,5,5,2,4,3,5,1,4,2,3,5,1,4,2,3,5,1,4,2,3,5,1,4,2,3,6,7,8,9,10,11,12,9,13,14,15,16,17],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["respvalue",4]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["respvalue",4]],[[["",0],["",0]]],[[["",0],["respvalue",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["error",3]],["running",4]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",4,[["error",3]]]],[[["",0],["formatter",3]],["result",4,[["error",3]]]],[[["",0],["formatter",3]],["result",4,[["error",3]]]],[[]],[[]],[[["error",4]],["error",4]],[[]],[[["arc",3,[["str",0]]]],["respvalue",4]],[[["usize",0]],["respvalue",4]],[[["string",3]],["respvalue",4]],[[["str",0]],["respvalue",4]],[[["vec",3,[["u8",0],["global",3]]]],["respvalue",4]],[[["string",3]],["respvalue",4]],[[],["respvalue",4]],[[]],[[["trysenderror",3]],["error",4]],[[["error",3]],["error",4]],[[]],[[["respvalue",4]],["result",4,[["respvalue",4],["error",4]]]],[[["",0],["command",3]]],[[["",0],["result",4,[["respvalue",4],["resperror",4]]]]],[[]],[[]],[[]],[[]],[[]],[[["",0],["respvalue",4]],["bool",0]],[[["",0]]],null,[[["",0]]],[[["",0]],["option",4,[["error",8]]]],[[["",0]],["option",4,[["error",8]]]],[[["into",8,[["string",3]]]],["addr",3,[["redisactor",3]]]],[[["",0],["context",3]]],[[["",0]]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Command"],[4,"RespValue"],[4,"RespError"],[4,"Error"],[3,"RedisActor"],[13,"Redis"],[13,"Internal"],[13,"IO"],[13,"Resp"],[13,"Remote"],[13,"Connection"],[13,"Unexpected"],[13,"Array"],[13,"BulkString"],[13,"Error"],[13,"Integer"],[13,"SimpleString"]]},\
"actix_session":{"doc":"Session management for Actix Web.","t":[13,13,4,13,13,13,13,3,8,4,3,3,4,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,3,13,4,13,13,13,3,3,3,3,4,13,13,3,8,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12],"n":["BrowserSession","Changed","CookieContentSecurity","Predetermined","Private","Purged","Renewed","Session","SessionExt","SessionLength","SessionMiddleware","SessionMiddlewareBuilder","SessionStatus","Signed","Unchanged","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","builder","clear","clone","clone","clone","clone","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","entries","eq","equivalent","fmt","fmt","fmt","from","from","from","from","from","from","from_request","get","get_session","insert","into","into","into","into","into","into","new","new_transform","purge","remove","remove_as","renew","session_length","status","storage","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","max_session_length","state_ttl","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","equivalent","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","ne","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","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0"],"q":["actix_session","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","actix_session::SessionLength","","actix_session::storage","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","actix_session::storage::LoadError","","actix_session::storage::SaveError","","actix_session::storage::UpdateError",""],"d":["The session cookie will expire when the current browser …","Session state has been updated - the changes will have to …","Used by SessionMiddlewareBuilder::cookie_content_security
…","The session cookie will be a persistent cookie.","CookieContentSecurity::Private
selects encrypted cookie …","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 …","Describes how long a session should last.","A middleware for session management in Actix Web …","A fluent builder to construct a SessionMiddleware
instance …","Status of a Session
.","CookieContentSecurity::Signed
selects signed cookie …","The session state has not been modified since its …","","","","","","","","","","","","","Finalise the builder and return a SessionMiddleware
…","A fluent API to configure SessionMiddleware
.","Clear the session.","","","","","","","","","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 …","","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.","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)
.","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 …","Determine how long a session should last - check out …","Returns session status.","Pluggable storage backends for session state.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Set max_session_length
to specify how long the session …","We must provide a time-to-live (TTL) when storing the …","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 …","","","","","","","","","","","","","","","","","",""],"i":[1,2,0,1,3,2,2,0,0,0,0,0,0,3,2,4,5,6,1,3,2,4,5,6,1,3,2,4,6,5,6,1,3,2,6,1,3,2,4,4,4,4,4,4,4,2,5,2,2,1,3,2,4,5,6,1,3,2,5,5,7,5,4,5,6,1,3,2,6,6,5,5,5,5,4,5,0,6,1,3,2,4,5,6,1,3,2,4,5,6,1,3,2,4,5,6,1,3,2,4,5,6,1,3,2,8,9,0,10,0,10,11,12,0,0,0,0,0,11,12,0,0,0,13,14,15,16,10,11,12,13,17,18,14,15,16,10,11,12,13,17,18,15,16,14,18,15,16,18,18,17,19,14,17,18,13,13,10,10,11,11,12,12,13,14,15,16,10,11,12,13,17,18,14,15,16,10,11,12,13,17,18,19,14,17,18,13,14,18,19,14,17,18,10,11,12,18,10,11,12,14,15,16,10,11,12,13,13,17,18,14,15,16,10,11,12,13,17,18,14,15,16,10,11,12,13,17,18,19,14,17,18,14,15,16,10,11,12,13,17,18,20,21,22,23,24,25],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["sessionmiddleware",3]],[[["key",3]],["sessionmiddlewarebuilder",3]],[[["",0]]],[[["",0]],["sessionmiddleware",3]],[[["",0]],["sessionlength",4]],[[["",0]],["cookiecontentsecurity",4]],[[["",0]],["sessionstatus",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["cookiecontentsecurity",4]]],[[["option",4,[["string",3]]]]],[[["bool",0]]],[[["string",3]]],[[["string",3]]],[[["samesite",4]]],[[["bool",0]]],[[],["sessionstatus",4]],[[["",0]],["ref",3,[["hashmap",3,[["string",3],["string",3]]]]]],[[["",0],["sessionstatus",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[["httprequest",3],["payload",4]]],[[["",0],["str",0]],["result",4,[["option",4,[["deserializeowned",8]]],["error",3]]]],[[["",0]],["session",3]],[[["",0]],["result",4,[["error",3]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["key",3]]],[[["",0]]],[[["",0]]],[[["",0],["str",0]],["option",4,[["string",3]]]],[[["",0],["str",0]],["option",4,[["result",4,[["deserializeowned",8],["string",3]]]]]],[[["",0]]],[[["sessionlength",4]]],[[["",0]],["sessionstatus",4]],null,[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["str",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]],[[],["redisactorsessionstore",3]],[[]],[[["into",8,[["string",3]]]],["redisactorsessionstorebuilder",3]],[[["into",8,[["string",3]]]],["redissessionstorebuilder",3]],[[]],[[]],[[["",0]],["redissessionstore",3]],[[["",0],["",0]]],[[],["cookiesessionstore",3]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3]],["bool",0]],[[["into",8,[["string",3]]]],["redisactorsessionstore",3]],[[["into",8,[["string",3]]]]],[[["",0],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0]],["option",4,[["error",8]]]],[[["",0]],["option",4,[["error",8]]]],[[["",0]],["option",4,[["error",8]]]],[[["",0]]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["string",3]],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0],["sessionkey",3],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[["",0],["sessionkey",3],["hashmap",3,[["string",3],["string",3]]],["duration",3]],["pin",3,[["box",3,[["future",8]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null],"p":[[4,"SessionLength"],[4,"SessionStatus"],[4,"CookieContentSecurity"],[3,"SessionMiddlewareBuilder"],[3,"Session"],[3,"SessionMiddleware"],[8,"SessionExt"],[13,"Predetermined"],[13,"BrowserSession"],[4,"LoadError"],[4,"SaveError"],[4,"UpdateError"],[3,"SessionKey"],[3,"RedisActorSessionStore"],[3,"RedisActorSessionStoreBuilder"],[3,"RedisSessionStoreBuilder"],[3,"CookieSessionStore"],[3,"RedisSessionStore"],[8,"SessionStore"],[13,"Deserialization"],[13,"Other"],[13,"Serialization"],[13,"Other"],[13,"Serialization"],[13,"Other"]]},\
diff --git a/settings.html b/settings.html
index 02eb76f32..e35610db1 100644
--- a/settings.html
+++ b/settings.html
@@ -1,11 +1,9 @@