From 90165ac1ccf05b0a3b8e8e17931d76e653cb4cac Mon Sep 17 00:00:00 2001 From: Nikolay Kim Date: Thu, 26 Jul 2018 10:53:41 -0700 Subject: [PATCH] update stable docs --- static/api/actix-web/0.7.2/.lock | 0 static/api/actix-web/0.7.2/COPYRIGHT.txt | 59 + .../api/actix-web/0.7.2/FiraSans-LICENSE.txt | 99 + .../api/actix-web/0.7.2/FiraSans-Medium.woff | Bin 0 -> 89883 bytes .../api/actix-web/0.7.2/FiraSans-Regular.woff | Bin 0 -> 91946 bytes .../actix-web/0.7.2/Heuristica-Italic.woff | Bin 0 -> 119956 bytes .../actix-web/0.7.2/Heuristica-LICENSE.txt | 101 + static/api/actix-web/0.7.2/LICENSE-APACHE.txt | 201 + static/api/actix-web/0.7.2/LICENSE-MIT.txt | 23 + .../actix-web/0.7.2/SourceCodePro-LICENSE.txt | 93 + .../0.7.2/SourceCodePro-Regular.woff | Bin 0 -> 55472 bytes .../0.7.2/SourceCodePro-Semibold.woff | Bin 0 -> 55360 bytes .../actix-web/0.7.2/SourceSerifPro-Bold.woff | Bin 0 -> 48720 bytes .../0.7.2/SourceSerifPro-LICENSE.txt | 93 + .../0.7.2/SourceSerifPro-Regular.woff | Bin 0 -> 49960 bytes .../api/actix-web/0.7.2/actix_web/App.t.html | 10 + .../0.7.2/actix_web/AsyncResponder.t.html | 10 + .../actix-web/0.7.2/actix_web/Binary.t.html | 10 + .../api/actix-web/0.7.2/actix_web/Body.t.html | 10 + .../actix-web/0.7.2/actix_web/Either.t.html | 10 + .../0.7.2/actix_web/Extensions.t.html | 10 + .../api/actix-web/0.7.2/actix_web/Form.t.html | 10 + .../0.7.2/actix_web/FromRequest.t.html | 10 + .../0.7.2/actix_web/FutureResponse.t.html | 10 + .../0.7.2/actix_web/HttpContext.t.html | 10 + .../0.7.2/actix_web/HttpMessage.t.html | 10 + .../0.7.2/actix_web/HttpRequest.t.html | 10 + .../0.7.2/actix_web/HttpResponse.t.html | 10 + .../api/actix-web/0.7.2/actix_web/Json.t.html | 10 + .../api/actix-web/0.7.2/actix_web/Path.t.html | 10 + .../actix-web/0.7.2/actix_web/Query.t.html | 10 + .../actix-web/0.7.2/actix_web/Request.t.html | 10 + .../0.7.2/actix_web/Responder.t.html | 10 + .../actix-web/0.7.2/actix_web/Scope.t.html | 10 + .../actix-web/0.7.2/actix_web/State.t.html | 10 + .../0.7.2/actix_web/actix/actix/Actor.t.html | 10 + .../actix_web/actix/actix/ActorContext.t.html | 10 + .../actix_web/actix/actix/ActorFuture.t.html | 10 + .../actix/actix/ActorResponse.t.html | 10 + .../actix_web/actix/actix/ActorState.t.html | 10 + .../actix_web/actix/actix/ActorStream.t.html | 10 + .../0.7.2/actix_web/actix/actix/Addr.t.html | 10 + .../actix_web/actix/actix/Arbiter.t.html | 10 + .../actix/actix/ArbiterService.t.html | 10 + .../actix_web/actix/actix/AsyncContext.t.html | 10 + .../actix_web/actix/actix/Condition.t.html | 10 + .../actix_web/actix/actix/Context.t.html | 10 + .../actix/actix/ContextFutureSpawner.t.html | 10 + .../actix_web/actix/actix/Handler.t.html | 10 + .../actix_web/actix/actix/MailboxError.t.html | 10 + .../actix_web/actix/actix/Message.t.html | 10 + .../actix/actix/MessageResult.t.html | 10 + .../actix_web/actix/actix/Recipient.t.html | 10 + .../actix/actix/RecipientRequest.t.html | 10 + .../actix_web/actix/actix/Request.t.html | 10 + .../actix_web/actix/actix/Response.t.html | 10 + .../actix/actix/ResponseActFuture.t.html | 10 + .../actix/actix/ResponseFuture.t.html | 10 + .../actix_web/actix/actix/Running.t.html | 10 + .../actix_web/actix/actix/SendError.t.html | 10 + .../actix_web/actix/actix/SpawnHandle.t.html | 10 + .../actix/actix/StreamHandler.t.html | 10 + .../actix_web/actix/actix/Supervised.t.html | 10 + .../actix_web/actix/actix/Supervisor.t.html | 10 + .../actix_web/actix/actix/SyncArbiter.t.html | 10 + .../actix_web/actix/actix/SyncContext.t.html | 10 + .../0.7.2/actix_web/actix/actix/System.t.html | 10 + .../actix/actix/SystemService.t.html | 10 + .../actix_web/actix/actix/WrapFuture.t.html | 10 + .../actix_web/actix/actix/WrapStream.t.html | 10 + .../actix_web/actix/actix/actors/index.html | 19 + .../actix/actors/resolver/Connect.t.html | 10 + .../actix/actors/resolver/ConnectAddr.t.html | 10 + .../actix/actors/resolver/Connector.t.html | 10 + .../actors/resolver/ConnectorError.t.html | 10 + .../actix/actors/resolver/Resolve.t.html | 10 + .../actix/actors/resolver/Resolver.t.html | 10 + .../actors/resolver/ResolverError.t.html | 10 + .../actix/actors/resolver/TcpConnector.t.html | 10 + .../actors/resolver/enum.ResolverError.html | 30 + .../actix/actix/actors/resolver/index.html | 93 + .../actix/actors/resolver/sidebar-items.js | 1 + .../actix/actors/resolver/struct.Connect.html | 24 + .../actors/resolver/struct.ConnectAddr.html | 18 + .../actix/actors/resolver/struct.Resolve.html | 22 + .../actors/resolver/struct.Resolver.html | 36 + .../actors/resolver/struct.TcpConnector.html | 28 + .../actix/actors/resolver/type.Connector.html | 2 + .../actors/resolver/type.ConnectorError.html | 2 + .../actix/actix/actors/sidebar-items.js | 1 + .../signal/DefaultSignalsHandler.t.html | 10 + .../actix/actors/signal/ProcessSignals.t.html | 10 + .../actix/actix/actors/signal/Signal.t.html | 10 + .../actix/actors/signal/SignalType.t.html | 10 + .../actix/actors/signal/Subscribe.t.html | 10 + .../actix/actors/signal/enum.SignalType.html | 32 + .../actix/actix/actors/signal/index.html | 100 + .../actix/actors/signal/sidebar-items.js | 1 + .../signal/struct.DefaultSignalsHandler.html | 26 + .../actors/signal/struct.ProcessSignals.html | 28 + .../actix/actors/signal/struct.Signal.html | 25 + .../actix/actors/signal/struct.Subscribe.html | 17 + .../actix/actix/dev/ActorContext.t.html | 10 + .../actix/actix/dev/ActorFuture.t.html | 10 + .../actix/actix/dev/ActorResponse.t.html | 10 + .../actix/actix/dev/ActorStream.t.html | 10 + .../actix_web/actix/actix/dev/Arbiter.t.html | 10 + .../actix/actix/dev/ArbiterService.t.html | 10 + .../actix/actix/dev/AsyncContext.t.html | 10 + .../actix/actix/dev/AsyncContextParts.t.html | 10 + .../actix/actix/dev/ContextFut.t.html | 10 + .../actix/actix/dev/ContextParts.t.html | 10 + .../actix_web/actix/actix/dev/Envelope.t.html | 10 + .../actix_web/actix/actix/dev/Handler.t.html | 10 + .../actix_web/actix/actix/dev/Mailbox.t.html | 10 + .../actix_web/actix/actix/dev/Message.t.html | 10 + .../actix/actix/dev/MessageResponse.t.html | 10 + .../actix/actix/dev/Recipient.t.html | 10 + .../actix/actix/dev/RecipientRequest.t.html | 10 + .../actix_web/actix/actix/dev/Registry.t.html | 10 + .../actix_web/actix/actix/dev/Request.t.html | 10 + .../actix_web/actix/actix/dev/Response.t.html | 10 + .../actix/actix/dev/ResponseChannel.t.html | 10 + .../actix/actix/dev/ResponseFuture.t.html | 10 + .../actix/actix/dev/SpawnHandle.t.html | 10 + .../actix/actix/dev/StreamHandler.t.html | 10 + .../actix/actix/dev/SyncContext.t.html | 10 + .../actix_web/actix/actix/dev/System.t.html | 10 + .../actix/actix/dev/SystemRegistry.t.html | 10 + .../actix/actix/dev/ToEnvelope.t.html | 10 + .../actix/actix/dev/WrapStream.t.html | 10 + .../actix/actix/dev/actors/index.html | 19 + .../actix/dev/actors/resolver/Connect.t.html | 10 + .../dev/actors/resolver/ConnectAddr.t.html | 10 + .../dev/actors/resolver/Connector.t.html | 10 + .../dev/actors/resolver/ConnectorError.t.html | 10 + .../actix/dev/actors/resolver/Resolve.t.html | 10 + .../actix/dev/actors/resolver/Resolver.t.html | 10 + .../dev/actors/resolver/ResolverError.t.html | 10 + .../dev/actors/resolver/TcpConnector.t.html | 10 + .../actors/resolver/enum.ResolverError.html | 30 + .../actix/dev/actors/resolver/index.html | 93 + .../dev/actors/resolver/sidebar-items.js | 1 + .../dev/actors/resolver/struct.Connect.html | 24 + .../actors/resolver/struct.ConnectAddr.html | 18 + .../dev/actors/resolver/struct.Resolve.html | 22 + .../dev/actors/resolver/struct.Resolver.html | 36 + .../actors/resolver/struct.TcpConnector.html | 28 + .../dev/actors/resolver/type.Connector.html | 2 + .../actors/resolver/type.ConnectorError.html | 2 + .../actix/actix/dev/actors/sidebar-items.js | 1 + .../signal/DefaultSignalsHandler.t.html | 10 + .../dev/actors/signal/ProcessSignals.t.html | 10 + .../actix/dev/actors/signal/Signal.t.html | 10 + .../actix/dev/actors/signal/SignalType.t.html | 10 + .../actix/dev/actors/signal/Subscribe.t.html | 10 + .../dev/actors/signal/enum.SignalType.html | 32 + .../actix/actix/dev/actors/signal/index.html | 100 + .../actix/dev/actors/signal/sidebar-items.js | 1 + .../signal/struct.DefaultSignalsHandler.html | 26 + .../actors/signal/struct.ProcessSignals.html | 28 + .../dev/actors/signal/struct.Signal.html | 25 + .../dev/actors/signal/struct.Subscribe.html | 17 + .../actix/actix/dev/fut/AndThen.t.html | 10 + .../actix/actix/dev/fut/DropErr.t.html | 10 + .../actix/actix/dev/fut/Either.t.html | 10 + .../actix/actix/dev/fut/Finish.t.html | 10 + .../actix/actix/dev/fut/FromErr.t.html | 10 + .../actix/actix/dev/fut/FutureResult.t.html | 10 + .../actix/actix/dev/fut/FutureWrap.t.html | 10 + .../actix/dev/fut/IntoActorFuture.t.html | 10 + .../actix_web/actix/actix/dev/fut/Map.t.html | 10 + .../actix/actix/dev/fut/MapErr.t.html | 10 + .../actix/actix/dev/fut/StreamAndThen.t.html | 10 + .../actix/actix/dev/fut/StreamFinish.t.html | 10 + .../actix/actix/dev/fut/StreamFold.t.html | 10 + .../actix/actix/dev/fut/StreamMap.t.html | 10 + .../actix/actix/dev/fut/StreamMapErr.t.html | 10 + .../actix/actix/dev/fut/StreamThen.t.html | 10 + .../actix/actix/dev/fut/StreamTimeout.t.html | 10 + .../actix/actix/dev/fut/StreamWrap.t.html | 10 + .../actix_web/actix/actix/dev/fut/Then.t.html | 10 + .../actix/actix/dev/fut/Timeout.t.html | 10 + .../actix/actix/dev/fut/enum.Either.html | 40 + .../actix_web/actix/actix/dev/fut/err.v.html | 10 + .../actix_web/actix/actix/dev/fut/fn.err.html | 14 + .../actix_web/actix/actix/dev/fut/fn.ok.html | 16 + .../actix/actix/dev/fut/fn.result.html | 16 + .../actix/actix/dev/fut/fn.wrap_future.html | 2 + .../actix/actix/dev/fut/fn.wrap_stream.html | 2 + .../actix_web/actix/actix/dev/fut/index.html | 215 + .../actix_web/actix/actix/dev/fut/ok.v.html | 10 + .../actix/actix/dev/fut/result.v.html | 10 + .../actix/actix/dev/fut/sidebar-items.js | 1 + .../actix/actix/dev/fut/struct.AndThen.html | 28 + .../actix/actix/dev/fut/struct.DropErr.html | 23 + .../actix/actix/dev/fut/struct.Finish.html | 44 + .../actix/actix/dev/fut/struct.FromErr.html | 27 + .../actix/dev/fut/struct.FutureResult.html | 28 + .../actix/dev/fut/struct.FutureWrap.html | 23 + .../actix/actix/dev/fut/struct.Map.html | 27 + .../actix/actix/dev/fut/struct.MapErr.html | 27 + .../actix/dev/fut/struct.StreamAndThen.html | 28 + .../actix/dev/fut/struct.StreamFinish.html | 28 + .../actix/dev/fut/struct.StreamFold.html | 27 + .../actix/actix/dev/fut/struct.StreamMap.html | 28 + .../actix/dev/fut/struct.StreamMapErr.html | 28 + .../actix/dev/fut/struct.StreamThen.html | 28 + .../actix/dev/fut/struct.StreamTimeout.html | 28 + .../actix/dev/fut/struct.StreamWrap.html | 23 + .../actix/actix/dev/fut/struct.Then.html | 28 + .../actix/actix/dev/fut/struct.Timeout.html | 28 + .../actix/dev/fut/trait.IntoActorFuture.html | 33 + .../actix/actix/dev/fut/wrap_future.v.html | 10 + .../actix/actix/dev/fut/wrap_stream.v.html | 10 + .../actix_web/actix/actix/dev/index.html | 84 + .../actix/actix/dev/msgs/Execute.t.html | 10 + .../actix/actix/dev/msgs/StartActor.t.html | 10 + .../actix/actix/dev/msgs/StopArbiter.t.html | 10 + .../actix_web/actix/actix/dev/msgs/index.html | 27 + .../actix/actix/dev/msgs/sidebar-items.js | 1 + .../actix/actix/dev/msgs/struct.Execute.html | 44 + .../actix/dev/msgs/struct.StartActor.html | 20 + .../actix/dev/msgs/struct.StopArbiter.html | 16 + .../actix/actix/dev/sidebar-items.js | 1 + .../actix/actix/dev/struct.ActorResponse.html | 17 + .../actix/actix/dev/struct.Arbiter.html | 53 + .../actix/actix/dev/struct.ContextFut.html | 10 + .../actix/actix/dev/struct.ContextParts.html | 22 + .../actix/actix/dev/struct.Envelope.html | 10 + .../actix/actix/dev/struct.Mailbox.html | 15 + .../actix/actix/dev/struct.Recipient.html | 32 + .../actix/dev/struct.RecipientRequest.html | 43 + .../actix/actix/dev/struct.Registry.html | 77 + .../actix/actix/dev/struct.Request.html | 43 + .../actix/actix/dev/struct.Response.html | 17 + .../actix/actix/dev/struct.SpawnHandle.html | 24 + .../actix/actix/dev/struct.SyncContext.html | 15 + .../actix/actix/dev/struct.System.html | 65 + .../actix/dev/struct.SystemRegistry.html | 72 + .../actix/actix/dev/trait.ActorContext.html | 29 + .../actix/actix/dev/trait.ActorFuture.html | 81 + .../actix/actix/dev/trait.ActorStream.html | 64 + .../actix/actix/dev/trait.ArbiterService.html | 21 + .../actix/actix/dev/trait.AsyncContext.html | 115 + .../actix/dev/trait.AsyncContextParts.html | 18 + .../actix/actix/dev/trait.Handler.html | 42 + .../actix/actix/dev/trait.Message.html | 35 + .../actix/dev/trait.MessageResponse.html | 24 + .../actix/dev/trait.ResponseChannel.html | 21 + .../actix/actix/dev/trait.StreamHandler.html | 74 + .../actix/actix/dev/trait.ToEnvelope.html | 21 + .../actix/actix/dev/trait.WrapStream.html | 29 + .../actix/actix/dev/type.ResponseFuture.html | 2 + .../actix/actix/enum.ActorState.html | 34 + .../actix/actix/enum.MailboxError.html | 26 + .../actix_web/actix/actix/enum.Running.html | 21 + .../actix_web/actix/actix/enum.SendError.html | 21 + .../actix_web/actix/actix/fut/AndThen.t.html | 10 + .../actix_web/actix/actix/fut/DropErr.t.html | 10 + .../actix_web/actix/actix/fut/Either.t.html | 10 + .../actix_web/actix/actix/fut/Finish.t.html | 10 + .../actix_web/actix/actix/fut/FromErr.t.html | 10 + .../actix/actix/fut/FutureResult.t.html | 10 + .../actix/actix/fut/FutureWrap.t.html | 10 + .../actix/actix/fut/IntoActorFuture.t.html | 10 + .../actix_web/actix/actix/fut/Map.t.html | 10 + .../actix_web/actix/actix/fut/MapErr.t.html | 10 + .../actix/actix/fut/StreamAndThen.t.html | 10 + .../actix/actix/fut/StreamFinish.t.html | 10 + .../actix/actix/fut/StreamFold.t.html | 10 + .../actix/actix/fut/StreamMap.t.html | 10 + .../actix/actix/fut/StreamMapErr.t.html | 10 + .../actix/actix/fut/StreamThen.t.html | 10 + .../actix/actix/fut/StreamTimeout.t.html | 10 + .../actix/actix/fut/StreamWrap.t.html | 10 + .../actix_web/actix/actix/fut/Then.t.html | 10 + .../actix_web/actix/actix/fut/Timeout.t.html | 10 + .../actix/actix/fut/enum.Either.html | 40 + .../actix_web/actix/actix/fut/err.v.html | 10 + .../actix_web/actix/actix/fut/fn.err.html | 14 + .../actix_web/actix/actix/fut/fn.ok.html | 16 + .../actix_web/actix/actix/fut/fn.result.html | 16 + .../actix/actix/fut/fn.wrap_future.html | 2 + .../actix/actix/fut/fn.wrap_stream.html | 2 + .../actix_web/actix/actix/fut/index.html | 215 + .../0.7.2/actix_web/actix/actix/fut/ok.v.html | 10 + .../actix_web/actix/actix/fut/result.v.html | 10 + .../actix/actix/fut/sidebar-items.js | 1 + .../actix/actix/fut/struct.AndThen.html | 28 + .../actix/actix/fut/struct.DropErr.html | 23 + .../actix/actix/fut/struct.Finish.html | 44 + .../actix/actix/fut/struct.FromErr.html | 27 + .../actix/actix/fut/struct.FutureResult.html | 28 + .../actix/actix/fut/struct.FutureWrap.html | 23 + .../actix_web/actix/actix/fut/struct.Map.html | 27 + .../actix/actix/fut/struct.MapErr.html | 27 + .../actix/actix/fut/struct.StreamAndThen.html | 28 + .../actix/actix/fut/struct.StreamFinish.html | 28 + .../actix/actix/fut/struct.StreamFold.html | 27 + .../actix/actix/fut/struct.StreamMap.html | 28 + .../actix/actix/fut/struct.StreamMapErr.html | 28 + .../actix/actix/fut/struct.StreamThen.html | 28 + .../actix/actix/fut/struct.StreamTimeout.html | 28 + .../actix/actix/fut/struct.StreamWrap.html | 23 + .../actix/actix/fut/struct.Then.html | 28 + .../actix/actix/fut/struct.Timeout.html | 28 + .../actix/fut/trait.IntoActorFuture.html | 33 + .../actix/actix/fut/wrap_future.v.html | 10 + .../actix/actix/fut/wrap_stream.v.html | 10 + .../0.7.2/actix_web/actix/actix/index.html | 325 ++ .../actix/actix/io/FramedWrite.t.html | 10 + .../actix/actix/io/WriteHandler.t.html | 10 + .../actix_web/actix/actix/io/Writer.t.html | 10 + .../0.7.2/actix_web/actix/actix/io/index.html | 27 + .../actix_web/actix/actix/io/sidebar-items.js | 1 + .../actix/actix/io/struct.FramedWrite.html | 17 + .../actix/actix/io/struct.Writer.html | 17 + .../actix/actix/io/trait.WriteHandler.html | 24 + .../actix_web/actix/actix/msgs/Execute.t.html | 10 + .../actix/actix/msgs/StartActor.t.html | 10 + .../actix/actix/msgs/StopArbiter.t.html | 10 + .../actix_web/actix/actix/msgs/index.html | 27 + .../actix/actix/msgs/sidebar-items.js | 1 + .../actix/actix/msgs/struct.Execute.html | 44 + .../actix/actix/msgs/struct.StartActor.html | 20 + .../actix/actix/msgs/struct.StopArbiter.html | 16 + .../actix_web/actix/actix/sidebar-items.js | 1 + .../actix/actix/struct.ActorResponse.html | 17 + .../actix_web/actix/actix/struct.Addr.html | 33 + .../actix_web/actix/actix/struct.Arbiter.html | 53 + .../actix/actix/struct.Condition.html | 15 + .../actix_web/actix/actix/struct.Context.html | 34 + .../actix/actix/struct.MessageResult.html | 11 + .../actix/actix/struct.Recipient.html | 32 + .../actix/actix/struct.RecipientRequest.html | 43 + .../actix_web/actix/actix/struct.Request.html | 43 + .../actix/actix/struct.Response.html | 17 + .../actix/actix/struct.SpawnHandle.html | 24 + .../actix/actix/struct.Supervisor.html | 68 + .../actix/actix/struct.SyncArbiter.html | 25 + .../actix/actix/struct.SyncContext.html | 15 + .../actix_web/actix/actix/struct.System.html | 65 + .../actix_web/actix/actix/trait.Actor.html | 121 + .../actix/actix/trait.ActorContext.html | 29 + .../actix/actix/trait.ActorFuture.html | 81 + .../actix/actix/trait.ActorStream.html | 64 + .../actix/actix/trait.ArbiterService.html | 21 + .../actix/actix/trait.AsyncContext.html | 115 + .../actix/trait.ContextFutureSpawner.html | 21 + .../actix_web/actix/actix/trait.Handler.html | 42 + .../actix_web/actix/actix/trait.Message.html | 35 + .../actix/actix/trait.StreamHandler.html | 74 + .../actix/actix/trait.Supervised.html | 27 + .../actix/actix/trait.SystemService.html | 24 + .../actix/actix/trait.WrapFuture.html | 29 + .../actix/actix/trait.WrapStream.html | 29 + .../actix/actix/type.ResponseActFuture.html | 2 + .../actix/actix/type.ResponseFuture.html | 2 + .../0.7.2/actix_web/actix/fn.run.html | 23 + .../0.7.2/actix_web/actix/fn.spawn.html | 4 + .../actix_web/actix/fut/ActorFuture.t.html | 10 + .../actix_web/actix/fut/ActorStream.t.html | 10 + .../0.7.2/actix_web/actix/fut/AndThen.t.html | 10 + .../0.7.2/actix_web/actix/fut/DropErr.t.html | 10 + .../0.7.2/actix_web/actix/fut/Either.t.html | 10 + .../0.7.2/actix_web/actix/fut/Finish.t.html | 10 + .../0.7.2/actix_web/actix/fut/FromErr.t.html | 10 + .../actix_web/actix/fut/FutureResult.t.html | 10 + .../actix_web/actix/fut/FutureWrap.t.html | 10 + .../actix/fut/IntoActorFuture.t.html | 10 + .../0.7.2/actix_web/actix/fut/Map.t.html | 10 + .../0.7.2/actix_web/actix/fut/MapErr.t.html | 10 + .../actix_web/actix/fut/StreamAndThen.t.html | 10 + .../actix_web/actix/fut/StreamFinish.t.html | 10 + .../actix_web/actix/fut/StreamFold.t.html | 10 + .../actix_web/actix/fut/StreamMap.t.html | 10 + .../actix_web/actix/fut/StreamMapErr.t.html | 10 + .../actix_web/actix/fut/StreamThen.t.html | 10 + .../actix_web/actix/fut/StreamTimeout.t.html | 10 + .../actix_web/actix/fut/StreamWrap.t.html | 10 + .../0.7.2/actix_web/actix/fut/Then.t.html | 10 + .../0.7.2/actix_web/actix/fut/Timeout.t.html | 10 + .../actix_web/actix/fut/WrapFuture.t.html | 10 + .../actix_web/actix/fut/WrapStream.t.html | 10 + .../actix_web/actix/fut/enum.Either.html | 40 + .../0.7.2/actix_web/actix/fut/err.v.html | 10 + .../0.7.2/actix_web/actix/fut/fn.err.html | 14 + .../0.7.2/actix_web/actix/fut/fn.ok.html | 16 + .../0.7.2/actix_web/actix/fut/fn.result.html | 16 + .../actix_web/actix/fut/fn.wrap_future.html | 2 + .../actix_web/actix/fut/fn.wrap_stream.html | 2 + .../0.7.2/actix_web/actix/fut/index.html | 248 ++ .../0.7.2/actix_web/actix/fut/ok.v.html | 10 + .../0.7.2/actix_web/actix/fut/result.v.html | 10 + .../actix_web/actix/fut/sidebar-items.js | 1 + .../actix_web/actix/fut/struct.AndThen.html | 28 + .../actix_web/actix/fut/struct.DropErr.html | 23 + .../actix_web/actix/fut/struct.Finish.html | 44 + .../actix_web/actix/fut/struct.FromErr.html | 27 + .../actix/fut/struct.FutureResult.html | 28 + .../actix/fut/struct.FutureWrap.html | 23 + .../0.7.2/actix_web/actix/fut/struct.Map.html | 27 + .../actix_web/actix/fut/struct.MapErr.html | 27 + .../actix/fut/struct.StreamAndThen.html | 28 + .../actix/fut/struct.StreamFinish.html | 28 + .../actix/fut/struct.StreamFold.html | 27 + .../actix_web/actix/fut/struct.StreamMap.html | 28 + .../actix/fut/struct.StreamMapErr.html | 28 + .../actix/fut/struct.StreamThen.html | 28 + .../actix/fut/struct.StreamTimeout.html | 28 + .../actix/fut/struct.StreamWrap.html | 23 + .../actix_web/actix/fut/struct.Then.html | 28 + .../actix_web/actix/fut/struct.Timeout.html | 28 + .../actix/fut/trait.ActorFuture.html | 81 + .../actix/fut/trait.ActorStream.html | 64 + .../actix/fut/trait.IntoActorFuture.html | 33 + .../actix_web/actix/fut/trait.WrapFuture.html | 29 + .../actix_web/actix/fut/trait.WrapStream.html | 29 + .../actix_web/actix/fut/wrap_future.v.html | 10 + .../actix_web/actix/fut/wrap_stream.v.html | 10 + .../0.7.2/actix_web/actix/index.html | 59 + .../0.7.2/actix_web/actix/msgs/Execute.t.html | 10 + .../actix_web/actix/msgs/StartActor.t.html | 10 + .../actix_web/actix/msgs/StopArbiter.t.html | 10 + .../0.7.2/actix_web/actix/msgs/index.html | 27 + .../actix_web/actix/msgs/sidebar-items.js | 1 + .../actix_web/actix/msgs/struct.Execute.html | 44 + .../actix/msgs/struct.StartActor.html | 20 + .../actix/msgs/struct.StopArbiter.html | 16 + .../actix_web/actix/resolver/Connect.t.html | 10 + .../actix/resolver/ConnectAddr.t.html | 10 + .../actix_web/actix/resolver/Connector.t.html | 10 + .../actix/resolver/ConnectorError.t.html | 10 + .../actix_web/actix/resolver/Resolve.t.html | 10 + .../actix_web/actix/resolver/Resolver.t.html | 10 + .../actix/resolver/ResolverError.t.html | 10 + .../actix/resolver/TcpConnector.t.html | 10 + .../actix/resolver/enum.ResolverError.html | 30 + .../0.7.2/actix_web/actix/resolver/index.html | 93 + .../actix_web/actix/resolver/sidebar-items.js | 1 + .../actix/resolver/struct.Connect.html | 24 + .../actix/resolver/struct.ConnectAddr.html | 18 + .../actix/resolver/struct.Resolve.html | 22 + .../actix/resolver/struct.Resolver.html | 36 + .../actix/resolver/struct.TcpConnector.html | 28 + .../actix/resolver/type.Connector.html | 2 + .../actix/resolver/type.ConnectorError.html | 2 + .../0.7.2/actix_web/actix/run.v.html | 10 + .../0.7.2/actix_web/actix/sidebar-items.js | 1 + .../actix/signal/DefaultSignalsHandler.t.html | 10 + .../actix/signal/ProcessSignals.t.html | 10 + .../actix_web/actix/signal/Signal.t.html | 10 + .../actix_web/actix/signal/SignalType.t.html | 10 + .../actix_web/actix/signal/Subscribe.t.html | 10 + .../actix/signal/enum.SignalType.html | 32 + .../0.7.2/actix_web/actix/signal/index.html | 100 + .../actix_web/actix/signal/sidebar-items.js | 1 + .../signal/struct.DefaultSignalsHandler.html | 26 + .../actix/signal/struct.ProcessSignals.html | 28 + .../actix_web/actix/signal/struct.Signal.html | 25 + .../actix/signal/struct.Subscribe.html | 17 + .../0.7.2/actix_web/actix/spawn.v.html | 10 + static/api/actix-web/0.7.2/actix_web/all.html | 3 + .../0.7.2/actix_web/application/App.t.html | 10 + .../actix_web/application/struct.App.html | 10 + .../0.7.2/actix_web/body/Binary.t.html | 10 + .../0.7.2/actix_web/body/Body.t.html | 10 + .../0.7.2/actix_web/body/BodyStream.t.html | 10 + .../0.7.2/actix_web/body/enum.Binary.html | 10 + .../0.7.2/actix_web/body/enum.Body.html | 10 + .../0.7.2/actix_web/body/type.BodyStream.html | 10 + .../actix_web/client/ClientConnector.t.html | 10 + .../client/ClientConnectorError.t.html | 10 + .../client/ClientConnectorStats.t.html | 10 + .../actix_web/client/ClientRequest.t.html | 10 + .../client/ClientRequestBuilder.t.html | 10 + .../actix_web/client/ClientResponse.t.html | 10 + .../0.7.2/actix_web/client/Connect.t.html | 10 + .../0.7.2/actix_web/client/Connection.t.html | 10 + .../0.7.2/actix_web/client/Pause.t.html | 10 + .../0.7.2/actix_web/client/Resume.t.html | 10 + .../0.7.2/actix_web/client/SendRequest.t.html | 10 + .../actix_web/client/SendRequestError.t.html | 10 + .../client/connector/ClientConnector.t.html | 10 + .../connector/ClientConnectorError.t.html | 10 + .../connector/ClientConnectorStats.t.html | 10 + .../actix_web/client/connector/Connect.t.html | 10 + .../client/connector/Connection.t.html | 10 + .../actix_web/client/connector/Pause.t.html | 10 + .../actix_web/client/connector/Resume.t.html | 10 + .../connector/enum.ClientConnectorError.html | 10 + .../connector/struct.ClientConnector.html | 10 + .../struct.ClientConnectorStats.html | 10 + .../client/connector/struct.Connect.html | 10 + .../client/connector/struct.Connection.html | 10 + .../client/connector/struct.Pause.html | 10 + .../client/connector/struct.Resume.html | 10 + .../0.7.2/actix_web/client/delete.v.html | 10 + .../client/enum.ClientConnectorError.html | 38 + .../client/enum.SendRequestError.html | 35 + .../0.7.2/actix_web/client/fn.delete.html | 2 + .../0.7.2/actix_web/client/fn.get.html | 19 + .../0.7.2/actix_web/client/fn.head.html | 2 + .../0.7.2/actix_web/client/fn.post.html | 2 + .../0.7.2/actix_web/client/fn.put.html | 2 + .../0.7.2/actix_web/client/get.v.html | 10 + .../0.7.2/actix_web/client/head.v.html | 10 + .../0.7.2/actix_web/client/index.html | 161 + .../client/pipeline/SendRequest.t.html | 10 + .../client/pipeline/SendRequestError.t.html | 10 + .../pipeline/enum.SendRequestError.html | 10 + .../client/pipeline/struct.SendRequest.html | 10 + .../0.7.2/actix_web/client/post.v.html | 10 + .../0.7.2/actix_web/client/put.v.html | 10 + .../client/request/ClientRequest.t.html | 10 + .../request/ClientRequestBuilder.t.html | 10 + .../client/request/struct.ClientRequest.html | 10 + .../request/struct.ClientRequestBuilder.html | 10 + .../client/response/ClientResponse.t.html | 10 + .../response/struct.ClientResponse.html | 10 + .../0.7.2/actix_web/client/sidebar-items.js | 1 + .../client/struct.ClientConnector.html | 83 + .../client/struct.ClientConnectorStats.html | 58 + .../client/struct.ClientRequest.html | 58 + .../client/struct.ClientRequestBuilder.html | 92 + .../client/struct.ClientResponse.html | 37 + .../actix_web/client/struct.Connect.html | 28 + .../actix_web/client/struct.Connection.html | 48 + .../0.7.2/actix_web/client/struct.Pause.html | 23 + .../0.7.2/actix_web/client/struct.Resume.html | 16 + .../actix_web/client/struct.SendRequest.html | 52 + .../0.7.2/actix_web/context/Drain.t.html | 10 + .../actix_web/context/HttpContext.t.html | 10 + .../0.7.2/actix_web/context/struct.Drain.html | 10 + .../actix_web/context/struct.HttpContext.html | 10 + .../0.7.2/actix_web/dev/AsyncResult.t.html | 10 + .../0.7.2/actix_web/dev/BodyStream.t.html | 10 + .../0.7.2/actix_web/dev/ConnectionInfo.t.html | 10 + .../0.7.2/actix_web/dev/Drain.t.html | 10 + .../0.7.2/actix_web/dev/FormConfig.t.html | 10 + .../0.7.2/actix_web/dev/FromParam.t.html | 10 + .../0.7.2/actix_web/dev/Handler.t.html | 10 + .../actix_web/dev/HttpResponseBuilder.t.html | 10 + .../0.7.2/actix_web/dev/JsonBody.t.html | 10 + .../0.7.2/actix_web/dev/JsonConfig.t.html | 10 + .../0.7.2/actix_web/dev/MessageBody.t.html | 10 + .../0.7.2/actix_web/dev/Params.t.html | 10 + .../0.7.2/actix_web/dev/Payload.t.html | 10 + .../0.7.2/actix_web/dev/PayloadBuffer.t.html | 10 + .../0.7.2/actix_web/dev/PayloadConfig.t.html | 10 + .../0.7.2/actix_web/dev/Resource.t.html | 10 + .../0.7.2/actix_web/dev/ResourceDef.t.html | 10 + .../0.7.2/actix_web/dev/ResourceInfo.t.html | 10 + .../0.7.2/actix_web/dev/ResourceType.t.html | 10 + .../0.7.2/actix_web/dev/Route.t.html | 10 + .../0.7.2/actix_web/dev/Router.t.html | 10 + .../0.7.2/actix_web/dev/UrlEncoded.t.html | 10 + .../actix_web/dev/enum.ResourceType.html | 28 + .../actix-web/0.7.2/actix_web/dev/index.html | 188 + .../0.7.2/actix_web/dev/sidebar-items.js | 1 + .../actix_web/dev/struct.AsyncResult.html | 59 + .../actix_web/dev/struct.ConnectionInfo.html | 42 + .../0.7.2/actix_web/dev/struct.Drain.html | 29 + .../actix_web/dev/struct.FormConfig.html | 44 + .../dev/struct.HttpResponseBuilder.html | 103 + .../0.7.2/actix_web/dev/struct.JsonBody.html | 65 + .../actix_web/dev/struct.JsonConfig.html | 45 + .../actix_web/dev/struct.MessageBody.html | 42 + .../0.7.2/actix_web/dev/struct.Params.html | 39 + .../0.7.2/actix_web/dev/struct.Payload.html | 78 + .../actix_web/dev/struct.PayloadBuffer.html | 23 + .../actix_web/dev/struct.PayloadConfig.html | 19 + .../0.7.2/actix_web/dev/struct.Resource.html | 117 + .../actix_web/dev/struct.ResourceDef.html | 38 + .../actix_web/dev/struct.ResourceInfo.html | 40 + .../0.7.2/actix_web/dev/struct.Route.html | 151 + .../0.7.2/actix_web/dev/struct.Router.html | 18 + .../actix_web/dev/struct.UrlEncoded.html | 42 + .../0.7.2/actix_web/dev/trait.FromParam.html | 64 + .../0.7.2/actix_web/dev/trait.Handler.html | 27 + .../0.7.2/actix_web/dev/type.BodyStream.html | 2 + .../0.7.2/actix_web/enum.Binary.html | 53 + .../actix-web/0.7.2/actix_web/enum.Body.html | 37 + .../0.7.2/actix_web/enum.Either.html | 71 + .../actix_web/error/ContentTypeError.t.html | 10 + .../actix_web/error/CookieParseError.t.html | 10 + .../0.7.2/actix_web/error/Error.t.html | 10 + .../actix_web/error/ErrorBadGateway.v.html | 10 + .../actix_web/error/ErrorBadRequest.v.html | 10 + .../actix_web/error/ErrorConflict.v.html | 10 + .../error/ErrorExpectationFailed.v.html | 10 + .../actix_web/error/ErrorForbidden.v.html | 10 + .../error/ErrorGatewayTimeout.v.html | 10 + .../0.7.2/actix_web/error/ErrorGone.v.html | 10 + .../error/ErrorInternalServerError.v.html | 10 + .../error/ErrorMethodNotAllowed.v.html | 10 + .../actix_web/error/ErrorNotFound.v.html | 10 + .../error/ErrorNotImplemented.v.html | 10 + .../error/ErrorPreconditionFailed.v.html | 10 + .../error/ErrorRequestTimeout.v.html | 10 + .../error/ErrorServiceUnavailable.v.html | 10 + .../actix_web/error/ErrorUnauthorized.v.html | 10 + .../0.7.2/actix_web/error/ExpectError.t.html | 10 + .../actix_web/error/InternalError.t.html | 10 + .../actix_web/error/JsonPayloadError.t.html | 10 + .../actix_web/error/MultipartError.t.html | 10 + .../0.7.2/actix_web/error/ParseError.t.html | 10 + .../0.7.2/actix_web/error/PayloadError.t.html | 10 + .../actix_web/error/ReadlinesError.t.html | 10 + .../actix_web/error/ResponseError.t.html | 10 + .../0.7.2/actix_web/error/Result.t.html | 10 + .../actix_web/error/StaticFileError.t.html | 10 + .../actix_web/error/UriSegmentError.t.html | 10 + .../actix_web/error/UrlGenerationError.t.html | 10 + .../actix_web/error/UrlParseError.t.html | 10 + .../actix_web/error/UrlencodedError.t.html | 10 + .../error/enum.ContentTypeError.html | 32 + .../error/enum.CookieParseError.html | 37 + .../actix_web/error/enum.ExpectError.html | 30 + .../error/enum.JsonPayloadError.html | 34 + .../actix_web/error/enum.MultipartError.html | 38 + .../actix_web/error/enum.ParseError.html | 51 + .../actix_web/error/enum.PayloadError.html | 46 + .../actix_web/error/enum.ReadlinesError.html | 24 + .../actix_web/error/enum.StaticFileError.html | 31 + .../actix_web/error/enum.UriSegmentError.html | 33 + .../error/enum.UrlGenerationError.html | 33 + .../actix_web/error/enum.UrlParseError.html | 39 + .../actix_web/error/enum.UrlencodedError.html | 37 + .../actix_web/error/fn.ErrorBadGateway.html | 3 + .../actix_web/error/fn.ErrorBadRequest.html | 3 + .../actix_web/error/fn.ErrorConflict.html | 3 + .../error/fn.ErrorExpectationFailed.html | 3 + .../actix_web/error/fn.ErrorForbidden.html | 3 + .../error/fn.ErrorGatewayTimeout.html | 3 + .../0.7.2/actix_web/error/fn.ErrorGone.html | 3 + .../error/fn.ErrorInternalServerError.html | 3 + .../error/fn.ErrorMethodNotAllowed.html | 3 + .../actix_web/error/fn.ErrorNotFound.html | 3 + .../error/fn.ErrorNotImplemented.html | 3 + .../error/fn.ErrorPreconditionFailed.html | 3 + .../error/fn.ErrorRequestTimeout.html | 3 + .../error/fn.ErrorServiceUnavailable.html | 3 + .../actix_web/error/fn.ErrorUnauthorized.html | 3 + .../0.7.2/actix_web/error/index.html | 280 ++ .../0.7.2/actix_web/error/sidebar-items.js | 1 + .../0.7.2/actix_web/error/struct.Error.html | 40 + .../actix_web/error/struct.InternalError.html | 42 + .../actix_web/error/trait.ResponseError.html | 53 + .../0.7.2/actix_web/error/type.Result.html | 6 + .../actix_web/extensions/Extensions.t.html | 10 + .../extensions/struct.Extensions.html | 10 + .../0.7.2/actix_web/extractor/Form.t.html | 10 + .../actix_web/extractor/FormConfig.t.html | 10 + .../0.7.2/actix_web/extractor/Path.t.html | 10 + .../actix_web/extractor/PayloadConfig.t.html | 10 + .../0.7.2/actix_web/extractor/Query.t.html | 10 + .../actix_web/extractor/struct.Form.html | 10 + .../extractor/struct.FormConfig.html | 10 + .../actix_web/extractor/struct.Path.html | 10 + .../extractor/struct.PayloadConfig.html | 10 + .../actix_web/extractor/struct.Query.html | 10 + .../0.7.2/actix_web/fs/ChunkedReadFile.t.html | 10 + .../0.7.2/actix_web/fs/DefaultConfig.t.html | 10 + .../0.7.2/actix_web/fs/Directory.t.html | 10 + .../0.7.2/actix_web/fs/NamedFile.t.html | 10 + .../actix_web/fs/StaticFileConfig.t.html | 10 + .../0.7.2/actix_web/fs/StaticFiles.t.html | 10 + .../fs/file_extension_to_mime.v.html | 10 + .../fs/fn.file_extension_to_mime.html | 4 + .../actix-web/0.7.2/actix_web/fs/index.html | 65 + .../0.7.2/actix_web/fs/sidebar-items.js | 1 + .../actix_web/fs/struct.ChunkedReadFile.html | 54 + .../actix_web/fs/struct.DefaultConfig.html | 17 + .../0.7.2/actix_web/fs/struct.Directory.html | 32 + .../0.7.2/actix_web/fs/struct.NamedFile.html | 183 + .../actix_web/fs/struct.StaticFiles.html | 46 + .../actix_web/fs/trait.StaticFileConfig.html | 50 + .../actix_web/handler/AsyncResponder.t.html | 10 + .../actix_web/handler/AsyncResult.t.html | 10 + .../0.7.2/actix_web/handler/Either.t.html | 10 + .../actix_web/handler/FromRequest.t.html | 10 + .../actix_web/handler/FutureResponse.t.html | 10 + .../0.7.2/actix_web/handler/Handler.t.html | 10 + .../0.7.2/actix_web/handler/Responder.t.html | 10 + .../0.7.2/actix_web/handler/State.t.html | 10 + .../0.7.2/actix_web/handler/enum.Either.html | 10 + .../actix_web/handler/struct.AsyncResult.html | 10 + .../0.7.2/actix_web/handler/struct.State.html | 10 + .../handler/trait.AsyncResponder.html | 10 + .../actix_web/handler/trait.FromRequest.html | 10 + .../actix_web/handler/trait.Handler.html | 10 + .../actix_web/handler/trait.Responder.html | 10 + .../handler/type.FutureResponse.html | 10 + .../actix-web/0.7.2/actix_web/header.m.html | 10 + .../0.7.2/actix_web/header/ACCEPT.v.html | 10 + .../actix_web/header/ACCEPT_CHARSET.v.html | 10 + .../actix_web/header/ACCEPT_ENCODING.v.html | 10 + .../actix_web/header/ACCEPT_LANGUAGE.v.html | 10 + .../actix_web/header/ACCEPT_RANGES.v.html | 10 + .../ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html | 10 + .../ACCESS_CONTROL_ALLOW_HEADERS.v.html | 10 + .../ACCESS_CONTROL_ALLOW_METHODS.v.html | 10 + .../header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html | 10 + .../ACCESS_CONTROL_EXPOSE_HEADERS.v.html | 10 + .../header/ACCESS_CONTROL_MAX_AGE.v.html | 10 + .../ACCESS_CONTROL_REQUEST_HEADERS.v.html | 10 + .../ACCESS_CONTROL_REQUEST_METHOD.v.html | 10 + .../0.7.2/actix_web/header/AGE.v.html | 10 + .../0.7.2/actix_web/header/ALLOW.v.html | 10 + .../0.7.2/actix_web/header/ALT_SVC.v.html | 10 + .../actix_web/header/AUTHORIZATION.v.html | 10 + .../actix_web/header/AsHeaderName.t.html | 10 + .../actix_web/header/CACHE_CONTROL.v.html | 10 + .../0.7.2/actix_web/header/CONNECTION.v.html | 10 + .../header/CONTENT_DISPOSITION.v.html | 10 + .../actix_web/header/CONTENT_ENCODING.v.html | 10 + .../actix_web/header/CONTENT_LANGUAGE.v.html | 10 + .../actix_web/header/CONTENT_LENGTH.v.html | 10 + .../actix_web/header/CONTENT_LOCATION.v.html | 10 + .../actix_web/header/CONTENT_RANGE.v.html | 10 + .../header/CONTENT_SECURITY_POLICY.v.html | 10 + ...CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html | 10 + .../actix_web/header/CONTENT_TYPE.v.html | 10 + .../0.7.2/actix_web/header/COOKIE.v.html | 10 + .../actix_web/header/ContentEncoding.t.html | 10 + .../0.7.2/actix_web/header/DATE.v.html | 10 + .../0.7.2/actix_web/header/DNT.v.html | 10 + .../0.7.2/actix_web/header/Drain.t.html | 10 + .../0.7.2/actix_web/header/ETAG.v.html | 10 + .../0.7.2/actix_web/header/EXPECT.v.html | 10 + .../0.7.2/actix_web/header/EXPIRES.v.html | 10 + .../0.7.2/actix_web/header/Entry.t.html | 10 + .../actix_web/header/ExtendedValue.t.html | 10 + .../0.7.2/actix_web/header/FORWARDED.v.html | 10 + .../0.7.2/actix_web/header/FROM.v.html | 10 + .../0.7.2/actix_web/header/GetAll.t.html | 10 + .../0.7.2/actix_web/header/HOST.v.html | 10 + .../0.7.2/actix_web/header/HeaderMap.t.html | 10 + .../0.7.2/actix_web/header/HeaderName.t.html | 10 + .../0.7.2/actix_web/header/HeaderValue.t.html | 10 + .../0.7.2/actix_web/header/IF_MATCH.v.html | 10 + .../actix_web/header/IF_MODIFIED_SINCE.v.html | 10 + .../actix_web/header/IF_NONE_MATCH.v.html | 10 + .../0.7.2/actix_web/header/IF_RANGE.v.html | 10 + .../header/IF_UNMODIFIED_SINCE.v.html | 10 + .../actix_web/header/IntoHeaderName.t.html | 10 + .../0.7.2/actix_web/header/IntoIter.t.html | 10 + .../actix_web/header/InvalidHeaderName.t.html | 10 + .../header/InvalidHeaderNameBytes.t.html | 10 + .../header/InvalidHeaderValue.t.html | 10 + .../header/InvalidHeaderValueBytes.t.html | 10 + .../0.7.2/actix_web/header/Iter.t.html | 10 + .../0.7.2/actix_web/header/Keys.t.html | 10 + .../actix_web/header/LAST_MODIFIED.v.html | 10 + .../0.7.2/actix_web/header/LINK.v.html | 10 + .../0.7.2/actix_web/header/LOCATION.v.html | 10 + .../actix_web/header/MAX_FORWARDS.v.html | 10 + .../0.7.2/actix_web/header/ORIGIN.v.html | 10 + .../actix_web/header/OccupiedEntry.t.html | 10 + .../0.7.2/actix_web/header/PRAGMA.v.html | 10 + .../header/PROXY_AUTHENTICATE.v.html | 10 + .../header/PROXY_AUTHORIZATION.v.html | 10 + .../actix_web/header/PUBLIC_KEY_PINS.v.html | 10 + .../header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html | 10 + .../0.7.2/actix_web/header/RANGE.v.html | 10 + .../0.7.2/actix_web/header/REFERER.v.html | 10 + .../actix_web/header/REFERRER_POLICY.v.html | 10 + .../0.7.2/actix_web/header/REFRESH.v.html | 10 + .../0.7.2/actix_web/header/RETRY_AFTER.v.html | 10 + .../header/SEC_WEBSOCKET_ACCEPT.v.html | 10 + .../header/SEC_WEBSOCKET_EXTENSIONS.v.html | 10 + .../actix_web/header/SEC_WEBSOCKET_KEY.v.html | 10 + .../header/SEC_WEBSOCKET_PROTOCOL.v.html | 10 + .../header/SEC_WEBSOCKET_VERSION.v.html | 10 + .../0.7.2/actix_web/header/SERVER.v.html | 10 + .../0.7.2/actix_web/header/SET_COOKIE.v.html | 10 + .../header/STRICT_TRANSPORT_SECURITY.v.html | 10 + .../0.7.2/actix_web/header/TE.v.html | 10 + .../0.7.2/actix_web/header/TRAILER.v.html | 10 + .../actix_web/header/TRANSFER_ENCODING.v.html | 10 + .../0.7.2/actix_web/header/ToStrError.t.html | 10 + .../0.7.2/actix_web/header/UPGRADE.v.html | 10 + .../header/UPGRADE_INSECURE_REQUESTS.v.html | 10 + .../0.7.2/actix_web/header/USER_AGENT.v.html | 10 + .../0.7.2/actix_web/header/VARY.v.html | 10 + .../0.7.2/actix_web/header/VIA.v.html | 10 + .../0.7.2/actix_web/header/VacantEntry.t.html | 10 + .../0.7.2/actix_web/header/ValueDrain.t.html | 10 + .../0.7.2/actix_web/header/ValueIter.t.html | 10 + .../actix_web/header/ValueIterMut.t.html | 10 + .../0.7.2/actix_web/header/Values.t.html | 10 + .../0.7.2/actix_web/header/WARNING.v.html | 10 + .../actix_web/header/WWW_AUTHENTICATE.v.html | 10 + .../header/X_CONTENT_TYPE_OPTIONS.v.html | 10 + .../header/X_DNS_PREFETCH_CONTROL.v.html | 10 + .../actix_web/header/X_FRAME_OPTIONS.v.html | 10 + .../actix_web/header/X_XSS_PROTECTION.v.html | 10 + .../ContentDisposition.t.html | 10 + .../DispositionParam.t.html | 10 + .../DispositionType.t.html | 10 + .../enum.DispositionParam.html | 10 + .../enum.DispositionType.html | 10 + .../struct.ContentDisposition.html | 10 + .../actix_web/header/constant.ACCEPT.html | 10 + .../header/constant.ACCEPT_CHARSET.html | 10 + .../header/constant.ACCEPT_ENCODING.html | 10 + .../header/constant.ACCEPT_LANGUAGE.html | 10 + .../header/constant.ACCEPT_RANGES.html | 10 + ...tant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html | 10 + ...constant.ACCESS_CONTROL_ALLOW_HEADERS.html | 10 + ...constant.ACCESS_CONTROL_ALLOW_METHODS.html | 10 + .../constant.ACCESS_CONTROL_ALLOW_ORIGIN.html | 10 + ...onstant.ACCESS_CONTROL_EXPOSE_HEADERS.html | 10 + .../constant.ACCESS_CONTROL_MAX_AGE.html | 10 + ...nstant.ACCESS_CONTROL_REQUEST_HEADERS.html | 10 + ...onstant.ACCESS_CONTROL_REQUEST_METHOD.html | 10 + .../0.7.2/actix_web/header/constant.AGE.html | 10 + .../actix_web/header/constant.ALLOW.html | 10 + .../actix_web/header/constant.ALT_SVC.html | 10 + .../header/constant.AUTHORIZATION.html | 10 + .../header/constant.CACHE_CONTROL.html | 10 + .../actix_web/header/constant.CONNECTION.html | 10 + .../header/constant.CONTENT_DISPOSITION.html | 10 + .../header/constant.CONTENT_ENCODING.html | 10 + .../header/constant.CONTENT_LANGUAGE.html | 10 + .../header/constant.CONTENT_LENGTH.html | 10 + .../header/constant.CONTENT_LOCATION.html | 10 + .../header/constant.CONTENT_RANGE.html | 10 + .../constant.CONTENT_SECURITY_POLICY.html | 10 + ...t.CONTENT_SECURITY_POLICY_REPORT_ONLY.html | 10 + .../header/constant.CONTENT_TYPE.html | 10 + .../actix_web/header/constant.COOKIE.html | 10 + .../0.7.2/actix_web/header/constant.DATE.html | 10 + .../0.7.2/actix_web/header/constant.DNT.html | 10 + .../0.7.2/actix_web/header/constant.ETAG.html | 10 + .../actix_web/header/constant.EXPECT.html | 10 + .../actix_web/header/constant.EXPIRES.html | 10 + .../actix_web/header/constant.FORWARDED.html | 10 + .../0.7.2/actix_web/header/constant.FROM.html | 10 + .../0.7.2/actix_web/header/constant.HOST.html | 10 + .../actix_web/header/constant.IF_MATCH.html | 10 + .../header/constant.IF_MODIFIED_SINCE.html | 10 + .../header/constant.IF_NONE_MATCH.html | 10 + .../actix_web/header/constant.IF_RANGE.html | 10 + .../header/constant.IF_UNMODIFIED_SINCE.html | 10 + .../header/constant.LAST_MODIFIED.html | 10 + .../0.7.2/actix_web/header/constant.LINK.html | 10 + .../actix_web/header/constant.LOCATION.html | 10 + .../header/constant.MAX_FORWARDS.html | 10 + .../actix_web/header/constant.ORIGIN.html | 10 + .../actix_web/header/constant.PRAGMA.html | 10 + .../header/constant.PROXY_AUTHENTICATE.html | 10 + .../header/constant.PROXY_AUTHORIZATION.html | 10 + .../header/constant.PUBLIC_KEY_PINS.html | 10 + .../constant.PUBLIC_KEY_PINS_REPORT_ONLY.html | 10 + .../actix_web/header/constant.RANGE.html | 10 + .../actix_web/header/constant.REFERER.html | 10 + .../header/constant.REFERRER_POLICY.html | 10 + .../actix_web/header/constant.REFRESH.html | 10 + .../header/constant.RETRY_AFTER.html | 10 + .../header/constant.SEC_WEBSOCKET_ACCEPT.html | 10 + .../constant.SEC_WEBSOCKET_EXTENSIONS.html | 10 + .../header/constant.SEC_WEBSOCKET_KEY.html | 10 + .../constant.SEC_WEBSOCKET_PROTOCOL.html | 10 + .../constant.SEC_WEBSOCKET_VERSION.html | 10 + .../actix_web/header/constant.SERVER.html | 10 + .../actix_web/header/constant.SET_COOKIE.html | 10 + .../constant.STRICT_TRANSPORT_SECURITY.html | 10 + .../0.7.2/actix_web/header/constant.TE.html | 10 + .../actix_web/header/constant.TRAILER.html | 10 + .../header/constant.TRANSFER_ENCODING.html | 10 + .../actix_web/header/constant.UPGRADE.html | 10 + .../constant.UPGRADE_INSECURE_REQUESTS.html | 10 + .../actix_web/header/constant.USER_AGENT.html | 10 + .../0.7.2/actix_web/header/constant.VARY.html | 10 + .../0.7.2/actix_web/header/constant.VIA.html | 10 + .../actix_web/header/constant.WARNING.html | 10 + .../header/constant.WWW_AUTHENTICATE.html | 10 + .../constant.X_CONTENT_TYPE_OPTIONS.html | 10 + .../constant.X_DNS_PREFETCH_CONTROL.html | 10 + .../header/constant.X_FRAME_OPTIONS.html | 10 + .../header/constant.X_XSS_PROTECTION.html | 10 + .../header/enum.ContentEncoding.html | 10 + .../0.7.2/actix_web/header/enum.Entry.html | 10 + .../header/fn.http_percent_encode.html | 10 + .../header/fn.parse_extended_value.html | 10 + .../header/http_percent_encode.v.html | 10 + .../header/parse_extended_value.v.html | 10 + .../header/shared/LanguageTag.t.html | 10 + .../header/shared/charset/Charset.t.html | 10 + .../header/shared/charset/enum.Charset.html | 10 + .../header/shared/struct.LanguageTag.html | 10 + .../0.7.2/actix_web/header/struct.Drain.html | 10 + .../header/struct.ExtendedValue.html | 10 + .../0.7.2/actix_web/header/struct.GetAll.html | 10 + .../actix_web/header/struct.HeaderMap.html | 10 + .../actix_web/header/struct.HeaderName.html | 10 + .../actix_web/header/struct.HeaderValue.html | 10 + .../actix_web/header/struct.IntoIter.html | 10 + .../header/struct.InvalidHeaderName.html | 10 + .../header/struct.InvalidHeaderNameBytes.html | 10 + .../header/struct.InvalidHeaderValue.html | 10 + .../struct.InvalidHeaderValueBytes.html | 10 + .../0.7.2/actix_web/header/struct.Iter.html | 10 + .../0.7.2/actix_web/header/struct.Keys.html | 10 + .../header/struct.OccupiedEntry.html | 10 + .../actix_web/header/struct.ToStrError.html | 10 + .../actix_web/header/struct.VacantEntry.html | 10 + .../actix_web/header/struct.ValueDrain.html | 10 + .../actix_web/header/struct.ValueIter.html | 10 + .../actix_web/header/struct.ValueIterMut.html | 10 + .../0.7.2/actix_web/header/struct.Values.html | 10 + .../actix_web/header/trait.AsHeaderName.html | 10 + .../header/trait.IntoHeaderName.html | 10 + .../actix_web/helpers/NormalizePath.t.html | 10 + .../helpers/struct.NormalizePath.html | 10 + .../actix_web/http/ConnectionType.t.html | 10 + .../actix_web/http/ContentEncoding.t.html | 10 + .../0.7.2/actix_web/http/Cookie.t.html | 10 + .../0.7.2/actix_web/http/CookieBuilder.t.html | 10 + .../0.7.2/actix_web/http/Method.t.html | 10 + .../0.7.2/actix_web/http/NormalizePath.t.html | 10 + .../0.7.2/actix_web/http/StatusCode.t.html | 10 + .../0.7.2/actix_web/http/Version.t.html | 10 + .../actix_web/http/enum.ConnectionType.html | 26 + .../actix_web/http/enum.ContentEncoding.html | 38 + .../0.7.2/actix_web/http/header/ACCEPT.v.html | 10 + .../http/header/ACCEPT_CHARSET.v.html | 10 + .../http/header/ACCEPT_ENCODING.v.html | 10 + .../http/header/ACCEPT_LANGUAGE.v.html | 10 + .../http/header/ACCEPT_RANGES.v.html | 10 + .../ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html | 10 + .../ACCESS_CONTROL_ALLOW_HEADERS.v.html | 10 + .../ACCESS_CONTROL_ALLOW_METHODS.v.html | 10 + .../header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html | 10 + .../ACCESS_CONTROL_EXPOSE_HEADERS.v.html | 10 + .../http/header/ACCESS_CONTROL_MAX_AGE.v.html | 10 + .../ACCESS_CONTROL_REQUEST_HEADERS.v.html | 10 + .../ACCESS_CONTROL_REQUEST_METHOD.v.html | 10 + .../0.7.2/actix_web/http/header/AGE.v.html | 10 + .../0.7.2/actix_web/http/header/ALLOW.v.html | 10 + .../actix_web/http/header/ALT_SVC.v.html | 10 + .../http/header/AUTHORIZATION.v.html | 10 + .../actix_web/http/header/AsHeaderName.t.html | 10 + .../http/header/CACHE_CONTROL.v.html | 10 + .../actix_web/http/header/CONNECTION.v.html | 10 + .../http/header/CONTENT_DISPOSITION.v.html | 10 + .../http/header/CONTENT_ENCODING.v.html | 10 + .../http/header/CONTENT_LANGUAGE.v.html | 10 + .../http/header/CONTENT_LENGTH.v.html | 10 + .../http/header/CONTENT_LOCATION.v.html | 10 + .../http/header/CONTENT_RANGE.v.html | 10 + .../header/CONTENT_SECURITY_POLICY.v.html | 10 + ...CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html | 10 + .../actix_web/http/header/CONTENT_TYPE.v.html | 10 + .../0.7.2/actix_web/http/header/COOKIE.v.html | 10 + .../actix_web/http/header/Charset.t.html | 10 + .../http/header/ContentDisposition.t.html | 10 + .../http/header/ContentEncoding.t.html | 10 + .../0.7.2/actix_web/http/header/DATE.v.html | 10 + .../0.7.2/actix_web/http/header/DNT.v.html | 10 + .../http/header/DispositionParam.t.html | 10 + .../http/header/DispositionType.t.html | 10 + .../0.7.2/actix_web/http/header/Drain.t.html | 10 + .../0.7.2/actix_web/http/header/ETAG.v.html | 10 + .../0.7.2/actix_web/http/header/EXPECT.v.html | 10 + .../actix_web/http/header/EXPIRES.v.html | 10 + .../0.7.2/actix_web/http/header/Entry.t.html | 10 + .../http/header/ExtendedValue.t.html | 10 + .../actix_web/http/header/FORWARDED.v.html | 10 + .../0.7.2/actix_web/http/header/FROM.v.html | 10 + .../0.7.2/actix_web/http/header/GetAll.t.html | 10 + .../0.7.2/actix_web/http/header/HOST.v.html | 10 + .../actix_web/http/header/HeaderMap.t.html | 10 + .../actix_web/http/header/HeaderName.t.html | 10 + .../actix_web/http/header/HeaderValue.t.html | 10 + .../actix_web/http/header/IF_MATCH.v.html | 10 + .../http/header/IF_MODIFIED_SINCE.v.html | 10 + .../http/header/IF_NONE_MATCH.v.html | 10 + .../actix_web/http/header/IF_RANGE.v.html | 10 + .../http/header/IF_UNMODIFIED_SINCE.v.html | 10 + .../http/header/IntoHeaderName.t.html | 10 + .../actix_web/http/header/IntoIter.t.html | 10 + .../http/header/InvalidHeaderName.t.html | 10 + .../http/header/InvalidHeaderNameBytes.t.html | 10 + .../http/header/InvalidHeaderValue.t.html | 10 + .../header/InvalidHeaderValueBytes.t.html | 10 + .../0.7.2/actix_web/http/header/Iter.t.html | 10 + .../0.7.2/actix_web/http/header/Keys.t.html | 10 + .../http/header/LAST_MODIFIED.v.html | 10 + .../0.7.2/actix_web/http/header/LINK.v.html | 10 + .../actix_web/http/header/LOCATION.v.html | 10 + .../actix_web/http/header/LanguageTag.t.html | 10 + .../actix_web/http/header/MAX_FORWARDS.v.html | 10 + .../0.7.2/actix_web/http/header/ORIGIN.v.html | 10 + .../http/header/OccupiedEntry.t.html | 10 + .../0.7.2/actix_web/http/header/PRAGMA.v.html | 10 + .../http/header/PROXY_AUTHENTICATE.v.html | 10 + .../http/header/PROXY_AUTHORIZATION.v.html | 10 + .../http/header/PUBLIC_KEY_PINS.v.html | 10 + .../header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html | 10 + .../0.7.2/actix_web/http/header/RANGE.v.html | 10 + .../actix_web/http/header/REFERER.v.html | 10 + .../http/header/REFERRER_POLICY.v.html | 10 + .../actix_web/http/header/REFRESH.v.html | 10 + .../actix_web/http/header/RETRY_AFTER.v.html | 10 + .../http/header/SEC_WEBSOCKET_ACCEPT.v.html | 10 + .../header/SEC_WEBSOCKET_EXTENSIONS.v.html | 10 + .../http/header/SEC_WEBSOCKET_KEY.v.html | 10 + .../http/header/SEC_WEBSOCKET_PROTOCOL.v.html | 10 + .../http/header/SEC_WEBSOCKET_VERSION.v.html | 10 + .../0.7.2/actix_web/http/header/SERVER.v.html | 10 + .../actix_web/http/header/SET_COOKIE.v.html | 10 + .../header/STRICT_TRANSPORT_SECURITY.v.html | 10 + .../0.7.2/actix_web/http/header/TE.v.html | 10 + .../actix_web/http/header/TRAILER.v.html | 10 + .../http/header/TRANSFER_ENCODING.v.html | 10 + .../actix_web/http/header/ToStrError.t.html | 10 + .../actix_web/http/header/UPGRADE.v.html | 10 + .../header/UPGRADE_INSECURE_REQUESTS.v.html | 10 + .../actix_web/http/header/USER_AGENT.v.html | 10 + .../0.7.2/actix_web/http/header/VARY.v.html | 10 + .../0.7.2/actix_web/http/header/VIA.v.html | 10 + .../actix_web/http/header/VacantEntry.t.html | 10 + .../actix_web/http/header/ValueDrain.t.html | 10 + .../actix_web/http/header/ValueIter.t.html | 10 + .../actix_web/http/header/ValueIterMut.t.html | 10 + .../0.7.2/actix_web/http/header/Values.t.html | 10 + .../actix_web/http/header/WARNING.v.html | 10 + .../http/header/WWW_AUTHENTICATE.v.html | 10 + .../http/header/X_CONTENT_TYPE_OPTIONS.v.html | 10 + .../http/header/X_DNS_PREFETCH_CONTROL.v.html | 10 + .../http/header/X_FRAME_OPTIONS.v.html | 10 + .../http/header/X_XSS_PROTECTION.v.html | 10 + .../http/header/constant.ACCEPT.html | 10 + .../http/header/constant.ACCEPT_CHARSET.html | 12 + .../http/header/constant.ACCEPT_ENCODING.html | 28 + .../http/header/constant.ACCEPT_LANGUAGE.html | 21 + .../http/header/constant.ACCEPT_RANGES.html | 7 + ...tant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html | 21 + ...constant.ACCESS_CONTROL_ALLOW_HEADERS.html | 12 + ...constant.ACCESS_CONTROL_ALLOW_METHODS.html | 5 + .../constant.ACCESS_CONTROL_ALLOW_ORIGIN.html | 3 + ...onstant.ACCESS_CONTROL_EXPOSE_HEADERS.html | 3 + .../constant.ACCESS_CONTROL_MAX_AGE.html | 2 + ...nstant.ACCESS_CONTROL_REQUEST_HEADERS.html | 4 + ...onstant.ACCESS_CONTROL_REQUEST_METHOD.html | 3 + .../actix_web/http/header/constant.AGE.html | 6 + .../actix_web/http/header/constant.ALLOW.html | 7 + .../http/header/constant.ALT_SVC.html | 2 + .../http/header/constant.AUTHORIZATION.html | 4 + .../http/header/constant.CACHE_CONTROL.html | 6 + .../http/header/constant.CONNECTION.html | 12 + .../header/constant.CONTENT_DISPOSITION.html | 16 + .../header/constant.CONTENT_ENCODING.html | 9 + .../header/constant.CONTENT_LANGUAGE.html | 12 + .../http/header/constant.CONTENT_LENGTH.html | 4 + .../header/constant.CONTENT_LOCATION.html | 10 + .../http/header/constant.CONTENT_RANGE.html | 2 + .../constant.CONTENT_SECURITY_POLICY.html | 6 + ...t.CONTENT_SECURITY_POLICY_REPORT_ONLY.html | 7 + .../http/header/constant.CONTENT_TYPE.html | 9 + .../http/header/constant.COOKIE.html | 5 + .../actix_web/http/header/constant.DATE.html | 2 + .../actix_web/http/header/constant.DNT.html | 4 + .../actix_web/http/header/constant.ETAG.html | 13 + .../http/header/constant.EXPECT.html | 19 + .../http/header/constant.EXPIRES.html | 6 + .../http/header/constant.FORWARDED.html | 9 + .../actix_web/http/header/constant.FROM.html | 7 + .../actix_web/http/header/constant.HOST.html | 8 + .../http/header/constant.IF_MATCH.html | 25 + .../header/constant.IF_MODIFIED_SINCE.html | 13 + .../http/header/constant.IF_NONE_MATCH.html | 31 + .../http/header/constant.IF_RANGE.html | 12 + .../header/constant.IF_UNMODIFIED_SINCE.html | 22 + .../http/header/constant.LAST_MODIFIED.html | 2 + .../actix_web/http/header/constant.LINK.html | 3 + .../http/header/constant.LOCATION.html | 29 + .../http/header/constant.MAX_FORWARDS.html | 3 + .../http/header/constant.ORIGIN.html | 6 + .../http/header/constant.PRAGMA.html | 6 + .../header/constant.PROXY_AUTHENTICATE.html | 14 + .../header/constant.PROXY_AUTHORIZATION.html | 5 + .../http/header/constant.PUBLIC_KEY_PINS.html | 6 + .../constant.PUBLIC_KEY_PINS_REPORT_ONLY.html | 5 + .../actix_web/http/header/constant.RANGE.html | 8 + .../http/header/constant.REFERER.html | 6 + .../http/header/constant.REFERRER_POLICY.html | 3 + .../http/header/constant.REFRESH.html | 3 + .../http/header/constant.RETRY_AFTER.html | 15 + .../header/constant.SEC_WEBSOCKET_ACCEPT.html | 5 + .../constant.SEC_WEBSOCKET_EXTENSIONS.html | 6 + .../header/constant.SEC_WEBSOCKET_KEY.html | 8 + .../constant.SEC_WEBSOCKET_PROTOCOL.html | 6 + .../constant.SEC_WEBSOCKET_VERSION.html | 7 + .../http/header/constant.SERVER.html | 7 + .../http/header/constant.SET_COOKIE.html | 2 + .../constant.STRICT_TRANSPORT_SECURITY.html | 2 + .../actix_web/http/header/constant.TE.html | 8 + .../http/header/constant.TRAILER.html | 3 + .../header/constant.TRANSFER_ENCODING.html | 11 + .../http/header/constant.UPGRADE.html | 2 + .../constant.UPGRADE_INSECURE_REQUESTS.html | 3 + .../http/header/constant.USER_AGENT.html | 3 + .../actix_web/http/header/constant.VARY.html | 9 + .../actix_web/http/header/constant.VIA.html | 7 + .../http/header/constant.WARNING.html | 6 + .../header/constant.WWW_AUTHENTICATE.html | 3 + .../constant.X_CONTENT_TYPE_OPTIONS.html | 11 + .../constant.X_DNS_PREFETCH_CONTROL.html | 10 + .../http/header/constant.X_FRAME_OPTIONS.html | 7 + .../header/constant.X_XSS_PROTECTION.html | 9 + .../actix_web/http/header/enum.Charset.html | 75 + .../http/header/enum.ContentEncoding.html | 38 + .../http/header/enum.DispositionParam.html | 25 + .../http/header/enum.DispositionType.html | 26 + .../actix_web/http/header/enum.Entry.html | 77 + .../http/header/fn.http_percent_encode.html | 3 + .../http/header/fn.parse_extended_value.html | 32 + .../http/header/http_percent_encode.v.html | 10 + .../0.7.2/actix_web/http/header/index.html | 948 +++++ .../http/header/parse_extended_value.v.html | 10 + .../actix_web/http/header/sidebar-items.js | 1 + .../header/struct.ContentDisposition.html | 80 + .../actix_web/http/header/struct.Drain.html | 67 + .../http/header/struct.ExtendedValue.html | 38 + .../actix_web/http/header/struct.GetAll.html | 43 + .../http/header/struct.HeaderMap.html | 448 ++ .../http/header/struct.HeaderName.html | 131 + .../http/header/struct.HeaderValue.html | 298 ++ .../http/header/struct.IntoIter.html | 73 + .../http/header/struct.InvalidHeaderName.html | 16 + .../header/struct.InvalidHeaderNameBytes.html | 16 + .../header/struct.InvalidHeaderValue.html | 19 + .../struct.InvalidHeaderValueBytes.html | 19 + .../actix_web/http/header/struct.Iter.html | 68 + .../actix_web/http/header/struct.Keys.html | 75 + .../http/header/struct.LanguageTag.html | 127 + .../http/header/struct.OccupiedEntry.html | 199 + .../http/header/struct.ToStrError.html | 17 + .../http/header/struct.VacantEntry.html | 56 + .../http/header/struct.ValueDrain.html | 67 + .../http/header/struct.ValueIter.html | 75 + .../http/header/struct.ValueIterMut.html | 70 + .../actix_web/http/header/struct.Values.html | 72 + .../http/header/trait.AsHeaderName.html | 16 + .../http/header/trait.IntoHeaderName.html | 16 + .../actix-web/0.7.2/actix_web/http/index.html | 77 + .../0.7.2/actix_web/http/sidebar-items.js | 1 + .../0.7.2/actix_web/http/struct.Cookie.html | 437 ++ .../actix_web/http/struct.CookieBuilder.html | 149 + .../0.7.2/actix_web/http/struct.Method.html | 110 + .../actix_web/http/struct.NormalizePath.html | 50 + .../actix_web/http/struct.StatusCode.html | 413 ++ .../0.7.2/actix_web/http/struct.Version.html | 47 + .../actix_web/httpmessage/HttpMessage.t.html | 10 + .../actix_web/httpmessage/MessageBody.t.html | 10 + .../actix_web/httpmessage/UrlEncoded.t.html | 10 + .../httpmessage/struct.MessageBody.html | 10 + .../httpmessage/struct.UrlEncoded.html | 10 + .../httpmessage/trait.HttpMessage.html | 10 + .../actix_web/httprequest/HttpRequest.t.html | 10 + .../httprequest/struct.HttpRequest.html | 10 + .../httpresponse/ConnectionType.t.html | 10 + .../httpresponse/HttpResponse.t.html | 10 + .../httpresponse/HttpResponseBuilder.t.html | 10 + .../httpresponse/enum.ConnectionType.html | 10 + .../httpresponse/struct.HttpResponse.html | 10 + .../struct.HttpResponseBuilder.html | 10 + .../api/actix-web/0.7.2/actix_web/index.html | 348 ++ .../actix_web/info/ConnectionInfo.t.html | 10 + .../actix_web/info/struct.ConnectionInfo.html | 10 + .../0.7.2/actix_web/json/Json.t.html | 10 + .../0.7.2/actix_web/json/JsonBody.t.html | 10 + .../0.7.2/actix_web/json/JsonConfig.t.html | 10 + .../0.7.2/actix_web/json/struct.Json.html | 10 + .../0.7.2/actix_web/json/struct.JsonBody.html | 10 + .../actix_web/json/struct.JsonConfig.html | 10 + .../0.7.2/actix_web/macro.header!.html | 10 + .../0.7.2/actix_web/macro.header.html | 12 + .../middleware/DefaultHeaders.t.html | 10 + .../actix_web/middleware/ErrorHandlers.t.html | 10 + .../actix_web/middleware/Finished.t.html | 10 + .../0.7.2/actix_web/middleware/Logger.t.html | 10 + .../actix_web/middleware/Middleware.t.html | 10 + .../actix_web/middleware/Response.t.html | 10 + .../0.7.2/actix_web/middleware/Started.t.html | 10 + .../middleware/cors/AllOrSome.t.html | 10 + .../actix_web/middleware/cors/Cors.t.html | 10 + .../middleware/cors/CorsBuilder.t.html | 10 + .../middleware/cors/CorsError.t.html | 10 + .../middleware/cors/enum.AllOrSome.html | 33 + .../middleware/cors/enum.CorsError.html | 44 + .../actix_web/middleware/cors/index.html | 77 + .../middleware/cors/sidebar-items.js | 1 + .../middleware/cors/struct.Cors.html | 47 + .../middleware/cors/struct.CorsBuilder.html | 130 + .../middleware/csrf/CsrfError.t.html | 10 + .../middleware/csrf/CsrfFilter.t.html | 10 + .../middleware/csrf/enum.CsrfError.html | 29 + .../actix_web/middleware/csrf/index.html | 57 + .../middleware/csrf/sidebar-items.js | 1 + .../middleware/csrf/struct.CsrfFilter.html | 52 + .../defaultheaders/DefaultHeaders.t.html | 10 + .../defaultheaders/struct.DefaultHeaders.html | 10 + .../actix_web/middleware/enum.Finished.html | 14 + .../actix_web/middleware/enum.Response.html | 14 + .../actix_web/middleware/enum.Started.html | 17 + .../errhandlers/ErrorHandlers.t.html | 10 + .../errhandlers/struct.ErrorHandlers.html | 10 + .../identity/CookieIdentityPolicy.t.html | 10 + .../middleware/identity/Identity.t.html | 10 + .../middleware/identity/IdentityPolicy.t.html | 10 + .../identity/IdentityService.t.html | 10 + .../identity/RequestIdentity.t.html | 10 + .../actix_web/middleware/identity/index.html | 86 + .../middleware/identity/sidebar-items.js | 1 + .../identity/struct.CookieIdentityPolicy.html | 48 + .../identity/struct.IdentityService.html | 32 + .../middleware/identity/trait.Identity.html | 25 + .../identity/trait.IdentityPolicy.html | 27 + .../identity/trait.RequestIdentity.html | 47 + .../0.7.2/actix_web/middleware/index.html | 94 + .../actix_web/middleware/logger/Logger.t.html | 10 + .../middleware/logger/struct.Logger.html | 10 + .../middleware/session/CookieSession.t.html | 10 + .../session/CookieSessionBackend.t.html | 10 + .../session/CookieSessionError.t.html | 10 + .../middleware/session/RequestSession.t.html | 10 + .../middleware/session/Session.t.html | 10 + .../middleware/session/SessionStorage.t.html | 10 + .../session/enum.CookieSessionError.html | 27 + .../actix_web/middleware/session/index.html | 106 + .../middleware/session/sidebar-items.js | 1 + .../session/struct.CookieSession.html | 7 + .../session/struct.CookieSessionBackend.html | 51 + .../middleware/session/struct.Session.html | 58 + .../session/struct.SessionStorage.html | 31 + .../session/trait.RequestSession.html | 33 + .../actix_web/middleware/sidebar-items.js | 1 + .../middleware/struct.DefaultHeaders.html | 37 + .../middleware/struct.ErrorHandlers.html | 48 + .../actix_web/middleware/struct.Logger.html | 62 + .../middleware/trait.Middleware.html | 30 + .../0.7.2/actix_web/multipart/Field.t.html | 10 + .../actix_web/multipart/Multipart.t.html | 10 + .../actix_web/multipart/MultipartItem.t.html | 10 + .../multipart/enum.MultipartItem.html | 13 + .../0.7.2/actix_web/multipart/index.html | 27 + .../actix_web/multipart/sidebar-items.js | 1 + .../actix_web/multipart/struct.Field.html | 61 + .../actix_web/multipart/struct.Multipart.html | 63 + .../0.7.2/actix_web/param/FromParam.t.html | 10 + .../0.7.2/actix_web/param/Params.t.html | 10 + .../0.7.2/actix_web/param/struct.Params.html | 10 + .../actix_web/param/trait.FromParam.html | 10 + .../0.7.2/actix_web/payload/Payload.t.html | 10 + .../actix_web/payload/PayloadBuffer.t.html | 10 + .../actix_web/payload/struct.Payload.html | 10 + .../payload/struct.PayloadBuffer.html | 10 + .../actix-web/0.7.2/actix_web/pred/All.v.html | 10 + .../0.7.2/actix_web/pred/AllPredicate.t.html | 10 + .../actix-web/0.7.2/actix_web/pred/Any.v.html | 10 + .../0.7.2/actix_web/pred/AnyPredicate.t.html | 10 + .../0.7.2/actix_web/pred/Connect.v.html | 10 + .../0.7.2/actix_web/pred/Delete.v.html | 10 + .../actix-web/0.7.2/actix_web/pred/Get.v.html | 10 + .../0.7.2/actix_web/pred/Head.v.html | 10 + .../0.7.2/actix_web/pred/Header.v.html | 10 + .../0.7.2/actix_web/pred/Host.v.html | 10 + .../0.7.2/actix_web/pred/Method.v.html | 10 + .../actix-web/0.7.2/actix_web/pred/Not.v.html | 10 + .../0.7.2/actix_web/pred/Options.v.html | 10 + .../0.7.2/actix_web/pred/Patch.v.html | 10 + .../0.7.2/actix_web/pred/Post.v.html | 10 + .../0.7.2/actix_web/pred/Predicate.t.html | 10 + .../actix-web/0.7.2/actix_web/pred/Put.v.html | 10 + .../0.7.2/actix_web/pred/Trace.v.html | 10 + .../0.7.2/actix_web/pred/fn.All.html | 16 + .../0.7.2/actix_web/pred/fn.Any.html | 13 + .../0.7.2/actix_web/pred/fn.Connect.html | 2 + .../0.7.2/actix_web/pred/fn.Delete.html | 2 + .../0.7.2/actix_web/pred/fn.Get.html | 2 + .../0.7.2/actix_web/pred/fn.Head.html | 2 + .../0.7.2/actix_web/pred/fn.Header.html | 3 + .../0.7.2/actix_web/pred/fn.Host.html | 13 + .../0.7.2/actix_web/pred/fn.Method.html | 2 + .../0.7.2/actix_web/pred/fn.Not.html | 2 + .../0.7.2/actix_web/pred/fn.Options.html | 2 + .../0.7.2/actix_web/pred/fn.Patch.html | 2 + .../0.7.2/actix_web/pred/fn.Post.html | 2 + .../0.7.2/actix_web/pred/fn.Put.html | 2 + .../0.7.2/actix_web/pred/fn.Trace.html | 2 + .../actix-web/0.7.2/actix_web/pred/index.html | 153 + .../0.7.2/actix_web/pred/sidebar-items.js | 1 + .../actix_web/pred/struct.AllPredicate.html | 17 + .../actix_web/pred/struct.AnyPredicate.html | 17 + .../0.7.2/actix_web/pred/trait.Predicate.html | 22 + .../0.7.2/actix_web/resource/Resource.t.html | 10 + .../actix_web/resource/struct.Resource.html | 10 + .../0.7.2/actix_web/route/Route.t.html | 10 + .../0.7.2/actix_web/route/struct.Route.html | 10 + .../0.7.2/actix_web/router/ResourceDef.t.html | 10 + .../actix_web/router/ResourceInfo.t.html | 10 + .../actix_web/router/ResourceType.t.html | 10 + .../0.7.2/actix_web/router/Router.t.html | 10 + .../actix_web/router/enum.ResourceType.html | 10 + .../actix_web/router/struct.ResourceDef.html | 10 + .../actix_web/router/struct.ResourceInfo.html | 10 + .../0.7.2/actix_web/router/struct.Router.html | 10 + .../0.7.2/actix_web/scope/Scope.t.html | 10 + .../0.7.2/actix_web/scope/struct.Scope.html | 10 + .../0.7.2/actix_web/server/HttpHandler.t.html | 10 + .../actix_web/server/HttpHandlerTask.t.html | 10 + .../0.7.2/actix_web/server/HttpServer.t.html | 10 + .../actix_web/server/IntoHttpHandler.t.html | 10 + .../0.7.2/actix_web/server/KeepAlive.t.html | 10 + .../0.7.2/actix_web/server/PauseServer.t.html | 10 + .../0.7.2/actix_web/server/Request.t.html | 10 + .../actix_web/server/ResumeServer.t.html | 10 + .../actix_web/server/ServerSettings.t.html | 10 + .../0.7.2/actix_web/server/StopServer.t.html | 10 + .../actix_web/server/enum.KeepAlive.html | 29 + .../0.7.2/actix_web/server/fn.new.html | 18 + .../0.7.2/actix_web/server/index.html | 94 + .../actix_web/server/message/Request.t.html | 10 + .../server/message/struct.Request.html | 10 + .../0.7.2/actix_web/server/new.v.html | 10 + .../server/settings/ServerSettings.t.html | 10 + .../settings/struct.ServerSettings.html | 10 + .../0.7.2/actix_web/server/sidebar-items.js | 1 + .../actix_web/server/srv/HttpServer.t.html | 10 + .../server/srv/struct.HttpServer.html | 10 + .../actix_web/server/struct.HttpServer.html | 121 + .../actix_web/server/struct.PauseServer.html | 18 + .../actix_web/server/struct.Request.html | 45 + .../actix_web/server/struct.ResumeServer.html | 16 + .../server/struct.ServerSettings.html | 22 + .../actix_web/server/struct.StopServer.html | 25 + .../actix_web/server/trait.HttpHandler.html | 29 + .../server/trait.HttpHandlerTask.html | 31 + .../server/trait.IntoHttpHandler.html | 28 + .../0.7.2/actix_web/sidebar-items.js | 1 + .../actix-web/0.7.2/actix_web/struct.App.html | 228 ++ .../0.7.2/actix_web/struct.Extensions.html | 24 + .../0.7.2/actix_web/struct.Form.html | 58 + .../0.7.2/actix_web/struct.HttpContext.html | 40 + .../0.7.2/actix_web/struct.HttpRequest.html | 118 + .../0.7.2/actix_web/struct.HttpResponse.html | 62 + .../0.7.2/actix_web/struct.Json.html | 76 + .../0.7.2/actix_web/struct.Path.html | 79 + .../0.7.2/actix_web/struct.Query.html | 68 + .../0.7.2/actix_web/struct.Request.html | 45 + .../0.7.2/actix_web/struct.Scope.html | 139 + .../0.7.2/actix_web/struct.State.html | 48 + .../0.7.2/actix_web/test/TestApp.t.html | 10 + .../0.7.2/actix_web/test/TestRequest.t.html | 10 + .../0.7.2/actix_web/test/TestServer.t.html | 10 + .../actix_web/test/TestServerBuilder.t.html | 10 + .../actix-web/0.7.2/actix_web/test/index.html | 35 + .../0.7.2/actix_web/test/sidebar-items.js | 1 + .../0.7.2/actix_web/test/struct.TestApp.html | 22 + .../actix_web/test/struct.TestRequest.html | 57 + .../actix_web/test/struct.TestServer.html | 45 + .../test/struct.TestServerBuilder.html | 16 + .../0.7.2/actix_web/trait.AsyncResponder.html | 40 + .../0.7.2/actix_web/trait.FromRequest.html | 202 + .../0.7.2/actix_web/trait.HttpMessage.html | 141 + .../0.7.2/actix_web/trait.Responder.html | 57 + .../0.7.2/actix_web/type.FutureResponse.html | 2 + .../0.7.2/actix_web/ws/Client.t.html | 10 + .../0.7.2/actix_web/ws/ClientError.t.html | 10 + .../0.7.2/actix_web/ws/ClientHandshake.t.html | 10 + .../0.7.2/actix_web/ws/ClientReader.t.html | 10 + .../0.7.2/actix_web/ws/ClientWriter.t.html | 10 + .../0.7.2/actix_web/ws/CloseCode.t.html | 10 + .../0.7.2/actix_web/ws/CloseReason.t.html | 10 + .../actix-web/0.7.2/actix_web/ws/Frame.t.html | 10 + .../0.7.2/actix_web/ws/FramedMessage.t.html | 10 + .../0.7.2/actix_web/ws/HandshakeError.t.html | 10 + .../0.7.2/actix_web/ws/Message.t.html | 10 + .../0.7.2/actix_web/ws/OpCode.t.html | 10 + .../0.7.2/actix_web/ws/ProtocolError.t.html | 10 + .../actix_web/ws/WebsocketContext.t.html | 10 + .../0.7.2/actix_web/ws/WsStream.t.html | 10 + .../0.7.2/actix_web/ws/WsWriter.t.html | 10 + .../0.7.2/actix_web/ws/client/Client.t.html | 10 + .../actix_web/ws/client/ClientError.t.html | 10 + .../ws/client/ClientHandshake.t.html | 10 + .../actix_web/ws/client/ClientReader.t.html | 10 + .../actix_web/ws/client/ClientWriter.t.html | 10 + .../actix_web/ws/client/enum.ClientError.html | 10 + .../actix_web/ws/client/struct.Client.html | 10 + .../ws/client/struct.ClientHandshake.html | 10 + .../ws/client/struct.ClientReader.html | 10 + .../ws/client/struct.ClientWriter.html | 10 + .../ws/context/WebsocketContext.t.html | 10 + .../ws/context/struct.WebsocketContext.html | 10 + .../0.7.2/actix_web/ws/enum.ClientError.html | 55 + .../0.7.2/actix_web/ws/enum.CloseCode.html | 79 + .../actix_web/ws/enum.HandshakeError.html | 38 + .../0.7.2/actix_web/ws/enum.Message.html | 29 + .../0.7.2/actix_web/ws/enum.OpCode.html | 37 + .../actix_web/ws/enum.ProtocolError.html | 43 + .../0.7.2/actix_web/ws/fn.handshake.html | 4 + .../0.7.2/actix_web/ws/fn.start.html | 2 + .../0.7.2/actix_web/ws/frame/Frame.t.html | 10 + .../actix_web/ws/frame/FramedMessage.t.html | 10 + .../actix_web/ws/frame/struct.Frame.html | 10 + .../ws/frame/struct.FramedMessage.html | 10 + .../0.7.2/actix_web/ws/handshake.v.html | 10 + .../actix-web/0.7.2/actix_web/ws/index.html | 180 + .../0.7.2/actix_web/ws/proto/CloseCode.t.html | 10 + .../actix_web/ws/proto/CloseReason.t.html | 10 + .../0.7.2/actix_web/ws/proto/OpCode.t.html | 10 + .../actix_web/ws/proto/enum.CloseCode.html | 10 + .../0.7.2/actix_web/ws/proto/enum.OpCode.html | 10 + .../ws/proto/struct.CloseReason.html | 10 + .../0.7.2/actix_web/ws/sidebar-items.js | 1 + .../actix-web/0.7.2/actix_web/ws/start.v.html | 10 + .../0.7.2/actix_web/ws/struct.Client.html | 28 + .../actix_web/ws/struct.ClientHandshake.html | 49 + .../actix_web/ws/struct.ClientReader.html | 54 + .../actix_web/ws/struct.ClientWriter.html | 25 + .../actix_web/ws/struct.CloseReason.html | 32 + .../0.7.2/actix_web/ws/struct.Frame.html | 23 + .../actix_web/ws/struct.FramedMessage.html | 12 + .../actix_web/ws/struct.WebsocketContext.html | 53 + .../0.7.2/actix_web/ws/struct.WsStream.html | 60 + .../0.7.2/actix_web/ws/trait.WsWriter.html | 27 + static/api/actix-web/0.7.2/aliases.js | 4 + static/api/actix-web/0.7.2/brush.svg | 1 + static/api/actix-web/0.7.2/dark.css | 12 + .../actix/dev/fut/trait.IntoActorFuture.js | 10 + .../actix/actix/dev/trait.ActorContext.js | 10 + .../actix/actix/dev/trait.ActorFuture.js | 10 + .../actix/actix/dev/trait.ActorStream.js | 10 + .../actix/actix/dev/trait.AsyncContext.js | 10 + .../actix/dev/trait.AsyncContextParts.js | 10 + .../actix/actix/dev/trait.Handler.js | 10 + .../actix/actix/dev/trait.Message.js | 10 + .../actix/actix/dev/trait.MessageResponse.js | 10 + .../actix/actix/dev/trait.ResponseChannel.js | 10 + .../actix/actix/dev/trait.ToEnvelope.js | 10 + .../actix/actix/dev/trait.WrapStream.js | 10 + .../actix/actix/fut/trait.IntoActorFuture.js | 10 + .../actix_web/actix/actix/trait.Actor.js | 10 + .../actix/actix/trait.ActorContext.js | 10 + .../actix/actix/trait.ActorFuture.js | 10 + .../actix/actix/trait.ActorStream.js | 10 + .../actix/actix/trait.AsyncContext.js | 10 + .../actix/actix/trait.ContextFutureSpawner.js | 10 + .../actix_web/actix/actix/trait.Handler.js | 10 + .../actix_web/actix/actix/trait.Message.js | 10 + .../actix_web/actix/actix/trait.Supervised.js | 10 + .../actix/actix/trait.SystemService.js | 10 + .../actix_web/actix/actix/trait.WrapFuture.js | 10 + .../actix_web/actix/actix/trait.WrapStream.js | 10 + .../actix_web/dev/trait.FromParam.js | 10 + .../actix_web/dev/trait.Handler.js | 10 + .../actix_web/error/trait.ResponseError.js | 10 + .../actix_web/fs/trait.StaticFileConfig.js | 10 + .../http/header/trait.AsHeaderName.js | 10 + .../http/header/trait.IntoHeaderName.js | 10 + .../identity/trait.IdentityPolicy.js | 10 + .../identity/trait.RequestIdentity.js | 10 + .../session/trait.RequestSession.js | 10 + .../actix_web/middleware/trait.Middleware.js | 10 + .../actix_web/pred/trait.Predicate.js | 10 + .../actix_web/server/trait.HttpHandler.js | 10 + .../actix_web/server/trait.HttpHandlerTask.js | 10 + .../actix_web/server/trait.IntoHttpHandler.js | 10 + .../actix_web/trait.AsyncResponder.js | 10 + .../actix_web/trait.FromRequest.js | 10 + .../actix_web/trait.HttpMessage.js | 10 + .../implementors/actix_web/trait.Responder.js | 10 + .../actix_web/ws/trait.WsWriter.js | 10 + .../implementors/core/clone/trait.Clone.js | 10 + .../0.7.2/implementors/core/cmp/trait.Eq.js | 10 + .../0.7.2/implementors/core/cmp/trait.Ord.js | 10 + .../implementors/core/cmp/trait.PartialEq.js | 10 + .../implementors/core/cmp/trait.PartialOrd.js | 10 + .../implementors/core/convert/trait.AsRef.js | 10 + .../implementors/core/convert/trait.From.js | 10 + .../implementors/core/convert/trait.Into.js | 10 + .../core/default/trait.Default.js | 10 + .../implementors/core/fmt/trait.Debug.js | 10 + .../implementors/core/fmt/trait.Display.js | 10 + .../implementors/core/hash/trait.Hash.js | 10 + .../implementors/core/marker/trait.Copy.js | 10 + .../implementors/core/marker/trait.Send.js | 10 + .../implementors/core/marker/trait.Sync.js | 10 + .../core/ops/deref/trait.Deref.js | 10 + .../core/ops/deref/trait.DerefMut.js | 10 + .../implementors/core/ops/drop/trait.Drop.js | 10 + .../core/ops/index/trait.Index.js | 10 + .../implementors/core/str/trait.FromStr.js | 10 + .../0.7.2/implementors/failure/trait.Fail.js | 10 + .../futures/future/trait.Future.js | 10 + .../futures/stream/trait.Stream.js | 10 + .../0.7.2/implementors/std/io/trait.Read.js | 10 + .../0.7.2/implementors/std/io/trait.Write.js | 10 + .../tokio_io/async_read/trait.AsyncRead.js | 10 + .../tokio_io/async_write/trait.AsyncWrite.js | 10 + static/api/actix-web/0.7.2/light.css | 12 + static/api/actix-web/0.7.2/main.js | 11 + static/api/actix-web/0.7.2/normalize.css | 2 + static/api/actix-web/0.7.2/rustdoc.css | 12 + static/api/actix-web/0.7.2/search-index.js | 3 + static/api/actix-web/0.7.2/settings.css | 12 + static/api/actix-web/0.7.2/settings.html | 1 + static/api/actix-web/0.7.2/settings.js | 11 + .../0.7.2/src/actix_web/application.rs.html | 1765 ++++++++ .../0.7.2/src/actix_web/body.rs.html | 707 ++++ .../src/actix_web/client/connector.rs.html | 2303 +++++++++++ .../0.7.2/src/actix_web/client/mod.rs.html | 239 ++ .../0.7.2/src/actix_web/client/parser.rs.html | 447 ++ .../src/actix_web/client/pipeline.rs.html | 1107 +++++ .../src/actix_web/client/request.rs.html | 1533 +++++++ .../src/actix_web/client/response.rs.html | 251 ++ .../0.7.2/src/actix_web/client/writer.rs.html | 823 ++++ .../0.7.2/src/actix_web/context.rs.html | 591 +++ .../actix-web/0.7.2/src/actix_web/de.rs.html | 889 ++++ .../0.7.2/src/actix_web/error.rs.html | 2245 ++++++++++ .../0.7.2/src/actix_web/extensions.rs.html | 229 ++ .../0.7.2/src/actix_web/extractor.rs.html | 2023 +++++++++ .../actix-web/0.7.2/src/actix_web/fs.rs.html | 3599 +++++++++++++++++ .../0.7.2/src/actix_web/handler.rs.html | 1121 +++++ .../actix_web/header/common/accept.rs.html | 321 ++ .../header/common/accept_charset.rs.html | 141 + .../header/common/accept_language.rs.html | 153 + .../src/actix_web/header/common/allow.rs.html | 173 + .../header/common/cache_control.rs.html | 511 +++ .../header/common/content_disposition.rs.html | 573 +++ .../header/common/content_language.rs.html | 133 + .../header/common/content_range.rs.html | 423 ++ .../header/common/content_type.rs.html | 247 ++ .../src/actix_web/header/common/date.rs.html | 87 + .../src/actix_web/header/common/etag.rs.html | 195 + .../actix_web/header/common/expires.rs.html | 81 + .../actix_web/header/common/if_match.rs.html | 143 + .../header/common/if_modified_since.rs.html | 81 + .../header/common/if_none_match.rs.html | 187 + .../actix_web/header/common/if_range.rs.html | 233 ++ .../header/common/if_unmodified_since.rs.html | 83 + .../header/common/last_modified.rs.html | 79 + .../src/actix_web/header/common/mod.rs.html | 703 ++++ .../0.7.2/src/actix_web/header/mod.rs.html | 943 +++++ .../actix_web/header/shared/charset.rs.html | 307 ++ .../actix_web/header/shared/encoding.rs.html | 121 + .../actix_web/header/shared/entity.rs.html | 535 +++ .../actix_web/header/shared/httpdate.rs.html | 241 ++ .../src/actix_web/header/shared/mod.rs.html | 31 + .../header/shared/quality_item.rs.html | 591 +++ .../0.7.2/src/actix_web/helpers.rs.html | 1147 ++++++ .../0.7.2/src/actix_web/httpcodes.rs.html | 171 + .../0.7.2/src/actix_web/httpmessage.rs.html | 1719 ++++++++ .../0.7.2/src/actix_web/httprequest.rs.html | 1069 +++++ .../0.7.2/src/actix_web/httpresponse.rs.html | 2675 ++++++++++++ .../0.7.2/src/actix_web/info.rs.html | 439 ++ .../0.7.2/src/actix_web/json.rs.html | 903 +++++ .../actix-web/0.7.2/src/actix_web/lib.rs.html | 549 +++ .../src/actix_web/middleware/cors.rs.html | 2321 +++++++++++ .../src/actix_web/middleware/csrf.rs.html | 555 +++ .../middleware/defaultheaders.rs.html | 243 ++ .../actix_web/middleware/errhandlers.rs.html | 285 ++ .../src/actix_web/middleware/identity.rs.html | 777 ++++ .../src/actix_web/middleware/logger.rs.html | 771 ++++ .../src/actix_web/middleware/mod.rs.html | 139 + .../src/actix_web/middleware/session.rs.html | 1233 ++++++ .../0.7.2/src/actix_web/multipart.rs.html | 1641 ++++++++ .../0.7.2/src/actix_web/param.rs.html | 611 +++ .../0.7.2/src/actix_web/payload.rs.html | 1445 +++++++ .../0.7.2/src/actix_web/pipeline.rs.html | 1547 +++++++ .../0.7.2/src/actix_web/pred.rs.html | 661 +++ .../0.7.2/src/actix_web/resource.rs.html | 649 +++ .../0.7.2/src/actix_web/route.rs.html | 1335 ++++++ .../0.7.2/src/actix_web/router.rs.html | 2185 ++++++++++ .../0.7.2/src/actix_web/scope.rs.html | 2289 +++++++++++ .../src/actix_web/serde_urlencoded/de.rs.html | 613 +++ .../actix_web/serde_urlencoded/mod.rs.html | 245 ++ .../serde_urlencoded/ser/key.rs.html | 151 + .../serde_urlencoded/ser/mod.rs.html | 983 +++++ .../serde_urlencoded/ser/pair.rs.html | 481 +++ .../serde_urlencoded/ser/part.rs.html | 405 ++ .../serde_urlencoded/ser/value.rs.html | 121 + .../src/actix_web/server/channel.rs.html | 699 ++++ .../0.7.2/src/actix_web/server/error.rs.html | 51 + .../0.7.2/src/actix_web/server/h1.rs.html | 2475 ++++++++++++ .../src/actix_web/server/h1decoder.rs.html | 1019 +++++ .../src/actix_web/server/h1writer.rs.html | 693 ++++ .../0.7.2/src/actix_web/server/h2.rs.html | 891 ++++ .../src/actix_web/server/h2writer.rs.html | 527 +++ .../src/actix_web/server/helpers.rs.html | 391 ++ .../0.7.2/src/actix_web/server/input.rs.html | 717 ++++ .../src/actix_web/server/message.rs.html | 513 +++ .../0.7.2/src/actix_web/server/mod.rs.html | 627 +++ .../0.7.2/src/actix_web/server/output.rs.html | 1531 +++++++ .../src/actix_web/server/settings.rs.html | 645 +++ .../0.7.2/src/actix_web/server/srv.rs.html | 1923 +++++++++ .../0.7.2/src/actix_web/server/worker.rs.html | 507 +++ .../0.7.2/src/actix_web/test.rs.html | 1351 +++++++ .../actix-web/0.7.2/src/actix_web/uri.rs.html | 351 ++ .../0.7.2/src/actix_web/with.rs.html | 529 +++ .../0.7.2/src/actix_web/ws/client.rs.html | 1207 ++++++ .../0.7.2/src/actix_web/ws/context.rs.html | 671 +++ .../0.7.2/src/actix_web/ws/frame.rs.html | 1079 +++++ .../0.7.2/src/actix_web/ws/mask.rs.html | 301 ++ .../0.7.2/src/actix_web/ws/mod.rs.html | 981 +++++ .../0.7.2/src/actix_web/ws/proto.rs.html | 639 +++ static/api/actix-web/0.7.2/storage.js | 11 + static/api/actix-web/0.7.2/theme.js | 39 + static/api/actix-web/0.7.2/wheel.svg | 1 + .../actix_web/actix/actix/ActorContext.t.html | 10 + .../actix_web/actix/actix/ActorFuture.t.html | 10 + .../actix/actix/ActorResponse.t.html | 10 + .../actix_web/actix/actix/ActorStream.t.html | 10 + .../actix_web/actix/actix/Arbiter.t.html | 10 + .../actix/actix/ArbiterService.t.html | 10 + .../actix_web/actix/actix/AsyncContext.t.html | 10 + .../actix_web/actix/actix/Handler.t.html | 10 + .../actix_web/actix/actix/Message.t.html | 10 + .../actix_web/actix/actix/Recipient.t.html | 10 + .../actix/actix/RecipientRequest.t.html | 10 + .../actix_web/actix/actix/Request.t.html | 10 + .../actix_web/actix/actix/Response.t.html | 10 + .../actix/actix/ResponseFuture.t.html | 10 + .../actix_web/actix/actix/SpawnHandle.t.html | 10 + .../actix/actix/StreamHandler.t.html | 10 + .../actix_web/actix/actix/SyncContext.t.html | 10 + .../actix_web/actix/actix/System.t.html | 10 + .../actix_web/actix/actix/WrapStream.t.html | 10 + .../actix_web/actix/actix/actors/index.html | 19 + .../actix/actors/resolver/Connect.t.html | 10 + .../actix/actors/resolver/ConnectAddr.t.html | 10 + .../actix/actors/resolver/Connector.t.html | 10 + .../actors/resolver/ConnectorError.t.html | 10 + .../actix/actors/resolver/Resolve.t.html | 10 + .../actix/actors/resolver/Resolver.t.html | 10 + .../actors/resolver/ResolverError.t.html | 10 + .../actix/actors/resolver/TcpConnector.t.html | 10 + .../actors/resolver/enum.ResolverError.html | 30 + .../actix/actix/actors/resolver/index.html | 93 + .../actix/actors/resolver/sidebar-items.js | 1 + .../actix/actors/resolver/struct.Connect.html | 24 + .../actors/resolver/struct.ConnectAddr.html | 18 + .../actix/actors/resolver/struct.Resolve.html | 22 + .../actors/resolver/struct.Resolver.html | 36 + .../actors/resolver/struct.TcpConnector.html | 28 + .../actix/actors/resolver/type.Connector.html | 2 + .../actors/resolver/type.ConnectorError.html | 2 + .../actix/actix/actors/sidebar-items.js | 1 + .../signal/DefaultSignalsHandler.t.html | 10 + .../actix/actors/signal/ProcessSignals.t.html | 10 + .../actix/actix/actors/signal/Signal.t.html | 10 + .../actix/actors/signal/SignalType.t.html | 10 + .../actix/actors/signal/Subscribe.t.html | 10 + .../actix/actors/signal/enum.SignalType.html | 32 + .../actix/actix/actors/signal/index.html | 100 + .../actix/actors/signal/sidebar-items.js | 1 + .../signal/struct.DefaultSignalsHandler.html | 26 + .../actors/signal/struct.ProcessSignals.html | 28 + .../actix/actors/signal/struct.Signal.html | 25 + .../actix/actors/signal/struct.Subscribe.html | 17 + .../actix_web/actix/actix/dev/index.html | 185 +- .../actix/actix/dev/sidebar-items.js | 2 +- .../actix/actix/dev/struct.ContextParts.html | 12 +- .../actix/actix/dev/struct.Envelope.html | 2 +- .../actix/actix/dev/struct.Mailbox.html | 6 +- .../actix/actix/dev/struct.Registry.html | 4 +- .../actix/dev/trait.AsyncContextParts.html | 2 +- .../actix/dev/trait.MessageResponse.html | 12 +- .../actix/dev/trait.ResponseChannel.html | 8 +- .../actix/actix/dev/trait.ToEnvelope.html | 14 +- .../actix/actix/enum.ActorState.html | 12 +- .../actix/actix/enum.MailboxError.html | 6 +- .../actix_web/actix/actix/enum.Running.html | 12 +- .../actix_web/actix/actix/enum.SendError.html | 6 +- .../actix_web/actix/actix/fut/AndThen.t.html | 10 + .../actix_web/actix/actix/fut/DropErr.t.html | 10 + .../actix_web/actix/actix/fut/Either.t.html | 10 + .../actix_web/actix/actix/fut/Finish.t.html | 10 + .../actix_web/actix/actix/fut/FromErr.t.html | 10 + .../actix/actix/fut/FutureResult.t.html | 10 + .../actix/actix/fut/FutureWrap.t.html | 10 + .../actix/actix/fut/IntoActorFuture.t.html | 10 + .../actix_web/actix/actix/fut/Map.t.html | 10 + .../actix_web/actix/actix/fut/MapErr.t.html | 10 + .../actix/actix/fut/StreamAndThen.t.html | 10 + .../actix/actix/fut/StreamFinish.t.html | 10 + .../actix/actix/fut/StreamFold.t.html | 10 + .../actix/actix/fut/StreamMap.t.html | 10 + .../actix/actix/fut/StreamMapErr.t.html | 10 + .../actix/actix/fut/StreamThen.t.html | 10 + .../actix/actix/fut/StreamTimeout.t.html | 10 + .../actix/actix/fut/StreamWrap.t.html | 10 + .../actix_web/actix/actix/fut/Then.t.html | 10 + .../actix_web/actix/actix/fut/Timeout.t.html | 10 + .../actix/actix/fut/enum.Either.html | 40 + .../actix_web/actix/actix/fut/err.v.html | 10 + .../actix_web/actix/actix/fut/fn.err.html | 14 + .../actix_web/actix/actix/fut/fn.ok.html | 16 + .../actix_web/actix/actix/fut/fn.result.html | 16 + .../actix/actix/fut/fn.wrap_future.html | 2 + .../actix/actix/fut/fn.wrap_stream.html | 2 + .../actix_web/actix/actix/fut/index.html | 215 + .../actix_web/actix/actix/fut/ok.v.html | 10 + .../actix_web/actix/actix/fut/result.v.html | 10 + .../actix/actix/fut/sidebar-items.js | 1 + .../actix/actix/fut/struct.AndThen.html | 28 + .../actix/actix/fut/struct.DropErr.html | 23 + .../actix/actix/fut/struct.Finish.html | 44 + .../actix/actix/fut/struct.FromErr.html | 27 + .../actix/actix/fut/struct.FutureResult.html | 28 + .../actix/actix/fut/struct.FutureWrap.html | 23 + .../actix_web/actix/actix/fut/struct.Map.html | 27 + .../actix/actix/fut/struct.MapErr.html | 27 + .../actix/actix/fut/struct.StreamAndThen.html | 28 + .../actix/actix/fut/struct.StreamFinish.html | 28 + .../actix/actix/fut/struct.StreamFold.html | 27 + .../actix/actix/fut/struct.StreamMap.html | 28 + .../actix/actix/fut/struct.StreamMapErr.html | 28 + .../actix/actix/fut/struct.StreamThen.html | 28 + .../actix/actix/fut/struct.StreamTimeout.html | 28 + .../actix/actix/fut/struct.StreamWrap.html | 23 + .../actix/actix/fut/struct.Then.html | 28 + .../actix/actix/fut/struct.Timeout.html | 28 + .../actix/fut/trait.IntoActorFuture.html | 33 + .../actix/actix/fut/wrap_future.v.html | 10 + .../actix/actix/fut/wrap_stream.v.html | 10 + .../stable/actix_web/actix/actix/index.html | 179 + .../actix/actix/io/struct.FramedWrite.html | 4 +- .../actix/actix/io/struct.Writer.html | 4 +- .../actix/actix/io/trait.WriteHandler.html | 2 +- .../actix_web/actix/actix/msgs/Execute.t.html | 10 + .../actix/actix/msgs/StartActor.t.html | 10 + .../actix/actix/msgs/StopArbiter.t.html | 10 + .../actix_web/actix/actix/msgs/index.html | 27 + .../actix/actix/msgs/sidebar-items.js | 1 + .../actix/actix/msgs/struct.Execute.html | 44 + .../actix/actix/msgs/struct.StartActor.html | 20 + .../actix/actix/msgs/struct.StopArbiter.html | 16 + .../actix_web/actix/actix/sidebar-items.js | 2 +- .../actix/actix/struct.ActorResponse.html | 17 + .../actix_web/actix/actix/struct.Addr.html | 18 +- .../actix_web/actix/actix/struct.Arbiter.html | 53 + .../actix_web/actix/actix/struct.Context.html | 32 +- .../actix/actix/struct.MessageResult.html | 6 +- .../actix/actix/struct.Recipient.html | 32 + .../actix/actix/struct.RecipientRequest.html | 43 + .../actix_web/actix/actix/struct.Request.html | 43 + .../actix/actix/struct.Response.html | 17 + .../actix/actix/struct.SpawnHandle.html | 24 + .../actix/actix/struct.Supervisor.html | 2 +- .../actix/actix/struct.SyncArbiter.html | 6 +- .../actix/actix/struct.SyncContext.html | 15 + .../actix_web/actix/actix/struct.System.html | 65 + .../actix_web/actix/actix/trait.Actor.html | 14 +- .../actix/actix/trait.ActorContext.html | 29 + .../actix/actix/trait.ActorFuture.html | 81 + .../actix/actix/trait.ActorStream.html | 64 + .../actix/actix/trait.ArbiterService.html | 21 + .../actix/actix/trait.AsyncContext.html | 115 + .../actix/trait.ContextFutureSpawner.html | 4 +- .../actix_web/actix/actix/trait.Handler.html | 42 + .../actix_web/actix/actix/trait.Message.html | 35 + .../actix/actix/trait.StreamHandler.html | 74 + .../actix/actix/trait.Supervised.html | 4 +- .../actix/actix/trait.SystemService.html | 8 +- .../actix/actix/trait.WrapFuture.html | 8 +- .../actix/actix/trait.WrapStream.html | 29 + .../actix/actix/type.ResponseActFuture.html | 2 +- .../actix/actix/type.ResponseFuture.html | 2 + .../actix_web/actix/fut/enum.Either.html | 30 +- .../stable/actix_web/actix/fut/fn.err.html | 2 +- .../stable/actix_web/actix/fut/fn.ok.html | 2 +- .../stable/actix_web/actix/fut/fn.result.html | 2 +- .../actix_web/actix/fut/fn.wrap_future.html | 2 +- .../actix_web/actix/fut/fn.wrap_stream.html | 2 +- .../actix_web/actix/fut/struct.AndThen.html | 30 +- .../actix_web/actix/fut/struct.DropErr.html | 28 +- .../actix_web/actix/fut/struct.Finish.html | 8 +- .../actix_web/actix/fut/struct.FromErr.html | 30 +- .../actix/fut/struct.FutureResult.html | 32 +- .../actix/fut/struct.FutureWrap.html | 26 +- .../actix_web/actix/fut/struct.Map.html | 30 +- .../actix_web/actix/fut/struct.MapErr.html | 30 +- .../actix/fut/struct.StreamAndThen.html | 26 +- .../actix/fut/struct.StreamFinish.html | 28 +- .../actix/fut/struct.StreamFold.html | 30 +- .../actix_web/actix/fut/struct.StreamMap.html | 24 +- .../actix/fut/struct.StreamMapErr.html | 24 +- .../actix/fut/struct.StreamThen.html | 26 +- .../actix/fut/struct.StreamTimeout.html | 26 +- .../actix/fut/struct.StreamWrap.html | 22 +- .../actix_web/actix/fut/struct.Then.html | 30 +- .../actix_web/actix/fut/struct.Timeout.html | 30 +- .../actix/fut/trait.ActorFuture.html | 66 +- .../actix/fut/trait.ActorStream.html | 44 +- .../actix/fut/trait.IntoActorFuture.html | 12 +- .../actix_web/actix/fut/trait.WrapFuture.html | 8 +- .../actix_web/actix/fut/trait.WrapStream.html | 12 +- .../actix_web/actix/msgs/struct.Execute.html | 14 +- .../actix/msgs/struct.StartActor.html | 12 +- .../actix/msgs/struct.StopArbiter.html | 10 +- .../actix/resolver/enum.ResolverError.html | 12 +- .../actix/resolver/struct.Connect.html | 20 +- .../actix/resolver/struct.ConnectAddr.html | 18 +- .../actix/resolver/struct.Resolve.html | 20 +- .../actix/resolver/struct.Resolver.html | 28 +- .../actix/resolver/struct.TcpConnector.html | 28 +- .../actix/resolver/type.Connector.html | 2 +- .../actix/resolver/type.ConnectorError.html | 2 +- .../actix/signal/enum.SignalType.html | 18 +- .../signal/struct.DefaultSignalsHandler.html | 14 +- .../actix/signal/struct.ProcessSignals.html | 20 +- .../actix_web/actix/signal/struct.Signal.html | 22 +- .../actix/signal/struct.Subscribe.html | 14 +- .../api/actix-web/stable/actix_web/all.html | 2 +- .../client/enum.ClientConnectorError.html | 6 +- .../client/struct.ClientConnector.html | 20 +- .../client/struct.ClientConnectorStats.html | 4 +- .../client/struct.ClientRequest.html | 4 +- .../client/struct.ClientRequestBuilder.html | 10 +- .../actix_web/client/struct.Connect.html | 10 +- .../actix_web/client/struct.Connection.html | 26 +- .../stable/actix_web/client/struct.Pause.html | 8 +- .../actix_web/client/struct.Resume.html | 8 +- .../stable/actix_web/dev/struct.Drain.html | 24 +- .../actix_web/dev/struct.FormConfig.html | 8 +- .../dev/struct.HttpResponseBuilder.html | 6 +- .../actix_web/dev/struct.MessageBody.html | 2 +- .../stable/actix_web/dev/struct.Payload.html | 6 +- .../actix_web/dev/struct.PayloadBuffer.html | 16 +- .../actix_web/dev/struct.PayloadConfig.html | 8 +- .../stable/actix_web/dev/trait.Handler.html | 2 +- .../stable/actix_web/dev/type.BodyStream.html | 2 +- .../stable/actix_web/enum.Binary.html | 24 +- .../error/enum.CookieParseError.html | 20 +- .../actix_web/error/enum.ParseError.html | 6 +- .../actix_web/error/enum.UrlParseError.html | 14 +- .../actix_web/error/trait.ResponseError.html | 2 +- .../actix-web/stable/actix_web/fs/index.html | 2 +- .../actix_web/fs/struct.ChunkedReadFile.html | 6 +- .../stable/actix_web/fs/struct.Directory.html | 8 +- .../stable/actix_web/fs/struct.NamedFile.html | 10 +- .../actix_web/fs/struct.StaticFiles.html | 22 +- .../http/header/constant.ACCEPT.html | 2 +- .../http/header/constant.ACCEPT_CHARSET.html | 2 +- .../http/header/constant.ACCEPT_ENCODING.html | 2 +- .../http/header/constant.ACCEPT_LANGUAGE.html | 2 +- .../http/header/constant.ACCEPT_RANGES.html | 2 +- ...tant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html | 2 +- ...constant.ACCESS_CONTROL_ALLOW_HEADERS.html | 2 +- ...constant.ACCESS_CONTROL_ALLOW_METHODS.html | 2 +- .../constant.ACCESS_CONTROL_ALLOW_ORIGIN.html | 2 +- ...onstant.ACCESS_CONTROL_EXPOSE_HEADERS.html | 2 +- .../constant.ACCESS_CONTROL_MAX_AGE.html | 2 +- ...nstant.ACCESS_CONTROL_REQUEST_HEADERS.html | 2 +- ...onstant.ACCESS_CONTROL_REQUEST_METHOD.html | 2 +- .../actix_web/http/header/constant.AGE.html | 2 +- .../actix_web/http/header/constant.ALLOW.html | 2 +- .../http/header/constant.ALT_SVC.html | 2 +- .../http/header/constant.AUTHORIZATION.html | 2 +- .../http/header/constant.CACHE_CONTROL.html | 2 +- .../http/header/constant.CONNECTION.html | 2 +- .../header/constant.CONTENT_DISPOSITION.html | 2 +- .../header/constant.CONTENT_ENCODING.html | 2 +- .../header/constant.CONTENT_LANGUAGE.html | 2 +- .../http/header/constant.CONTENT_LENGTH.html | 2 +- .../header/constant.CONTENT_LOCATION.html | 2 +- .../http/header/constant.CONTENT_RANGE.html | 2 +- .../constant.CONTENT_SECURITY_POLICY.html | 2 +- ...t.CONTENT_SECURITY_POLICY_REPORT_ONLY.html | 2 +- .../http/header/constant.CONTENT_TYPE.html | 2 +- .../http/header/constant.COOKIE.html | 2 +- .../actix_web/http/header/constant.DATE.html | 2 +- .../actix_web/http/header/constant.DNT.html | 2 +- .../actix_web/http/header/constant.ETAG.html | 2 +- .../http/header/constant.EXPECT.html | 2 +- .../http/header/constant.EXPIRES.html | 2 +- .../http/header/constant.FORWARDED.html | 2 +- .../actix_web/http/header/constant.FROM.html | 2 +- .../actix_web/http/header/constant.HOST.html | 2 +- .../http/header/constant.IF_MATCH.html | 2 +- .../header/constant.IF_MODIFIED_SINCE.html | 2 +- .../http/header/constant.IF_NONE_MATCH.html | 2 +- .../http/header/constant.IF_RANGE.html | 2 +- .../header/constant.IF_UNMODIFIED_SINCE.html | 2 +- .../http/header/constant.LAST_MODIFIED.html | 2 +- .../actix_web/http/header/constant.LINK.html | 2 +- .../http/header/constant.LOCATION.html | 2 +- .../http/header/constant.MAX_FORWARDS.html | 2 +- .../http/header/constant.ORIGIN.html | 2 +- .../http/header/constant.PRAGMA.html | 2 +- .../header/constant.PROXY_AUTHENTICATE.html | 2 +- .../header/constant.PROXY_AUTHORIZATION.html | 2 +- .../http/header/constant.PUBLIC_KEY_PINS.html | 2 +- .../constant.PUBLIC_KEY_PINS_REPORT_ONLY.html | 2 +- .../actix_web/http/header/constant.RANGE.html | 2 +- .../http/header/constant.REFERER.html | 2 +- .../http/header/constant.REFERRER_POLICY.html | 2 +- .../http/header/constant.REFRESH.html | 2 +- .../http/header/constant.RETRY_AFTER.html | 2 +- .../header/constant.SEC_WEBSOCKET_ACCEPT.html | 2 +- .../constant.SEC_WEBSOCKET_EXTENSIONS.html | 2 +- .../header/constant.SEC_WEBSOCKET_KEY.html | 2 +- .../constant.SEC_WEBSOCKET_PROTOCOL.html | 2 +- .../constant.SEC_WEBSOCKET_VERSION.html | 2 +- .../http/header/constant.SERVER.html | 2 +- .../http/header/constant.SET_COOKIE.html | 2 +- .../constant.STRICT_TRANSPORT_SECURITY.html | 2 +- .../actix_web/http/header/constant.TE.html | 2 +- .../http/header/constant.TRAILER.html | 2 +- .../header/constant.TRANSFER_ENCODING.html | 2 +- .../http/header/constant.UPGRADE.html | 2 +- .../constant.UPGRADE_INSECURE_REQUESTS.html | 2 +- .../http/header/constant.USER_AGENT.html | 2 +- .../actix_web/http/header/constant.VARY.html | 2 +- .../actix_web/http/header/constant.VIA.html | 2 +- .../http/header/constant.WARNING.html | 2 +- .../header/constant.WWW_AUTHENTICATE.html | 2 +- .../constant.X_CONTENT_TYPE_OPTIONS.html | 2 +- .../constant.X_DNS_PREFETCH_CONTROL.html | 2 +- .../http/header/constant.X_FRAME_OPTIONS.html | 2 +- .../header/constant.X_XSS_PROTECTION.html | 2 +- .../actix_web/http/header/enum.Entry.html | 10 +- .../actix_web/http/header/struct.Drain.html | 112 +- .../actix_web/http/header/struct.GetAll.html | 20 +- .../http/header/struct.HeaderMap.html | 151 +- .../http/header/struct.HeaderName.html | 88 +- .../http/header/struct.HeaderValue.html | 196 +- .../http/header/struct.IntoIter.html | 112 +- .../http/header/struct.InvalidHeaderName.html | 12 +- .../header/struct.InvalidHeaderNameBytes.html | 12 +- .../header/struct.InvalidHeaderValue.html | 12 +- .../struct.InvalidHeaderValueBytes.html | 12 +- .../actix_web/http/header/struct.Iter.html | 112 +- .../actix_web/http/header/struct.Keys.html | 112 +- .../http/header/struct.LanguageTag.html | 16 +- .../http/header/struct.OccupiedEntry.html | 40 +- .../http/header/struct.ToStrError.html | 10 +- .../http/header/struct.VacantEntry.html | 12 +- .../http/header/struct.ValueDrain.html | 112 +- .../http/header/struct.ValueIter.html | 112 +- .../http/header/struct.ValueIterMut.html | 110 +- .../actix_web/http/header/struct.Values.html | 110 +- .../http/header/trait.AsHeaderName.html | 8 +- .../http/header/trait.IntoHeaderName.html | 8 +- .../stable/actix_web/http/struct.Cookie.html | 126 +- .../actix_web/http/struct.CookieBuilder.html | 30 +- .../stable/actix_web/http/struct.Method.html | 64 +- .../actix_web/http/struct.StatusCode.html | 90 +- .../stable/actix_web/http/struct.Version.html | 30 +- .../api/actix-web/stable/actix_web/index.html | 4 +- .../middleware/cors/struct.CorsBuilder.html | 8 +- .../actix_web/middleware/session/index.html | 2 +- .../session/struct.CookieSessionBackend.html | 19 +- .../middleware/struct.DefaultHeaders.html | 2 +- .../actix_web/middleware/struct.Logger.html | 4 +- .../actix_web/multipart/struct.Field.html | 4 +- .../actix_web/multipart/struct.Multipart.html | 4 +- .../actix_web/server/struct.HttpServer.html | 20 +- .../actix_web/server/struct.PauseServer.html | 8 +- .../actix_web/server/struct.Request.html | 2 +- .../actix_web/server/struct.ResumeServer.html | 8 +- .../actix_web/server/struct.StopServer.html | 8 +- .../server/trait.IntoHttpHandler.html | 4 +- .../stable/actix_web/struct.App.html | 42 +- .../stable/actix_web/struct.Form.html | 28 +- .../stable/actix_web/struct.HttpContext.html | 32 +- .../stable/actix_web/struct.HttpRequest.html | 4 +- .../stable/actix_web/struct.HttpResponse.html | 6 +- .../stable/actix_web/struct.Path.html | 30 +- .../stable/actix_web/struct.Query.html | 28 +- .../stable/actix_web/struct.Request.html | 2 +- .../stable/actix_web/struct.State.html | 10 +- .../actix_web/test/struct.TestRequest.html | 4 +- .../stable/actix_web/trait.FromRequest.html | 155 +- .../stable/actix_web/trait.HttpMessage.html | 4 +- .../stable/actix_web/trait.Responder.html | 6 +- .../stable/actix_web/ws/enum.Message.html | 4 +- .../stable/actix_web/ws/fn.start.html | 2 +- .../stable/actix_web/ws/struct.Client.html | 4 +- .../stable/actix_web/ws/struct.Frame.html | 2 +- .../actix_web/ws/struct.WebsocketContext.html | 34 +- .../stable/actix_web/ws/struct.WsStream.html | 4 +- static/api/actix-web/stable/aliases.js | 2 + static/api/actix-web/stable/dark.css | 2 +- .../actix/actix/dev/trait.ToEnvelope.js | 2 +- .../actix/actix/fut/trait.IntoActorFuture.js | 10 + .../actix/actix/trait.ActorContext.js | 10 + .../actix/actix/trait.ActorFuture.js | 10 + .../actix/actix/trait.ActorStream.js | 10 + .../actix/actix/trait.AsyncContext.js | 10 + .../actix_web/actix/actix/trait.Handler.js | 10 + .../actix_web/actix/actix/trait.Message.js | 10 + .../actix_web/actix/actix/trait.WrapStream.js | 10 + .../stable/implementors/core/cmp/trait.Eq.js | 2 +- .../stable/implementors/core/cmp/trait.Ord.js | 10 + .../implementors/core/cmp/trait.PartialEq.js | 2 +- .../implementors/core/cmp/trait.PartialOrd.js | 10 + .../implementors/core/convert/trait.From.js | 2 +- .../implementors/core/convert/trait.Into.js | 2 +- .../futures/stream/trait.Stream.js | 2 +- static/api/actix-web/stable/main.js | 2 +- static/api/actix-web/stable/rustdoc.css | 2 +- static/api/actix-web/stable/search-index.js | 4 +- static/api/actix-web/stable/settings.html | 2 +- .../stable/src/actix_web/application.rs.html | 74 +- .../src/actix_web/client/connector.rs.html | 12 +- .../src/actix_web/client/pipeline.rs.html | 2 +- .../stable/src/actix_web/extractor.rs.html | 2022 +++++---- .../actix-web/stable/src/actix_web/fs.rs.html | 52 +- .../stable/src/actix_web/handler.rs.html | 6 +- .../stable/src/actix_web/lib.rs.html | 4 +- .../src/actix_web/middleware/logger.rs.html | 6 +- .../src/actix_web/middleware/session.rs.html | 18 +- .../stable/src/actix_web/pipeline.rs.html | 2 +- .../stable/src/actix_web/router.rs.html | 2 +- .../stable/src/actix_web/server/h2.rs.html | 6 +- .../src/actix_web/server/h2writer.rs.html | 122 +- 2025 files changed, 116162 insertions(+), 2957 deletions(-) create mode 100755 static/api/actix-web/0.7.2/.lock create mode 100644 static/api/actix-web/0.7.2/COPYRIGHT.txt create mode 100644 static/api/actix-web/0.7.2/FiraSans-LICENSE.txt create mode 100644 static/api/actix-web/0.7.2/FiraSans-Medium.woff create mode 100644 static/api/actix-web/0.7.2/FiraSans-Regular.woff create mode 100644 static/api/actix-web/0.7.2/Heuristica-Italic.woff create mode 100644 static/api/actix-web/0.7.2/Heuristica-LICENSE.txt create mode 100644 static/api/actix-web/0.7.2/LICENSE-APACHE.txt create mode 100644 static/api/actix-web/0.7.2/LICENSE-MIT.txt create mode 100644 static/api/actix-web/0.7.2/SourceCodePro-LICENSE.txt create mode 100644 static/api/actix-web/0.7.2/SourceCodePro-Regular.woff create mode 100644 static/api/actix-web/0.7.2/SourceCodePro-Semibold.woff create mode 100644 static/api/actix-web/0.7.2/SourceSerifPro-Bold.woff create mode 100644 static/api/actix-web/0.7.2/SourceSerifPro-LICENSE.txt create mode 100644 static/api/actix-web/0.7.2/SourceSerifPro-Regular.woff create mode 100644 static/api/actix-web/0.7.2/actix_web/App.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/AsyncResponder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Binary.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Body.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Either.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Extensions.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Form.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/FromRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/FutureResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/HttpContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/HttpMessage.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/HttpRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/HttpResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Json.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Path.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Query.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Request.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Responder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/Scope.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/State.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Actor.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ActorContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ActorResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ActorState.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ActorStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Addr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Arbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ArbiterService.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/AsyncContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Condition.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Context.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ContextFutureSpawner.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Handler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/MailboxError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Message.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/MessageResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Recipient.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/RecipientRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Request.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Response.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseActFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Running.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/SendError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/SpawnHandle.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/StreamHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Supervised.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/Supervisor.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/SyncArbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/SyncContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/System.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/SystemService.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/WrapFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/WrapStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connect.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectorError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolve.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolver.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ResolverError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/TcpConnector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/enum.ResolverError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolve.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolver.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.Connector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.ConnectorError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/ProcessSignals.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Signal.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/SignalType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Subscribe.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/enum.SignalType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Signal.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Subscribe.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Arbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ArbiterService.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContextParts.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextFut.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextParts.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Envelope.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Handler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Mailbox.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Message.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/MessageResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Recipient.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/RecipientRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Registry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Request.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Response.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseChannel.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SpawnHandle.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/StreamHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SyncContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/System.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SystemRegistry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ToEnvelope.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/WrapStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connect.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectAddr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectorError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolve.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolver.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ResolverError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/TcpConnector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/enum.ResolverError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.ConnectAddr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolve.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolver.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.TcpConnector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.Connector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.ConnectorError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/DefaultSignalsHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/ProcessSignals.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Signal.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/SignalType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Subscribe.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/enum.SignalType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.DefaultSignalsHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.ProcessSignals.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Signal.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Subscribe.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/AndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/DropErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Either.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Finish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FromErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/IntoActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Map.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/MapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamAndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFinish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFold.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamTimeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Then.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Timeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/enum.Either.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/err.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.err.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.ok.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.result.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_future.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_stream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/ok.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/result.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.AndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.DropErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Finish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FromErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Map.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.MapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamAndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFinish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFold.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamTimeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Then.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Timeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_future.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_stream.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/Execute.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StartActor.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StopArbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.Execute.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StartActor.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StopArbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ActorResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Arbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextFut.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextParts.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Envelope.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Mailbox.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Recipient.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.RecipientRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Registry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Request.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Response.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SpawnHandle.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SyncContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.System.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SystemRegistry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ArbiterService.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContextParts.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Handler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Message.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.MessageResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ResponseChannel.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.StreamHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ToEnvelope.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.WrapStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/dev/type.ResponseFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/enum.ActorState.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/enum.MailboxError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/enum.Running.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/enum.SendError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/AndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/DropErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Either.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Finish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FromErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/IntoActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Map.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/MapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamAndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFinish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFold.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamTimeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Then.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Timeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/enum.Either.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/err.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.err.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.ok.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.result.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_future.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_stream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/ok.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/result.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.AndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.DropErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Finish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FromErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Map.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.MapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamAndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFinish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFold.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamTimeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Then.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Timeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/trait.IntoActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_future.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_stream.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/FramedWrite.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/WriteHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/Writer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.FramedWrite.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.Writer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/io/trait.WriteHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/Execute.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StartActor.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StopArbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.Execute.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StartActor.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StopArbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.ActorResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Addr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Arbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Condition.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Context.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.MessageResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Recipient.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.RecipientRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Request.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Response.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SpawnHandle.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Supervisor.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncArbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/struct.System.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Actor.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ArbiterService.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.AsyncContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ContextFutureSpawner.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Handler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Message.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.StreamHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Supervised.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.SystemService.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseActFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fn.run.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fn.spawn.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/ActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/ActorStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/AndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/DropErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/Either.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/Finish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/FromErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/FutureResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/FutureWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/IntoActorFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/Map.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/MapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamAndThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFinish.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFold.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMapErr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamThen.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamTimeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/StreamWrap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/Then.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/Timeout.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/WrapFuture.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/WrapStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/enum.Either.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/err.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/fn.err.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/fn.ok.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/fn.result.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_future.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_stream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/ok.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/result.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.AndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.DropErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Finish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FromErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Map.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.MapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamAndThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFinish.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFold.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMapErr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamThen.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamTimeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamWrap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Then.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Timeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/trait.IntoActorFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapFuture.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_future.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_stream.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/Execute.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/StartActor.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/StopArbiter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.Execute.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StartActor.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StopArbiter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/Connect.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectAddr.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/Connector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectorError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolve.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolver.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/ResolverError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/TcpConnector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/enum.ResolverError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.ConnectAddr.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolve.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolver.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.TcpConnector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/type.Connector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/resolver/type.ConnectorError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/run.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/DefaultSignalsHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/ProcessSignals.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/Signal.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/SignalType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/Subscribe.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/enum.SignalType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/struct.DefaultSignalsHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/struct.ProcessSignals.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Signal.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Subscribe.html create mode 100644 static/api/actix-web/0.7.2/actix_web/actix/spawn.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/all.html create mode 100644 static/api/actix-web/0.7.2/actix_web/application/App.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/application/struct.App.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/Binary.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/Body.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/BodyStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/enum.Binary.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/enum.Body.html create mode 100644 static/api/actix-web/0.7.2/actix_web/body/type.BodyStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientConnector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientConnectorError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientConnectorStats.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientRequestBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/ClientResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/Connect.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/Connection.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/Pause.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/Resume.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/SendRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/SendRequestError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnector.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorStats.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/Connect.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/Connection.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/Pause.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/Resume.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/enum.ClientConnectorError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnectorStats.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connection.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.Pause.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/connector/struct.Resume.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/delete.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/enum.ClientConnectorError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/enum.SendRequestError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/fn.delete.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/fn.get.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/fn.head.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/fn.post.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/fn.put.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/get.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/head.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequestError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/pipeline/enum.SendRequestError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/pipeline/struct.SendRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/post.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/put.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/request/ClientRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/request/ClientRequestBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequestBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/response/ClientResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/response/struct.ClientResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnector.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnectorStats.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequestBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.ClientResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.Connection.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.Pause.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.Resume.html create mode 100644 static/api/actix-web/0.7.2/actix_web/client/struct.SendRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/context/Drain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/context/HttpContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/context/struct.Drain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/context/struct.HttpContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/AsyncResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/BodyStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/ConnectionInfo.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Drain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/FormConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/FromParam.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Handler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/HttpResponseBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/JsonBody.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/JsonConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/MessageBody.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Params.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Payload.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/PayloadBuffer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/PayloadConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Resource.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/ResourceDef.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/ResourceInfo.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/ResourceType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Route.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/Router.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/UrlEncoded.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/enum.ResourceType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.AsyncResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.ConnectionInfo.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Drain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.FormConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.HttpResponseBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.JsonBody.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.JsonConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.MessageBody.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Params.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Payload.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadBuffer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Resource.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceDef.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceInfo.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Route.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.Router.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/struct.UrlEncoded.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/trait.FromParam.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/trait.Handler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/dev/type.BodyStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/enum.Binary.html create mode 100644 static/api/actix-web/0.7.2/actix_web/enum.Body.html create mode 100644 static/api/actix-web/0.7.2/actix_web/enum.Either.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ContentTypeError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/CookieParseError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/Error.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorBadGateway.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorBadRequest.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorConflict.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorExpectationFailed.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorForbidden.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorGatewayTimeout.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorGone.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorInternalServerError.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorMethodNotAllowed.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorNotFound.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorNotImplemented.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorPreconditionFailed.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorRequestTimeout.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorServiceUnavailable.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ErrorUnauthorized.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ExpectError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/InternalError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/JsonPayloadError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/MultipartError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ParseError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/PayloadError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ReadlinesError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/ResponseError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/Result.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/StaticFileError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/UriSegmentError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/UrlGenerationError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/UrlParseError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/UrlencodedError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.ContentTypeError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.CookieParseError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.ExpectError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.JsonPayloadError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.MultipartError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.ParseError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.PayloadError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.ReadlinesError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.StaticFileError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.UriSegmentError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.UrlGenerationError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.UrlParseError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/enum.UrlencodedError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadGateway.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorConflict.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorExpectationFailed.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorForbidden.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGatewayTimeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGone.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorInternalServerError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorMethodNotAllowed.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotFound.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotImplemented.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorPreconditionFailed.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorRequestTimeout.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorServiceUnavailable.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/fn.ErrorUnauthorized.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/error/struct.Error.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/struct.InternalError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/trait.ResponseError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/error/type.Result.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extensions/Extensions.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extensions/struct.Extensions.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/Form.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/FormConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/Path.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/PayloadConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/Query.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/struct.Form.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/struct.FormConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/struct.Path.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/struct.PayloadConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/extractor/struct.Query.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/ChunkedReadFile.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/DefaultConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/Directory.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/NamedFile.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/StaticFileConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/StaticFiles.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/file_extension_to_mime.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/fn.file_extension_to_mime.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/struct.ChunkedReadFile.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/struct.DefaultConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/struct.Directory.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/struct.NamedFile.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/struct.StaticFiles.html create mode 100644 static/api/actix-web/0.7.2/actix_web/fs/trait.StaticFileConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/AsyncResponder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/AsyncResult.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/Either.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/FromRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/FutureResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/Handler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/Responder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/State.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/enum.Either.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/struct.AsyncResult.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/struct.State.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/trait.AsyncResponder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/trait.FromRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/trait.Handler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/trait.Responder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/handler/type.FutureResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header.m.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCEPT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCEPT_CHARSET.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCEPT_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCEPT_LANGUAGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCEPT_RANGES.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_METHODS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_MAX_AGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_METHOD.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/AGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ALLOW.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ALT_SVC.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/AUTHORIZATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/AsHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CACHE_CONTROL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONNECTION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_DISPOSITION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_LANGUAGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_LENGTH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_LOCATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/CONTENT_TYPE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/COOKIE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ContentEncoding.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/DATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/DNT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/Drain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ETAG.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/EXPECT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/EXPIRES.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/Entry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ExtendedValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/FORWARDED.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/FROM.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/GetAll.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/HOST.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/HeaderMap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/HeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/HeaderValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IF_MATCH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IF_MODIFIED_SINCE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IF_NONE_MATCH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IF_RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IF_UNMODIFIED_SINCE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IntoHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/IntoIter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderNameBytes.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValueBytes.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/Iter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/Keys.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/LAST_MODIFIED.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/LINK.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/LOCATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/MAX_FORWARDS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ORIGIN.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/OccupiedEntry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/PRAGMA.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHENTICATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHORIZATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/REFERER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/REFERRER_POLICY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/REFRESH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/RETRY_AFTER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_ACCEPT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_EXTENSIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_KEY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_PROTOCOL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_VERSION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SERVER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/SET_COOKIE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/STRICT_TRANSPORT_SECURITY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/TE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/TRAILER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/TRANSFER_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ToStrError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/UPGRADE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/UPGRADE_INSECURE_REQUESTS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/USER_AGENT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/VARY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/VIA.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/VacantEntry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ValueDrain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ValueIter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/ValueIterMut.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/Values.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/WARNING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/WWW_AUTHENTICATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/X_CONTENT_TYPE_OPTIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/X_DNS_PREFETCH_CONTROL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/X_FRAME_OPTIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/X_XSS_PROTECTION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/ContentDisposition.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionParam.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionParam.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/struct.ContentDisposition.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_CHARSET.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_LANGUAGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_RANGES.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_MAX_AGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.AGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ALLOW.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ALT_SVC.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.AUTHORIZATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CACHE_CONTROL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONNECTION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_DISPOSITION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LANGUAGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LENGTH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LOCATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_TYPE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.COOKIE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.DATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.DNT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ETAG.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.EXPECT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.EXPIRES.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.FORWARDED.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.FROM.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.HOST.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.IF_MATCH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.IF_MODIFIED_SINCE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.IF_NONE_MATCH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.IF_RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.IF_UNMODIFIED_SINCE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.LAST_MODIFIED.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.LINK.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.LOCATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.MAX_FORWARDS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.ORIGIN.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.PRAGMA.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHENTICATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHORIZATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.REFERER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.REFERRER_POLICY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.REFRESH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.RETRY_AFTER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_ACCEPT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_EXTENSIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_KEY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_PROTOCOL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_VERSION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SERVER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.SET_COOKIE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.STRICT_TRANSPORT_SECURITY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.TE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.TRAILER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.TRANSFER_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE_INSECURE_REQUESTS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.USER_AGENT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.VARY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.VIA.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.WARNING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.WWW_AUTHENTICATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.X_CONTENT_TYPE_OPTIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.X_DNS_PREFETCH_CONTROL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.X_FRAME_OPTIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/constant.X_XSS_PROTECTION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/enum.ContentEncoding.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/enum.Entry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/fn.http_percent_encode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/fn.parse_extended_value.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/http_percent_encode.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/parse_extended_value.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/shared/LanguageTag.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/shared/charset/Charset.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/shared/charset/enum.Charset.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/shared/struct.LanguageTag.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.Drain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.ExtendedValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.GetAll.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.HeaderMap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.HeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.HeaderValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.IntoIter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderNameBytes.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValueBytes.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.Iter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.Keys.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.OccupiedEntry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.ToStrError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.VacantEntry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.ValueDrain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.ValueIter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.ValueIterMut.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/struct.Values.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/trait.AsHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/header/trait.IntoHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/helpers/NormalizePath.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/helpers/struct.NormalizePath.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/ConnectionType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/ContentEncoding.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/Cookie.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/CookieBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/Method.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/NormalizePath.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/StatusCode.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/Version.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/enum.ConnectionType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/enum.ContentEncoding.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_CHARSET.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_LANGUAGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_RANGES.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_METHODS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_MAX_AGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_METHOD.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/AGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ALLOW.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ALT_SVC.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/AUTHORIZATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/AsHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CACHE_CONTROL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONNECTION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_DISPOSITION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LANGUAGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LENGTH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LOCATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_TYPE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/COOKIE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Charset.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ContentDisposition.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ContentEncoding.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/DATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/DNT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/DispositionParam.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/DispositionType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Drain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ETAG.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/EXPECT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/EXPIRES.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Entry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ExtendedValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/FORWARDED.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/FROM.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/GetAll.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/HOST.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/HeaderMap.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/HeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/HeaderValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IF_MATCH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IF_MODIFIED_SINCE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IF_NONE_MATCH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IF_RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IF_UNMODIFIED_SINCE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IntoHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/IntoIter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderName.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderNameBytes.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValue.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValueBytes.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Iter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Keys.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/LAST_MODIFIED.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/LINK.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/LOCATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/LanguageTag.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/MAX_FORWARDS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ORIGIN.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/OccupiedEntry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/PRAGMA.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHENTICATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHORIZATION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/RANGE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/REFERER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/REFERRER_POLICY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/REFRESH.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/RETRY_AFTER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_ACCEPT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_EXTENSIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_KEY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_PROTOCOL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_VERSION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SERVER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/SET_COOKIE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/STRICT_TRANSPORT_SECURITY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/TE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/TRAILER.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/TRANSFER_ENCODING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ToStrError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE_INSECURE_REQUESTS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/USER_AGENT.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/VARY.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/VIA.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/VacantEntry.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ValueDrain.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ValueIter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/ValueIterMut.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/Values.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/WARNING.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/WWW_AUTHENTICATE.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/X_CONTENT_TYPE_OPTIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/X_DNS_PREFETCH_CONTROL.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/X_FRAME_OPTIONS.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/X_XSS_PROTECTION.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_CHARSET.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_LANGUAGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_RANGES.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.AGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ALLOW.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ALT_SVC.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.AUTHORIZATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CACHE_CONTROL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONNECTION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_DISPOSITION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LANGUAGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LENGTH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LOCATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_TYPE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.COOKIE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.DATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.DNT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ETAG.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPECT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPIRES.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.FORWARDED.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.FROM.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.HOST.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MATCH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MODIFIED_SINCE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_NONE_MATCH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.LAST_MODIFIED.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.LINK.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.LOCATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.MAX_FORWARDS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.ORIGIN.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.PRAGMA.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHENTICATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHORIZATION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.RANGE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERRER_POLICY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.REFRESH.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.RETRY_AFTER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SERVER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.SET_COOKIE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.TE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.TRAILER.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.TRANSFER_ENCODING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.USER_AGENT.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.VARY.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.VIA.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.WARNING.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.WWW_AUTHENTICATE.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.X_FRAME_OPTIONS.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/constant.X_XSS_PROTECTION.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/enum.Charset.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/enum.ContentEncoding.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionParam.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/enum.Entry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/fn.http_percent_encode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/fn.parse_extended_value.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/http_percent_encode.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/parse_extended_value.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ContentDisposition.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.Drain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ExtendedValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.GetAll.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderMap.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.IntoIter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderNameBytes.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValue.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValueBytes.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.Iter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.Keys.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.LanguageTag.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.OccupiedEntry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ToStrError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.VacantEntry.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueDrain.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIterMut.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/struct.Values.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/trait.AsHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/header/trait.IntoHeaderName.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.Cookie.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.CookieBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.Method.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.NormalizePath.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.StatusCode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/http/struct.Version.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/HttpMessage.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/MessageBody.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/UrlEncoded.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/struct.MessageBody.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/struct.UrlEncoded.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpmessage/trait.HttpMessage.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httprequest/HttpRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httprequest/struct.HttpRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/ConnectionType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponse.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponseBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/enum.ConnectionType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponseBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/info/ConnectionInfo.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/info/struct.ConnectionInfo.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/Json.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/JsonBody.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/JsonConfig.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/struct.Json.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/struct.JsonBody.html create mode 100644 static/api/actix-web/0.7.2/actix_web/json/struct.JsonConfig.html create mode 100644 static/api/actix-web/0.7.2/actix_web/macro.header!.html create mode 100644 static/api/actix-web/0.7.2/actix_web/macro.header.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/DefaultHeaders.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/ErrorHandlers.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/Finished.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/Logger.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/Middleware.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/Response.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/Started.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/AllOrSome.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/Cors.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.AllOrSome.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.CorsError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.Cors.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.CorsBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfFilter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/enum.CsrfError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/csrf/struct.CsrfFilter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/DefaultHeaders.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/struct.DefaultHeaders.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/enum.Finished.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/enum.Response.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/enum.Started.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/ErrorHandlers.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/struct.ErrorHandlers.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/CookieIdentityPolicy.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/Identity.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityPolicy.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityService.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/RequestIdentity.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.CookieIdentityPolicy.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.IdentityService.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.Identity.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.IdentityPolicy.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.RequestIdentity.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/logger/Logger.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/logger/struct.Logger.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSession.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionBackend.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/RequestSession.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/Session.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/SessionStorage.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/enum.CookieSessionError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSession.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSessionBackend.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/struct.Session.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/struct.SessionStorage.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/session/trait.RequestSession.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/struct.DefaultHeaders.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/struct.ErrorHandlers.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/struct.Logger.html create mode 100644 static/api/actix-web/0.7.2/actix_web/middleware/trait.Middleware.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/Field.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/Multipart.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/MultipartItem.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/enum.MultipartItem.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/struct.Field.html create mode 100644 static/api/actix-web/0.7.2/actix_web/multipart/struct.Multipart.html create mode 100644 static/api/actix-web/0.7.2/actix_web/param/FromParam.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/param/Params.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/param/struct.Params.html create mode 100644 static/api/actix-web/0.7.2/actix_web/param/trait.FromParam.html create mode 100644 static/api/actix-web/0.7.2/actix_web/payload/Payload.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/payload/PayloadBuffer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/payload/struct.Payload.html create mode 100644 static/api/actix-web/0.7.2/actix_web/payload/struct.PayloadBuffer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/All.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/AllPredicate.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Any.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/AnyPredicate.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Connect.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Delete.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Get.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Head.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Header.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Host.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Method.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Not.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Options.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Patch.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Post.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Predicate.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Put.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/Trace.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.All.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Any.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Connect.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Delete.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Get.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Head.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Header.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Host.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Method.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Not.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Options.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Patch.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Post.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Put.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/fn.Trace.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/struct.AllPredicate.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/struct.AnyPredicate.html create mode 100644 static/api/actix-web/0.7.2/actix_web/pred/trait.Predicate.html create mode 100644 static/api/actix-web/0.7.2/actix_web/resource/Resource.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/resource/struct.Resource.html create mode 100644 static/api/actix-web/0.7.2/actix_web/route/Route.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/route/struct.Route.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/ResourceDef.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/ResourceInfo.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/ResourceType.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/Router.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/enum.ResourceType.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/struct.ResourceDef.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/struct.ResourceInfo.html create mode 100644 static/api/actix-web/0.7.2/actix_web/router/struct.Router.html create mode 100644 static/api/actix-web/0.7.2/actix_web/scope/Scope.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/scope/struct.Scope.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/HttpHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/HttpHandlerTask.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/HttpServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/IntoHttpHandler.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/KeepAlive.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/PauseServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/Request.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/ResumeServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/ServerSettings.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/StopServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/enum.KeepAlive.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/fn.new.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/message/Request.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/message/struct.Request.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/new.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/settings/ServerSettings.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/settings/struct.ServerSettings.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/server/srv/HttpServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/srv/struct.HttpServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.HttpServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.PauseServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.Request.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.ResumeServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.ServerSettings.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/struct.StopServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandlerTask.html create mode 100644 static/api/actix-web/0.7.2/actix_web/server/trait.IntoHttpHandler.html create mode 100644 static/api/actix-web/0.7.2/actix_web/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.App.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Extensions.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Form.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.HttpContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.HttpRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.HttpResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Json.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Path.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Query.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Request.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.Scope.html create mode 100644 static/api/actix-web/0.7.2/actix_web/struct.State.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/TestApp.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/TestRequest.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/TestServer.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/TestServerBuilder.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/test/struct.TestApp.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/struct.TestRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/struct.TestServer.html create mode 100644 static/api/actix-web/0.7.2/actix_web/test/struct.TestServerBuilder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/trait.AsyncResponder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/trait.FromRequest.html create mode 100644 static/api/actix-web/0.7.2/actix_web/trait.HttpMessage.html create mode 100644 static/api/actix-web/0.7.2/actix_web/trait.Responder.html create mode 100644 static/api/actix-web/0.7.2/actix_web/type.FutureResponse.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/Client.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/ClientError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/ClientHandshake.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/ClientReader.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/ClientWriter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/CloseCode.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/CloseReason.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/Frame.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/FramedMessage.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/HandshakeError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/Message.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/OpCode.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/ProtocolError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/WebsocketContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/WsStream.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/WsWriter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/Client.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/ClientError.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/ClientHandshake.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/ClientReader.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/ClientWriter.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/enum.ClientError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/struct.Client.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientHandshake.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientReader.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientWriter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/context/WebsocketContext.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/context/struct.WebsocketContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.ClientError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.CloseCode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.HandshakeError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.Message.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.OpCode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/enum.ProtocolError.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/fn.handshake.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/fn.start.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/frame/Frame.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/frame/FramedMessage.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/frame/struct.Frame.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/frame/struct.FramedMessage.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/handshake.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/index.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/CloseCode.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/CloseReason.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/OpCode.t.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/enum.CloseCode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/enum.OpCode.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/proto/struct.CloseReason.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/sidebar-items.js create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/start.v.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.Client.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.ClientHandshake.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.ClientReader.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.ClientWriter.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.CloseReason.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.Frame.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.FramedMessage.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.WebsocketContext.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/struct.WsStream.html create mode 100644 static/api/actix-web/0.7.2/actix_web/ws/trait.WsWriter.html create mode 100644 static/api/actix-web/0.7.2/aliases.js create mode 100644 static/api/actix-web/0.7.2/brush.svg create mode 100644 static/api/actix-web/0.7.2/dark.css create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorContext.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorFuture.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorStream.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContext.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContextParts.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Handler.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Message.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.MessageResponse.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ResponseChannel.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.WrapStream.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Actor.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorContext.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorFuture.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorStream.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.AsyncContext.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ContextFutureSpawner.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Handler.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Message.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Supervised.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.SystemService.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapFuture.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapStream.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.FromParam.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.Handler.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/error/trait.ResponseError.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/fs/trait.StaticFileConfig.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.AsHeaderName.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.IntoHeaderName.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.IdentityPolicy.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.RequestIdentity.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/middleware/session/trait.RequestSession.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/middleware/trait.Middleware.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/pred/trait.Predicate.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandler.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandlerTask.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/server/trait.IntoHttpHandler.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/trait.AsyncResponder.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/trait.FromRequest.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/trait.HttpMessage.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/trait.Responder.js create mode 100644 static/api/actix-web/0.7.2/implementors/actix_web/ws/trait.WsWriter.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/clone/trait.Clone.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/cmp/trait.Eq.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/cmp/trait.Ord.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialEq.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialOrd.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/convert/trait.AsRef.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/convert/trait.From.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/convert/trait.Into.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/default/trait.Default.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/fmt/trait.Debug.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/fmt/trait.Display.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/hash/trait.Hash.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/marker/trait.Copy.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/marker/trait.Send.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/marker/trait.Sync.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.Deref.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.DerefMut.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/ops/drop/trait.Drop.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/ops/index/trait.Index.js create mode 100644 static/api/actix-web/0.7.2/implementors/core/str/trait.FromStr.js create mode 100644 static/api/actix-web/0.7.2/implementors/failure/trait.Fail.js create mode 100644 static/api/actix-web/0.7.2/implementors/futures/future/trait.Future.js create mode 100644 static/api/actix-web/0.7.2/implementors/futures/stream/trait.Stream.js create mode 100644 static/api/actix-web/0.7.2/implementors/std/io/trait.Read.js create mode 100644 static/api/actix-web/0.7.2/implementors/std/io/trait.Write.js create mode 100644 static/api/actix-web/0.7.2/implementors/tokio_io/async_read/trait.AsyncRead.js create mode 100644 static/api/actix-web/0.7.2/implementors/tokio_io/async_write/trait.AsyncWrite.js create mode 100644 static/api/actix-web/0.7.2/light.css create mode 100644 static/api/actix-web/0.7.2/main.js create mode 100644 static/api/actix-web/0.7.2/normalize.css create mode 100644 static/api/actix-web/0.7.2/rustdoc.css create mode 100644 static/api/actix-web/0.7.2/search-index.js create mode 100644 static/api/actix-web/0.7.2/settings.css create mode 100644 static/api/actix-web/0.7.2/settings.html create mode 100644 static/api/actix-web/0.7.2/settings.js create mode 100644 static/api/actix-web/0.7.2/src/actix_web/application.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/body.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/connector.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/parser.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/pipeline.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/request.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/response.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/client/writer.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/context.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/de.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/error.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/extensions.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/extractor.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/fs.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/handler.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/accept.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/accept_charset.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/accept_language.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/allow.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/cache_control.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/content_disposition.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/content_language.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/content_range.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/content_type.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/date.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/etag.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/expires.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/if_match.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/if_modified_since.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/if_none_match.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/if_range.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/if_unmodified_since.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/last_modified.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/common/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/charset.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/encoding.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/entity.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/httpdate.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/header/shared/quality_item.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/helpers.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/httpcodes.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/httpmessage.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/httprequest.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/httpresponse.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/info.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/json.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/lib.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/cors.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/csrf.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/defaultheaders.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/errhandlers.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/identity.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/logger.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/middleware/session.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/multipart.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/param.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/payload.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/pipeline.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/pred.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/resource.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/route.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/router.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/scope.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/de.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/key.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/pair.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/part.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/value.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/channel.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/error.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/h1.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/h1decoder.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/h1writer.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/h2.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/h2writer.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/helpers.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/input.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/message.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/output.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/settings.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/srv.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/server/worker.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/test.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/uri.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/with.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/client.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/context.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/frame.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/mask.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/mod.rs.html create mode 100644 static/api/actix-web/0.7.2/src/actix_web/ws/proto.rs.html create mode 100644 static/api/actix-web/0.7.2/storage.js create mode 100644 static/api/actix-web/0.7.2/theme.js create mode 100644 static/api/actix-web/0.7.2/wheel.svg create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ActorContext.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ActorFuture.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ActorResponse.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ActorStream.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Arbiter.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ArbiterService.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/AsyncContext.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Handler.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Message.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Recipient.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/RecipientRequest.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Request.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/Response.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/ResponseFuture.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/SpawnHandle.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/StreamHandler.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/SyncContext.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/System.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/WrapStream.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/index.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connect.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connector.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectorError.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolve.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolver.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ResolverError.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/TcpConnector.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/enum.ResolverError.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/index.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/sidebar-items.js create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Connect.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolve.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolver.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.Connector.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.ConnectorError.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/sidebar-items.js create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/ProcessSignals.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Signal.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/SignalType.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Subscribe.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/enum.SignalType.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/index.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/sidebar-items.js create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Signal.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Subscribe.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/AndThen.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/DropErr.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/Either.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/Finish.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/FromErr.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/FutureResult.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/FutureWrap.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/IntoActorFuture.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/Map.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/MapErr.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamAndThen.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFinish.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFold.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMap.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMapErr.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamThen.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamTimeout.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/StreamWrap.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/Then.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/Timeout.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/enum.Either.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/err.v.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/fn.err.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/fn.ok.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/fn.result.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_future.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_stream.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/index.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/ok.v.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/result.v.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/sidebar-items.js create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.AndThen.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.DropErr.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Finish.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FromErr.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureResult.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureWrap.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Map.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.MapErr.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamAndThen.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFinish.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFold.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMap.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMapErr.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamThen.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamTimeout.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamWrap.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Then.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Timeout.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/trait.IntoActorFuture.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_future.v.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_stream.v.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/Execute.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/StartActor.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/StopArbiter.t.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/index.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/sidebar-items.js create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.Execute.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StartActor.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StopArbiter.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.ActorResponse.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.Arbiter.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.Recipient.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.RecipientRequest.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.Request.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.Response.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.SpawnHandle.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.SyncContext.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/struct.System.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.ActorContext.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.ActorFuture.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.ActorStream.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.ArbiterService.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.AsyncContext.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.Handler.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.Message.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.StreamHandler.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/trait.WrapStream.html create mode 100644 static/api/actix-web/stable/actix_web/actix/actix/type.ResponseFuture.html create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorContext.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorFuture.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorStream.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.AsyncContext.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Handler.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Message.js create mode 100644 static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.WrapStream.js create mode 100644 static/api/actix-web/stable/implementors/core/cmp/trait.Ord.js create mode 100644 static/api/actix-web/stable/implementors/core/cmp/trait.PartialOrd.js diff --git a/static/api/actix-web/0.7.2/.lock b/static/api/actix-web/0.7.2/.lock new file mode 100755 index 0000000..e69de29 diff --git a/static/api/actix-web/0.7.2/COPYRIGHT.txt b/static/api/actix-web/0.7.2/COPYRIGHT.txt new file mode 100644 index 0000000..c69861a --- /dev/null +++ b/static/api/actix-web/0.7.2/COPYRIGHT.txt @@ -0,0 +1,59 @@ +These documentation pages include resources by third parties. This copyright +file applies only to those resources. The following third party resources are +included, and carry their own copyright notices and license terms: + +* Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff): + + Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ + with Reserved Font Name Fira Sans. + + Copyright (c) 2014, Telefonica S.A. + + Licensed under the SIL Open Font License, Version 1.1. + See FiraSans-LICENSE.txt. + +* Heuristica (Heuristica-Italic.woff): + + Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. + Utopia is either a registered trademark or trademark of Adobe Systems + Incorporated in the United States and/or other countries. Used under + license. + + Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + + Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), + with Reserved Font Name Heuristica. + + Licensed under the SIL Open Font License, Version 1.1. + See Heuristica-LICENSE.txt. + +* rustdoc.css, main.js, and playpen.js: + + Copyright 2015 The Rust Developers. + Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or + the MIT license (LICENSE-MIT.txt) at your option. + +* normalize.css: + + Copyright (c) Nicolas Gallagher and Jonathan Neal. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff): + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark + of Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceCodePro-LICENSE.txt. + +* Source Serif Pro (SourceSerifPro-Regular.woff, SourceSerifPro-Bold.woff): + + Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with + Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of + Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceSerifPro-LICENSE.txt. + +This copyright file is intended to be distributed with rustdoc output. diff --git a/static/api/actix-web/0.7.2/FiraSans-LICENSE.txt b/static/api/actix-web/0.7.2/FiraSans-LICENSE.txt new file mode 100644 index 0000000..b4a3967 --- /dev/null +++ b/static/api/actix-web/0.7.2/FiraSans-LICENSE.txt @@ -0,0 +1,99 @@ +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/api/actix-web/0.7.2/FiraSans-Medium.woff b/static/api/actix-web/0.7.2/FiraSans-Medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..5627227744ae5b2ffb83e632cb32b237428c8962 GIT binary patch literal 89883 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%0Dk_#%Y{EcU_rFP4oA@FKf8}T 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�*_BmXVd#S5mW8HYZxRlrC2S%~o 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 literal 0 HcmV?d00001 diff --git a/static/api/actix-web/0.7.2/Heuristica-LICENSE.txt b/static/api/actix-web/0.7.2/Heuristica-LICENSE.txt new file mode 100644 index 0000000..dd85e40 --- /dev/null +++ b/static/api/actix-web/0.7.2/Heuristica-LICENSE.txt @@ -0,0 +1,101 @@ +Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. +Utopia is either a registered trademark or trademark of Adobe Systems +Incorporated in the United States and/or other countries. Used under +license. + +Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + +Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), +with Reserved Font Name Heuristica. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/api/actix-web/0.7.2/LICENSE-APACHE.txt b/static/api/actix-web/0.7.2/LICENSE-APACHE.txt new file mode 100644 index 0000000..16fe87b --- /dev/null +++ b/static/api/actix-web/0.7.2/LICENSE-APACHE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/static/api/actix-web/0.7.2/LICENSE-MIT.txt b/static/api/actix-web/0.7.2/LICENSE-MIT.txt new file mode 100644 index 0000000..31aa793 --- /dev/null +++ b/static/api/actix-web/0.7.2/LICENSE-MIT.txt @@ -0,0 +1,23 @@ +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/static/api/actix-web/0.7.2/SourceCodePro-LICENSE.txt b/static/api/actix-web/0.7.2/SourceCodePro-LICENSE.txt new file mode 100644 index 0000000..0754257 --- /dev/null +++ b/static/api/actix-web/0.7.2/SourceCodePro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/api/actix-web/0.7.2/SourceCodePro-Regular.woff b/static/api/actix-web/0.7.2/SourceCodePro-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..5576670903aea90041f214624c8dd1176fdf6081 GIT binary patch literal 55472 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 N>i-Ak^d1HP005RYhx7md literal 0 HcmV?d00001 diff --git a/static/api/actix-web/0.7.2/SourceCodePro-Semibold.woff b/static/api/actix-web/0.7.2/SourceCodePro-Semibold.woff new file mode 100644 index 0000000000000000000000000000000000000000..ca972a11dc428209dd66212e382b884f168e83f7 GIT binary patch literal 55360 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

d?~=$y_z?$}zMRxO zImHizpRZJsZy!zWyqwKG*63gEnLi{Wz6C=F3SOWhHsoU({j72yzg5I!YWQVqe5=IY zvVOV@a4U{Ewb6diJ+!XmAqs7)c^Q)brl>7FFp zuXO@c)&`H;YnNsSOEc+_d4^jE5yOp@YzQ_?lO7i#ir+q^GCKu3$x5mF2*r$%oEr@H8Oj2W!FkG@I%< zkTUM5)!1rjLnqmClzeVZiK!S9)h~ZHdMK+pfNO0LUZJO~&Pcivp_T9|q^hb&o7(+Q z50B6}uCs*xj{U}J^Wm7H>QOc?-z^GZ%R>wsBc@l)y3p1^CTyeL8cbeC`@SoJ_E7%85M#I6dE#0;l9)WlXaMRSAzve5&?R_M( zml0k)@!@D*VcueIwtDLnvud{5ic~?-zEM+rA0PwOB{rclWG|PP>c>}K-H0f%W)%Wz zizsZ~14&S1PYuS#NjMir>+1M<7k>qJd(mG0Os6?T9s<1;g|4NlxEwc{JS8Mk#COW2 z$% z*_0k;=@+SF7U1l5nKc6M<^GNC55dLVGM*5dj2-Z!n>B)_xXP*?NcFqu${aR|fadw% zEQz)aeDzamp=MqO(y%?aN+Kp-)haJt!&$auNH#?mdUn(-EUNbz?5ZrzOabS@fW4c} zsTs2KJv)*y6SFz_i_il`(n=N$9ZCO*zmz2Qj$#=DLjM{US~;=)a;VF0PC=7-tD6}< z2{d^TqQk|Ale;`N@(oY}lW@}na*q_Gn*V=YN zr(@f;ZQH*8tvau#&eM9CRqJim924K5oLD;J#Qhj{?=f1o%FbBykPE(o&&gfg(I>>N zjBi`0!zi&E-{`_92_X2eRGZVW06d8w-T8>ouc)4SM+?T8!+z>})e&Pn-cgnn8vMS2#5HzhD}t?Xesevlt^;eq~Ir z1aW|68vWU~4$DVJSP`NTI0y#rp35wpQ23md^JI&+kWOijoLC=g*%T(809;jpp2M$x zwX5}6?%f06ej7jhp+h*8cMZ66?P-I~U4OC*S$EvCNrgendC&wzkafCRW3JbEVrlaK zq;77iPr&jE*v|+%nafP>5+QOR@nZ!$GJu~wwiFsKyZJ4LowM)Dw0oa@HbYw|Xe9mk z0h%G33sEZooeksOhWw@G9Ro!@`;?jM<*I28W9h$@sTIp~kw}X__}*a$`@IbmE-H=m z2v>={!k&)%W{3&NoX3`54HdLQV3POQsw-ql@|?%av1t_j(qMK^fG~+&Edmuw_@`&s z8Q@gQWv%x<%b+W%g}UI5Q-+p=g!7jVCJyVxaZA@Qm{oty51>fg!LVDqMDJ?&J#E@8 zW?pbbz4^7BC2UP}F&@fvQ6rZ@FgfZ=)1j}1qAL`h_WVaa^McbR!8vGYqnc21LY4SC zK{B;eF)wuCGPLfI!r7Nd*|%gS8(CwKnSFH9@P>rev1q@KMOba&{gsq9*wa_1Y_;Km z&h&J4AS?YDlL=ZHimSDFA83nwnd(vsqAz(G7E;*mZ&drlv#^Yl#Oy)vLRui(d9bNiU zowY2mi@bj|P8(StGICfZ%|@&EiW%AGO`pD9fJ zZ+P{8_oCJ|1bT$O(C!kwvvVIZ4!KoR^lDF2cU_=u;&%0%rfGL6sQFK`)O)9tJgBmf zCpl%&yG9gl>c(@HhPko31NUPXtUHXY85f%MF*Y!!8?xMTHBGN?&hvE|cEM{EPC#qe zdFS|&+ce!!*UU}Nj#0Z-h!ybh@25&1lO~A?#9h~7awvH7A0XH%UtM6E-QYi56dLq( zug!|It2Cad>P&1OeU$kLVik5%TFtCp>;FkPHkvGU1Jctc& zyRNB>(DY-9G35W-VWnHBvlc08jzU->G#MVUmykl7wPDvDrDpMXNp$mLIQB=GvmhtH zsnMZ6{r&DBLuxdmfeI^-*>SuJX-!Z{h=-L6Pp?`ZDc-V%c|w;(uXaR<(JHyTmmY3v zb;EH4at-qGl3rm#)JSfP3sz@5rwGj}nyxHJIQr3_(-&@@mjr`r1na+RH{J#X-|IAq zr~NpS#qLmM;9`lS52%~u0(m<(O1P@{6+m5eVg6EX5?{*kj!_~oDIwUnLozbkF}R*D z2=neCy$|w7@&HR2Q^)fP{B$JofF48O#2&F=M!1C%!2W|nZT2DOV>1I?FzB<#>Igs*lC9D7hT7pLZ zYE{w%0?++%CoVv=U#_=cuhW-!AmsT0mqk22i2KN+ZQ-h(w7MhbXg2x$30GoDhwzPD z8sNDeRqK;LiC(6E5W^S@TM0PjlqGyqlWhxuxWMk$$8_|Uum@muU-;b10a;lD64A5Q#F&ya3Z*>9Vqkv#0Y0V8_v z0}TBFc7pXs(jK(x0I%7eYOc;{j#i6Srp#szm~d=gerG#ly9YZ1k5%>Xjlu(7NKV3I z!J}}@`Ixkge@nX&tA=NOK#HV#^31yXD)F_02z2lAv8qBW;$}sxjbQbI*1}>{US8c1 zFJ=BIPWG{F^E~t@{4JI`xoDA~cx?BlIUS-UY^FFEx<9OYI0NgW>{gT#SK}&8m8Yx{y03ib-!YSz?X+fuOgs z9yn9;j8J5SkGhE<4~p?^sxeQ2-|)%rCBYE6h$?iu^~;2hF;SFV_Gz(l*Q3^5RQFQq zUQT5khAa;Tr;{6=&d+_pBKD3;%KOZ*l=fN2$fLbFyh^OmQ1UV!L~?02!t98pDYVzVyihg*T^>>#x;4RJ?{wj-5{VS#@+~oKK1OH=GOv z>mq9FmX6!(pR4Mwjpsq-8o562i3zBXfEey z6Dizd)v^8&#hU}p8;(lKoSySYv=NpIhY*>S3Q^~3mhneF>fw_)?Ky0Zzb z)%^KxX{|hG!)Q~Xx^iM&tzP)sm+c%;Y{SE)F)(MzrTRDEQ}sq;CWm$901xTlIy^_$ zn9o`;ooKcR|5D)YGhWl?qz^?D-lSheY@sSK0gx+5=!|071Cj^KsO z5!}_D0Y5!cKa2!E^6>&Q-$ys-y{TKe$8u;N0$YbIFE(ZN{YN^U!DIg@ixmOAd=CG> zP_xIABWYi$ux`8)o_1cygW_Z`0_}V*xmK8;C*q0fT*_CiMyAOSKS?kD@fWjk(yhW* zz(vlYD0g%P8<-rR7a*?s=KA7U!Z%%Tkog}L#ufC{=>n;o5b@2z&j~DjOtn4Xej)UY znr7^0qQZU~J=c5@5cP*WhTyeIe&PsI=7?T&JK+ziGfWK-(G%>tGzUT>R7hZ*_-nRX zyI8dGYUP&5xo>Pq+_YJ2QGC6k)7XAw#HQ8bvv+c`iPPId&;l@v`7c`^%HbjMj}3!i z8+VtqjpdL7x`o!Ck1KEr1l?Cbq{N3#m%4R~!~xA(l1)X~Z}PO&uC>#d_wy;=Ati@^ zSYFr**g)Kh?b~)4jvV&~B|IsqUN7Gx_*=!}OgqKZbc8wa2&320N}~7WZhbk5%2P9H z)ym>sM2}&?+QGhTI2<4R2ds>$C=%#&UA^Rp+nE)RWDccj@rk2`7oSc$0?AU8wde)U znkQjBBc9dY95Ay$nidwzM`-&`D{LRU2^UbjOzvZwRT9WH!3n3xD6NB))17?IlU$6KdCU~~-2FqwPq!)gpRa7(vF);51?r7MG zHFKcS^6QnDOQ7Fkqs(cCl`+gdw*1W6k6a{Ud8%*1@fn-}M=D%s&B01Gp8N?7!=Z)W zUVJDM9vfsLI6EyY5PFz~B5Dg|$P=^~#%vx$(SI}b+Rnx4hLBBEhI1lK#IA9#g${G6 z;|b)6SeVkFMp(Kz;{Du_C;db(1MQ+_+y4eTgO05KdQC<5t-hUZNWZA@gsu&I=>_VW z5E_&2CgWna!sxX{oSxnIQM4kT;N+X-QRbWd;-777i(pCUi>}Wie3sUXL3CeM*liH# zKGr;D=l*XgrHab=%ZmbYT9xy^yE=xTb0j|s*wqoD>RLlB{jP}71$?9xqfhpz9*SK- zP5Z!D)|NV)TbzL`k|!6}s#Z<@!GhhUWL)BqZx{4;+@c3&3J?Jpp8zj%ICpjUf(E4u zI~@6kRsLXLExp&rY<4=M54GI;legQKZo-A?>$_cJzb3mPlc)7wjwcLdPg>izL|d@fW>aC55pRuM=S1C_hJS6!6aCINr|z%(sITsSe80dKp1hBJiFUf--=d7m zVHR9y9R*$qT5+#!!Y)mrY}L*P$Y;PZc8wq%OT0Ix`jtm)2(NJi8TG;{#xcciEdJj%ca9G}C5gET+RYMu0Gj}`X20h;&Y0-)Tikr= zobi%q7EQwX?Zo6v_`DomNvb#HR{CGuGV|r4wRXpaH20>vp<01AE#UAMs)7h2IY_2C z=E>p*0iln~E*eg4x^8`VguJcyJ4QUfeYFYMoHKsG^h)~=D6v+weRpr zbj}y2Zhy9w@Adh9j`Z!7&jbs;NzE_6(IN(_uio@+mttGMbI&D)ZkvLnY&;DsR?_is ztR!)n_o`GWn$OV+K2cBU!M{V&RlZnu--1u+J(Zgo&$O`c?mjGu;9+Pc9;z}3RXxc(6+v|33oLiETJi29;D zF+Kw>LnX}hZd( zznop2-MKwg^%gl&4Tc&;r%TXb-mRlVYq*CZTDbx`8I*lz&tg2XOMJeWBPXm6ya@Cw z(x=(DjRt>XCeUM)^Xm9?Y~4Il0P63cfd;eMQL7|)+nD@t-LGjQ%y1If;z1Y9a z8bvk_;Xv&UXY-ZH{;^>|bGDo$UecEa5FJ+7RI@juaqUmk)picW^m9!9X_nn{y_G`T zb;jSRI*S_;EF2K7yT{;>$I-@cWSs(Tx2`=O6CqDjdoZ>w@-avSPJ0K1He6IC&+gWyTSJJ2a~h3y1E#hs;9Vs_fhe z?ew76QP~s*{l_Qyqo%Yqg7H*|%GwO#G=fmw?yrHIc^w*d{d+g*hw??8vBblD_8dZK zI~~KY6QDi9KfUe4t2HJLml(wz+ls_?5MPLs2H4B4e?1JQsDT0IF(ioOHA8HysNK8z`=5E*5enzjo{(;(=$<7#)B9O~aCm(d_KAv)igyilT zO8B1SvkMQl#%Us)RJRl_%&&9kJ-)J-VXJg7@T6OORWe3#i?B#_qfC)zS#Od4#5U0x z1W1~gSE01XG&&0gHl4>LI%K0>V{9y@Qa+zT&bO6HPq=5^R^h}U;OWhgQ=MIv73+~R zD5$shFhQljaHe}IvaIx*zdN#aTO54dif|h%i29i#nmx1$*}kaStR+B^U%cNCm?GWG!Fx zV!x*Ex6Lg62x)|=fBEK;4jcH#R@(-t+mp4t^~cY*gB*=wZs5(WFZ_=5z1MX#GLr*i z1|)3MY;-?_Scmt{wl8iak&>qoU5HMobyP8SHqNZMO3iwdPCI3 ztGLmZi(lBJlf`+ah93>U-1J}}(Fui`L-!>|`@-OS8Xess#$tqFe?O!O9MLX0Uiv92Q0 zsXtp-B#pz(fRkid~SC*&D%e)q&>j79hT$D|3G>h$?&mx(f7QZ z8th$Thremd`>&d*#{qU@q#ME{^7k~VeXK;00)o#)p8_=O4YJywzxhNN@(END_ZOkU z;OLWp0CE@zPsc#)?Q%I|)Ng8i$JrCyb)`$knRcUx>w<KbJB{o?tt?B6YQWo`iiX?9|UDUX1NFD$kvv%p4MRW_{edrb7~8(aM+9 zVY(r8&=FnG1Q2F*K4Ef7mtf|8uuL4{b-ZdAy@JHK$omuH2>q$a_`BYd`pDf-|MU49 ziGhC5ix0Tbz+?Nzp7YMo%QAIHjVF>3e1tc&VeGCafa;mu?S}NVonojv>ZU9DR{Z{d zK37lLH9cnU$NcRHW0?BaD!|aT#_E?@^(X9Jq+hlvm;^v+^VFa? zLt2$~wdIZM^Taz3D)WH_Sg;&R(iA(zM%FJw3X??(jFn;Q)VUe?IsPJ9%wXj9}pOapD7BS;R03OCJ(gkHEb|Ng=i>ewB2K2cKu^k zvEdfF9im4&xQPh;&2ZQRbKO%R8>&8zRUTnd9&e5oC04*Si)|Rp`3oVNP=pm)RV-VP zx}f~1fB(dWr`Ar~$64~Ro%erxW26~+X1?75+L3HuaojGMTQv(j*ICpRNx@dlztj8s zo!=qcz+&_nH*sZIfe2Nx1+A7=mhtqU>7q6`T!9F3B9GoQ{QH{t>B@S4ZENx!Wx^t&sGJUU2Xnxr%n2%exWVH1jDRxX-oialzJ?|IooWsp5g_yQvSYZ@SEgR*q zbHkxFWW;N%&5M=|L#2wlKl z0~sljT*1&~gFdc^{TC{@>_IP+;r*og6x%;}I zBShAwZr9gPBV%s;5MK#?!^N|nqx3IH_O(NcB9~7~SD4?pR*>omKJd zW_y!n*=ED{zLM9_yWW;AA{r3yCAQ4MjzZ)3I2u&bPmR2 z^3n2O1C~IdUUyK@VrOsS*oD6@WT?UJi3TT&`Pq(Q{~S%hdCf4^xz(XvrmGB2CPjEp z!v1?;o+a?txdC9jW@`V1{1=&QaMD=&zvdEtl2z`j6aJ_=<_P|YPtex%F71Dg9$^BZ zt0q{Pd8?VTS^Th_>i-;}Tms&pT7MZSqkZ5xqVP@I1T@pny>a&M{9yn1VEugmef@~N zy*V-XV$_-8$}17MS;ZPnpwrn;y(x|OMIZ7@56(2qp^>HQRw7bW^^{*|vZ>Jdv+rcu zi}M0{6_PvGOn`%jyV$fXf|9>+%(^Z}F45#)smcO32+fpam~r#QxjQKFmnE)yu;R2c`+ExNZ=3uze}Ou`QWb&1 zPpj~RIWHet;21BU^s27FlWE9uxFsXN!ln$hxLF58OGg#MpA;+WQV!Dp$t{3#(+iic_gA z=?p`a0i$f)tsdxn4M>yedx*pIFip}lp4L;j26twDfLMW`9W%VOvU4b53!h5F3IsraEgL;$&b;t z{>h^x(xYLCZ}(sDgH4yrOa2?dmSI!u0wVvE9SLs9{4rqZ}}_Hrjt&x?+(z7$3C-&o66ye=>Sjlro^<_1~Bl8#P9wkkEifyBk#ko7KR)th(S zSg3e&0@$!tE)DL|Do=?aM2!%FIs51KX+H&hmyg&w;FjYW^fdiqdq&J|@Rgrr7w0+{ zcR_1{zCOuy5`E}26?JM!BS9FCv?OV-nZpa0>B|%j^T@)d2m4BNZAupkC*{Ntsli1e zyb|63C4}!mgz6mZRns?nUNpL+Qvip>ioZadAr*g$CJ18LFlZDu_uvJ9Dv`-Mlz+YV+7ikb#+jcXT5mfU~!N@5U)+ znL+67ue!(T4WWF;;0*qp9oRP`9{G8!Ow4dT-bvnVj7i0kEJiSfA@3fAIc1(eVm!zi zd*TgM!dky#tZvx3$exUr4)3r3czMiP`G?i75v-~md7;V6)^*kH

-nf}~4k^lgCB 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 d&xU0F2O@Pp9zf@HhMqK>r}n002Tsb2$J2 literal 0 HcmV?d00001 diff --git a/static/api/actix-web/0.7.2/SourceSerifPro-Bold.woff b/static/api/actix-web/0.7.2/SourceSerifPro-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..ac1b1b3a0bb7a673d52495743d8f86fd55188b44 GIT binary patch literal 48720 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

9E8XSY2)E(Vq?32Bxtg&VLnC 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 QJ&hM32>KVoT7vcf00b!O^8f$< literal 0 HcmV?d00001 diff --git a/static/api/actix-web/0.7.2/SourceSerifPro-LICENSE.txt b/static/api/actix-web/0.7.2/SourceSerifPro-LICENSE.txt new file mode 100644 index 0000000..b77d653 --- /dev/null +++ b/static/api/actix-web/0.7.2/SourceSerifPro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/api/actix-web/0.7.2/SourceSerifPro-Regular.woff b/static/api/actix-web/0.7.2/SourceSerifPro-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e8c43b852e10e1556268d6c17b47bd0644d6edec GIT binary patch literal 49960 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%0AHnr$&HP)99eOG;&C)H59oX7tVW8CpZqiv(kJ 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 T#x!RM8#a#Gm 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 T`>xjor2he>K@jvWkwJRWB`#{9 literal 0 HcmV?d00001 diff --git a/static/api/actix-web/0.7.2/actix_web/App.t.html b/static/api/actix-web/0.7.2/actix_web/App.t.html new file mode 100644 index 0000000..e8e9e0a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/App.t.html @@ -0,0 +1,10 @@ + + + + + + +

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/AsyncResponder.t.html b/static/api/actix-web/0.7.2/actix_web/AsyncResponder.t.html new file mode 100644 index 0000000..232acc8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/AsyncResponder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncResponder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Binary.t.html b/static/api/actix-web/0.7.2/actix_web/Binary.t.html new file mode 100644 index 0000000..1c1a229 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Binary.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Binary.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Body.t.html b/static/api/actix-web/0.7.2/actix_web/Body.t.html new file mode 100644 index 0000000..ce03346 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Body.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Body.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Either.t.html b/static/api/actix-web/0.7.2/actix_web/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Extensions.t.html b/static/api/actix-web/0.7.2/actix_web/Extensions.t.html new file mode 100644 index 0000000..222cdeb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Extensions.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Extensions.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Form.t.html b/static/api/actix-web/0.7.2/actix_web/Form.t.html new file mode 100644 index 0000000..00f1c92 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Form.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Form.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/FromRequest.t.html b/static/api/actix-web/0.7.2/actix_web/FromRequest.t.html new file mode 100644 index 0000000..0d34855 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/FromRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.FromRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/FutureResponse.t.html b/static/api/actix-web/0.7.2/actix_web/FutureResponse.t.html new file mode 100644 index 0000000..67de650 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/FutureResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.FutureResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/HttpContext.t.html b/static/api/actix-web/0.7.2/actix_web/HttpContext.t.html new file mode 100644 index 0000000..f14d988 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/HttpContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/HttpMessage.t.html b/static/api/actix-web/0.7.2/actix_web/HttpMessage.t.html new file mode 100644 index 0000000..8eb5be9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/HttpMessage.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.HttpMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/HttpRequest.t.html b/static/api/actix-web/0.7.2/actix_web/HttpRequest.t.html new file mode 100644 index 0000000..140a78b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/HttpRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/HttpResponse.t.html b/static/api/actix-web/0.7.2/actix_web/HttpResponse.t.html new file mode 100644 index 0000000..2a125c6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/HttpResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Json.t.html b/static/api/actix-web/0.7.2/actix_web/Json.t.html new file mode 100644 index 0000000..13b6772 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Json.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Json.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Path.t.html b/static/api/actix-web/0.7.2/actix_web/Path.t.html new file mode 100644 index 0000000..d7e4222 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Path.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Path.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Query.t.html b/static/api/actix-web/0.7.2/actix_web/Query.t.html new file mode 100644 index 0000000..8965f6c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Query.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Query.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Request.t.html b/static/api/actix-web/0.7.2/actix_web/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Responder.t.html b/static/api/actix-web/0.7.2/actix_web/Responder.t.html new file mode 100644 index 0000000..949d3c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Responder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Responder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/Scope.t.html b/static/api/actix-web/0.7.2/actix_web/Scope.t.html new file mode 100644 index 0000000..e6ad4f5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/Scope.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Scope.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/State.t.html b/static/api/actix-web/0.7.2/actix_web/State.t.html new file mode 100644 index 0000000..0fb03b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/State.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.State.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Actor.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Actor.t.html new file mode 100644 index 0000000..8342037 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Actor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Actor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorContext.t.html new file mode 100644 index 0000000..6e5d57c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorFuture.t.html new file mode 100644 index 0000000..a5df857 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorResponse.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorResponse.t.html new file mode 100644 index 0000000..d7ea7f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ActorResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorState.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorState.t.html new file mode 100644 index 0000000..921db5a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorState.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ActorState.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorStream.t.html new file mode 100644 index 0000000..489af55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ActorStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Addr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Addr.t.html new file mode 100644 index 0000000..820139b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Addr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Addr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Arbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Arbiter.t.html new file mode 100644 index 0000000..5f7e124 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Arbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Arbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ArbiterService.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ArbiterService.t.html new file mode 100644 index 0000000..9c27960 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ArbiterService.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ArbiterService.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/AsyncContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/AsyncContext.t.html new file mode 100644 index 0000000..4f09fc1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/AsyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Condition.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Condition.t.html new file mode 100644 index 0000000..9829937 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Condition.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Condition.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Context.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Context.t.html new file mode 100644 index 0000000..78c8c05 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Context.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Context.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ContextFutureSpawner.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ContextFutureSpawner.t.html new file mode 100644 index 0000000..f964b3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ContextFutureSpawner.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ContextFutureSpawner.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Handler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Handler.t.html new file mode 100644 index 0000000..6aa19e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Handler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/MailboxError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/MailboxError.t.html new file mode 100644 index 0000000..b1b1418 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/MailboxError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.MailboxError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Message.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Message.t.html new file mode 100644 index 0000000..d1d248b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Message.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Message.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/MessageResult.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/MessageResult.t.html new file mode 100644 index 0000000..5ee9876 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/MessageResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MessageResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Recipient.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Recipient.t.html new file mode 100644 index 0000000..35b8874 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Recipient.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Recipient.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/RecipientRequest.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/RecipientRequest.t.html new file mode 100644 index 0000000..f683ad1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/RecipientRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.RecipientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Request.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Response.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Response.t.html new file mode 100644 index 0000000..9a85f97 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Response.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Response.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseActFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseActFuture.t.html new file mode 100644 index 0000000..94f768e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseActFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ResponseActFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseFuture.t.html new file mode 100644 index 0000000..e0e4c06 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/ResponseFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ResponseFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Running.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Running.t.html new file mode 100644 index 0000000..63d2185 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Running.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Running.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/SendError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/SendError.t.html new file mode 100644 index 0000000..d046519 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/SendError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SendError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/SpawnHandle.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/SpawnHandle.t.html new file mode 100644 index 0000000..adeee55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/SpawnHandle.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SpawnHandle.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/StreamHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/StreamHandler.t.html new file mode 100644 index 0000000..90647e7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/StreamHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.StreamHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervised.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervised.t.html new file mode 100644 index 0000000..cae5db3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervised.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Supervised.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervisor.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervisor.t.html new file mode 100644 index 0000000..fb3c8c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/Supervisor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Supervisor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncArbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncArbiter.t.html new file mode 100644 index 0000000..6eaf976 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncArbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SyncArbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncContext.t.html new file mode 100644 index 0000000..de0d7a6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/SyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/System.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/System.t.html new file mode 100644 index 0000000..1426538 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/System.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.System.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/SystemService.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/SystemService.t.html new file mode 100644 index 0000000..ba01680 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/SystemService.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.SystemService.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapFuture.t.html new file mode 100644 index 0000000..fcae8df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapStream.t.html new file mode 100644 index 0000000..259580b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/WrapStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/index.html new file mode 100644 index 0000000..90e5ae1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/index.html @@ -0,0 +1,19 @@ +actix_web::actix::actix::actors - Rust

Module actix_web::actix::actix::actors[]

Helper actors

+

Modules

+ + + + + + + + +
resolver +

DNS resolver and connector utility actor

+ +
signal +

An actor implementation of Unix signal handling

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connect.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html new file mode 100644 index 0000000..88ce27b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectAddr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connector.t.html new file mode 100644 index 0000000..2aa154d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Connector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.Connector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectorError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectorError.t.html new file mode 100644 index 0000000..db9f3da --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolve.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolve.t.html new file mode 100644 index 0000000..cdbc08d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolve.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolve.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolver.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolver.t.html new file mode 100644 index 0000000..df985bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/Resolver.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolver.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ResolverError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ResolverError.t.html new file mode 100644 index 0000000..7b07e5e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/ResolverError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResolverError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/TcpConnector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/TcpConnector.t.html new file mode 100644 index 0000000..0729a94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/TcpConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TcpConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/enum.ResolverError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/enum.ResolverError.html new file mode 100644 index 0000000..9d774b5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/enum.ResolverError.html @@ -0,0 +1,30 @@ +actix_web::actix::actix::actors::resolver::ResolverError - Rust

Enum actix_web::actix::actix::actors::resolver::ResolverError[]

pub enum ResolverError {
+    Resolver(String),
+    InvalidInput(&'static str),
+    Timeout,
+    IoError(Error),
+}

+ Variants

+

Failed to resolve the hostname

+

Address is invalid

+

Connecting took too long

+

Connection io error

+
+

+ Trait Implementations +

+

impl Debug for ResolverError

Formats the value using the given formatter. Read more

+

impl Display for ResolverError

Formats the value using the given formatter. Read more

+

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/index.html new file mode 100644 index 0000000..e061480 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/index.html @@ -0,0 +1,93 @@ +actix_web::actix::actix::actors::resolver - Rust

Module actix_web::actix::actix::actors::resolver[]

DNS resolver and connector utility actor

+

Example

+
+use actix::prelude::*;
+use actix::actors::resolver;
+
+fn main() {
+    System::run(|| {
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost"))       // <- resolve "localhost"
+                    .then(|addrs| {
+                        println!("RESULT: {:?}", addrs);
+                        Ok::<_, ()>(())
+                    })
+        });
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost:5000"))  // <- connect to a "localhost"
+                    .then(|stream| {
+                        println!("RESULT: {:?}", stream);
+                        Ok::<_, ()>(())
+                    })
+       });
+   });
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + +
Connect + +
ConnectAddr + +
Resolve + +
Resolver + +
TcpConnector +

Tcp stream connector

+ +

Enums

+ + + + +
ResolverError + +

Type Definitions

+ + + + + + + + +
Connector + [
Deprecated
] +
ConnectorError + [
Deprecated
] +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/sidebar-items.js new file mode 100644 index 0000000..b4723a7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ResolverError",""]],"struct":[["Connect",""],["ConnectAddr",""],["Resolve",""],["Resolver",""],["TcpConnector","Tcp stream connector"]],"type":[["Connector",""],["ConnectorError",""]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Connect.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Connect.html new file mode 100644 index 0000000..6bd1ed8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Connect.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::actors::resolver::Connect - Rust

Struct actix_web::actix::actix::actors::resolver::Connect[]

pub struct Connect { /* fields omitted */ }
+

+ Methods +

+

impl Connect

Set connect timeout

+

By default timeout is set to a 1 second.

+
+

+ Trait Implementations +

+

impl Eq for Connect

impl Message for Connect

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Connect

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html new file mode 100644 index 0000000..7358143 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html @@ -0,0 +1,18 @@ +actix_web::actix::actix::actors::resolver::ConnectAddr - Rust

Struct actix_web::actix::actix::actors::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);
+

+ Trait Implementations +

+

impl Eq for ConnectAddr

impl Message for ConnectAddr

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolve.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolve.html new file mode 100644 index 0000000..dd249d0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolve.html @@ -0,0 +1,22 @@ +actix_web::actix::actix::actors::resolver::Resolve - Rust

Struct actix_web::actix::actix::actors::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }
+

+ Methods +

+

impl Resolve

+

+ Trait Implementations +

+

impl Eq for Resolve

impl Message for Resolve

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Resolve

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolver.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolver.html new file mode 100644 index 0000000..339e362 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.Resolver.html @@ -0,0 +1,36 @@ +actix_web::actix::actix::actors::resolver::Resolver - Rust

Struct actix_web::actix::actix::actors::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }
+

+ Methods +

+

impl Resolver

+

+ Trait Implementations +

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for Resolver

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+

impl Supervised for Resolver

Method called when supervisor restarting failed actor

+

impl Default for Resolver

Returns the "default value" for a type. Read more

+

impl Actor for Resolver

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html new file mode 100644 index 0000000..9170272 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::actors::resolver::TcpConnector - Rust

Struct actix_web::actix::actix::actors::resolver::TcpConnector[]

pub struct TcpConnector { /* fields omitted */ }

Tcp stream connector

+
+

+ Methods +

+

impl TcpConnector

+

+ Trait Implementations +

+

impl ActorFuture for TcpConnector

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.Connector.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.Connector.html new file mode 100644 index 0000000..3a347d6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.Connector.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::actors::resolver::Connector - Rust

Type Definition actix_web::actix::actix::actors::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.ConnectorError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.ConnectorError.html new file mode 100644 index 0000000..c30b5f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/resolver/type.ConnectorError.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::actors::resolver::ConnectorError - Rust

Type Definition actix_web::actix::actix::actors::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/sidebar-items.js new file mode 100644 index 0000000..49ca6e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"mod":[["resolver","DNS resolver and connector utility actor"],["signal","An actor implementation of Unix signal handling"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html new file mode 100644 index 0000000..c8dd85f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultSignalsHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/ProcessSignals.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/ProcessSignals.t.html new file mode 100644 index 0000000..2d485f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/ProcessSignals.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ProcessSignals.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Signal.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Signal.t.html new file mode 100644 index 0000000..28776b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Signal.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Signal.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/SignalType.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/SignalType.t.html new file mode 100644 index 0000000..5240b33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/SignalType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SignalType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Subscribe.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Subscribe.t.html new file mode 100644 index 0000000..ceac0d3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/Subscribe.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Subscribe.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/enum.SignalType.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/enum.SignalType.html new file mode 100644 index 0000000..0c4c4f0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/enum.SignalType.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::actors::signal::SignalType - Rust

Enum actix_web::actix::actix::actors::signal::SignalType[]

pub enum SignalType {
+    Hup,
+    Int,
+    Term,
+    Quit,
+    Child,
+}

Different types of process signals

+

+ Variants

+

SIGHUP

+

SIGINT

+

SIGTERM

+

SIGQUIT

+

SIGCHILD

+
+

+ Trait Implementations +

+

impl Message for SignalType

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for SignalType

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SignalType

Formats the value using the given formatter. Read more

+

impl Copy for SignalType

+

+ Auto Trait Implementations +

+
+

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/index.html new file mode 100644 index 0000000..d1939ee --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/index.html @@ -0,0 +1,100 @@ +actix_web::actix::actix::actors::signal - Rust

Module actix_web::actix::actix::actors::signal[]

An actor implementation of Unix signal handling

+

This module implements asynchronous signal handling for Actix. For each +signal ProcessSignals actor sends Signal message to all subscriber. To +subscriber, send Subscribe message to ProcessSignals actor.

+

Examples

+
+use actix::actors::signal;
+use actix::prelude::*;
+
+struct Signals;
+
+impl Actor for Signals {
+    type Context = Context<Self>;
+}
+
+// Shutdown system on and of `SIGINT`, `SIGTERM`, `SIGQUIT` signals
+impl Handler<signal::Signal> for Signals {
+    type Result = ();
+
+    fn handle(&mut self, msg: signal::Signal, _: &mut Context<Self>) {
+        match msg.0 {
+            signal::SignalType::Int => {
+                println!("SIGINT received, exiting");
+                System::current().stop();
+            }
+            signal::SignalType::Hup => {
+                println!("SIGHUP received, reloading");
+            }
+            signal::SignalType::Term => {
+                println!("SIGTERM received, stopping");
+                System::current().stop();
+            }
+            signal::SignalType::Quit => {
+                println!("SIGQUIT received, exiting");
+                System::current().stop();
+            }
+            _ => (),
+        }
+    }
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        // Start signals handler
+        let addr = Signals.start();
+
+        // send SIGTERM
+        std::thread::spawn(move || {
+            // emulate SIGNTERM
+            addr.do_send(signal::Signal(signal::SignalType::Term));
+        });
+    });
+
+    std::process::exit(0);
+}
+

Structs

+ + + + + + + + + + + + + + + + +
DefaultSignalsHandler +

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+ +
ProcessSignals +

An actor implementation of Unix signal handling

+ +
Signal +

Process signal message

+ +
Subscribe +

Subscribe to process signals.

+ +

Enums

+ + + + +
SignalType +

Different types of process signals

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/sidebar-items.js new file mode 100644 index 0000000..9c95d85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["SignalType","Different types of process signals"]],"struct":[["DefaultSignalsHandler","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals."],["ProcessSignals","An actor implementation of Unix signal handling"],["Signal","Process signal message"],["Subscribe","Subscribe to process signals."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html new file mode 100644 index 0000000..999bba1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html @@ -0,0 +1,26 @@ +actix_web::actix::actix::actors::signal::DefaultSignalsHandler - Rust

Struct actix_web::actix::actix::actors::signal::DefaultSignalsHandler[]

pub struct DefaultSignalsHandler;

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+
+

+ Trait Implementations +

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

+

impl Actor for DefaultSignalsHandler

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html new file mode 100644 index 0000000..30890e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::actors::signal::ProcessSignals - Rust

Struct actix_web::actix::actix::actors::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

+
+

+ Trait Implementations +

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for ProcessSignals

Method is called during service initialization.

+

Construct and srtart system service

+

Get actor's address from system registry

+

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

+

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

+

impl Actor for ProcessSignals

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Signal.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Signal.html new file mode 100644 index 0000000..7534af1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Signal.html @@ -0,0 +1,25 @@ +actix_web::actix::actix::actors::signal::Signal - Rust

Struct actix_web::actix::actix::actors::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

+
+

+ Trait Implementations +

+

impl Message for Signal

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Signal

Formats the value using the given formatter. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Signal

impl Sync for Signal

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Subscribe.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Subscribe.html new file mode 100644 index 0000000..aa346f5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/actors/signal/struct.Subscribe.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::actors::signal::Subscribe - Rust

Struct actix_web::actix::actix::actors::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

+
+

+ Trait Implementations +

+

impl Message for Subscribe

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorContext.t.html new file mode 100644 index 0000000..6e5d57c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorFuture.t.html new file mode 100644 index 0000000..a5df857 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorResponse.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorResponse.t.html new file mode 100644 index 0000000..d7ea7f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ActorResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorStream.t.html new file mode 100644 index 0000000..489af55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ActorStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Arbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Arbiter.t.html new file mode 100644 index 0000000..5f7e124 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Arbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Arbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ArbiterService.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ArbiterService.t.html new file mode 100644 index 0000000..9c27960 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ArbiterService.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ArbiterService.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContext.t.html new file mode 100644 index 0000000..4f09fc1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContextParts.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContextParts.t.html new file mode 100644 index 0000000..0ff7efd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/AsyncContextParts.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncContextParts.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextFut.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextFut.t.html new file mode 100644 index 0000000..ba6b660 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextFut.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ContextFut.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextParts.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextParts.t.html new file mode 100644 index 0000000..cc85b54 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ContextParts.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ContextParts.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Envelope.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Envelope.t.html new file mode 100644 index 0000000..5483dbd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Envelope.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Envelope.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Handler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Handler.t.html new file mode 100644 index 0000000..6aa19e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Handler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Mailbox.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Mailbox.t.html new file mode 100644 index 0000000..64b047f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Mailbox.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Mailbox.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Message.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Message.t.html new file mode 100644 index 0000000..d1d248b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Message.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Message.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/MessageResponse.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/MessageResponse.t.html new file mode 100644 index 0000000..cc8611b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/MessageResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.MessageResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Recipient.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Recipient.t.html new file mode 100644 index 0000000..35b8874 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Recipient.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Recipient.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/RecipientRequest.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/RecipientRequest.t.html new file mode 100644 index 0000000..f683ad1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/RecipientRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.RecipientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Registry.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Registry.t.html new file mode 100644 index 0000000..40d746c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Registry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Registry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Request.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Response.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Response.t.html new file mode 100644 index 0000000..9a85f97 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/Response.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Response.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseChannel.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseChannel.t.html new file mode 100644 index 0000000..6526468 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseChannel.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ResponseChannel.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseFuture.t.html new file mode 100644 index 0000000..e0e4c06 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ResponseFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ResponseFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SpawnHandle.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SpawnHandle.t.html new file mode 100644 index 0000000..adeee55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SpawnHandle.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SpawnHandle.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/StreamHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/StreamHandler.t.html new file mode 100644 index 0000000..90647e7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/StreamHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.StreamHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SyncContext.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SyncContext.t.html new file mode 100644 index 0000000..de0d7a6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/System.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/System.t.html new file mode 100644 index 0000000..1426538 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/System.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.System.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SystemRegistry.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SystemRegistry.t.html new file mode 100644 index 0000000..a406706 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/SystemRegistry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SystemRegistry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ToEnvelope.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ToEnvelope.t.html new file mode 100644 index 0000000..e923d8d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/ToEnvelope.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ToEnvelope.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/WrapStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/WrapStream.t.html new file mode 100644 index 0000000..259580b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/WrapStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/index.html new file mode 100644 index 0000000..23af355 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/index.html @@ -0,0 +1,19 @@ +actix_web::actix::actix::dev::actors - Rust

Module actix_web::actix::actix::dev::actors[]

Helper actors

+

Modules

+ + + + + + + + +
resolver +

DNS resolver and connector utility actor

+ +
signal +

An actor implementation of Unix signal handling

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connect.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectAddr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectAddr.t.html new file mode 100644 index 0000000..88ce27b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectAddr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectAddr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connector.t.html new file mode 100644 index 0000000..2aa154d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Connector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.Connector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectorError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectorError.t.html new file mode 100644 index 0000000..db9f3da --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolve.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolve.t.html new file mode 100644 index 0000000..cdbc08d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolve.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolve.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolver.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolver.t.html new file mode 100644 index 0000000..df985bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/Resolver.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolver.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ResolverError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ResolverError.t.html new file mode 100644 index 0000000..7b07e5e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/ResolverError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResolverError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/TcpConnector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/TcpConnector.t.html new file mode 100644 index 0000000..0729a94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/TcpConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TcpConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/enum.ResolverError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/enum.ResolverError.html new file mode 100644 index 0000000..c012394 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/enum.ResolverError.html @@ -0,0 +1,30 @@ +actix_web::actix::actix::dev::actors::resolver::ResolverError - Rust

Enum actix_web::actix::actix::dev::actors::resolver::ResolverError[]

pub enum ResolverError {
+    Resolver(String),
+    InvalidInput(&'static str),
+    Timeout,
+    IoError(Error),
+}

+ Variants

+

Failed to resolve the hostname

+

Address is invalid

+

Connecting took too long

+

Connection io error

+
+

+ Trait Implementations +

+

impl Display for ResolverError

Formats the value using the given formatter. Read more

+

impl Debug for ResolverError

Formats the value using the given formatter. Read more

+

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/index.html new file mode 100644 index 0000000..ce2766e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/index.html @@ -0,0 +1,93 @@ +actix_web::actix::actix::dev::actors::resolver - Rust

Module actix_web::actix::actix::dev::actors::resolver[]

DNS resolver and connector utility actor

+

Example

+
+use actix::prelude::*;
+use actix::actors::resolver;
+
+fn main() {
+    System::run(|| {
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost"))       // <- resolve "localhost"
+                    .then(|addrs| {
+                        println!("RESULT: {:?}", addrs);
+                        Ok::<_, ()>(())
+                    })
+        });
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost:5000"))  // <- connect to a "localhost"
+                    .then(|stream| {
+                        println!("RESULT: {:?}", stream);
+                        Ok::<_, ()>(())
+                    })
+       });
+   });
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + +
Connect + +
ConnectAddr + +
Resolve + +
Resolver + +
TcpConnector +

Tcp stream connector

+ +

Enums

+ + + + +
ResolverError + +

Type Definitions

+ + + + + + + + +
Connector + [
Deprecated
] +
ConnectorError + [
Deprecated
] +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/sidebar-items.js new file mode 100644 index 0000000..b4723a7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ResolverError",""]],"struct":[["Connect",""],["ConnectAddr",""],["Resolve",""],["Resolver",""],["TcpConnector","Tcp stream connector"]],"type":[["Connector",""],["ConnectorError",""]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Connect.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Connect.html new file mode 100644 index 0000000..6a0f99f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Connect.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::dev::actors::resolver::Connect - Rust

Struct actix_web::actix::actix::dev::actors::resolver::Connect[]

pub struct Connect { /* fields omitted */ }
+

+ Methods +

+

impl Connect

Set connect timeout

+

By default timeout is set to a 1 second.

+
+

+ Trait Implementations +

+

impl Message for Connect

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Connect

Formats the value using the given formatter. Read more

+

impl Eq for Connect

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.ConnectAddr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.ConnectAddr.html new file mode 100644 index 0000000..b5767d1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.ConnectAddr.html @@ -0,0 +1,18 @@ +actix_web::actix::actix::dev::actors::resolver::ConnectAddr - Rust

Struct actix_web::actix::actix::dev::actors::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);
+

+ Trait Implementations +

+

impl Message for ConnectAddr

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

+

impl Eq for ConnectAddr

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolve.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolve.html new file mode 100644 index 0000000..e58fd21 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolve.html @@ -0,0 +1,22 @@ +actix_web::actix::actix::dev::actors::resolver::Resolve - Rust

Struct actix_web::actix::actix::dev::actors::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }
+

+ Methods +

+

impl Resolve

+

+ Trait Implementations +

+

impl Message for Resolve

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Resolve

Formats the value using the given formatter. Read more

+

impl Eq for Resolve

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolver.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolver.html new file mode 100644 index 0000000..d138935 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.Resolver.html @@ -0,0 +1,36 @@ +actix_web::actix::actix::dev::actors::resolver::Resolver - Rust

Struct actix_web::actix::actix::dev::actors::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }
+

+ Methods +

+

impl Resolver

+

+ Trait Implementations +

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for Resolver

Returns the "default value" for a type. Read more

+

impl SystemService for Resolver

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+

impl Supervised for Resolver

Method called when supervisor restarting failed actor

+

impl Actor for Resolver

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.TcpConnector.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.TcpConnector.html new file mode 100644 index 0000000..3c6e631 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/struct.TcpConnector.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::actors::resolver::TcpConnector - Rust

Struct actix_web::actix::actix::dev::actors::resolver::TcpConnector[]

pub struct TcpConnector { /* fields omitted */ }

Tcp stream connector

+
+

+ Methods +

+

impl TcpConnector

+

+ Trait Implementations +

+

impl ActorFuture for TcpConnector

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.Connector.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.Connector.html new file mode 100644 index 0000000..02691bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.Connector.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::dev::actors::resolver::Connector - Rust

Type Definition actix_web::actix::actix::dev::actors::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.ConnectorError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.ConnectorError.html new file mode 100644 index 0000000..f5c8e1a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/resolver/type.ConnectorError.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::dev::actors::resolver::ConnectorError - Rust

Type Definition actix_web::actix::actix::dev::actors::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/sidebar-items.js new file mode 100644 index 0000000..49ca6e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"mod":[["resolver","DNS resolver and connector utility actor"],["signal","An actor implementation of Unix signal handling"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/DefaultSignalsHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/DefaultSignalsHandler.t.html new file mode 100644 index 0000000..c8dd85f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/DefaultSignalsHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultSignalsHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/ProcessSignals.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/ProcessSignals.t.html new file mode 100644 index 0000000..2d485f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/ProcessSignals.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ProcessSignals.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Signal.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Signal.t.html new file mode 100644 index 0000000..28776b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Signal.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Signal.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/SignalType.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/SignalType.t.html new file mode 100644 index 0000000..5240b33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/SignalType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SignalType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Subscribe.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Subscribe.t.html new file mode 100644 index 0000000..ceac0d3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/Subscribe.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Subscribe.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/enum.SignalType.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/enum.SignalType.html new file mode 100644 index 0000000..16c568e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/enum.SignalType.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::dev::actors::signal::SignalType - Rust

Enum actix_web::actix::actix::dev::actors::signal::SignalType[]

pub enum SignalType {
+    Hup,
+    Int,
+    Term,
+    Quit,
+    Child,
+}

Different types of process signals

+

+ Variants

+

SIGHUP

+

SIGINT

+

SIGTERM

+

SIGQUIT

+

SIGCHILD

+
+

+ Trait Implementations +

+

impl Message for SignalType

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Debug for SignalType

Formats the value using the given formatter. Read more

+

impl Copy for SignalType

impl Clone for SignalType

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/index.html new file mode 100644 index 0000000..2b15f56 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/index.html @@ -0,0 +1,100 @@ +actix_web::actix::actix::dev::actors::signal - Rust

Module actix_web::actix::actix::dev::actors::signal[]

An actor implementation of Unix signal handling

+

This module implements asynchronous signal handling for Actix. For each +signal ProcessSignals actor sends Signal message to all subscriber. To +subscriber, send Subscribe message to ProcessSignals actor.

+

Examples

+
+use actix::actors::signal;
+use actix::prelude::*;
+
+struct Signals;
+
+impl Actor for Signals {
+    type Context = Context<Self>;
+}
+
+// Shutdown system on and of `SIGINT`, `SIGTERM`, `SIGQUIT` signals
+impl Handler<signal::Signal> for Signals {
+    type Result = ();
+
+    fn handle(&mut self, msg: signal::Signal, _: &mut Context<Self>) {
+        match msg.0 {
+            signal::SignalType::Int => {
+                println!("SIGINT received, exiting");
+                System::current().stop();
+            }
+            signal::SignalType::Hup => {
+                println!("SIGHUP received, reloading");
+            }
+            signal::SignalType::Term => {
+                println!("SIGTERM received, stopping");
+                System::current().stop();
+            }
+            signal::SignalType::Quit => {
+                println!("SIGQUIT received, exiting");
+                System::current().stop();
+            }
+            _ => (),
+        }
+    }
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        // Start signals handler
+        let addr = Signals.start();
+
+        // send SIGTERM
+        std::thread::spawn(move || {
+            // emulate SIGNTERM
+            addr.do_send(signal::Signal(signal::SignalType::Term));
+        });
+    });
+
+    std::process::exit(0);
+}
+

Structs

+ + + + + + + + + + + + + + + + +
DefaultSignalsHandler +

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+ +
ProcessSignals +

An actor implementation of Unix signal handling

+ +
Signal +

Process signal message

+ +
Subscribe +

Subscribe to process signals.

+ +

Enums

+ + + + +
SignalType +

Different types of process signals

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/sidebar-items.js new file mode 100644 index 0000000..9c95d85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["SignalType","Different types of process signals"]],"struct":[["DefaultSignalsHandler","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals."],["ProcessSignals","An actor implementation of Unix signal handling"],["Signal","Process signal message"],["Subscribe","Subscribe to process signals."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.DefaultSignalsHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.DefaultSignalsHandler.html new file mode 100644 index 0000000..6911df3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.DefaultSignalsHandler.html @@ -0,0 +1,26 @@ +actix_web::actix::actix::dev::actors::signal::DefaultSignalsHandler - Rust

Struct actix_web::actix::actix::dev::actors::signal::DefaultSignalsHandler[]

pub struct DefaultSignalsHandler;

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+
+

+ Trait Implementations +

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

+

impl Actor for DefaultSignalsHandler

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.ProcessSignals.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.ProcessSignals.html new file mode 100644 index 0000000..4e8d9ca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.ProcessSignals.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::actors::signal::ProcessSignals - Rust

Struct actix_web::actix::actix::dev::actors::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

+
+

+ Trait Implementations +

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

+

impl SystemService for ProcessSignals

Method is called during service initialization.

+

Construct and srtart system service

+

Get actor's address from system registry

+

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

+

impl Actor for ProcessSignals

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Signal.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Signal.html new file mode 100644 index 0000000..52e0083 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Signal.html @@ -0,0 +1,25 @@ +actix_web::actix::actix::dev::actors::signal::Signal - Rust

Struct actix_web::actix::actix::dev::actors::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

+
+

+ Trait Implementations +

+

impl Message for Signal

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Signal

Formats the value using the given formatter. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Signal

impl Sync for Signal

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Subscribe.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Subscribe.html new file mode 100644 index 0000000..c051db1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/actors/signal/struct.Subscribe.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::dev::actors::signal::Subscribe - Rust

Struct actix_web::actix::actix::dev::actors::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

+
+

+ Trait Implementations +

+

impl Message for Subscribe

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/AndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/AndThen.t.html new file mode 100644 index 0000000..e6c39d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/AndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/DropErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/DropErr.t.html new file mode 100644 index 0000000..872d170 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/DropErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DropErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Either.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Finish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Finish.t.html new file mode 100644 index 0000000..ed486e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Finish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Finish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FromErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FromErr.t.html new file mode 100644 index 0000000..97ef002 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FromErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FromErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureResult.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureResult.t.html new file mode 100644 index 0000000..2925708 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureWrap.t.html new file mode 100644 index 0000000..e267ec4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/FutureWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/IntoActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/IntoActorFuture.t.html new file mode 100644 index 0000000..211e5cb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/IntoActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Map.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Map.t.html new file mode 100644 index 0000000..9009faf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Map.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Map.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/MapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/MapErr.t.html new file mode 100644 index 0000000..21f7573 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/MapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamAndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamAndThen.t.html new file mode 100644 index 0000000..bd6e6ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamAndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamAndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFinish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFinish.t.html new file mode 100644 index 0000000..da33c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFinish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFinish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFold.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFold.t.html new file mode 100644 index 0000000..b938ceb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamFold.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFold.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMap.t.html new file mode 100644 index 0000000..441690b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMapErr.t.html new file mode 100644 index 0000000..67136f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamMapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamThen.t.html new file mode 100644 index 0000000..bd638fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamTimeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamTimeout.t.html new file mode 100644 index 0000000..30bc1f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamTimeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamWrap.t.html new file mode 100644 index 0000000..59d4cbe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/StreamWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Then.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Then.t.html new file mode 100644 index 0000000..1cc8020 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Then.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Then.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Timeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Timeout.t.html new file mode 100644 index 0000000..d6412e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/Timeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Timeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/enum.Either.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/enum.Either.html new file mode 100644 index 0000000..8f72e4c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/enum.Either.html @@ -0,0 +1,40 @@ +actix_web::actix::actix::dev::fut::Either - Rust

Enum actix_web::actix::actix::dev::fut::Either[]

pub enum Either<A, B> {
+    A(A),
+    B(B),
+}

Combines two different futures yielding the same item and error +types into a single type.

+

+ Variants

+

First branch of the type

+

Second branch of the type

+
+

+ Methods +

+

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

+

This method is typically useful when combined with the Future::select2 +combinator.

+
+

+ Trait Implementations +

+

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/err.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/err.v.html new file mode 100644 index 0000000..a1c0ed9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/err.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.err.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.err.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.err.html new file mode 100644 index 0000000..212a3f0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.err.html @@ -0,0 +1,14 @@ +actix_web::actix::actix::dev::fut::err - Rust

Function actix_web::actix::actix::dev::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_err_1 = fut::err::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.ok.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.ok.html new file mode 100644 index 0000000..5bae8bc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.ok.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::dev::fut::ok - Rust

Function actix_web::actix::actix::dev::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::fut::*;
+use actix::{Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = ok::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.result.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.result.html new file mode 100644 index 0000000..ee0bc26 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.result.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::dev::fut::result - Rust

Function actix_web::actix::actix::dev::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

+

The returned future represents a computation which is finished immediately. +This can be useful with the finished and failed base future types to +convert an immediate value to a future to interoperate elsewhere.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = fut::result::<u32, u32, MyActor>(Ok(1));
+let future_of_err_2 = fut::result::<u32, u32, MyActor>(Err(2));
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_future.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_future.html new file mode 100644 index 0000000..93dfe1b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_future.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::dev::fut::wrap_future - Rust

Function actix_web::actix::actix::dev::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_stream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_stream.html new file mode 100644 index 0000000..e379f8d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/fn.wrap_stream.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::dev::fut::wrap_stream - Rust

Function actix_web::actix::actix::dev::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/index.html new file mode 100644 index 0000000..89988b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/index.html @@ -0,0 +1,215 @@ +actix_web::actix::actix::dev::fut - Rust

Module actix_web::actix::actix::dev::fut[]

Custom Future implementation with Actix support

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AndThen +

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+ +
DropErr + +
Finish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
FromErr +

Future for the from_err combinator, changing the error type of a future.

+ +
FutureResult +

A future representing a value that is immediately ready.

+ +
FutureWrap + +
Map +

Future for the map combinator, changing the type of a future.

+ +
MapErr +

Future for the map_err combinator, changing the error type of a future.

+ +
StreamAndThen +

A stream combinator which chains a computation onto values produced by a +stream.

+ +
StreamFinish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
StreamFold +

A future used to collect all the results of a stream into one generic type.

+ +
StreamMap +

A stream combinator which will change the type of a stream from one +type to another.

+ +
StreamMapErr +

A stream combinator which will change the error type of a stream from one +type to another.

+ +
StreamThen +

A stream combinator which chains a computation onto each item produced by a +stream.

+ +
StreamTimeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +
StreamWrap + +
Then +

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+ +
Timeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +

Enums

+ + + + +
Either +

Combines two different futures yielding the same item and error +types into a single type.

+ +

Traits

+ + + + +
IntoActorFuture +

Class of types which can be converted into an actor future.

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + +
err +

Creates a "leaf future" from an immediate value of a failed computation.

+ +
ok +

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+ +
result +

Creates a new "leaf future" which will resolve with the given result.

+ +
wrap_future +

Converts normal future into ActorFuture

+ +
wrap_stream +

Converts normal stream into ActorStream

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/ok.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/ok.v.html new file mode 100644 index 0000000..dca3201 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/ok.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ok.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/result.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/result.v.html new file mode 100644 index 0000000..94765e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/result.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.result.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/sidebar-items.js new file mode 100644 index 0000000..4cde84b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Either","Combines two different futures yielding the same item and error types into a single type."]],"fn":[["err","Creates a \"leaf future\" from an immediate value of a failed computation."],["ok","Creates a \"leaf future\" from an immediate value of a finished and successful computation."],["result","Creates a new \"leaf future\" which will resolve with the given result."],["wrap_future","Converts normal future into `ActorFuture`"],["wrap_stream","Converts normal stream into `ActorStream`"]],"struct":[["AndThen","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully."],["DropErr",""],["Finish","A combinator used to convert stream into a future, future resolves when stream completes."],["FromErr","Future for the `from_err` combinator, changing the error type of a future."],["FutureResult","A future representing a value that is immediately ready."],["FutureWrap",""],["Map","Future for the `map` combinator, changing the type of a future."],["MapErr","Future for the `map_err` combinator, changing the error type of a future."],["StreamAndThen","A stream combinator which chains a computation onto values produced by a stream."],["StreamFinish","A combinator used to convert stream into a future, future resolves when stream completes."],["StreamFold","A future used to collect all the results of a stream into one generic type."],["StreamMap","A stream combinator which will change the type of a stream from one type to another."],["StreamMapErr","A stream combinator which will change the error type of a stream from one type to another."],["StreamThen","A stream combinator which chains a computation onto each item produced by a stream."],["StreamTimeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."],["StreamWrap",""],["Then","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome."],["Timeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."]],"trait":[["IntoActorFuture","Class of types which can be converted into an actor future."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.AndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.AndThen.html new file mode 100644 index 0000000..9121d65 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.AndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::AndThen - Rust

Struct actix_web::actix::actix::dev::fut::AndThen[]

#[must_use = "futures do nothing unless polled"] +
pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+

This is created by the Future::and_then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.DropErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.DropErr.html new file mode 100644 index 0000000..ecbbf9c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.DropErr.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::dev::fut::DropErr - Rust

Struct actix_web::actix::actix::dev::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Finish.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Finish.html new file mode 100644 index 0000000..d449d43 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Finish.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::dev::fut::Finish - Rust

Struct actix_web::actix::actix::dev::fut::Finish[]

#[must_use = "streams do nothing unless polled"] +
pub struct Finish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the Stream::finish method.

+
+

+ Methods +

+

impl<S> Finish<S>

+

+ Trait Implementations +

+

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

impl<S> Future for Finish<S> where
    S: Stream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FromErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FromErr.html new file mode 100644 index 0000000..6642963 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FromErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::dev::fut::FromErr - Rust

Struct actix_web::actix::actix::dev::fut::FromErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

+

This is created by the Future::from_err method.

+
+

+ Trait Implementations +

+

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureResult.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureResult.html new file mode 100644 index 0000000..b056291 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureResult.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::FutureResult - Rust

Struct actix_web::actix::actix::dev::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"] +
pub struct FutureResult<T, E, A> { /* fields omitted */ }

A future representing a value that is immediately ready.

+

Created by the result function.

+
+

+ Trait Implementations +

+

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

+

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureWrap.html new file mode 100644 index 0000000..c5af8b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.FutureWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::dev::fut::FutureWrap - Rust

Struct actix_web::actix::actix::dev::fut::FutureWrap[]

pub struct FutureWrap<F, A> where
    F: Future
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Map.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Map.html new file mode 100644 index 0000000..39cccf2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Map.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::dev::fut::Map - Rust

Struct actix_web::actix::actix::dev::fut::Map[]

#[must_use = "futures do nothing unless polled"] +
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

+

This is created by the ActorFuture::map method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.MapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.MapErr.html new file mode 100644 index 0000000..d93ba15 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.MapErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::dev::fut::MapErr - Rust

Struct actix_web::actix::actix::dev::fut::MapErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

+

This is created by the Future::map_err method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamAndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamAndThen.html new file mode 100644 index 0000000..a6ed3ac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamAndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamAndThen - Rust

Struct actix_web::actix::actix::dev::fut::StreamAndThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a +stream.

+

This structure is produced by the ActorStream::and_then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFinish.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFinish.html new file mode 100644 index 0000000..ccef7fb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFinish.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamFinish - Rust

Struct actix_web::actix::actix::dev::fut::StreamFinish[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFinish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the ActorStream::finish method.

+
+

+ Trait Implementations +

+

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFold.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFold.html new file mode 100644 index 0000000..e7e02eb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamFold.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::dev::fut::StreamFold - Rust

Struct actix_web::actix::actix::dev::fut::StreamFold[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

+

This future is returned by the ActorStream::fold method.

+
+

+ Trait Implementations +

+

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMap.html new file mode 100644 index 0000000..49b0405 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMap.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamMap - Rust

Struct actix_web::actix::actix::dev::fut::StreamMap[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMap<S, F> { /* fields omitted */ }

A stream combinator which will change the type of a stream from one +type to another.

+

This is produced by the ActorStream::map method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMapErr.html new file mode 100644 index 0000000..f778a7a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamMapErr.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamMapErr - Rust

Struct actix_web::actix::actix::dev::fut::StreamMapErr[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMapErr<S, F> { /* fields omitted */ }

A stream combinator which will change the error type of a stream from one +type to another.

+

This is produced by the ActorStream::map_err method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamThen.html new file mode 100644 index 0000000..b20631f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamThen - Rust

Struct actix_web::actix::actix::dev::fut::StreamThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a +stream.

+

This structure is produced by the ActorStream::then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamTimeout.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamTimeout.html new file mode 100644 index 0000000..b7d60ac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamTimeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::StreamTimeout - Rust

Struct actix_web::actix::actix::dev::fut::StreamTimeout[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamWrap.html new file mode 100644 index 0000000..2530080 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.StreamWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::dev::fut::StreamWrap - Rust

Struct actix_web::actix::actix::dev::fut::StreamWrap[]

pub struct StreamWrap<S, A> where
    S: Stream
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Auto Trait Implementations +

+
+

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Then.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Then.html new file mode 100644 index 0000000..0879feb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Then.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::Then - Rust

Struct actix_web::actix::actix::dev::fut::Then[]

#[must_use = "futures do nothing unless polled"] +
pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+

This is created by the Future::then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Timeout.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Timeout.html new file mode 100644 index 0000000..a1e4684 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/struct.Timeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::dev::fut::Timeout - Rust

Struct actix_web::actix::actix::dev::fut::Timeout[]

#[must_use = "futures do nothing unless polled"] +
pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.html new file mode 100644 index 0000000..288aaa4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.html @@ -0,0 +1,33 @@ +actix_web::actix::actix::dev::fut::IntoActorFuture - Rust

Trait actix_web::actix::actix::dev::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ + type Future: ActorFuture; + type Item; + type Error; + type Actor: Actor; + fn into_future(self) -> Self::Future; +}

Class of types which can be converted into an actor future.

+

This trait is very similar to the IntoIterator trait and is intended to be +used in a very similar fashion.

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

Consumes this object and produces a future.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_future.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_future.v.html new file mode 100644 index 0000000..12394f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_future.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_future.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_stream.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_stream.v.html new file mode 100644 index 0000000..b39ce83 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/fut/wrap_stream.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_stream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/index.html new file mode 100644 index 0000000..700fb94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/index.html @@ -0,0 +1,84 @@ +actix_web::actix::actix::dev - Rust

Module actix_web::actix::actix::dev[]

The actix prelude for library developers

+

The purpose of this module is to alleviate imports of many common actix +traits by adding a glob import to the top of actix heavy modules:

+ +
+use actix::dev::*;
+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + +
ContextFut + +
ContextParts + +
Envelope + +
Mailbox + +
Registry +

Actors registry

+ +
SystemRegistry +

System wide actors registry

+ +

Traits

+ + + + + + + + + + + + + + + + +
AsyncContextParts + +
MessageResponse +

Trait which defines message response

+ +
ResponseChannel +

Trait defines message response channel

+ +
ToEnvelope +

Converter trait, packs message to suitable envelope

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/Execute.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/Execute.t.html new file mode 100644 index 0000000..761750d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/Execute.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Execute.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StartActor.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StartActor.t.html new file mode 100644 index 0000000..f45c3dd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StartActor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StartActor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StopArbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StopArbiter.t.html new file mode 100644 index 0000000..a7cdee1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/StopArbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StopArbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/index.html new file mode 100644 index 0000000..e404959 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/index.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::dev::msgs - Rust

Module actix_web::actix::actix::dev::msgs[]

Actix system messages

+

Structs

+ + + + + + + + + + + + +
Execute +

Execute function in arbiter's thread

+ +
StartActor +

Start actor in arbiter's thread

+ +
StopArbiter +

Stop arbiter execution

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/sidebar-items.js new file mode 100644 index 0000000..0cff758 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Execute","Execute function in arbiter's thread"],["StartActor","Start actor in arbiter's thread"],["StopArbiter","Stop arbiter execution"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.Execute.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.Execute.html new file mode 100644 index 0000000..064092e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.Execute.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::dev::msgs::Execute - Rust

Struct actix_web::actix::actix::dev::msgs::Execute[]

pub struct Execute<I = (), E = ()>(_)
where
    E: 'static + Send,
    I: 'static + Send
;

Execute function in arbiter's thread

+

Arbiter` actor handles Execute message.

+

Example

+
+use actix::prelude::*;
+
+struct MyActor {
+    addr: Addr<Arbiter>,
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        self.addr
+            .do_send(actix::msgs::Execute::new(|| -> Result<(), ()> {
+                // do something
+                // ...
+                Ok(())
+            }));
+    }
+}
+fn main() {}
+
+

+ Methods +

+

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

+
+

+ Trait Implementations +

+

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

+

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StartActor.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StartActor.html new file mode 100644 index 0000000..4326a8d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StartActor.html @@ -0,0 +1,20 @@ +actix_web::actix::actix::dev::msgs::StartActor - Rust

Struct actix_web::actix::actix::dev::msgs::StartActor[]

pub struct StartActor<A>(_)
where
    A: Actor
;

Start actor in arbiter's thread

+
+

+ Methods +

+

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

+

+ Trait Implementations +

+

impl<A> Message for StartActor<A> where
    A: Actor

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StopArbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StopArbiter.html new file mode 100644 index 0000000..50a842b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/msgs/struct.StopArbiter.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::dev::msgs::StopArbiter - Rust

Struct actix_web::actix::actix::dev::msgs::StopArbiter[]

pub struct StopArbiter(pub i32);

Stop arbiter execution

+
+

+ Trait Implementations +

+

impl Message for StopArbiter

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/sidebar-items.js new file mode 100644 index 0000000..a7df54b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["ContextFut",""],["ContextParts",""],["Envelope",""],["Mailbox",""],["Registry","Actors registry"],["SystemRegistry","System wide actors registry"]],"trait":[["AsyncContextParts",""],["MessageResponse","Trait which defines message response"],["ResponseChannel","Trait defines message response channel"],["ToEnvelope","Converter trait, packs message to suitable envelope"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ActorResponse.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ActorResponse.html new file mode 100644 index 0000000..3f4470f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ActorResponse.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::dev::ActorResponse - Rust

Struct actix_web::actix::actix::dev::ActorResponse[]

pub struct ActorResponse<A, I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<A, I, E> ActorResponse<A, I, E> where
    A: Actor

Create response

+

Create async response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for ActorResponse<A, I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<A, I, E> !Send for ActorResponse<A, I, E>

impl<A, I, E> !Sync for ActorResponse<A, I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Arbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Arbiter.html new file mode 100644 index 0000000..9fb3a71 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Arbiter.html @@ -0,0 +1,53 @@ +actix_web::actix::actix::dev::Arbiter - Rust

Struct actix_web::actix::actix::dev::Arbiter[]

pub struct Arbiter { /* fields omitted */ }

Event loop controller

+

Arbiter controls event loop in it's thread. Each arbiter runs in separate +thread. Arbiter provides several api for event loop access. Each arbiter +can belongs to specific System actor.

+

By default, a panic in an Arbiter does not stop the rest of the System, +unless the panic is in the System actor. Users of Arbiter can opt into +shutting down the system on panic by using Arbiter::builder() and enabling +stop_system_on_panic.

+
+

+ Methods +

+

impl Arbiter

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Returns current arbiter's name

+

Returns current arbiter's address

+

This function returns arbiter's registry,

+

Executes a future on the current thread.

+

Executes a future on the current thread.

+

Start new arbiter and then start actor in created arbiter. +Returns Addr<Syn, A> of created actor.

+
+

+ Trait Implementations +

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Drop for Arbiter

Executes the destructor for this type. Read more

+

impl Actor for Arbiter

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Arbiter

impl Sync for Arbiter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextFut.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextFut.html new file mode 100644 index 0000000..09fce85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextFut.html @@ -0,0 +1,10 @@ +actix_web::actix::actix::dev::ContextFut - Rust

Struct actix_web::actix::actix::dev::ContextFut[]

pub struct ContextFut<A, C> where
    A: Actor<Context = C>,
    C: AsyncContextParts<A>, 
{ /* fields omitted */ }
+

+ Methods +

+

impl<A, C> ContextFut<A, C> where
    A: Actor<Context = C>,
    C: AsyncContextParts<A>, 

Important traits for &'a mut R

+

+ Auto Trait Implementations +

+
+

impl<A, C> !Send for ContextFut<A, C>

impl<A, C> !Sync for ContextFut<A, C>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextParts.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextParts.html new file mode 100644 index 0000000..4146bc8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.ContextParts.html @@ -0,0 +1,22 @@ +actix_web::actix::actix::dev::ContextParts - Rust

Struct actix_web::actix::actix::dev::ContextParts[]

pub struct ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }
+

+ Methods +

+

impl<A> ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Create new ContextParts instance

+

Initiate stop process for actor execution

+

Actor could prevent stopping by returning false from +Actor::stopping() method.

+

Terminate actor execution

+

Actor execution state

+

Is context waiting for future completion

+

Handle of the running future

+

Spawn new future to this context.

+

Spawn new future to this context and wait future completion.

+

During wait period actor does not receive any messages.

+

Cancel previously scheduled future.

+

+

+ Auto Trait Implementations +

+
+

impl<A> !Send for ContextParts<A>

impl<A> !Sync for ContextParts<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Envelope.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Envelope.html new file mode 100644 index 0000000..c29713a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Envelope.html @@ -0,0 +1,10 @@ +actix_web::actix::actix::dev::Envelope - Rust

Struct actix_web::actix::actix::dev::Envelope[]

pub struct Envelope<A>(_)
where
    A: Actor
;
+

+ Methods +

+

impl<A> Envelope<A> where
    A: Actor

+

+ Auto Trait Implementations +

+
+

impl<A> Send for Envelope<A>

impl<A> !Sync for Envelope<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Mailbox.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Mailbox.html new file mode 100644 index 0000000..3d183d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Mailbox.html @@ -0,0 +1,15 @@ +actix_web::actix::actix::dev::Mailbox - Rust

Struct actix_web::actix::actix::dev::Mailbox[]

pub struct Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }
+

+ Methods +

+

impl<A> Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Trait Implementations +

+

impl<A> Default for Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for Mailbox<A>

impl<A> Sync for Mailbox<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Recipient.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Recipient.html new file mode 100644 index 0000000..6bb3d0c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Recipient.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::dev::Recipient - Rust

Struct actix_web::actix::actix::dev::Recipient[]

pub struct Recipient<M> where
    M: Message + Message + Send,
    <M as Message>::Result: Send
{ /* fields omitted */ }

Recipient type allows to send one specific message to an actor.

+

You can get recipient with Addr<_, _>::recipient() method. +It is possible to use Clone::clone() method to get cloned recipient.

+
+

+ Methods +

+

impl<M> Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Send message

+

Deliver message even if recipient's mailbox is full

+

Try send message

+

This method fails if actor's mailbox is full or closed. This method +register current task in receivers queue.

+

Send message and asynchronously wait for response.

+

Communication channel to the actor is bounded. if returned Request +object get dropped, message cancels.

+
+

+ Trait Implementations +

+

impl<M> Clone for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<M> Eq for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

impl<M> PartialEq<Recipient<M>> for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<M> Hash for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for Recipient<M>

impl<M> !Sync for Recipient<M>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.RecipientRequest.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.RecipientRequest.html new file mode 100644 index 0000000..079e2ae --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.RecipientRequest.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::dev::RecipientRequest - Rust

Struct actix_web::actix::actix::dev::RecipientRequest[]

#[must_use = "future do nothing unless polled"] +
pub struct RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send
{ /* fields omitted */ }

RecipientRequest is a Future which represents asynchronous message +sending process.

+
+

+ Methods +

+

impl<M> RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<M> Future for RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for RecipientRequest<M>

impl<M> !Sync for RecipientRequest<M>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Registry.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Registry.html new file mode 100644 index 0000000..debafc8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Registry.html @@ -0,0 +1,77 @@ +actix_web::actix::actix::dev::Registry - Rust

Struct actix_web::actix::actix::dev::Registry[]

pub struct Registry { /* fields omitted */ }

Actors registry

+

Actor can register itself as a service. Service can be defined as +ArbiterService which is unique per arbiter or SystemService which is +unique per system.

+

If arbiter service is used outside of runnig arbiter, it panics.

+

Example

+
+use actix::prelude::*;
+
+#[derive(Message)]
+struct Ping;
+
+#[derive(Default)]
+struct MyActor1;
+
+impl Actor for MyActor1 {
+    type Context = Context<Self>;
+}
+impl actix::Supervised for MyActor1 {}
+
+impl ArbiterService for MyActor1 {
+   fn service_started(&mut self, ctx: &mut Context<Self>) {
+      println!("Service started");
+   }
+}
+
+impl Handler<Ping> for MyActor1 {
+   type Result = ();
+
+   fn handle(&mut self, _: Ping, ctx: &mut Context<Self>) {
+      println!("ping");
+   }
+}
+
+struct MyActor2;
+
+impl Actor for MyActor2 {
+   type Context = Context<Self>;
+
+   fn started(&mut self, _: &mut Context<Self>) {
+      // get MyActor1 addres from the registry
+      let act = Arbiter::registry().get::<MyActor1>();
+      act.do_send(Ping);
+   }
+}
+
+
+fn main() {
+    // initialize system
+    let code = System::run(|| {
+
+        // Start MyActor1 in new Arbiter
+        Arbiter::start(|_| {
+            MyActor2
+        });
+    });
+}
+
+

+ Methods +

+

impl Registry

Query registry for specific actor. Returns address of the actor. +If actor is not registered, starts new actor and +return address of newly created actor.

+

Add new actor to the registry by address, panic if actor is already running

+
+

+ Trait Implementations +

+

impl Clone for Registry

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Registry

impl !Sync for Registry

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Request.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Request.html new file mode 100644 index 0000000..8388cce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Request.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::dev::Request - Rust

Struct actix_web::actix::actix::dev::Request[]

#[must_use = "You have to wait on request otherwise Message wont be delivered"] +
pub struct Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ /* fields omitted */ }

Request is a Future which represents asynchronous message sending +process.

+
+

+ Methods +

+

impl<A, M> Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<A, M> Future for Request<A, M> where
    A: Handler<M>,
    M: Message + Send,
    <A as Actor>::Context: ToEnvelope<A, M>,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, M> Send for Request<A, M> where
    A: Send,
    M: Send,
    <M as Message>::Result: Send

impl<A, M> Sync for Request<A, M> where
    A: Sync,
    M: Sync,
    <M as Message>::Result: Send

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Response.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Response.html new file mode 100644 index 0000000..3b7d0b4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.Response.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::dev::Response - Rust

Struct actix_web::actix::actix::dev::Response[]

pub struct Response<I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<I, E> Response<I, E>

Create async response

+

Create response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for Response<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<I, E> !Send for Response<I, E>

impl<I, E> !Sync for Response<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SpawnHandle.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SpawnHandle.html new file mode 100644 index 0000000..647bd0d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SpawnHandle.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::dev::SpawnHandle - Rust

Struct actix_web::actix::actix::dev::SpawnHandle[]

pub struct SpawnHandle(_);

Spawned future handle. Could be used for cancelling spawned future.

+
+

+ Methods +

+

impl SpawnHandle

Get next handle

+
+

+ Trait Implementations +

+

impl Debug for SpawnHandle

Formats the value using the given formatter. Read more

+

impl Copy for SpawnHandle

impl Default for SpawnHandle

Returns the "default value" for a type. Read more

+

impl Clone for SpawnHandle

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Eq for SpawnHandle

impl PartialEq<SpawnHandle> for SpawnHandle

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for SpawnHandle

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for SpawnHandle

impl Sync for SpawnHandle

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SyncContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SyncContext.html new file mode 100644 index 0000000..d9c2959 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SyncContext.html @@ -0,0 +1,15 @@ +actix_web::actix::actix::dev::SyncContext - Rust

Struct actix_web::actix::actix::dev::SyncContext[]

pub struct SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync actor execution context

+
+

+ Trait Implementations +

+

impl<A> ActorContext for SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 

Stop current actor. SyncContext creates and starts new actor.

+

Terminate actor execution. SyncContext creates and starts new actor.

+

Actor execution state

+

impl<A, M> ToEnvelope<A, M> for SyncContext<A> where
    A: Actor<Context = SyncContext<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A> !Send for SyncContext<A>

impl<A> !Sync for SyncContext<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.System.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.System.html new file mode 100644 index 0000000..0ddec3f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.System.html @@ -0,0 +1,65 @@ +actix_web::actix::actix::dev::System - Rust

Struct actix_web::actix::actix::dev::System[]

pub struct System { /* fields omitted */ }

System is an actor which manages runtime.

+

Before starting any actix's actors, System actor has to be created and +started with System::run() call. This method creates new Arbiter in +current thread and starts System actor.

+

Examples

+
+extern crate actix;
+
+use actix::prelude::*;
+use std::time::Duration;
+
+struct Timer {
+    dur: Duration,
+}
+
+impl Actor for Timer {
+    type Context = Context<Self>;
+
+    // stop system after `self.dur` seconds
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        ctx.run_later(self.dur, |act, ctx| {
+            // Stop current running system.
+            System::current().stop();
+        });
+    }
+}
+
+fn main() {
+    // initialize system and run it.
+    // This function blocks current thread
+    let code = System::run(|| {
+        // Start `Timer` actor
+        Timer {
+            dur: Duration::new(0, 1),
+        }.start();
+    });
+
+    std::process::exit(code);
+}
+
+

+ Methods +

+

impl System

Create new system.

+

This method panics if it can not create tokio runtime

+

Get current running system.

+

Execute function with system reference.

+

Stop the system

+

System arbiter

+

Get current system registry.

+

This function will start tokio runtime and will finish once the +System::stop() message get called. +Function f get called within tokio runtime context.

+
+

+ Trait Implementations +

+

impl Clone for System

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for System

impl Sync for System

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SystemRegistry.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SystemRegistry.html new file mode 100644 index 0000000..8614a13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/struct.SystemRegistry.html @@ -0,0 +1,72 @@ +actix_web::actix::actix::dev::SystemRegistry - Rust

Struct actix_web::actix::actix::dev::SystemRegistry[]

pub struct SystemRegistry { /* fields omitted */ }

System wide actors registry

+

System registry serves same purpose as Registry, +except it is shared across all arbiters.

+

Example

+
+use actix::prelude::*;
+
+#[derive(Message)]
+struct Ping;
+
+#[derive(Default)]
+struct MyActor1;
+
+impl Actor for MyActor1 {
+    type Context = Context<Self>;
+}
+impl actix::Supervised for MyActor1 {}
+
+impl SystemService for MyActor1 {
+    fn service_started(&mut self, ctx: &mut Context<Self>) {
+        println!("Service started");
+    }
+}
+
+impl Handler<Ping> for MyActor1 {
+    type Result = ();
+
+    fn handle(&mut self, _: Ping, ctx: &mut Context<Self>) {
+        println!("ping");
+    }
+}
+
+struct MyActor2;
+
+impl Actor for MyActor2 {
+    type Context = Context<Self>;
+
+    fn started(&mut self, _: &mut Context<Self>) {
+        let act = System::current().registry().get::<MyActor1>();
+        act.do_send(Ping);
+    }
+}
+
+fn main() {
+    // initialize system
+    let code = System::run(|| {
+        // Start MyActor1
+        let addr = MyActor1.start();
+
+        // Start MyActor2
+        let addr = MyActor2.start();
+    });
+}
+
+

+ Methods +

+

impl SystemRegistry

Return address of the service. If service actor is not running +it get started in the system.

+

Add new actor to the registry by address, panic if actor is already running

+
+

+ Trait Implementations +

+

impl Clone for SystemRegistry

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorContext.html new file mode 100644 index 0000000..85a1423 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorContext.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::dev::ActorContext - Rust

Trait actix_web::actix::actix::dev::ActorContext[]

pub trait ActorContext {
+    fn stop(&mut self);
+
fn terminate(&mut self); +
fn state(&self) -> ActorState; +}

Actor execution context

+

Each actor runs within specific execution context. Actor::Context defines +context. Execution context defines type of execution, actor communication +channels (message handling).

+
+

+ Required Methods +

+
+

Immediately stop processing incoming messages and switch to a +stopping state

+

Terminate actor execution

+

Actor execution state

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorFuture.html new file mode 100644 index 0000000..612087b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorFuture.html @@ -0,0 +1,81 @@ +actix_web::actix::actix::dev::ActorFuture - Rust

Trait actix_web::actix::actix::dev::ActorFuture[]

pub trait ActorFuture {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; + + fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn drop_err(self) -> DropErr<Self> { ... } +
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, + { ... } +
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } +}

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+

This is similar to futures::Future trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of value that this future will resolved with if it is +successful.

+

The type of error that this future will resolve with if it fails in a +normal fashion.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Map this future's result to a different type, returning a new future of +the resulting type.

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for +this future's Error, returning a new future.

+

Chain on a computation for when a future finished, passing the result of +the future to the provided closure f.

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain.

+

err value get returned as a timeout error.

+
+

+ Implementations on Foreign Types +

+

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

+

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorStream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorStream.html new file mode 100644 index 0000000..8255e23 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ActorStream.html @@ -0,0 +1,64 @@ +actix_web::actix::actix::dev::ActorStream - Rust

Trait actix_web::actix::actix::dev::ActorStream[]

pub trait ActorStream {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; + + fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, + { ... } +
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, + { ... } +
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, + { ... } +
fn finish(self) -> StreamFinish<Self> { ... } +}

A stream of values, not all of which may have been produced yet.

+

This is similar to futures::Stream trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of item this stream will yield on success.

+

The type of error this stream may generate.

+

The actor within which this stream runs.

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting +item to the provided closure f.

+

Chain on a computation for when a value is ready, passing the successful +results to the provided closure f.

+

Execute an accumulating computation over a stream, collecting all the +values into one final result.

+

Add timeout to stream.

+

err value get returned as a timeout error.

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ArbiterService.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ArbiterService.html new file mode 100644 index 0000000..bb6555e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ArbiterService.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::dev::ArbiterService - Rust

Trait actix_web::actix::actix::dev::ArbiterService[]

pub trait ArbiterService: Actor<Context = Context<Self>> + Supervised + Default {
+    fn start_service() -> Addr<Self> { ... }
+
fn service_started(&mut self, ctx: &mut Context<Self>) { ... } +
fn from_registry() -> Addr<Self> { ... } +}

Trait defines arbiter's service.

+
+

+ Provided Methods +

+
+

Construct and srtart arbiter service

+

Method is called during service initialization.

+

Get actor's address from arbiter registry

+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContext.html new file mode 100644 index 0000000..d6ac149 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContext.html @@ -0,0 +1,115 @@ +actix_web::actix::actix::dev::AsyncContext - Rust

Trait actix_web::actix::actix::dev::AsyncContext[]

pub trait AsyncContext<A>: ActorContext where
    A: Actor<Context = Self>, 
{ + fn address(&self) -> Addr<A>; +
fn spawn<F>(&mut self, fut: F) -> SpawnHandle
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn wait<F>(&mut self, fut: F)
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn waiting(&self) -> bool; +
fn cancel_future(&mut self, handle: SpawnHandle) -> bool; + + fn add_stream<S>(&mut self, fut: S) -> SpawnHandle
    where
        A: StreamHandler<<S as Stream>::Item, <S as Stream>::Error>,
        S: Stream + 'static
, + { ... } +
fn add_message_stream<S>(&mut self, fut: S)
    where
        A: Handler<<S as Stream>::Item>,
        S: Stream<Error = ()> + 'static,
        <S as Stream>::Item: Message
, + { ... } +
fn notify<M>(&mut self, msg: M)
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn notify_later<M>(&mut self, msg: M, after: Duration) -> SpawnHandle
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn run_later<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnOnce(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +
fn run_interval<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnMut(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +}

Asynchronous execution context

+
+

+ Required Methods +

+
+

Return Address of the context

+

Spawn async future into context. Returns handle of the item, +could be used for cancelling execution.

+

All futures cancel during actor stopping stage.

+

Spawn future into the context. Stop processing any of incoming events +until this future resolves.

+

Check if context is paused (waiting for future completion or stopping)

+

Cancel future. handle is a value returned by spawn method.

+
+

+ Provided Methods +

+
+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       ctx.add_stream(once::<Ping, io::Error>(Ok(Ping)));
+   }
+}
+

This method is similar to add_stream but it skips stream errors.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl Handler<Ping> for MyActor {
+    type Result = ();
+
+    fn handle(&mut self, msg: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        // add messages stream
+        ctx.add_message_stream(once(Ok(Ping)));
+    }
+}
+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns +spawn handle which could be used for cancellation. Notification get +cancelled if context's stop method get called.

+

Execute closure after specified period of time within same Actor and +Context. Execution get cancelled if context's stop method get +called.

+

Spawns job to execute closure with specified interval

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContextParts.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContextParts.html new file mode 100644 index 0000000..173e91c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.AsyncContextParts.html @@ -0,0 +1,18 @@ +actix_web::actix::actix::dev::AsyncContextParts - Rust

Trait actix_web::actix::actix::dev::AsyncContextParts[]

pub trait AsyncContextParts<A>: ActorContext + AsyncContext<A> where
    A: Actor<Context = Self>, 
{ + fn parts(&mut self) -> &mut ContextParts<A>; +}
+

+ Required Methods +

+
+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Handler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Handler.html new file mode 100644 index 0000000..5b05e98 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Handler.html @@ -0,0 +1,42 @@ +actix_web::actix::actix::dev::Handler - Rust

Trait actix_web::actix::actix::dev::Handler[]

pub trait Handler<M>: Actor + Actor where
    M: Message
{ + type Result: MessageResponse<Self, M>; + fn handle(&mut self, msg: M, ctx: &mut Self::Context) -> Self::Result; +}

Message handler

+

Handler implementation is a general way how to handle +incoming messages, streams, futures.

+

M is a message which can be handled by the actor.

+
+

+ Associated Types +

+
+

The type of value that this handle will return

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Message.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Message.html new file mode 100644 index 0000000..fee0ba1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.Message.html @@ -0,0 +1,35 @@ +actix_web::actix::actix::dev::Message - Rust

Trait actix_web::actix::actix::dev::Message[]

pub trait Message {
+    type Result: 'static;
+}

Message type

+
+

+ Associated Types +

+
+

The type of value that this message will resolved with if it is +successful.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.MessageResponse.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.MessageResponse.html new file mode 100644 index 0000000..a0c7537 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.MessageResponse.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::dev::MessageResponse - Rust

Trait actix_web::actix::actix::dev::MessageResponse[]

pub trait MessageResponse<A, M> where
    A: Actor,
    M: Message
{ + fn handle<R>(self, ctx: &mut <A as Actor>::Context, tx: Option<R>)
    where
        R: ResponseChannel<M>
; +}

Trait which defines message response

+
+

+ Required Methods +

+
+

+

+ Implementations on Foreign Types +

+

impl<A, M> MessageResponse<A, M> for u32 where
    A: Actor,
    M: Message<Result = u32>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<Future<Error = E, Item = I> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <M as Message>::Result: Send,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for u64 where
    A: Actor,
    M: Message<Result = u64>, 

impl<A, M> MessageResponse<A, M> for i16 where
    A: Actor,
    M: Message<Result = i16>, 

impl<A, M> MessageResponse<A, M> for isize where
    A: Actor,
    M: Message<Result = isize>, 

impl<A, M> MessageResponse<A, M> for i8 where
    A: Actor,
    M: Message<Result = i8>, 

impl<A, M, I> MessageResponse<A, M> for Option<I> where
    A: Actor,
    I: 'static,
    M: Message<Result = Option<I>>, 

impl<A, M> MessageResponse<A, M> for i64 where
    A: Actor,
    M: Message<Result = i64>, 

impl<A, M> MessageResponse<A, M> for i32 where
    A: Actor,
    M: Message<Result = i32>, 

impl<A, M> MessageResponse<A, M> for bool where
    A: Actor,
    M: Message<Result = bool>, 

impl<A, M> MessageResponse<A, M> for u8 where
    A: Actor,
    M: Message<Result = u8>, 

impl<A, M> MessageResponse<A, M> for usize where
    A: Actor,
    M: Message<Result = usize>, 

impl<A, M> MessageResponse<A, M> for () where
    A: Actor,
    M: Message<Result = ()>, 

impl<A, M, I, E> MessageResponse<A, M> for Result<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<ActorFuture<Error = E, Item = I, Actor = A> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for f32 where
    A: Actor,
    M: Message<Result = f32>, 

impl<A, M> MessageResponse<A, M> for f64 where
    A: Actor,
    M: Message<Result = f64>, 

impl<A, M> MessageResponse<A, M> for String where
    A: Actor,
    M: Message<Result = String>, 

impl<A, M> MessageResponse<A, M> for u16 where
    A: Actor,
    M: Message<Result = u16>, 

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ResponseChannel.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ResponseChannel.html new file mode 100644 index 0000000..7402841 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ResponseChannel.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::dev::ResponseChannel - Rust

Trait actix_web::actix::actix::dev::ResponseChannel[]

pub trait ResponseChannel<M>: 'static where
    M: Message
{ + fn is_canceled(&self) -> bool; +
fn send(self, response: <M as Message>::Result); +}

Trait defines message response channel

+
+

+ Required Methods +

+
+

+

+ Implementations on Foreign Types +

+

impl<M> ResponseChannel<M> for () where
    M: 'static + Message

impl<M> ResponseChannel<M> for Sender<<M as Message>::Result> where
    M: 'static + Message,
    <M as Message>::Result: Send

+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.StreamHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.StreamHandler.html new file mode 100644 index 0000000..6892e2e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.StreamHandler.html @@ -0,0 +1,74 @@ +actix_web::actix::actix::dev::StreamHandler - Rust

Trait actix_web::actix::actix::dev::StreamHandler[]

pub trait StreamHandler<I, E>: Actor + Actor {
+    fn handle(&mut self, item: I, ctx: &mut Self::Context);
+
+    fn started(&mut self, ctx: &mut Self::Context) { ... }
+
fn error(&mut self, err: E, ctx: &mut Self::Context) -> Running { ... } +
fn finished(&mut self, ctx: &mut Self::Context) { ... } +
fn add_stream<S>(fut: S, ctx: &mut Self::Context) -> SpawnHandle
    where
        E: 'static,
        I: 'static,
        S: Stream<Item = I, Error = E> + 'static,
        Self::Context: AsyncContext<Self>
, + { ... } +}

Stream handler

+

This is helper trait that allows to handle Stream in +a similar way as normal actor messages. +When stream resolves to a next item, handle() method of this trait +get called. If stream produces error, error() method get called. +Depends on result of the error() method, actor could continue to +process stream items or stop stream processing. +When stream completes, finished() method get called. By default +finished() method stops actor execution.

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Provided Methods +

+
+

Method is called when stream get polled first time.

+

Method is called when stream emits error.

+

If this method returns ErrorAction::Continue stream processing +continues otherwise stream processing stops. Default method +implementation returns ErrorAction::Stop

+

Method is called when stream finishes.

+

By default this method stops actor execution.

+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       Self::add_stream(once::<Ping, io::Error>(Ok(Ping)), ctx);
+   }
+}
+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ToEnvelope.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ToEnvelope.html new file mode 100644 index 0000000..88841ef --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.ToEnvelope.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::dev::ToEnvelope - Rust

Trait actix_web::actix::actix::dev::ToEnvelope[]

pub trait ToEnvelope<A, M> where
    A: Actor + Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ + fn pack(msg: M, tx: Option<Sender<<M as Message>::Result>>) -> Envelope<A>; +}

Converter trait, packs message to suitable envelope

+
+

+ Required Methods +

+
+

Pack message into suitable envelope

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.WrapStream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.WrapStream.html new file mode 100644 index 0000000..aec8f74 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/trait.WrapStream.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::dev::WrapStream - Rust

Trait actix_web::actix::actix::dev::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ + type Stream: ActorStream; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Stream; +}

Helper trait that allows conversion of normal stream into ActorStream

+
+

+ Associated Types +

+
+

The stream that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal stream to a ActorStream

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/type.ResponseFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/type.ResponseFuture.html new file mode 100644 index 0000000..46a12c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/dev/type.ResponseFuture.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::dev::ResponseFuture - Rust

Type Definition actix_web::actix::actix::dev::ResponseFuture[]

type ResponseFuture<I, E> = Box<Future<Error = E, Item = I> + 'static>;

A specialized future for async message handler

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.ActorState.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.ActorState.html new file mode 100644 index 0000000..56c9170 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.ActorState.html @@ -0,0 +1,34 @@ +actix_web::actix::actix::ActorState - Rust

Enum actix_web::actix::actix::ActorState[]

pub enum ActorState {
+    Started,
+    Running,
+    Stopping,
+    Stopped,
+}

Actor execution state

+

+ Variants

+

Actor is started.

+

Actor is running.

+

Actor is stopping.

+

Actor is stopped.

+
+

+ Methods +

+

impl ActorState

Indicates if actor is alive

+

Indicates if actor is stopped of stopping

+
+

+ Trait Implementations +

+

impl PartialEq<ActorState> for ActorState

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for ActorState

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ActorState

Formats the value using the given formatter. Read more

+

impl Copy for ActorState

+

+ Auto Trait Implementations +

+
+

impl Send for ActorState

impl Sync for ActorState

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.MailboxError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.MailboxError.html new file mode 100644 index 0000000..481cc64 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.MailboxError.html @@ -0,0 +1,26 @@ +actix_web::actix::actix::MailboxError - Rust

Enum actix_web::actix::actix::MailboxError[]

pub enum MailboxError {
+    Closed,
+    Timeout,
+}

Set of error that can occurred during message delivery process

+

+ Variants

+ +

+ Trait Implementations +

+

impl Debug for MailboxError

Formats the value using the given formatter. Read more

+

impl Display for MailboxError

Formats the value using the given formatter. Read more

+

impl Fail for MailboxError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl ResponseError for MailboxError
[src]

InternalServerError for actix::MailboxError

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for MailboxError

impl Sync for MailboxError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.Running.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.Running.html new file mode 100644 index 0000000..1718723 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.Running.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::Running - Rust

Enum actix_web::actix::actix::Running[]

pub enum Running {
+    Stop,
+    Continue,
+}

+ Variants

+ +

+ Trait Implementations +

+

impl PartialEq<Running> for Running

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for Running

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for Running

Formats the value using the given formatter. Read more

+

impl Copy for Running

+

+ Auto Trait Implementations +

+
+

impl Send for Running

impl Sync for Running

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.SendError.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.SendError.html new file mode 100644 index 0000000..126d978 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/enum.SendError.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::SendError - Rust

Enum actix_web::actix::actix::SendError[]

pub enum SendError<T> {
+    Full(T),
+    Closed(T),
+}

+ Variants

+ +

+ Methods +

+

impl<T> SendError<T>

+

+ Trait Implementations +

+

impl<T> Debug for SendError<T>

Formats the value using the given formatter. Read more

+

impl<T> Display for SendError<T>

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for SendError<T> where
    T: Send

impl<T> Sync for SendError<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/AndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/AndThen.t.html new file mode 100644 index 0000000..e6c39d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/AndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/DropErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/DropErr.t.html new file mode 100644 index 0000000..872d170 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/DropErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DropErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Either.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Finish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Finish.t.html new file mode 100644 index 0000000..ed486e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Finish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Finish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FromErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FromErr.t.html new file mode 100644 index 0000000..97ef002 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FromErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FromErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureResult.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureResult.t.html new file mode 100644 index 0000000..2925708 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureWrap.t.html new file mode 100644 index 0000000..e267ec4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/FutureWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/IntoActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/IntoActorFuture.t.html new file mode 100644 index 0000000..211e5cb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/IntoActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Map.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Map.t.html new file mode 100644 index 0000000..9009faf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Map.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Map.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/MapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/MapErr.t.html new file mode 100644 index 0000000..21f7573 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/MapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamAndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamAndThen.t.html new file mode 100644 index 0000000..bd6e6ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamAndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamAndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFinish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFinish.t.html new file mode 100644 index 0000000..da33c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFinish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFinish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFold.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFold.t.html new file mode 100644 index 0000000..b938ceb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamFold.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFold.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMap.t.html new file mode 100644 index 0000000..441690b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMapErr.t.html new file mode 100644 index 0000000..67136f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamMapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamThen.t.html new file mode 100644 index 0000000..bd638fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamTimeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamTimeout.t.html new file mode 100644 index 0000000..30bc1f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamTimeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamWrap.t.html new file mode 100644 index 0000000..59d4cbe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/StreamWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Then.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Then.t.html new file mode 100644 index 0000000..1cc8020 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Then.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Then.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Timeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Timeout.t.html new file mode 100644 index 0000000..d6412e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/Timeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Timeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/enum.Either.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/enum.Either.html new file mode 100644 index 0000000..3700a96 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/enum.Either.html @@ -0,0 +1,40 @@ +actix_web::actix::actix::fut::Either - Rust

Enum actix_web::actix::actix::fut::Either[]

pub enum Either<A, B> {
+    A(A),
+    B(B),
+}

Combines two different futures yielding the same item and error +types into a single type.

+

+ Variants

+

First branch of the type

+

Second branch of the type

+
+

+ Methods +

+

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

+

This method is typically useful when combined with the Future::select2 +combinator.

+
+

+ Trait Implementations +

+

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/err.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/err.v.html new file mode 100644 index 0000000..a1c0ed9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/err.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.err.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.err.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.err.html new file mode 100644 index 0000000..a3723b1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.err.html @@ -0,0 +1,14 @@ +actix_web::actix::actix::fut::err - Rust

Function actix_web::actix::actix::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_err_1 = fut::err::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.ok.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.ok.html new file mode 100644 index 0000000..cb1c1a5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.ok.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::fut::ok - Rust

Function actix_web::actix::actix::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::fut::*;
+use actix::{Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = ok::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.result.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.result.html new file mode 100644 index 0000000..0d2cad2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.result.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::fut::result - Rust

Function actix_web::actix::actix::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

+

The returned future represents a computation which is finished immediately. +This can be useful with the finished and failed base future types to +convert an immediate value to a future to interoperate elsewhere.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = fut::result::<u32, u32, MyActor>(Ok(1));
+let future_of_err_2 = fut::result::<u32, u32, MyActor>(Err(2));
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_future.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_future.html new file mode 100644 index 0000000..84e8a04 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_future.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::fut::wrap_future - Rust

Function actix_web::actix::actix::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_stream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_stream.html new file mode 100644 index 0000000..4b150af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/fn.wrap_stream.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::fut::wrap_stream - Rust

Function actix_web::actix::actix::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/index.html new file mode 100644 index 0000000..8562d44 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/index.html @@ -0,0 +1,215 @@ +actix_web::actix::actix::fut - Rust

Module actix_web::actix::actix::fut[]

Custom Future implementation with Actix support

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AndThen +

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+ +
DropErr + +
Finish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
FromErr +

Future for the from_err combinator, changing the error type of a future.

+ +
FutureResult +

A future representing a value that is immediately ready.

+ +
FutureWrap + +
Map +

Future for the map combinator, changing the type of a future.

+ +
MapErr +

Future for the map_err combinator, changing the error type of a future.

+ +
StreamAndThen +

A stream combinator which chains a computation onto values produced by a +stream.

+ +
StreamFinish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
StreamFold +

A future used to collect all the results of a stream into one generic type.

+ +
StreamMap +

A stream combinator which will change the type of a stream from one +type to another.

+ +
StreamMapErr +

A stream combinator which will change the error type of a stream from one +type to another.

+ +
StreamThen +

A stream combinator which chains a computation onto each item produced by a +stream.

+ +
StreamTimeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +
StreamWrap + +
Then +

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+ +
Timeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +

Enums

+ + + + +
Either +

Combines two different futures yielding the same item and error +types into a single type.

+ +

Traits

+ + + + +
IntoActorFuture +

Class of types which can be converted into an actor future.

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + +
err +

Creates a "leaf future" from an immediate value of a failed computation.

+ +
ok +

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+ +
result +

Creates a new "leaf future" which will resolve with the given result.

+ +
wrap_future +

Converts normal future into ActorFuture

+ +
wrap_stream +

Converts normal stream into ActorStream

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/ok.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/ok.v.html new file mode 100644 index 0000000..dca3201 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/ok.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ok.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/result.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/result.v.html new file mode 100644 index 0000000..94765e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/result.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.result.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/sidebar-items.js new file mode 100644 index 0000000..4cde84b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Either","Combines two different futures yielding the same item and error types into a single type."]],"fn":[["err","Creates a \"leaf future\" from an immediate value of a failed computation."],["ok","Creates a \"leaf future\" from an immediate value of a finished and successful computation."],["result","Creates a new \"leaf future\" which will resolve with the given result."],["wrap_future","Converts normal future into `ActorFuture`"],["wrap_stream","Converts normal stream into `ActorStream`"]],"struct":[["AndThen","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully."],["DropErr",""],["Finish","A combinator used to convert stream into a future, future resolves when stream completes."],["FromErr","Future for the `from_err` combinator, changing the error type of a future."],["FutureResult","A future representing a value that is immediately ready."],["FutureWrap",""],["Map","Future for the `map` combinator, changing the type of a future."],["MapErr","Future for the `map_err` combinator, changing the error type of a future."],["StreamAndThen","A stream combinator which chains a computation onto values produced by a stream."],["StreamFinish","A combinator used to convert stream into a future, future resolves when stream completes."],["StreamFold","A future used to collect all the results of a stream into one generic type."],["StreamMap","A stream combinator which will change the type of a stream from one type to another."],["StreamMapErr","A stream combinator which will change the error type of a stream from one type to another."],["StreamThen","A stream combinator which chains a computation onto each item produced by a stream."],["StreamTimeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."],["StreamWrap",""],["Then","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome."],["Timeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."]],"trait":[["IntoActorFuture","Class of types which can be converted into an actor future."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.AndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.AndThen.html new file mode 100644 index 0000000..f2c2c3d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.AndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::AndThen - Rust

Struct actix_web::actix::actix::fut::AndThen[]

#[must_use = "futures do nothing unless polled"] +
pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+

This is created by the Future::and_then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.DropErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.DropErr.html new file mode 100644 index 0000000..5642da6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.DropErr.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::DropErr - Rust

Struct actix_web::actix::actix::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Finish.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Finish.html new file mode 100644 index 0000000..b84a2ea --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Finish.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::fut::Finish - Rust

Struct actix_web::actix::actix::fut::Finish[]

#[must_use = "streams do nothing unless polled"] +
pub struct Finish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the Stream::finish method.

+
+

+ Methods +

+

impl<S> Finish<S>

+

+ Trait Implementations +

+

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

impl<S> Future for Finish<S> where
    S: Stream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FromErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FromErr.html new file mode 100644 index 0000000..13977b4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FromErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::FromErr - Rust

Struct actix_web::actix::actix::fut::FromErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

+

This is created by the Future::from_err method.

+
+

+ Trait Implementations +

+

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureResult.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureResult.html new file mode 100644 index 0000000..754f77f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureResult.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::FutureResult - Rust

Struct actix_web::actix::actix::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"] +
pub struct FutureResult<T, E, A> { /* fields omitted */ }

A future representing a value that is immediately ready.

+

Created by the result function.

+
+

+ Trait Implementations +

+

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

+

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureWrap.html new file mode 100644 index 0000000..ba00a1e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.FutureWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::FutureWrap - Rust

Struct actix_web::actix::actix::fut::FutureWrap[]

pub struct FutureWrap<F, A> where
    F: Future
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Map.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Map.html new file mode 100644 index 0000000..88a9a97 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Map.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::Map - Rust

Struct actix_web::actix::actix::fut::Map[]

#[must_use = "futures do nothing unless polled"] +
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

+

This is created by the ActorFuture::map method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.MapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.MapErr.html new file mode 100644 index 0000000..5c65948 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.MapErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::MapErr - Rust

Struct actix_web::actix::actix::fut::MapErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

+

This is created by the Future::map_err method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamAndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamAndThen.html new file mode 100644 index 0000000..3f77d9c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamAndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamAndThen - Rust

Struct actix_web::actix::actix::fut::StreamAndThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a +stream.

+

This structure is produced by the ActorStream::and_then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFinish.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFinish.html new file mode 100644 index 0000000..51d70fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFinish.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamFinish - Rust

Struct actix_web::actix::actix::fut::StreamFinish[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFinish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the ActorStream::finish method.

+
+

+ Trait Implementations +

+

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFold.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFold.html new file mode 100644 index 0000000..1b38a84 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamFold.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::StreamFold - Rust

Struct actix_web::actix::actix::fut::StreamFold[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

+

This future is returned by the ActorStream::fold method.

+
+

+ Trait Implementations +

+

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMap.html new file mode 100644 index 0000000..d45b453 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMap.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamMap - Rust

Struct actix_web::actix::actix::fut::StreamMap[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMap<S, F> { /* fields omitted */ }

A stream combinator which will change the type of a stream from one +type to another.

+

This is produced by the ActorStream::map method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMapErr.html new file mode 100644 index 0000000..8694fa4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamMapErr.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamMapErr - Rust

Struct actix_web::actix::actix::fut::StreamMapErr[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMapErr<S, F> { /* fields omitted */ }

A stream combinator which will change the error type of a stream from one +type to another.

+

This is produced by the ActorStream::map_err method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamThen.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamThen.html new file mode 100644 index 0000000..7b5f442 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamThen - Rust

Struct actix_web::actix::actix::fut::StreamThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a +stream.

+

This structure is produced by the ActorStream::then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamTimeout.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamTimeout.html new file mode 100644 index 0000000..abde16d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamTimeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamTimeout - Rust

Struct actix_web::actix::actix::fut::StreamTimeout[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamWrap.html new file mode 100644 index 0000000..3efd286 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.StreamWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::StreamWrap - Rust

Struct actix_web::actix::actix::fut::StreamWrap[]

pub struct StreamWrap<S, A> where
    S: Stream
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Auto Trait Implementations +

+
+

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Then.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Then.html new file mode 100644 index 0000000..6a25f45 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Then.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::Then - Rust

Struct actix_web::actix::actix::fut::Then[]

#[must_use = "futures do nothing unless polled"] +
pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+

This is created by the Future::then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Timeout.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Timeout.html new file mode 100644 index 0000000..3a9d646 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/struct.Timeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::Timeout - Rust

Struct actix_web::actix::actix::fut::Timeout[]

#[must_use = "futures do nothing unless polled"] +
pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/trait.IntoActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/trait.IntoActorFuture.html new file mode 100644 index 0000000..5c0cd8f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/trait.IntoActorFuture.html @@ -0,0 +1,33 @@ +actix_web::actix::actix::fut::IntoActorFuture - Rust

Trait actix_web::actix::actix::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ + type Future: ActorFuture; + type Item; + type Error; + type Actor: Actor; + fn into_future(self) -> Self::Future; +}

Class of types which can be converted into an actor future.

+

This trait is very similar to the IntoIterator trait and is intended to be +used in a very similar fashion.

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

Consumes this object and produces a future.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_future.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_future.v.html new file mode 100644 index 0000000..12394f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_future.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_future.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_stream.v.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_stream.v.html new file mode 100644 index 0000000..b39ce83 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/fut/wrap_stream.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_stream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/index.html new file mode 100644 index 0000000..8773a18 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/index.html @@ -0,0 +1,325 @@ +actix_web::actix::actix - Rust

Module actix_web::actix::actix[]

Modules

+ + + + + + + + + + + + + + + + + + + + +
actors +

Helper actors

+ +
dev +

The actix prelude for library developers

+ +
fut +

Custom Future implementation with Actix support

+ +
io + +
msgs +

Actix system messages

+ +

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActorResponse +

Helper type for representing different type of message responses

+ +
Addr +

Address of the actor

+ +
Arbiter +

Event loop controller

+ +
Condition + +
Context +

Actor execution context

+ +
MessageResult +

Helper type that implements MessageResponse trait

+ +
Recipient +

Recipient type allows to send one specific message to an actor.

+ +
RecipientRequest +

RecipientRequest is a Future which represents asynchronous message +sending process.

+ +
Request +

Request is a Future which represents asynchronous message sending +process.

+ +
Response +

Helper type for representing different type of message responses

+ +
SpawnHandle +

Spawned future handle. Could be used for cancelling spawned future.

+ +
Supervisor +

Actor supervisor

+ +
SyncArbiter +

Sync arbiter

+ +
SyncContext +

Sync actor execution context

+ +
System +

System is an actor which manages runtime.

+ +

Enums

+ + + + + + + + + + + + + + + + +
ActorState +

Actor execution state

+ +
MailboxError +

Set of error that can occurred during message delivery process

+ +
Running + +
SendError + +

Traits

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Actor +

Actors are objects which encapsulate state and behavior.

+ +
ActorContext +

Actor execution context

+ +
ActorFuture +

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+ +
ActorStream +

A stream of values, not all of which may have been produced yet.

+ +
ArbiterService +

Trait defines arbiter's service.

+ +
AsyncContext +

Asynchronous execution context

+ +
ContextFutureSpawner +

Helper trait which can spawn future into actor's context

+ +
Handler +

Message handler

+ +
Message +

Message type

+ +
StreamHandler +

Stream handler

+ +
Supervised +

Actors with ability to restart after failure

+ +
SystemService +

Trait defines system's service.

+ +
WrapFuture +

Helper trait that allows conversion of normal future into ActorFuture

+ +
WrapStream +

Helper trait that allows conversion of normal stream into ActorStream

+ +

Type Definitions

+ + + + + + + + +
ResponseActFuture +

A specialized actor future for async message handler

+ +
ResponseFuture +

A specialized future for async message handler

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/FramedWrite.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/FramedWrite.t.html new file mode 100644 index 0000000..ffb21ae --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/FramedWrite.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FramedWrite.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/WriteHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/WriteHandler.t.html new file mode 100644 index 0000000..775e268 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/WriteHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WriteHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/Writer.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/Writer.t.html new file mode 100644 index 0000000..9b6fa03 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/Writer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Writer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/index.html new file mode 100644 index 0000000..e395aae --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/index.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::io - Rust

Module actix_web::actix::actix::io[]

Structs

+ + + + + + + + +
FramedWrite +

Wrapper for AsyncWrite and Encoder types

+ +
Writer +

Wrapper for AsyncWrite types

+ +

Traits

+ + + + +
WriteHandler +

Write handler

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/sidebar-items.js new file mode 100644 index 0000000..4847483 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["FramedWrite","Wrapper for `AsyncWrite` and `Encoder` types"],["Writer","Wrapper for `AsyncWrite` types"]],"trait":[["WriteHandler","Write handler"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.FramedWrite.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.FramedWrite.html new file mode 100644 index 0000000..447ba4d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.FramedWrite.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::io::FramedWrite - Rust

Struct actix_web::actix::actix::io::FramedWrite[]

pub struct FramedWrite<T, U> where
    T: AsyncWrite,
    U: Encoder
{ /* fields omitted */ }

Wrapper for AsyncWrite and Encoder types

+
+

+ Methods +

+

impl<T, U> FramedWrite<T, U> where
    T: AsyncWrite,
    U: Encoder

Gracefully close sink

+

Close process is asynchronous.

+

Check if sink is closed

+

Set write buffer capacity

+

Write item

+

SpawnHandle for this writer

+
+

+ Auto Trait Implementations +

+
+

impl<T, U> !Send for FramedWrite<T, U>

impl<T, U> !Sync for FramedWrite<T, U>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.Writer.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.Writer.html new file mode 100644 index 0000000..3ede784 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/struct.Writer.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::io::Writer - Rust

Struct actix_web::actix::actix::io::Writer[]

pub struct Writer<T, E> where
    E: From<Error>,
    T: AsyncWrite
{ /* fields omitted */ }

Wrapper for AsyncWrite types

+
+

+ Methods +

+

impl<T, E> Writer<T, E> where
    E: 'static + From<Error>,
    T: AsyncWrite

Gracefully close sink

+

Close process is asynchronous.

+

Check if sink is closed

+

Set write buffer capacity

+

Send item to a sink.

+

SpawnHandle for this writer

+
+

+ Auto Trait Implementations +

+
+

impl<T, E> !Send for Writer<T, E>

impl<T, E> !Sync for Writer<T, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/io/trait.WriteHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/trait.WriteHandler.html new file mode 100644 index 0000000..07538bf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/io/trait.WriteHandler.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::io::WriteHandler - Rust

Trait actix_web::actix::actix::io::WriteHandler[]

pub trait WriteHandler<E>: Actor + Actor where
    Self::Context: ActorContext
{ + fn error(&mut self, err: E, ctx: &mut Self::Context) -> Running { ... } +
fn finished(&mut self, ctx: &mut Self::Context) { ... } +}

Write handler

+

WriteHandler is a helper for AsyncWrite types. Implementation +of this trait is required for Writer and FramedWrite support.

+
+

+ Provided Methods +

+
+

Method is called when writer emits error.

+

If this method returns ErrorAction::Continue writer processing +continues otherwise stream processing stops.

+

Method is called when writer finishes.

+

By default this method stops actor's Context.

+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/Execute.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/Execute.t.html new file mode 100644 index 0000000..761750d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/Execute.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Execute.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StartActor.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StartActor.t.html new file mode 100644 index 0000000..f45c3dd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StartActor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StartActor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StopArbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StopArbiter.t.html new file mode 100644 index 0000000..a7cdee1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/StopArbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StopArbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/index.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/index.html new file mode 100644 index 0000000..6c12094 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/index.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::msgs - Rust

Module actix_web::actix::actix::msgs[]

Actix system messages

+

Structs

+ + + + + + + + + + + + +
Execute +

Execute function in arbiter's thread

+ +
StartActor +

Start actor in arbiter's thread

+ +
StopArbiter +

Stop arbiter execution

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/sidebar-items.js new file mode 100644 index 0000000..0cff758 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Execute","Execute function in arbiter's thread"],["StartActor","Start actor in arbiter's thread"],["StopArbiter","Stop arbiter execution"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.Execute.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.Execute.html new file mode 100644 index 0000000..089dc87 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.Execute.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::msgs::Execute - Rust

Struct actix_web::actix::actix::msgs::Execute[]

pub struct Execute<I = (), E = ()>(_)
where
    E: 'static + Send,
    I: 'static + Send
;

Execute function in arbiter's thread

+

Arbiter` actor handles Execute message.

+

Example

+
+use actix::prelude::*;
+
+struct MyActor {
+    addr: Addr<Arbiter>,
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        self.addr
+            .do_send(actix::msgs::Execute::new(|| -> Result<(), ()> {
+                // do something
+                // ...
+                Ok(())
+            }));
+    }
+}
+fn main() {}
+
+

+ Methods +

+

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

+
+

+ Trait Implementations +

+

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

+

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StartActor.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StartActor.html new file mode 100644 index 0000000..4f0ceb2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StartActor.html @@ -0,0 +1,20 @@ +actix_web::actix::actix::msgs::StartActor - Rust

Struct actix_web::actix::actix::msgs::StartActor[]

pub struct StartActor<A>(_)
where
    A: Actor
;

Start actor in arbiter's thread

+
+

+ Methods +

+

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

+

+ Trait Implementations +

+

impl<A> Message for StartActor<A> where
    A: Actor

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StopArbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StopArbiter.html new file mode 100644 index 0000000..9c9210e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/msgs/struct.StopArbiter.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::msgs::StopArbiter - Rust

Struct actix_web::actix::actix::msgs::StopArbiter[]

pub struct StopArbiter(pub i32);

Stop arbiter execution

+
+

+ Trait Implementations +

+

impl Message for StopArbiter

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/actix/sidebar-items.js new file mode 100644 index 0000000..ebfd3e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ActorState","Actor execution state"],["MailboxError","Set of error that can occurred during message delivery process"],["Running",""],["SendError",""]],"mod":[["actors","Helper actors"],["dev","The `actix` prelude for library developers"],["fut","Custom `Future` implementation with `Actix` support"],["io",""],["msgs","Actix system messages"]],"struct":[["ActorResponse","Helper type for representing different type of message responses"],["Addr","Address of the actor"],["Arbiter","Event loop controller"],["Condition",""],["Context","Actor execution context"],["MessageResult","Helper type that implements `MessageResponse` trait"],["Recipient","`Recipient` type allows to send one specific message to an actor."],["RecipientRequest","`RecipientRequest` is a `Future` which represents asynchronous message sending process."],["Request","`Request` is a `Future` which represents asynchronous message sending process."],["Response","Helper type for representing different type of message responses"],["SpawnHandle","Spawned future handle. Could be used for cancelling spawned future."],["Supervisor","Actor supervisor"],["SyncArbiter","Sync arbiter"],["SyncContext","Sync actor execution context"],["System","System is an actor which manages runtime."]],"trait":[["Actor","Actors are objects which encapsulate state and behavior."],["ActorContext","Actor execution context"],["ActorFuture","Trait for types which are a placeholder of a value that may become available at some later point in time."],["ActorStream","A stream of values, not all of which may have been produced yet."],["ArbiterService","Trait defines arbiter's service."],["AsyncContext","Asynchronous execution context"],["ContextFutureSpawner","Helper trait which can spawn future into actor's context"],["Handler","Message handler"],["Message","Message type"],["StreamHandler","Stream handler"],["Supervised","Actors with ability to restart after failure"],["SystemService","Trait defines system's service."],["WrapFuture","Helper trait that allows conversion of normal future into `ActorFuture`"],["WrapStream","Helper trait that allows conversion of normal stream into `ActorStream`"]],"type":[["ResponseActFuture","A specialized actor future for async message handler"],["ResponseFuture","A specialized future for async message handler"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.ActorResponse.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.ActorResponse.html new file mode 100644 index 0000000..99fe17f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.ActorResponse.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::ActorResponse - Rust

Struct actix_web::actix::actix::ActorResponse[]

pub struct ActorResponse<A, I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<A, I, E> ActorResponse<A, I, E> where
    A: Actor

Create response

+

Create async response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for ActorResponse<A, I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<A, I, E> !Send for ActorResponse<A, I, E>

impl<A, I, E> !Sync for ActorResponse<A, I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Addr.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Addr.html new file mode 100644 index 0000000..834d08f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Addr.html @@ -0,0 +1,33 @@ +actix_web::actix::actix::Addr - Rust

Struct actix_web::actix::actix::Addr[]

pub struct Addr<A> where
    A: Actor
{ /* fields omitted */ }

Address of the actor

+
+

+ Methods +

+

impl<A> Addr<A> where
    A: Actor

Indicates if actor is still alive

+

Send message unconditionally

+

This method ignores actor's mailbox capacity, it silently fails if +mailbox is closed.

+

Try send message

+

This method fails if actor's mailbox is full or closed. This method +register current task in receivers queue.

+

Send asynchronous message and wait for response.

+

Communication channel to the actor is bounded. if returned Future +object get dropped, message cancels.

+

Get Recipient for specific message type

+
+

+ Trait Implementations +

+

impl<A> Eq for Addr<A> where
    A: Actor

impl<A> PartialEq<Addr<A>> for Addr<A> where
    A: Actor

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<A> Hash for Addr<A> where
    A: Actor

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl<A> Clone for Addr<A> where
    A: Actor

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<A, M, B> MessageResponse<A, M> for Addr<B> where
    A: Actor,
    B: Actor<Context = Context<B>>,
    M: Message<Result = Addr<B>>, 

+

+ Auto Trait Implementations +

+
+

impl<A> Send for Addr<A>

impl<A> Sync for Addr<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Arbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Arbiter.html new file mode 100644 index 0000000..b2cfa1f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Arbiter.html @@ -0,0 +1,53 @@ +actix_web::actix::actix::Arbiter - Rust

Struct actix_web::actix::actix::Arbiter[]

pub struct Arbiter { /* fields omitted */ }

Event loop controller

+

Arbiter controls event loop in it's thread. Each arbiter runs in separate +thread. Arbiter provides several api for event loop access. Each arbiter +can belongs to specific System actor.

+

By default, a panic in an Arbiter does not stop the rest of the System, +unless the panic is in the System actor. Users of Arbiter can opt into +shutting down the system on panic by using Arbiter::builder() and enabling +stop_system_on_panic.

+
+

+ Methods +

+

impl Arbiter

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Returns current arbiter's name

+

Returns current arbiter's address

+

This function returns arbiter's registry,

+

Executes a future on the current thread.

+

Executes a future on the current thread.

+

Start new arbiter and then start actor in created arbiter. +Returns Addr<Syn, A> of created actor.

+
+

+ Trait Implementations +

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Drop for Arbiter

Executes the destructor for this type. Read more

+

impl Actor for Arbiter

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Arbiter

impl Sync for Arbiter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Condition.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Condition.html new file mode 100644 index 0000000..ffca45f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Condition.html @@ -0,0 +1,15 @@ +actix_web::actix::actix::Condition - Rust

Struct actix_web::actix::actix::Condition[]

pub struct Condition<T> where
    T: Clone
{ /* fields omitted */ }
+

+ Methods +

+

impl<T> Condition<T> where
    T: Clone

+

+ Trait Implementations +

+

impl<T> Default for Condition<T> where
    T: Clone

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> !Send for Condition<T>

impl<T> !Sync for Condition<T>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Context.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Context.html new file mode 100644 index 0000000..08dbf68 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Context.html @@ -0,0 +1,34 @@ +actix_web::actix::actix::Context - Rust

Struct actix_web::actix::actix::Context[]

pub struct Context<A> where
    A: Actor<Context = Context<A>>, 
{ /* fields omitted */ }

Actor execution context

+
+

+ Methods +

+

impl<A> Context<A> where
    A: Actor<Context = Context<A>>, 

Handle of the running future

+

SpawnHandle is the handle returned by AsyncContext::spawn() method.

+

Set mailbox capacity

+

By default mailbox capacity is 16 messages.

+
+

+ Trait Implementations +

+

impl<A> ActorContext for Context<A> where
    A: Actor<Context = Context<A>>, 

Immediately stop processing incoming messages and switch to a stopping state Read more

+

Terminate actor execution

+

Actor execution state

+

impl<A> AsyncContextParts<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

impl<A> AsyncContext<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

+

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

+

Check if context is paused (waiting for future completion or stopping)

+

Cancel future. handle is a value returned by spawn method.

+

Return Address of the context

+

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

+

This method is similar to add_stream but it skips stream errors. Read more

+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

+

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

+

Spawns job to execute closure with specified interval

+

impl<A, M> ToEnvelope<A, M> for Context<A> where
    A: Actor<Context = Context<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A> !Send for Context<A>

impl<A> !Sync for Context<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.MessageResult.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.MessageResult.html new file mode 100644 index 0000000..2762f20 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.MessageResult.html @@ -0,0 +1,11 @@ +actix_web::actix::actix::MessageResult - Rust

Struct actix_web::actix::actix::MessageResult[]

pub struct MessageResult<M>(pub <M as Message>::Result)
where
    M: Message
;

Helper type that implements MessageResponse trait

+
+

+ Trait Implementations +

+

impl<A, M> MessageResponse<A, M> for MessageResult<M> where
    A: Actor,
    M: Message

+

+ Auto Trait Implementations +

+
+

impl<M> Send for MessageResult<M> where
    <M as Message>::Result: Send

impl<M> Sync for MessageResult<M> where
    <M as Message>::Result: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Recipient.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Recipient.html new file mode 100644 index 0000000..c76f5a9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Recipient.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::Recipient - Rust

Struct actix_web::actix::actix::Recipient[]

pub struct Recipient<M> where
    M: Message + Message + Send,
    <M as Message>::Result: Send
{ /* fields omitted */ }

Recipient type allows to send one specific message to an actor.

+

You can get recipient with Addr<_, _>::recipient() method. +It is possible to use Clone::clone() method to get cloned recipient.

+
+

+ Methods +

+

impl<M> Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Send message

+

Deliver message even if recipient's mailbox is full

+

Try send message

+

This method fails if actor's mailbox is full or closed. This method +register current task in receivers queue.

+

Send message and asynchronously wait for response.

+

Communication channel to the actor is bounded. if returned Request +object get dropped, message cancels.

+
+

+ Trait Implementations +

+

impl<M> Eq for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

impl<M> PartialEq<Recipient<M>> for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<M> Hash for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl<M> Clone for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for Recipient<M>

impl<M> !Sync for Recipient<M>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.RecipientRequest.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.RecipientRequest.html new file mode 100644 index 0000000..0e6c5ec --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.RecipientRequest.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::RecipientRequest - Rust

Struct actix_web::actix::actix::RecipientRequest[]

#[must_use = "future do nothing unless polled"] +
pub struct RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send
{ /* fields omitted */ }

RecipientRequest is a Future which represents asynchronous message +sending process.

+
+

+ Methods +

+

impl<M> RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<M> Future for RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for RecipientRequest<M>

impl<M> !Sync for RecipientRequest<M>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Request.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Request.html new file mode 100644 index 0000000..c2256cd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Request.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::Request - Rust

Struct actix_web::actix::actix::Request[]

#[must_use = "You have to wait on request otherwise Message wont be delivered"] +
pub struct Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ /* fields omitted */ }

Request is a Future which represents asynchronous message sending +process.

+
+

+ Methods +

+

impl<A, M> Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<A, M> Future for Request<A, M> where
    A: Handler<M>,
    M: Message + Send,
    <A as Actor>::Context: ToEnvelope<A, M>,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, M> Send for Request<A, M> where
    A: Send,
    M: Send,
    <M as Message>::Result: Send

impl<A, M> Sync for Request<A, M> where
    A: Sync,
    M: Sync,
    <M as Message>::Result: Send

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Response.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Response.html new file mode 100644 index 0000000..a6f1b4c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Response.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::Response - Rust

Struct actix_web::actix::actix::Response[]

pub struct Response<I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<I, E> Response<I, E>

Create async response

+

Create response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for Response<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<I, E> !Send for Response<I, E>

impl<I, E> !Sync for Response<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SpawnHandle.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SpawnHandle.html new file mode 100644 index 0000000..d721aa4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SpawnHandle.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::SpawnHandle - Rust

Struct actix_web::actix::actix::SpawnHandle[]

pub struct SpawnHandle(_);

Spawned future handle. Could be used for cancelling spawned future.

+
+

+ Methods +

+

impl SpawnHandle

Get next handle

+
+

+ Trait Implementations +

+

impl Eq for SpawnHandle

impl PartialEq<SpawnHandle> for SpawnHandle

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for SpawnHandle

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl Clone for SpawnHandle

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SpawnHandle

Formats the value using the given formatter. Read more

+

impl Default for SpawnHandle

Returns the "default value" for a type. Read more

+

impl Copy for SpawnHandle

+

+ Auto Trait Implementations +

+
+

impl Send for SpawnHandle

impl Sync for SpawnHandle

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Supervisor.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Supervisor.html new file mode 100644 index 0000000..7135c82 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.Supervisor.html @@ -0,0 +1,68 @@ +actix_web::actix::actix::Supervisor - Rust

Struct actix_web::actix::actix::Supervisor[]

pub struct Supervisor<A> where
    A: Supervised<Context = Context<A>> + Actor
{ /* fields omitted */ }

Actor supervisor

+

Supervisor manages incoming message for actor. In case of actor failure, +supervisor creates new execution context and restarts actor lifecycle. +Supervisor does not does not re-create actor, it just calls restarting() +method.

+

Supervisor has same lifecycle as actor. In situation when all addresses to +supervisor get dropped and actor does not execute anything, supervisor +terminates.

+

Supervisor can not guarantee that actor successfully process incoming +message. If actor fails during message processing, this message can not be +recovered. Sender would receive Err(Cancelled) error in this situation.

+

Example

+
+#[derive(Message)]
+struct Die;
+
+struct MyActor;
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+// To use actor with supervisor actor has to implement `Supervised` trait
+impl actix::Supervised for MyActor {
+    fn restarting(&mut self, ctx: &mut Context<MyActor>) {
+        println!("restarting");
+    }
+}
+
+impl Handler<Die> for MyActor {
+    type Result = ();
+
+    fn handle(&mut self, _: Die, ctx: &mut Context<MyActor>) {
+        ctx.stop();
+    }
+}
+
+fn main() {
+    System::run(|| {
+        let addr = actix::Supervisor::start(|_| MyActor);
+
+        addr.do_send(Die);
+    });
+}
+
+

+ Methods +

+

impl<A> Supervisor<A> where
    A: Supervised<Context = Context<A>> + Actor

Start new supervised actor in current tokio runtime.

+

Type of returned address depends on variable type. For example to get +Addr<Syn, _> of newly created actor, use explicitly Addr<Syn, _> type as type of a variable.

+ +
+struct MyActor;
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+// Get `Addr` of a MyActor actor
+let addr = actix::Supervisor::start(|_| MyActor);
+

Start new supervised actor in arbiter's thread.

+
+

+ Auto Trait Implementations +

+
+

impl<A> !Send for Supervisor<A>

impl<A> !Sync for Supervisor<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncArbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncArbiter.html new file mode 100644 index 0000000..ab8d599 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncArbiter.html @@ -0,0 +1,25 @@ +actix_web::actix::actix::SyncArbiter - Rust

Struct actix_web::actix::actix::SyncArbiter[]

pub struct SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync arbiter

+
+

+ Methods +

+

impl<A> SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

Start new sync arbiter with specified number of worker threads. +Returns address of the started actor.

+
+

+ Trait Implementations +

+

impl<A> Actor for SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for SyncArbiter<A>

impl<A> Sync for SyncArbiter<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncContext.html new file mode 100644 index 0000000..e0f5c85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.SyncContext.html @@ -0,0 +1,15 @@ +actix_web::actix::actix::SyncContext - Rust

Struct actix_web::actix::actix::SyncContext[]

pub struct SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync actor execution context

+
+

+ Trait Implementations +

+

impl<A> ActorContext for SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 

Stop current actor. SyncContext creates and starts new actor.

+

Terminate actor execution. SyncContext creates and starts new actor.

+

Actor execution state

+

impl<A, M> ToEnvelope<A, M> for SyncContext<A> where
    A: Actor<Context = SyncContext<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A> !Send for SyncContext<A>

impl<A> !Sync for SyncContext<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.System.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.System.html new file mode 100644 index 0000000..99f2291 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/struct.System.html @@ -0,0 +1,65 @@ +actix_web::actix::actix::System - Rust

Struct actix_web::actix::actix::System[]

pub struct System { /* fields omitted */ }

System is an actor which manages runtime.

+

Before starting any actix's actors, System actor has to be created and +started with System::run() call. This method creates new Arbiter in +current thread and starts System actor.

+

Examples

+
+extern crate actix;
+
+use actix::prelude::*;
+use std::time::Duration;
+
+struct Timer {
+    dur: Duration,
+}
+
+impl Actor for Timer {
+    type Context = Context<Self>;
+
+    // stop system after `self.dur` seconds
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        ctx.run_later(self.dur, |act, ctx| {
+            // Stop current running system.
+            System::current().stop();
+        });
+    }
+}
+
+fn main() {
+    // initialize system and run it.
+    // This function blocks current thread
+    let code = System::run(|| {
+        // Start `Timer` actor
+        Timer {
+            dur: Duration::new(0, 1),
+        }.start();
+    });
+
+    std::process::exit(code);
+}
+
+

+ Methods +

+

impl System

Create new system.

+

This method panics if it can not create tokio runtime

+

Get current running system.

+

Execute function with system reference.

+

Stop the system

+

System arbiter

+

Get current system registry.

+

This function will start tokio runtime and will finish once the +System::stop() message get called. +Function f get called within tokio runtime context.

+
+

+ Trait Implementations +

+

impl Clone for System

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for System

impl Sync for System

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Actor.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Actor.html new file mode 100644 index 0000000..5796266 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Actor.html @@ -0,0 +1,121 @@ +actix_web::actix::actix::Actor - Rust

Trait actix_web::actix::actix::Actor[]

pub trait Actor: 'static {
+    type Context: ActorContext;
+    fn started(&mut self, ctx: &mut Self::Context) { ... }
+
fn stopping(&mut self, ctx: &mut Self::Context) -> Running { ... } +
fn stopped(&mut self, ctx: &mut Self::Context) { ... } +
fn start(self) -> Addr<Self>
    where
        Self: Actor<Context = Context<Self>>
, + { ... } +
fn start_default() -> Addr<Self>
    where
        Self: Actor<Context = Context<Self>> + Default
, + { ... } +
fn create<F>(f: F) -> Addr<Self>
    where
        F: FnOnce(&mut Context<Self>) -> Self + 'static,
        Self: Actor<Context = Context<Self>>
, + { ... } +}

Actors are objects which encapsulate state and behavior.

+

Actors run within specific execution context +Context. +Context object is available only during execution. Each actor has separate +execution context. Also execution context controls lifecycle of an actor.

+

Actors communicate exclusively by exchanging messages. Sender actor can +wait for response. Actors are not referenced directly, but by +address Addr +To be able to handle specific message actor has to provide +Handler<M> +implementation for this message. All messages are statically typed. Message +could be handled in asynchronous fashion. Actor can spawn other actors or +add futures or streams to execution context. Actor trait provides several +methods that allow to control actor lifecycle.

+

Actor lifecycle

Started

+

Actor starts in Started state, during this state started method get +called.

+

Running

+

After Actor's method started get called, actor transitions to Running +state. Actor can stay in running state indefinitely long.

+

Stopping

+

Actor execution state changes to stopping state in following situations,

+
    +
  • Context::stop get called by actor itself
  • +
  • all addresses to the actor get dropped
  • +
  • no evented objects are registered in context.
  • +
+

Actor could restore from stopping state to running state by creating new +address or adding evented object, like future or stream, in +Actor::stopping method.

+

If actor changed state to a stopping state because of Context::stop() +get called then context immediately stops processing incoming messages and +calls Actor::stopping() method. If actor does not restore back to a +running state, all unprocessed messages get dropped.

+

Stopped

+

If actor does not modify execution context during stopping state actor +state changes to Stopped. This state is considered final and at this +point actor get dropped.

+
+

+ Associated Types +

+
+

Actor execution context type

+
+

+ Provided Methods +

+
+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There +could be several reasons for stopping. Context::stop get called +by the actor itself. All addresses to current actor get dropped and +no more evented objects left in the context.

+

Actor could restore from stopping state by returning +Running::Continue value.

+

Method is called after an actor is stopped, it can be used to perform +any needed cleanup work or spawning more actors. This is final state, +after this call actor get dropped.

+

Start new asynchronous actor, returns address of newly created actor.

+

Examples

+
+use actix::*;
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        let addr = MyActor.start(); // <- start actor and get it's address
+    });
+}
+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor +initialization.

+

Examples

+
+use actix::*;
+
+struct MyActor {
+    val: usize,
+}
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        let addr = MyActor::create(|ctx: &mut Context<MyActor>| MyActor { val: 10 });
+    });
+}
+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorContext.html new file mode 100644 index 0000000..103166b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorContext.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::ActorContext - Rust

Trait actix_web::actix::actix::ActorContext[]

pub trait ActorContext {
+    fn stop(&mut self);
+
fn terminate(&mut self); +
fn state(&self) -> ActorState; +}

Actor execution context

+

Each actor runs within specific execution context. Actor::Context defines +context. Execution context defines type of execution, actor communication +channels (message handling).

+
+

+ Required Methods +

+
+

Immediately stop processing incoming messages and switch to a +stopping state

+

Terminate actor execution

+

Actor execution state

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorFuture.html new file mode 100644 index 0000000..c7d7486 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorFuture.html @@ -0,0 +1,81 @@ +actix_web::actix::actix::ActorFuture - Rust

Trait actix_web::actix::actix::ActorFuture[]

pub trait ActorFuture {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; + + fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn drop_err(self) -> DropErr<Self> { ... } +
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, + { ... } +
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } +}

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+

This is similar to futures::Future trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of value that this future will resolved with if it is +successful.

+

The type of error that this future will resolve with if it fails in a +normal fashion.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Map this future's result to a different type, returning a new future of +the resulting type.

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for +this future's Error, returning a new future.

+

Chain on a computation for when a future finished, passing the result of +the future to the provided closure f.

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain.

+

err value get returned as a timeout error.

+
+

+ Implementations on Foreign Types +

+

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

+

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorStream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorStream.html new file mode 100644 index 0000000..b442bc3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ActorStream.html @@ -0,0 +1,64 @@ +actix_web::actix::actix::ActorStream - Rust

Trait actix_web::actix::actix::ActorStream[]

pub trait ActorStream {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; + + fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, + { ... } +
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, + { ... } +
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, + { ... } +
fn finish(self) -> StreamFinish<Self> { ... } +}

A stream of values, not all of which may have been produced yet.

+

This is similar to futures::Stream trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of item this stream will yield on success.

+

The type of error this stream may generate.

+

The actor within which this stream runs.

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting +item to the provided closure f.

+

Chain on a computation for when a value is ready, passing the successful +results to the provided closure f.

+

Execute an accumulating computation over a stream, collecting all the +values into one final result.

+

Add timeout to stream.

+

err value get returned as a timeout error.

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ArbiterService.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ArbiterService.html new file mode 100644 index 0000000..e303b94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ArbiterService.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::ArbiterService - Rust

Trait actix_web::actix::actix::ArbiterService[]

pub trait ArbiterService: Actor<Context = Context<Self>> + Supervised + Default {
+    fn start_service() -> Addr<Self> { ... }
+
fn service_started(&mut self, ctx: &mut Context<Self>) { ... } +
fn from_registry() -> Addr<Self> { ... } +}

Trait defines arbiter's service.

+
+

+ Provided Methods +

+
+

Construct and srtart arbiter service

+

Method is called during service initialization.

+

Get actor's address from arbiter registry

+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.AsyncContext.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.AsyncContext.html new file mode 100644 index 0000000..ee708fd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.AsyncContext.html @@ -0,0 +1,115 @@ +actix_web::actix::actix::AsyncContext - Rust

Trait actix_web::actix::actix::AsyncContext[]

pub trait AsyncContext<A>: ActorContext where
    A: Actor<Context = Self>, 
{ + fn address(&self) -> Addr<A>; +
fn spawn<F>(&mut self, fut: F) -> SpawnHandle
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn wait<F>(&mut self, fut: F)
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn waiting(&self) -> bool; +
fn cancel_future(&mut self, handle: SpawnHandle) -> bool; + + fn add_stream<S>(&mut self, fut: S) -> SpawnHandle
    where
        A: StreamHandler<<S as Stream>::Item, <S as Stream>::Error>,
        S: Stream + 'static
, + { ... } +
fn add_message_stream<S>(&mut self, fut: S)
    where
        A: Handler<<S as Stream>::Item>,
        S: Stream<Error = ()> + 'static,
        <S as Stream>::Item: Message
, + { ... } +
fn notify<M>(&mut self, msg: M)
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn notify_later<M>(&mut self, msg: M, after: Duration) -> SpawnHandle
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn run_later<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnOnce(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +
fn run_interval<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnMut(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +}

Asynchronous execution context

+
+

+ Required Methods +

+
+

Return Address of the context

+

Spawn async future into context. Returns handle of the item, +could be used for cancelling execution.

+

All futures cancel during actor stopping stage.

+

Spawn future into the context. Stop processing any of incoming events +until this future resolves.

+

Check if context is paused (waiting for future completion or stopping)

+

Cancel future. handle is a value returned by spawn method.

+
+

+ Provided Methods +

+
+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       ctx.add_stream(once::<Ping, io::Error>(Ok(Ping)));
+   }
+}
+

This method is similar to add_stream but it skips stream errors.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl Handler<Ping> for MyActor {
+    type Result = ();
+
+    fn handle(&mut self, msg: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        // add messages stream
+        ctx.add_message_stream(once(Ok(Ping)));
+    }
+}
+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns +spawn handle which could be used for cancellation. Notification get +cancelled if context's stop method get called.

+

Execute closure after specified period of time within same Actor and +Context. Execution get cancelled if context's stop method get +called.

+

Spawns job to execute closure with specified interval

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ContextFutureSpawner.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ContextFutureSpawner.html new file mode 100644 index 0000000..c069ec3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.ContextFutureSpawner.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::ContextFutureSpawner - Rust

Trait actix_web::actix::actix::ContextFutureSpawner[]

pub trait ContextFutureSpawner<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ + fn spawn(self, ctx: &mut <A as Actor>::Context); +
fn wait(self, ctx: &mut <A as Actor>::Context); +}

Helper trait which can spawn future into actor's context

+
+

+ Required Methods +

+
+

spawn future into Context<A>

+

Spawn future into the context. Stop processing any of incoming events +until this future resolves.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Handler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Handler.html new file mode 100644 index 0000000..fe448c0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Handler.html @@ -0,0 +1,42 @@ +actix_web::actix::actix::Handler - Rust

Trait actix_web::actix::actix::Handler[]

pub trait Handler<M>: Actor + Actor where
    M: Message
{ + type Result: MessageResponse<Self, M>; + fn handle(&mut self, msg: M, ctx: &mut Self::Context) -> Self::Result; +}

Message handler

+

Handler implementation is a general way how to handle +incoming messages, streams, futures.

+

M is a message which can be handled by the actor.

+
+

+ Associated Types +

+
+

The type of value that this handle will return

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Message.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Message.html new file mode 100644 index 0000000..20cb430 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Message.html @@ -0,0 +1,35 @@ +actix_web::actix::actix::Message - Rust

Trait actix_web::actix::actix::Message[]

pub trait Message {
+    type Result: 'static;
+}

Message type

+
+

+ Associated Types +

+
+

The type of value that this message will resolved with if it is +successful.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.StreamHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.StreamHandler.html new file mode 100644 index 0000000..63e3997 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.StreamHandler.html @@ -0,0 +1,74 @@ +actix_web::actix::actix::StreamHandler - Rust

Trait actix_web::actix::actix::StreamHandler[]

pub trait StreamHandler<I, E>: Actor + Actor {
+    fn handle(&mut self, item: I, ctx: &mut Self::Context);
+
+    fn started(&mut self, ctx: &mut Self::Context) { ... }
+
fn error(&mut self, err: E, ctx: &mut Self::Context) -> Running { ... } +
fn finished(&mut self, ctx: &mut Self::Context) { ... } +
fn add_stream<S>(fut: S, ctx: &mut Self::Context) -> SpawnHandle
    where
        E: 'static,
        I: 'static,
        S: Stream<Item = I, Error = E> + 'static,
        Self::Context: AsyncContext<Self>
, + { ... } +}

Stream handler

+

This is helper trait that allows to handle Stream in +a similar way as normal actor messages. +When stream resolves to a next item, handle() method of this trait +get called. If stream produces error, error() method get called. +Depends on result of the error() method, actor could continue to +process stream items or stop stream processing. +When stream completes, finished() method get called. By default +finished() method stops actor execution.

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Provided Methods +

+
+

Method is called when stream get polled first time.

+

Method is called when stream emits error.

+

If this method returns ErrorAction::Continue stream processing +continues otherwise stream processing stops. Default method +implementation returns ErrorAction::Stop

+

Method is called when stream finishes.

+

By default this method stops actor execution.

+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       Self::add_stream(once::<Ping, io::Error>(Ok(Ping)), ctx);
+   }
+}
+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Supervised.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Supervised.html new file mode 100644 index 0000000..61c58f2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.Supervised.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::Supervised - Rust

Trait actix_web::actix::actix::Supervised[]

pub trait Supervised: Actor {
+    fn restarting(&mut self, ctx: &mut Self::Context) { ... }
+}

Actors with ability to restart after failure

+

Supervised actors can be managed by Supervisor. +Lifecycle events are extended with restarting method. +If actor fails, supervisor creates new execution context and restarts actor. +restarting method is called during restart. After call to this method +Actor execute state changes to Started and normal lifecycle process +starts.

+

restarting method get called with newly constructed Context object.

+
+

+ Provided Methods +

+
+

Method called when supervisor restarting failed actor

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.SystemService.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.SystemService.html new file mode 100644 index 0000000..ca4c35a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.SystemService.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::SystemService - Rust

Trait actix_web::actix::actix::SystemService[]

pub trait SystemService: Actor<Context = Context<Self>> + Supervised + Default {
+    fn start_service(sys: &Addr<Arbiter>) -> Addr<Self> { ... }
+
fn service_started(&mut self, ctx: &mut Context<Self>) { ... } +
fn from_registry() -> Addr<Self> { ... } +}

Trait defines system's service.

+
+

+ Provided Methods +

+
+

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapFuture.html new file mode 100644 index 0000000..9b630ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapFuture.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::WrapFuture - Rust

Trait actix_web::actix::actix::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ + type Future: ActorFuture; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Future; +}

Helper trait that allows conversion of normal future into ActorFuture

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal future to a ActorFuture

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapStream.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapStream.html new file mode 100644 index 0000000..4fdbd23 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/trait.WrapStream.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::WrapStream - Rust

Trait actix_web::actix::actix::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ + type Stream: ActorStream; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Stream; +}

Helper trait that allows conversion of normal stream into ActorStream

+
+

+ Associated Types +

+
+

The stream that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal stream to a ActorStream

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseActFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseActFuture.html new file mode 100644 index 0000000..45b03d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseActFuture.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::ResponseActFuture - Rust

Type Definition actix_web::actix::actix::ResponseActFuture[]

type ResponseActFuture<A, I, E> = Box<ActorFuture<Error = E, Item = I, Actor = A> + 'static>;

A specialized actor future for async message handler

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseFuture.html new file mode 100644 index 0000000..a9e33c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/actix/type.ResponseFuture.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::ResponseFuture - Rust

Type Definition actix_web::actix::actix::ResponseFuture[]

type ResponseFuture<I, E> = Box<Future<Error = E, Item = I> + 'static>;

A specialized future for async message handler

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fn.run.html b/static/api/actix-web/0.7.2/actix_web/actix/fn.run.html new file mode 100644 index 0000000..ca99b85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fn.run.html @@ -0,0 +1,23 @@ +actix_web::actix::run - Rust

Function actix_web::actix::run[]

pub fn run<F, R>(f: F) where
    F: FnOnce() -> R,
    R: Future<Item = (), Error = ()> + 'static, 

Start the System and execute supplied future.

+

This function does the following:

+
    +
  • Creates and starts actix System with default configuration.
  • +
  • Spawn the given future onto the current arbiter.
  • +
  • Block the current thread until the system shuts down.
  • +
+

run functions returns when System::current().stop() method get called.

+

Examples

+
+use std::time::{Duration, Instant};
+use tokio_timer::Delay;
+
+fn main() {
+  actix::run(
+      || Delay::new(Instant::now() + Duration::from_millis(100))
+           .map(|_| actix::System::current().stop())
+           .map_err(|_| ())
+  );
+}
+

Panics

+

This function panics if actix system is already running.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fn.spawn.html b/static/api/actix-web/0.7.2/actix_web/actix/fn.spawn.html new file mode 100644 index 0000000..58ecad3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fn.spawn.html @@ -0,0 +1,4 @@ +actix_web::actix::spawn - Rust

Function actix_web::actix::spawn[]

pub fn spawn<F>(f: F) where
    F: Future<Item = (), Error = ()> + 'static, 

Spawns a future on the current arbiter.

+

Panics

+

This function panics if actix system is not running.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorFuture.t.html new file mode 100644 index 0000000..a5df857 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorStream.t.html new file mode 100644 index 0000000..489af55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/ActorStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/AndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/AndThen.t.html new file mode 100644 index 0000000..e6c39d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/AndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/DropErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/DropErr.t.html new file mode 100644 index 0000000..872d170 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/DropErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DropErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/Either.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/Finish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/Finish.t.html new file mode 100644 index 0000000..ed486e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/Finish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Finish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/FromErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/FromErr.t.html new file mode 100644 index 0000000..97ef002 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/FromErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FromErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureResult.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureResult.t.html new file mode 100644 index 0000000..2925708 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureWrap.t.html new file mode 100644 index 0000000..e267ec4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/FutureWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/IntoActorFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/IntoActorFuture.t.html new file mode 100644 index 0000000..211e5cb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/IntoActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/Map.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/Map.t.html new file mode 100644 index 0000000..9009faf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/Map.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Map.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/MapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/MapErr.t.html new file mode 100644 index 0000000..21f7573 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/MapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamAndThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamAndThen.t.html new file mode 100644 index 0000000..bd6e6ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamAndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamAndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFinish.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFinish.t.html new file mode 100644 index 0000000..da33c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFinish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFinish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFold.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFold.t.html new file mode 100644 index 0000000..b938ceb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamFold.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFold.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMap.t.html new file mode 100644 index 0000000..441690b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMapErr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMapErr.t.html new file mode 100644 index 0000000..67136f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamMapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamThen.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamThen.t.html new file mode 100644 index 0000000..bd638fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamTimeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamTimeout.t.html new file mode 100644 index 0000000..30bc1f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamTimeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamWrap.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamWrap.t.html new file mode 100644 index 0000000..59d4cbe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/StreamWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/Then.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/Then.t.html new file mode 100644 index 0000000..1cc8020 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/Then.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Then.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/Timeout.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/Timeout.t.html new file mode 100644 index 0000000..d6412e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/Timeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Timeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapFuture.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapFuture.t.html new file mode 100644 index 0000000..fcae8df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapStream.t.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapStream.t.html new file mode 100644 index 0000000..259580b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/WrapStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/enum.Either.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/enum.Either.html new file mode 100644 index 0000000..7665599 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/enum.Either.html @@ -0,0 +1,40 @@ +actix_web::actix::fut::Either - Rust

Enum actix_web::actix::fut::Either[]

pub enum Either<A, B> {
+    A(A),
+    B(B),
+}

Combines two different futures yielding the same item and error +types into a single type.

+

+ Variants

+

First branch of the type

+

Second branch of the type

+
+

+ Methods +

+

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

+

This method is typically useful when combined with the Future::select2 +combinator.

+
+

+ Trait Implementations +

+

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/err.v.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/err.v.html new file mode 100644 index 0000000..a1c0ed9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/err.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.err.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.err.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.err.html new file mode 100644 index 0000000..432e75d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.err.html @@ -0,0 +1,14 @@ +actix_web::actix::fut::err - Rust

Function actix_web::actix::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_err_1 = fut::err::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.ok.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.ok.html new file mode 100644 index 0000000..412635e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.ok.html @@ -0,0 +1,16 @@ +actix_web::actix::fut::ok - Rust

Function actix_web::actix::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::fut::*;
+use actix::{Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = ok::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.result.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.result.html new file mode 100644 index 0000000..8a44c18 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.result.html @@ -0,0 +1,16 @@ +actix_web::actix::fut::result - Rust

Function actix_web::actix::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

+

The returned future represents a computation which is finished immediately. +This can be useful with the finished and failed base future types to +convert an immediate value to a future to interoperate elsewhere.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = fut::result::<u32, u32, MyActor>(Ok(1));
+let future_of_err_2 = fut::result::<u32, u32, MyActor>(Err(2));
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_future.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_future.html new file mode 100644 index 0000000..51516e7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_future.html @@ -0,0 +1,2 @@ +actix_web::actix::fut::wrap_future - Rust

Function actix_web::actix::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_stream.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_stream.html new file mode 100644 index 0000000..1204f72 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/fn.wrap_stream.html @@ -0,0 +1,2 @@ +actix_web::actix::fut::wrap_stream - Rust

Function actix_web::actix::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/index.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/index.html new file mode 100644 index 0000000..8cd0354 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/index.html @@ -0,0 +1,248 @@ +actix_web::actix::fut - Rust

Module actix_web::actix::fut[]

Custom Future implementation with Actix support

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AndThen +

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+ +
DropErr + +
Finish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
FromErr +

Future for the from_err combinator, changing the error type of a future.

+ +
FutureResult +

A future representing a value that is immediately ready.

+ +
FutureWrap + +
Map +

Future for the map combinator, changing the type of a future.

+ +
MapErr +

Future for the map_err combinator, changing the error type of a future.

+ +
StreamAndThen +

A stream combinator which chains a computation onto values produced by a +stream.

+ +
StreamFinish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
StreamFold +

A future used to collect all the results of a stream into one generic type.

+ +
StreamMap +

A stream combinator which will change the type of a stream from one +type to another.

+ +
StreamMapErr +

A stream combinator which will change the error type of a stream from one +type to another.

+ +
StreamThen +

A stream combinator which chains a computation onto each item produced by a +stream.

+ +
StreamTimeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +
StreamWrap + +
Then +

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+ +
Timeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +

Enums

+ + + + +
Either +

Combines two different futures yielding the same item and error +types into a single type.

+ +

Traits

+ + + + + + + + + + + + + + + + + + + + +
ActorFuture +

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+ +
ActorStream +

A stream of values, not all of which may have been produced yet.

+ +
IntoActorFuture +

Class of types which can be converted into an actor future.

+ +
WrapFuture +

Helper trait that allows conversion of normal future into ActorFuture

+ +
WrapStream +

Helper trait that allows conversion of normal stream into ActorStream

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + +
err +

Creates a "leaf future" from an immediate value of a failed computation.

+ +
ok +

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+ +
result +

Creates a new "leaf future" which will resolve with the given result.

+ +
wrap_future +

Converts normal future into ActorFuture

+ +
wrap_stream +

Converts normal stream into ActorStream

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/ok.v.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/ok.v.html new file mode 100644 index 0000000..dca3201 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/ok.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ok.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/result.v.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/result.v.html new file mode 100644 index 0000000..94765e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/result.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.result.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/fut/sidebar-items.js new file mode 100644 index 0000000..24c269b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Either","Combines two different futures yielding the same item and error types into a single type."]],"fn":[["err","Creates a \"leaf future\" from an immediate value of a failed computation."],["ok","Creates a \"leaf future\" from an immediate value of a finished and successful computation."],["result","Creates a new \"leaf future\" which will resolve with the given result."],["wrap_future","Converts normal future into `ActorFuture`"],["wrap_stream","Converts normal stream into `ActorStream`"]],"struct":[["AndThen","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully."],["DropErr",""],["Finish","A combinator used to convert stream into a future, future resolves when stream completes."],["FromErr","Future for the `from_err` combinator, changing the error type of a future."],["FutureResult","A future representing a value that is immediately ready."],["FutureWrap",""],["Map","Future for the `map` combinator, changing the type of a future."],["MapErr","Future for the `map_err` combinator, changing the error type of a future."],["StreamAndThen","A stream combinator which chains a computation onto values produced by a stream."],["StreamFinish","A combinator used to convert stream into a future, future resolves when stream completes."],["StreamFold","A future used to collect all the results of a stream into one generic type."],["StreamMap","A stream combinator which will change the type of a stream from one type to another."],["StreamMapErr","A stream combinator which will change the error type of a stream from one type to another."],["StreamThen","A stream combinator which chains a computation onto each item produced by a stream."],["StreamTimeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."],["StreamWrap",""],["Then","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome."],["Timeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."]],"trait":[["ActorFuture","Trait for types which are a placeholder of a value that may become available at some later point in time."],["ActorStream","A stream of values, not all of which may have been produced yet."],["IntoActorFuture","Class of types which can be converted into an actor future."],["WrapFuture","Helper trait that allows conversion of normal future into `ActorFuture`"],["WrapStream","Helper trait that allows conversion of normal stream into `ActorStream`"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.AndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.AndThen.html new file mode 100644 index 0000000..fbf3a31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.AndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::AndThen - Rust

Struct actix_web::actix::fut::AndThen[]

#[must_use = "futures do nothing unless polled"] +
pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+

This is created by the Future::and_then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.DropErr.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.DropErr.html new file mode 100644 index 0000000..7176304 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.DropErr.html @@ -0,0 +1,23 @@ +actix_web::actix::fut::DropErr - Rust

Struct actix_web::actix::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Finish.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Finish.html new file mode 100644 index 0000000..33f6bf9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Finish.html @@ -0,0 +1,44 @@ +actix_web::actix::fut::Finish - Rust

Struct actix_web::actix::fut::Finish[]

#[must_use = "streams do nothing unless polled"] +
pub struct Finish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the Stream::finish method.

+
+

+ Methods +

+

impl<S> Finish<S>

+

+ Trait Implementations +

+

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

impl<S> Future for Finish<S> where
    S: Stream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FromErr.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FromErr.html new file mode 100644 index 0000000..92f298e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FromErr.html @@ -0,0 +1,27 @@ +actix_web::actix::fut::FromErr - Rust

Struct actix_web::actix::fut::FromErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

+

This is created by the Future::from_err method.

+
+

+ Trait Implementations +

+

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureResult.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureResult.html new file mode 100644 index 0000000..fe3c8b4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureResult.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::FutureResult - Rust

Struct actix_web::actix::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"] +
pub struct FutureResult<T, E, A> { /* fields omitted */ }

A future representing a value that is immediately ready.

+

Created by the result function.

+
+

+ Trait Implementations +

+

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

+

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureWrap.html new file mode 100644 index 0000000..50967ac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.FutureWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::fut::FutureWrap - Rust

Struct actix_web::actix::fut::FutureWrap[]

pub struct FutureWrap<F, A> where
    F: Future
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Map.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Map.html new file mode 100644 index 0000000..d63f9fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Map.html @@ -0,0 +1,27 @@ +actix_web::actix::fut::Map - Rust

Struct actix_web::actix::fut::Map[]

#[must_use = "futures do nothing unless polled"] +
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

+

This is created by the ActorFuture::map method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.MapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.MapErr.html new file mode 100644 index 0000000..c392089 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.MapErr.html @@ -0,0 +1,27 @@ +actix_web::actix::fut::MapErr - Rust

Struct actix_web::actix::fut::MapErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

+

This is created by the Future::map_err method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamAndThen.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamAndThen.html new file mode 100644 index 0000000..90bf816 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamAndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamAndThen - Rust

Struct actix_web::actix::fut::StreamAndThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a +stream.

+

This structure is produced by the ActorStream::and_then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFinish.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFinish.html new file mode 100644 index 0000000..bf1ced7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFinish.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamFinish - Rust

Struct actix_web::actix::fut::StreamFinish[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFinish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the ActorStream::finish method.

+
+

+ Trait Implementations +

+

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFold.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFold.html new file mode 100644 index 0000000..96e58be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamFold.html @@ -0,0 +1,27 @@ +actix_web::actix::fut::StreamFold - Rust

Struct actix_web::actix::fut::StreamFold[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

+

This future is returned by the ActorStream::fold method.

+
+

+ Trait Implementations +

+

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMap.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMap.html new file mode 100644 index 0000000..76243e7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMap.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamMap - Rust

Struct actix_web::actix::fut::StreamMap[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMap<S, F> { /* fields omitted */ }

A stream combinator which will change the type of a stream from one +type to another.

+

This is produced by the ActorStream::map method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMapErr.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMapErr.html new file mode 100644 index 0000000..dd23a4c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamMapErr.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamMapErr - Rust

Struct actix_web::actix::fut::StreamMapErr[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMapErr<S, F> { /* fields omitted */ }

A stream combinator which will change the error type of a stream from one +type to another.

+

This is produced by the ActorStream::map_err method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamThen.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamThen.html new file mode 100644 index 0000000..85a3a20 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamThen.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamThen - Rust

Struct actix_web::actix::fut::StreamThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a +stream.

+

This structure is produced by the ActorStream::then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamTimeout.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamTimeout.html new file mode 100644 index 0000000..7fe3025 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamTimeout.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::StreamTimeout - Rust

Struct actix_web::actix::fut::StreamTimeout[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamWrap.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamWrap.html new file mode 100644 index 0000000..7b81a4c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.StreamWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::fut::StreamWrap - Rust

Struct actix_web::actix::fut::StreamWrap[]

pub struct StreamWrap<S, A> where
    S: Stream
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Auto Trait Implementations +

+
+

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Then.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Then.html new file mode 100644 index 0000000..6068409 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Then.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::Then - Rust

Struct actix_web::actix::fut::Then[]

#[must_use = "futures do nothing unless polled"] +
pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+

This is created by the Future::then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Timeout.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Timeout.html new file mode 100644 index 0000000..7d659be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/struct.Timeout.html @@ -0,0 +1,28 @@ +actix_web::actix::fut::Timeout - Rust

Struct actix_web::actix::fut::Timeout[]

#[must_use = "futures do nothing unless polled"] +
pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorFuture.html new file mode 100644 index 0000000..de4fad8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorFuture.html @@ -0,0 +1,81 @@ +actix_web::actix::fut::ActorFuture - Rust

Trait actix_web::actix::fut::ActorFuture[]

pub trait ActorFuture {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; + + fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn drop_err(self) -> DropErr<Self> { ... } +
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, + { ... } +
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } +}

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+

This is similar to futures::Future trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of value that this future will resolved with if it is +successful.

+

The type of error that this future will resolve with if it fails in a +normal fashion.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Map this future's result to a different type, returning a new future of +the resulting type.

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for +this future's Error, returning a new future.

+

Chain on a computation for when a future finished, passing the result of +the future to the provided closure f.

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain.

+

err value get returned as a timeout error.

+
+

+ Implementations on Foreign Types +

+

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

+

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorStream.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorStream.html new file mode 100644 index 0000000..b7a875e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.ActorStream.html @@ -0,0 +1,64 @@ +actix_web::actix::fut::ActorStream - Rust

Trait actix_web::actix::fut::ActorStream[]

pub trait ActorStream {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; + + fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, + { ... } +
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, + { ... } +
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, + { ... } +
fn finish(self) -> StreamFinish<Self> { ... } +}

A stream of values, not all of which may have been produced yet.

+

This is similar to futures::Stream trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of item this stream will yield on success.

+

The type of error this stream may generate.

+

The actor within which this stream runs.

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting +item to the provided closure f.

+

Chain on a computation for when a value is ready, passing the successful +results to the provided closure f.

+

Execute an accumulating computation over a stream, collecting all the +values into one final result.

+

Add timeout to stream.

+

err value get returned as a timeout error.

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.IntoActorFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.IntoActorFuture.html new file mode 100644 index 0000000..293763d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.IntoActorFuture.html @@ -0,0 +1,33 @@ +actix_web::actix::fut::IntoActorFuture - Rust

Trait actix_web::actix::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ + type Future: ActorFuture; + type Item; + type Error; + type Actor: Actor; + fn into_future(self) -> Self::Future; +}

Class of types which can be converted into an actor future.

+

This trait is very similar to the IntoIterator trait and is intended to be +used in a very similar fashion.

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

Consumes this object and produces a future.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapFuture.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapFuture.html new file mode 100644 index 0000000..0056d68 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapFuture.html @@ -0,0 +1,29 @@ +actix_web::actix::fut::WrapFuture - Rust

Trait actix_web::actix::fut::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ + type Future: ActorFuture; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Future; +}

Helper trait that allows conversion of normal future into ActorFuture

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal future to a ActorFuture

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapStream.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapStream.html new file mode 100644 index 0000000..dc8f9b3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/trait.WrapStream.html @@ -0,0 +1,29 @@ +actix_web::actix::fut::WrapStream - Rust

Trait actix_web::actix::fut::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ + type Stream: ActorStream; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Stream; +}

Helper trait that allows conversion of normal stream into ActorStream

+
+

+ Associated Types +

+
+

The stream that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal stream to a ActorStream

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_future.v.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_future.v.html new file mode 100644 index 0000000..12394f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_future.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_future.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_stream.v.html b/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_stream.v.html new file mode 100644 index 0000000..b39ce83 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/fut/wrap_stream.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_stream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/index.html b/static/api/actix-web/0.7.2/actix_web/actix/index.html new file mode 100644 index 0000000..ae30dce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/index.html @@ -0,0 +1,59 @@ +actix_web::actix - Rust

Module actix_web::actix[][src]

Re-exports actix's prelude

+

Modules

+ + + + + + + + + + + + + + + + + + + + +
actix + +
fut +

Custom Future implementation with Actix support

+ +
msgs +

Actix system messages

+ +
resolver +

DNS resolver and connector utility actor

+ +
signal +

An actor implementation of Unix signal handling

+ +

Functions

+ + + + + + + + +
run +

Start the System and execute supplied future.

+ +
spawn +

Spawns a future on the current arbiter.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/Execute.t.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/Execute.t.html new file mode 100644 index 0000000..761750d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/Execute.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Execute.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/StartActor.t.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/StartActor.t.html new file mode 100644 index 0000000..f45c3dd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/StartActor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StartActor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/StopArbiter.t.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/StopArbiter.t.html new file mode 100644 index 0000000..a7cdee1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/StopArbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StopArbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/index.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/index.html new file mode 100644 index 0000000..82696ab --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/index.html @@ -0,0 +1,27 @@ +actix_web::actix::msgs - Rust

Module actix_web::actix::msgs[]

Actix system messages

+

Structs

+ + + + + + + + + + + + +
Execute +

Execute function in arbiter's thread

+ +
StartActor +

Start actor in arbiter's thread

+ +
StopArbiter +

Stop arbiter execution

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/msgs/sidebar-items.js new file mode 100644 index 0000000..0cff758 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Execute","Execute function in arbiter's thread"],["StartActor","Start actor in arbiter's thread"],["StopArbiter","Stop arbiter execution"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.Execute.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.Execute.html new file mode 100644 index 0000000..41e96fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.Execute.html @@ -0,0 +1,44 @@ +actix_web::actix::msgs::Execute - Rust

Struct actix_web::actix::msgs::Execute[]

pub struct Execute<I = (), E = ()>(_)
where
    E: 'static + Send,
    I: 'static + Send
;

Execute function in arbiter's thread

+

Arbiter` actor handles Execute message.

+

Example

+
+use actix::prelude::*;
+
+struct MyActor {
+    addr: Addr<Arbiter>,
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        self.addr
+            .do_send(actix::msgs::Execute::new(|| -> Result<(), ()> {
+                // do something
+                // ...
+                Ok(())
+            }));
+    }
+}
+fn main() {}
+
+

+ Methods +

+

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

+
+

+ Trait Implementations +

+

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

+

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StartActor.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StartActor.html new file mode 100644 index 0000000..01d2b09 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StartActor.html @@ -0,0 +1,20 @@ +actix_web::actix::msgs::StartActor - Rust

Struct actix_web::actix::msgs::StartActor[]

pub struct StartActor<A>(_)
where
    A: Actor
;

Start actor in arbiter's thread

+
+

+ Methods +

+

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

+

+ Trait Implementations +

+

impl<A> Message for StartActor<A> where
    A: Actor

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StopArbiter.html b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StopArbiter.html new file mode 100644 index 0000000..54d7f40 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/msgs/struct.StopArbiter.html @@ -0,0 +1,16 @@ +actix_web::actix::msgs::StopArbiter - Rust

Struct actix_web::actix::msgs::StopArbiter[]

pub struct StopArbiter(pub i32);

Stop arbiter execution

+
+

+ Trait Implementations +

+

impl Message for StopArbiter

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connect.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectAddr.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectAddr.t.html new file mode 100644 index 0000000..88ce27b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectAddr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectAddr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connector.t.html new file mode 100644 index 0000000..2aa154d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Connector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.Connector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectorError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectorError.t.html new file mode 100644 index 0000000..db9f3da --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolve.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolve.t.html new file mode 100644 index 0000000..cdbc08d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolve.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolve.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolver.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolver.t.html new file mode 100644 index 0000000..df985bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/Resolver.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolver.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/ResolverError.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ResolverError.t.html new file mode 100644 index 0000000..7b07e5e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/ResolverError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResolverError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/TcpConnector.t.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/TcpConnector.t.html new file mode 100644 index 0000000..0729a94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/TcpConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TcpConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/enum.ResolverError.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/enum.ResolverError.html new file mode 100644 index 0000000..76b782c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/enum.ResolverError.html @@ -0,0 +1,30 @@ +actix_web::actix::resolver::ResolverError - Rust

Enum actix_web::actix::resolver::ResolverError[]

pub enum ResolverError {
+    Resolver(String),
+    InvalidInput(&'static str),
+    Timeout,
+    IoError(Error),
+}

+ Variants

+

Failed to resolve the hostname

+

Address is invalid

+

Connecting took too long

+

Connection io error

+
+

+ Trait Implementations +

+

impl Debug for ResolverError

Formats the value using the given formatter. Read more

+

impl Display for ResolverError

Formats the value using the given formatter. Read more

+

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/index.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/index.html new file mode 100644 index 0000000..7f14afc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/index.html @@ -0,0 +1,93 @@ +actix_web::actix::resolver - Rust

Module actix_web::actix::resolver[]

DNS resolver and connector utility actor

+

Example

+
+use actix::prelude::*;
+use actix::actors::resolver;
+
+fn main() {
+    System::run(|| {
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost"))       // <- resolve "localhost"
+                    .then(|addrs| {
+                        println!("RESULT: {:?}", addrs);
+                        Ok::<_, ()>(())
+                    })
+        });
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost:5000"))  // <- connect to a "localhost"
+                    .then(|stream| {
+                        println!("RESULT: {:?}", stream);
+                        Ok::<_, ()>(())
+                    })
+       });
+   });
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + +
Connect + +
ConnectAddr + +
Resolve + +
Resolver + +
TcpConnector +

Tcp stream connector

+ +

Enums

+ + + + +
ResolverError + +

Type Definitions

+ + + + + + + + +
Connector + [
Deprecated
] +
ConnectorError + [
Deprecated
] +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/resolver/sidebar-items.js new file mode 100644 index 0000000..b4723a7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ResolverError",""]],"struct":[["Connect",""],["ConnectAddr",""],["Resolve",""],["Resolver",""],["TcpConnector","Tcp stream connector"]],"type":[["Connector",""],["ConnectorError",""]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Connect.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Connect.html new file mode 100644 index 0000000..231334f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Connect.html @@ -0,0 +1,24 @@ +actix_web::actix::resolver::Connect - Rust

Struct actix_web::actix::resolver::Connect[]

pub struct Connect { /* fields omitted */ }
+

+ Methods +

+

impl Connect

Set connect timeout

+

By default timeout is set to a 1 second.

+
+

+ Trait Implementations +

+

impl Eq for Connect

impl Message for Connect

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Connect

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.ConnectAddr.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.ConnectAddr.html new file mode 100644 index 0000000..e0e5c13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.ConnectAddr.html @@ -0,0 +1,18 @@ +actix_web::actix::resolver::ConnectAddr - Rust

Struct actix_web::actix::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);
+

+ Trait Implementations +

+

impl Eq for ConnectAddr

impl Message for ConnectAddr

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolve.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolve.html new file mode 100644 index 0000000..fd88586 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolve.html @@ -0,0 +1,22 @@ +actix_web::actix::resolver::Resolve - Rust

Struct actix_web::actix::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }
+

+ Methods +

+

impl Resolve

+

+ Trait Implementations +

+

impl Eq for Resolve

impl Message for Resolve

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Resolve

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolver.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolver.html new file mode 100644 index 0000000..85554b7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.Resolver.html @@ -0,0 +1,36 @@ +actix_web::actix::resolver::Resolver - Rust

Struct actix_web::actix::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }
+

+ Methods +

+

impl Resolver

+

+ Trait Implementations +

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for Resolver

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+

impl Supervised for Resolver

Method called when supervisor restarting failed actor

+

impl Default for Resolver

Returns the "default value" for a type. Read more

+

impl Actor for Resolver

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.TcpConnector.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.TcpConnector.html new file mode 100644 index 0000000..098c97d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/struct.TcpConnector.html @@ -0,0 +1,28 @@ +actix_web::actix::resolver::TcpConnector - Rust

Struct actix_web::actix::resolver::TcpConnector[]

pub struct TcpConnector { /* fields omitted */ }

Tcp stream connector

+
+

+ Methods +

+

impl TcpConnector

+

+ Trait Implementations +

+

impl ActorFuture for TcpConnector

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.Connector.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.Connector.html new file mode 100644 index 0000000..8c001e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.Connector.html @@ -0,0 +1,2 @@ +actix_web::actix::resolver::Connector - Rust

Type Definition actix_web::actix::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.ConnectorError.html b/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.ConnectorError.html new file mode 100644 index 0000000..389ad04 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/resolver/type.ConnectorError.html @@ -0,0 +1,2 @@ +actix_web::actix::resolver::ConnectorError - Rust

Type Definition actix_web::actix::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/run.v.html b/static/api/actix-web/0.7.2/actix_web/actix/run.v.html new file mode 100644 index 0000000..71d328d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/run.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.run.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/sidebar-items.js new file mode 100644 index 0000000..a2984d9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"fn":[["run","Start the System and execute supplied future."],["spawn","Spawns a future on the current arbiter."]],"mod":[["actix",""],["fut","Custom `Future` implementation with `Actix` support"],["msgs","Actix system messages"],["resolver","DNS resolver and connector utility actor"],["signal","An actor implementation of Unix signal handling"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/DefaultSignalsHandler.t.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/DefaultSignalsHandler.t.html new file mode 100644 index 0000000..c8dd85f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/DefaultSignalsHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultSignalsHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/ProcessSignals.t.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/ProcessSignals.t.html new file mode 100644 index 0000000..2d485f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/ProcessSignals.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ProcessSignals.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/Signal.t.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/Signal.t.html new file mode 100644 index 0000000..28776b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/Signal.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Signal.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/SignalType.t.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/SignalType.t.html new file mode 100644 index 0000000..5240b33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/SignalType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SignalType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/Subscribe.t.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/Subscribe.t.html new file mode 100644 index 0000000..ceac0d3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/Subscribe.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Subscribe.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/enum.SignalType.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/enum.SignalType.html new file mode 100644 index 0000000..a47a54a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/enum.SignalType.html @@ -0,0 +1,32 @@ +actix_web::actix::signal::SignalType - Rust

Enum actix_web::actix::signal::SignalType[]

pub enum SignalType {
+    Hup,
+    Int,
+    Term,
+    Quit,
+    Child,
+}

Different types of process signals

+

+ Variants

+

SIGHUP

+

SIGINT

+

SIGTERM

+

SIGQUIT

+

SIGCHILD

+
+

+ Trait Implementations +

+

impl Message for SignalType

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for SignalType

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SignalType

Formats the value using the given formatter. Read more

+

impl Copy for SignalType

+

+ Auto Trait Implementations +

+
+

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/index.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/index.html new file mode 100644 index 0000000..d22339a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/index.html @@ -0,0 +1,100 @@ +actix_web::actix::signal - Rust

Module actix_web::actix::signal[]

An actor implementation of Unix signal handling

+

This module implements asynchronous signal handling for Actix. For each +signal ProcessSignals actor sends Signal message to all subscriber. To +subscriber, send Subscribe message to ProcessSignals actor.

+

Examples

+
+use actix::actors::signal;
+use actix::prelude::*;
+
+struct Signals;
+
+impl Actor for Signals {
+    type Context = Context<Self>;
+}
+
+// Shutdown system on and of `SIGINT`, `SIGTERM`, `SIGQUIT` signals
+impl Handler<signal::Signal> for Signals {
+    type Result = ();
+
+    fn handle(&mut self, msg: signal::Signal, _: &mut Context<Self>) {
+        match msg.0 {
+            signal::SignalType::Int => {
+                println!("SIGINT received, exiting");
+                System::current().stop();
+            }
+            signal::SignalType::Hup => {
+                println!("SIGHUP received, reloading");
+            }
+            signal::SignalType::Term => {
+                println!("SIGTERM received, stopping");
+                System::current().stop();
+            }
+            signal::SignalType::Quit => {
+                println!("SIGQUIT received, exiting");
+                System::current().stop();
+            }
+            _ => (),
+        }
+    }
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        // Start signals handler
+        let addr = Signals.start();
+
+        // send SIGTERM
+        std::thread::spawn(move || {
+            // emulate SIGNTERM
+            addr.do_send(signal::Signal(signal::SignalType::Term));
+        });
+    });
+
+    std::process::exit(0);
+}
+

Structs

+ + + + + + + + + + + + + + + + +
DefaultSignalsHandler +

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+ +
ProcessSignals +

An actor implementation of Unix signal handling

+ +
Signal +

Process signal message

+ +
Subscribe +

Subscribe to process signals.

+ +

Enums

+ + + + +
SignalType +

Different types of process signals

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/actix/signal/sidebar-items.js new file mode 100644 index 0000000..9c95d85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["SignalType","Different types of process signals"]],"struct":[["DefaultSignalsHandler","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals."],["ProcessSignals","An actor implementation of Unix signal handling"],["Signal","Process signal message"],["Subscribe","Subscribe to process signals."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.DefaultSignalsHandler.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.DefaultSignalsHandler.html new file mode 100644 index 0000000..7bc2cdf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.DefaultSignalsHandler.html @@ -0,0 +1,26 @@ +actix_web::actix::signal::DefaultSignalsHandler - Rust

Struct actix_web::actix::signal::DefaultSignalsHandler[]

pub struct DefaultSignalsHandler;

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+
+

+ Trait Implementations +

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

+

impl Actor for DefaultSignalsHandler

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.ProcessSignals.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.ProcessSignals.html new file mode 100644 index 0000000..0115dcd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.ProcessSignals.html @@ -0,0 +1,28 @@ +actix_web::actix::signal::ProcessSignals - Rust

Struct actix_web::actix::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

+
+

+ Trait Implementations +

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for ProcessSignals

Method is called during service initialization.

+

Construct and srtart system service

+

Get actor's address from system registry

+

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

+

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

+

impl Actor for ProcessSignals

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Signal.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Signal.html new file mode 100644 index 0000000..974b656 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Signal.html @@ -0,0 +1,25 @@ +actix_web::actix::signal::Signal - Rust

Struct actix_web::actix::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

+
+

+ Trait Implementations +

+

impl Message for Signal

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Signal

Formats the value using the given formatter. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Signal

impl Sync for Signal

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Subscribe.html b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Subscribe.html new file mode 100644 index 0000000..33503b6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/signal/struct.Subscribe.html @@ -0,0 +1,17 @@ +actix_web::actix::signal::Subscribe - Rust

Struct actix_web::actix::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

+
+

+ Trait Implementations +

+

impl Message for Subscribe

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/actix/spawn.v.html b/static/api/actix-web/0.7.2/actix_web/actix/spawn.v.html new file mode 100644 index 0000000..22246d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/actix/spawn.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.spawn.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/all.html b/static/api/actix-web/0.7.2/actix_web/all.html new file mode 100644 index 0000000..98378eb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/all.html @@ -0,0 +1,3 @@ +List of all items in this crate

List of all items[] + +

Structs

Enums

Traits

Macros

Functions

Typedefs

Constants

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/application/App.t.html b/static/api/actix-web/0.7.2/actix_web/application/App.t.html new file mode 100644 index 0000000..e8e9e0a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/application/App.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.App.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/application/struct.App.html b/static/api/actix-web/0.7.2/actix_web/application/struct.App.html new file mode 100644 index 0000000..6251d3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/application/struct.App.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.App.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/Binary.t.html b/static/api/actix-web/0.7.2/actix_web/body/Binary.t.html new file mode 100644 index 0000000..1c1a229 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/Binary.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Binary.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/Body.t.html b/static/api/actix-web/0.7.2/actix_web/body/Body.t.html new file mode 100644 index 0000000..ce03346 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/Body.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Body.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/BodyStream.t.html b/static/api/actix-web/0.7.2/actix_web/body/BodyStream.t.html new file mode 100644 index 0000000..130b47a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/BodyStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.BodyStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/enum.Binary.html b/static/api/actix-web/0.7.2/actix_web/body/enum.Binary.html new file mode 100644 index 0000000..851ac4a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/enum.Binary.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/enum.Binary.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/enum.Body.html b/static/api/actix-web/0.7.2/actix_web/body/enum.Body.html new file mode 100644 index 0000000..3a241de --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/enum.Body.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/enum.Body.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/body/type.BodyStream.html b/static/api/actix-web/0.7.2/actix_web/body/type.BodyStream.html new file mode 100644 index 0000000..5e1a200 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/body/type.BodyStream.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/type.BodyStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientConnector.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientConnector.t.html new file mode 100644 index 0000000..01d839b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorError.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorError.t.html new file mode 100644 index 0000000..f3ffc3d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ClientConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorStats.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorStats.t.html new file mode 100644 index 0000000..5aaffc9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientConnectorStats.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientConnectorStats.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientRequest.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientRequest.t.html new file mode 100644 index 0000000..7028b4d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientRequestBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientRequestBuilder.t.html new file mode 100644 index 0000000..48eab5f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientRequestBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientRequestBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/ClientResponse.t.html b/static/api/actix-web/0.7.2/actix_web/client/ClientResponse.t.html new file mode 100644 index 0000000..9db1a96 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/ClientResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/Connect.t.html b/static/api/actix-web/0.7.2/actix_web/client/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/Connection.t.html b/static/api/actix-web/0.7.2/actix_web/client/Connection.t.html new file mode 100644 index 0000000..2e1d31e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/Connection.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connection.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/Pause.t.html b/static/api/actix-web/0.7.2/actix_web/client/Pause.t.html new file mode 100644 index 0000000..5066b21 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/Pause.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Pause.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/Resume.t.html b/static/api/actix-web/0.7.2/actix_web/client/Resume.t.html new file mode 100644 index 0000000..476637f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/Resume.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resume.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/SendRequest.t.html b/static/api/actix-web/0.7.2/actix_web/client/SendRequest.t.html new file mode 100644 index 0000000..beda779 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/SendRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SendRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/SendRequestError.t.html b/static/api/actix-web/0.7.2/actix_web/client/SendRequestError.t.html new file mode 100644 index 0000000..27c2e9a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/SendRequestError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SendRequestError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnector.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnector.t.html new file mode 100644 index 0000000..01d839b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorError.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorError.t.html new file mode 100644 index 0000000..f3ffc3d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ClientConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorStats.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorStats.t.html new file mode 100644 index 0000000..5aaffc9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/ClientConnectorStats.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientConnectorStats.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/Connect.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/Connection.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/Connection.t.html new file mode 100644 index 0000000..2e1d31e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/Connection.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connection.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/Pause.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/Pause.t.html new file mode 100644 index 0000000..5066b21 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/Pause.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Pause.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/Resume.t.html b/static/api/actix-web/0.7.2/actix_web/client/connector/Resume.t.html new file mode 100644 index 0000000..476637f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/Resume.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resume.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/enum.ClientConnectorError.html b/static/api/actix-web/0.7.2/actix_web/client/connector/enum.ClientConnectorError.html new file mode 100644 index 0000000..1c74173 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/enum.ClientConnectorError.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/enum.ClientConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnector.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnector.html new file mode 100644 index 0000000..5b3ff96 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnector.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.ClientConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnectorStats.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnectorStats.html new file mode 100644 index 0000000..bfad476 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.ClientConnectorStats.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.ClientConnectorStats.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connect.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connect.html new file mode 100644 index 0000000..433e829 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connect.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connection.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connection.html new file mode 100644 index 0000000..0935522 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Connection.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.Connection.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Pause.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Pause.html new file mode 100644 index 0000000..a08dc30 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Pause.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.Pause.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Resume.html b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Resume.html new file mode 100644 index 0000000..019c4c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/connector/struct.Resume.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.Resume.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/delete.v.html b/static/api/actix-web/0.7.2/actix_web/client/delete.v.html new file mode 100644 index 0000000..d1e0673 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/delete.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.delete.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/enum.ClientConnectorError.html b/static/api/actix-web/0.7.2/actix_web/client/enum.ClientConnectorError.html new file mode 100644 index 0000000..6a8bbaa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/enum.ClientConnectorError.html @@ -0,0 +1,38 @@ +actix_web::client::ClientConnectorError - Rust

Enum actix_web::client::ClientConnectorError[][src]

pub enum ClientConnectorError {
+    InvalidUrl,
+    SslIsNotSupported,
+    SslError(OpensslError),
+    Resolver(ResolverError),
+    Timeout,
+    Disconnected,
+    IoError(Error),
+}

A set of errors that can occur while connecting to an HTTP host

+

+ Variants

+

Invalid URL

+

SSL feature is not enabled

+

SSL error

+

Resolver error

+

Connection took too long

+

Connector has been disconnected

+

Connection IO error

+
+

+ Trait Implementations +

+

impl Fail for ClientConnectorError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ClientConnectorError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for ClientConnectorError
[src]

Formats the value using the given formatter. Read more

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+

impl From<ClientConnectorError> for SendRequestError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/enum.SendRequestError.html b/static/api/actix-web/0.7.2/actix_web/client/enum.SendRequestError.html new file mode 100644 index 0000000..af9e0a4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/enum.SendRequestError.html @@ -0,0 +1,35 @@ +actix_web::client::SendRequestError - Rust

Enum actix_web::client::SendRequestError[][src]

pub enum SendRequestError {
+    Timeout,
+    Connector(ClientConnectorError),
+    ParseError(HttpResponseParserError),
+    Io(Error),
+}

A set of errors that can occur during request sending and response reading

+

+ Variants

+

Response took too long

+

Failed to connect to host

+

Error parsing response

+

Error reading response payload

+
+

+ Trait Implementations +

+

impl Fail for SendRequestError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for SendRequestError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for SendRequestError
[src]

Formats the value using the given formatter. Read more

+

impl From<Error> for SendRequestError
[src]

Performs the conversion.

+

impl From<ClientConnectorError> for SendRequestError
[src]

Performs the conversion.

+

impl ResponseError for SendRequestError
[src]

Convert SendRequestError to a HttpResponse

+

Create response for error Read more

+

impl From<SendRequestError> for ClientError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/fn.delete.html b/static/api/actix-web/0.7.2/actix_web/client/fn.delete.html new file mode 100644 index 0000000..fae29d6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/fn.delete.html @@ -0,0 +1,2 @@ +actix_web::client::delete - Rust

Function actix_web::client::delete[][src]

pub fn delete<U: AsRef<str>>(uri: U) -> ClientRequestBuilder

Create request builder for DELETE requests

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/fn.get.html b/static/api/actix-web/0.7.2/actix_web/client/fn.get.html new file mode 100644 index 0000000..6d136e6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/fn.get.html @@ -0,0 +1,19 @@ +actix_web::client::get - Rust

Function actix_web::client::get[][src]

pub fn get<U: AsRef<str>>(uri: U) -> ClientRequestBuilder

Create request builder for GET requests

+ +
+use actix_web::{actix, client};
+
+fn main() {
+    actix::run(
+        || client::get("http://www.rust-lang.org")   // <- Create request builder
+            .header("User-Agent", "Actix-web")
+            .finish().unwrap()
+            .send()                               // <- Send http request
+            .map_err(|_| ())
+            .and_then(|response| {                // <- server http response
+                println!("Response: {:?}", response);
+                Ok(())
+            }),
+    );
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/fn.head.html b/static/api/actix-web/0.7.2/actix_web/client/fn.head.html new file mode 100644 index 0000000..e842d31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/fn.head.html @@ -0,0 +1,2 @@ +actix_web::client::head - Rust

Function actix_web::client::head[][src]

pub fn head<U: AsRef<str>>(uri: U) -> ClientRequestBuilder

Create request builder for HEAD requests

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/fn.post.html b/static/api/actix-web/0.7.2/actix_web/client/fn.post.html new file mode 100644 index 0000000..ea50f4c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/fn.post.html @@ -0,0 +1,2 @@ +actix_web::client::post - Rust

Function actix_web::client::post[][src]

pub fn post<U: AsRef<str>>(uri: U) -> ClientRequestBuilder

Create request builder for POST requests

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/fn.put.html b/static/api/actix-web/0.7.2/actix_web/client/fn.put.html new file mode 100644 index 0000000..85e5487 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/fn.put.html @@ -0,0 +1,2 @@ +actix_web::client::put - Rust

Function actix_web::client::put[][src]

pub fn put<U: AsRef<str>>(uri: U) -> ClientRequestBuilder

Create request builder for PUT requests

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/get.v.html b/static/api/actix-web/0.7.2/actix_web/client/get.v.html new file mode 100644 index 0000000..d300cdf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/get.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.get.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/head.v.html b/static/api/actix-web/0.7.2/actix_web/client/head.v.html new file mode 100644 index 0000000..34d6a13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/head.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.head.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/index.html b/static/api/actix-web/0.7.2/actix_web/client/index.html new file mode 100644 index 0000000..47fa1ac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/index.html @@ -0,0 +1,161 @@ +actix_web::client - Rust

Module actix_web::client[][src]

Http client api

+ +
+use actix_web::{actix, client};
+
+fn main() {
+    actix::run(
+        || client::get("http://www.rust-lang.org")   // <- Create request builder
+            .header("User-Agent", "Actix-web")
+            .finish().unwrap()
+            .send()                               // <- Send http request
+            .map_err(|_| ())
+            .and_then(|response| {                // <- server http response
+                println!("Response: {:?}", response);
+                Ok(())
+            })
+    );
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClientConnector +

ClientConnector type is responsible for transport layer of a +client connection.

+ +
ClientConnectorStats +

Client connector usage stats

+ +
ClientRequest +

An HTTP Client Request

+ +
ClientRequestBuilder +

An HTTP Client request builder

+ +
ClientResponse +

An HTTP Client response

+ +
Connect +

Connect type represents a message that can be sent to +ClientConnector with a connection request.

+ +
Connection +

HTTP client connection

+ +
Pause +

Pause connection process for ClientConnector

+ +
Resume +

Resume connection process for ClientConnector

+ +
SendRequest +

SendRequest is a Future which represents an asynchronous +request sending process.

+ +

Enums

+ + + + + + + + +
ClientConnectorError +

A set of errors that can occur while connecting to an HTTP host

+ +
SendRequestError +

A set of errors that can occur during request sending and response reading

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + +
delete +

Create request builder for DELETE requests

+ +
get +

Create request builder for GET requests

+ +
head +

Create request builder for HEAD requests

+ +
post +

Create request builder for POST requests

+ +
put +

Create request builder for PUT requests

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequest.t.html b/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequest.t.html new file mode 100644 index 0000000..beda779 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SendRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequestError.t.html b/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequestError.t.html new file mode 100644 index 0000000..27c2e9a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/pipeline/SendRequestError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SendRequestError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/pipeline/enum.SendRequestError.html b/static/api/actix-web/0.7.2/actix_web/client/pipeline/enum.SendRequestError.html new file mode 100644 index 0000000..2003506 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/pipeline/enum.SendRequestError.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/enum.SendRequestError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/pipeline/struct.SendRequest.html b/static/api/actix-web/0.7.2/actix_web/client/pipeline/struct.SendRequest.html new file mode 100644 index 0000000..c70adf1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/pipeline/struct.SendRequest.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.SendRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/post.v.html b/static/api/actix-web/0.7.2/actix_web/client/post.v.html new file mode 100644 index 0000000..ba7d5c4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/post.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.post.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/put.v.html b/static/api/actix-web/0.7.2/actix_web/client/put.v.html new file mode 100644 index 0000000..4223d8c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/put.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.put.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequest.t.html b/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequest.t.html new file mode 100644 index 0000000..7028b4d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequestBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequestBuilder.t.html new file mode 100644 index 0000000..48eab5f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/request/ClientRequestBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientRequestBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequest.html b/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequest.html new file mode 100644 index 0000000..cd8bf76 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequest.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.ClientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequestBuilder.html b/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequestBuilder.html new file mode 100644 index 0000000..e9a046c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/request/struct.ClientRequestBuilder.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.ClientRequestBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/response/ClientResponse.t.html b/static/api/actix-web/0.7.2/actix_web/client/response/ClientResponse.t.html new file mode 100644 index 0000000..9db1a96 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/response/ClientResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/response/struct.ClientResponse.html b/static/api/actix-web/0.7.2/actix_web/client/response/struct.ClientResponse.html new file mode 100644 index 0000000..972dc02 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/response/struct.ClientResponse.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/client/struct.ClientResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/client/sidebar-items.js new file mode 100644 index 0000000..07fb28d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ClientConnectorError","A set of errors that can occur while connecting to an HTTP host"],["SendRequestError","A set of errors that can occur during request sending and response reading"]],"fn":[["delete","Create request builder for `DELETE` requests"],["get","Create request builder for `GET` requests"],["head","Create request builder for `HEAD` requests"],["post","Create request builder for `POST` requests"],["put","Create request builder for `PUT` requests"]],"struct":[["ClientConnector","`ClientConnector` type is responsible for transport layer of a client connection."],["ClientConnectorStats","Client connector usage stats"],["ClientRequest","An HTTP Client Request"],["ClientRequestBuilder","An HTTP Client request builder"],["ClientResponse","An HTTP Client response"],["Connect","`Connect` type represents a message that can be sent to `ClientConnector` with a connection request."],["Connection","HTTP client connection"],["Pause","Pause connection process for `ClientConnector`"],["Resume","Resume connection process for `ClientConnector`"],["SendRequest","`SendRequest` is a `Future` which represents an asynchronous request sending process."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnector.html b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnector.html new file mode 100644 index 0000000..e38f8d0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnector.html @@ -0,0 +1,83 @@ +actix_web::client::ClientConnector - Rust

Struct actix_web::client::ClientConnector[][src]

pub struct ClientConnector { /* fields omitted */ }

ClientConnector type is responsible for transport layer of a +client connection.

+
+

+ Methods +

+

impl ClientConnector
[src]

Create ClientConnector actor with custom SslConnector instance.

+

By default ClientConnector uses very a simple SSL configuration. +With with_connector method it is possible to use a custom +SslConnector object.

+ +
This example is not tested
+extern crate openssl;
+use actix_web::{actix, client::ClientConnector, client::Connect};
+
+use openssl::ssl::{SslConnector, SslMethod};
+
+fn main() {
+    actix::run(|| {
+        // Start `ClientConnector` with custom `SslConnector`
+        let ssl_conn = SslConnector::builder(SslMethod::tls()).unwrap().build();
+        let conn = ClientConnector::with_connector(ssl_conn).start();
+
+        conn.send(
+            Connect::new("https://www.rust-lang.org").unwrap()) // <- connect to host
+                .map_err(|_| ())
+                .and_then(|res| {
+                    if let Ok(mut stream) = res {
+                        stream.write_all(b"GET / HTTP/1.0\r\n\r\n").unwrap();
+                    }
+                    Ok(())
+                })
+    );
+}
+

Set total number of simultaneous connections.

+

If limit is 0, the connector has no limit. +The default limit size is 100.

+

Set total number of simultaneous connections to the same endpoint.

+

Endpoints are the same if they have equal (host, port, ssl) triplets. +If limit is 0, the connector has no limit. The default limit size is 0.

+

Set keep-alive period for opened connection.

+

Keep-alive period is the period between connection usage. If +the delay between repeated usages of the same connection +exceeds this period, the connection is closed. +Default keep-alive period is 15 seconds.

+

Set max lifetime period for connection.

+

Connection lifetime is max lifetime of any opened connection +until it is closed regardless of keep-alive period. +Default lifetime period is 75 seconds.

+

Subscribe for connector stats. Only one subscriber is supported.

+

Use custom resolver actor

+
+

+ Trait Implementations +

+

impl Actor for ClientConnector
[src]

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+

impl Supervised for ClientConnector
[src]

Method called when supervisor restarting failed actor

+

impl SystemService for ClientConnector
[src]

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+

impl Default for ClientConnector
[src]

Returns the "default value" for a type. Read more

+

impl Handler<Pause> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Resume> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnectorStats.html b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnectorStats.html new file mode 100644 index 0000000..6ae5b70 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientConnectorStats.html @@ -0,0 +1,58 @@ +actix_web::client::ClientConnectorStats - Rust

Struct actix_web::client::ClientConnectorStats[][src]

pub struct ClientConnectorStats {
+    pub waits: usize,
+    pub wait_queue: usize,
+    pub reused: usize,
+    pub opened: usize,
+    pub closed: usize,
+    pub errors: usize,
+    pub timeouts: usize,
+}

Client connector usage stats

+

+ Fields

+ +

Number of waited-on connections

+
+ +

Size of the wait queue

+
+ +

Number of reused connections

+
+ +

Number of opened connections

+
+ +

Number of closed connections

+
+ +

Number of connections with errors

+
+ +

Number of connection timeouts

+
+

+ Trait Implementations +

+

impl Message for ClientConnectorStats
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Default for ClientConnectorStats
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequest.html b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequest.html new file mode 100644 index 0000000..8d41e7c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequest.html @@ -0,0 +1,58 @@ +actix_web::client::ClientRequest - Rust

Struct actix_web::client::ClientRequest[][src]

pub struct ClientRequest { /* fields omitted */ }

An HTTP Client Request

+ +
+use actix_web::{actix, client};
+
+fn main() {
+    actix::run(
+        || client::ClientRequest::get("http://www.rust-lang.org") // <- Create request builder
+            .header("User-Agent", "Actix-web")
+            .finish().unwrap()
+            .send()                                    // <- Send http request
+            .map_err(|_| ())
+            .and_then(|response| {                     // <- server http response
+                println!("Response: {:?}", response);
+                Ok(())
+            }),
+    );
+}
+
+

+ Methods +

+

impl ClientRequest
[src]

Create request builder for GET request

+

Create request builder for HEAD request

+

Create request builder for POST request

+

Create request builder for PUT request

+

Create request builder for DELETE request

+

impl ClientRequest
[src]

Create client request builder

+

Create client request builder

+

Get the request URI

+

Set client request URI

+

Get the request method

+

Set HTTP Method for the request

+

Get HTTP version for the request

+

Set http Version for the request

+

Get the headers from the request

+

Get a mutable reference to the headers

+

is chunked encoding enabled

+

is upgrade request

+

Content encoding

+

Decompress response payload

+

Requested write buffer capacity

+

Get body of this response

+

Set a body

+

Send request

+

This method returns a future that resolves to a ClientResponse

+
+

+ Trait Implementations +

+

impl Default for ClientRequest
[src]

Returns the "default value" for a type. Read more

+

impl Debug for ClientRequest
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ClientRequest

impl !Sync for ClientRequest

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequestBuilder.html b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequestBuilder.html new file mode 100644 index 0000000..654d046 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientRequestBuilder.html @@ -0,0 +1,92 @@ +actix_web::client::ClientRequestBuilder - Rust

Struct actix_web::client::ClientRequestBuilder[][src]

pub struct ClientRequestBuilder { /* fields omitted */ }

An HTTP Client request builder

+

This type can be used to construct an instance of ClientRequest through a +builder-like pattern.

+
+

+ Methods +

+

impl ClientRequestBuilder
[src]

Important traits for &'a mut R

Set HTTP URI of request.

+

Important traits for &'a mut R

Set HTTP method of this request.

+

Set HTTP method of this request.

+

Important traits for &'a mut R

Set HTTP version of this request.

+

By default requests's HTTP version depends on network stream

+

Important traits for &'a mut R

Append a header.

+

Header gets appended to existing header. +To override header use set_header() method.

+ +
+use http::header;
+
+fn main() {
+    let req = ClientRequest::build()
+        .header("X-TEST", "value")
+        .header(header::CONTENT_TYPE, "application/json")
+        .finish()
+        .unwrap();
+}
+

Important traits for &'a mut R

Set a header.

+

Important traits for &'a mut R

Set a header only if it is not yet set.

+

Important traits for &'a mut R

Set content encoding.

+

By default ContentEncoding::Identity is used.

+

Important traits for &'a mut R

Enables automatic chunked transfer encoding

+

Important traits for &'a mut R

Enable connection upgrade

+

Important traits for &'a mut R

Set request's content type

+

Important traits for &'a mut R

Set content length

+

Important traits for &'a mut R

Set a cookie

+ +
+use actix_web::{client, http};
+
+fn main() {
+    let req = client::ClientRequest::build()
+        .cookie(
+            http::Cookie::build("name", "value")
+                .domain("www.rust-lang.org")
+                .path("/")
+                .secure(true)
+                .http_only(true)
+                .finish(),
+        )
+        .finish()
+        .unwrap();
+}
+

Important traits for &'a mut R

Do not add default request headers. +By default Accept-Encoding and User-Agent headers are set.

+

Important traits for &'a mut R

Disable automatic decompress response body

+

Important traits for &'a mut R

Set write buffer capacity

+

Default buffer capacity is 32kb

+

Important traits for &'a mut R

Set request timeout

+

Request timeout is a total time before response should be received. +Default value is 5 seconds.

+

Important traits for &'a mut R

Send request using custom connector

+

Important traits for &'a mut R

Send request using existing Connection

+

Important traits for &'a mut R

This method calls provided closure with builder reference if +value is true.

+

Important traits for &'a mut R

This method calls provided closure with builder reference if +value is Some.

+

Set a body and generate ClientRequest.

+

ClientRequestBuilder can not be used after this call.

+

Set a JSON body and generate ClientRequest

+

ClientRequestBuilder can not be used after this call.

+

Set a urlencoded body and generate ClientRequest

+

ClientRequestBuilder can not be used after this call.

+

Set a streaming body and generate ClientRequest.

+

ClientRequestBuilder can not be used after this call.

+

Set an empty body and generate ClientRequest

+

ClientRequestBuilder can not be used after this call.

+

This method construct new ClientRequestBuilder

+
+

+ Trait Implementations +

+

impl Debug for ClientRequestBuilder
[src]

Formats the value using the given formatter. Read more

+

impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder
[src]

Create ClientRequestBuilder from HttpRequest

+

It is useful for proxy requests. This implementation +copies all request headers and the method.

+

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.ClientResponse.html b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientResponse.html new file mode 100644 index 0000000..c5764a6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.ClientResponse.html @@ -0,0 +1,37 @@ +actix_web::client::ClientResponse - Rust

Struct actix_web::client::ClientResponse[][src]

pub struct ClientResponse(_, _);

An HTTP Client response

+
+

+ Methods +

+

impl ClientResponse
[src]

Get the HTTP version of this response.

+

Get the status from the server.

+

Load response cookies.

+

Return request cookie.

+
+

+ Trait Implementations +

+

impl<'a> From<&'a ClientResponse> for HttpResponseBuilder
[src]

Create HttpResponseBuilder from ClientResponse

+

It is useful for proxy response. This implementation +copies all responses's headers and status.

+

Performs the conversion.

+

impl HttpMessage for ClientResponse
[src]

+

Type of message payload stream

+

Get the headers from the response.

+

Important traits for Box<R>

Message payload stream

+

Read the request content type. If request does not contain Content-Type header, empty str get returned. Read more

+

Get content type encoding Read more

+

Convert the request content type to a known mime type.

+

Check if request has chunked transfer encoding

+

Load http message body. Read more

+

Parse application/x-www-form-urlencoded encoded request's body. Return UrlEncoded future. Form can be deserialized to any type that implements Deserialize trait from serde. Read more

+

Parse application/json encoded body. Return JsonBody<T> future. It resolves to a T value. Read more

+

Return stream to http payload processes as multipart. Read more

+

Return stream of lines.

+

impl Debug for ClientResponse
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ClientResponse

impl !Sync for ClientResponse

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.Connect.html b/static/api/actix-web/0.7.2/actix_web/client/struct.Connect.html new file mode 100644 index 0000000..8bb8aa6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.Connect.html @@ -0,0 +1,28 @@ +actix_web::client::Connect - Rust

Struct actix_web::client::Connect[][src]

pub struct Connect { /* fields omitted */ }

Connect type represents a message that can be sent to +ClientConnector with a connection request.

+
+

+ Methods +

+

impl Connect
[src]

Create Connect message for specified Uri

+

Connection timeout, i.e. max time to connect to remote host. +Set to 1 second by default.

+

If connection pool limits are enabled, wait time indicates +max time to wait for a connection to become available. +Set to 5 seconds by default.

+
+

+ Trait Implementations +

+

impl Debug for Connect
[src]

Formats the value using the given formatter. Read more

+

impl Message for Connect
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Connect> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.Connection.html b/static/api/actix-web/0.7.2/actix_web/client/struct.Connection.html new file mode 100644 index 0000000..60a240f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.Connection.html @@ -0,0 +1,48 @@ +actix_web::client::Connection - Rust

Struct actix_web::client::Connection[][src]

pub struct Connection { /* fields omitted */ }

HTTP client connection

+
+

+ Methods +

+

impl Connection
[src]

Raw IO stream

+

Important traits for Connection

Create a new connection from an IO Stream

+

Close connection

+

Release this connection to the connection pool

+
+

+ Trait Implementations +

+

impl Debug for Connection
[src]

Formats the value using the given formatter. Read more

+

impl Read for Connection
[src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

+

🔬 This is a nightly-only experimental API. (read_initializer)

Determines if this Reader can work with buffers of uninitialized memory. Read more

+

Read all bytes until EOF in this source, placing them into buf. Read more

+

Read all bytes until EOF in this source, appending them to buf. Read more

+

Read the exact number of bytes required to fill buf. Read more

+

Important traits for &'a mut R

Creates a "by reference" adaptor for this instance of Read. Read more

+

Important traits for Bytes<R>

Transforms this Read instance to an [Iterator] over its bytes. Read more

+

Important traits for Chars<R>

Deprecated since 1.27.0

: Use str::from_utf8 instead: +https://doc.rust-lang.org/nightly/std/str/struct.Utf8Error.html#examples

+
🔬 This is a nightly-only experimental API. (io)

the semantics of a partial read/write of where errors happen is currently unclear and may change

+

Transforms this Read instance to an [Iterator] over [char]s. Read more

+

Important traits for Chain<T, U>

Creates an adaptor which will chain this stream with another. Read more

+

Important traits for Take<T>

Creates an adaptor which will read at most limit bytes from it. Read more

+

impl AsyncRead for Connection
[src]

Prepares an uninitialized buffer to be safe to pass to read. Returns true if the supplied buffer was zeroed out. Read more

+

Attempt to read from the AsyncRead into buf. Read more

+

Pull some bytes from this source into the specified Buf, returning how many bytes were read. Read more

+

Deprecated since 0.1.7

: Use tokio_codec::Decoder::framed instead

+

Provides a Stream and Sink interface for reading and writing to this Io object, using Decode and Encode to read and write the raw data. Read more

+

Helper method for splitting this read/write object into two halves. Read more

+

impl Write for Connection
[src]

Write a buffer into this object, returning how many bytes were written. Read more

+

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

+

Attempts to write an entire buffer into this write. Read more

+

Writes a formatted string into this writer, returning any error encountered. Read more

+

Important traits for &'a mut R

Creates a "by reference" adaptor for this instance of Write. Read more

+

impl AsyncWrite for Connection
[src]

Initiates or attempts to shut down this writer, returning success when the I/O connection has completely shut down. Read more

+

Attempt to write bytes from buf into the object. Read more

+

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more

+

Write a Buf into this value, returning how many bytes were written. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connection

impl !Sync for Connection

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.Pause.html b/static/api/actix-web/0.7.2/actix_web/client/struct.Pause.html new file mode 100644 index 0000000..1fec917 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.Pause.html @@ -0,0 +1,23 @@ +actix_web::client::Pause - Rust

Struct actix_web::client::Pause[][src]

pub struct Pause { /* fields omitted */ }

Pause connection process for ClientConnector

+

All connect requests enter wait state during connector pause.

+
+

+ Methods +

+

impl Pause
[src]

Create message with pause duration parameter

+
+

+ Trait Implementations +

+

impl Default for Pause
[src]

Returns the "default value" for a type. Read more

+

impl Message for Pause
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Pause> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Pause

impl Sync for Pause

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.Resume.html b/static/api/actix-web/0.7.2/actix_web/client/struct.Resume.html new file mode 100644 index 0000000..39eece2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.Resume.html @@ -0,0 +1,16 @@ +actix_web::client::Resume - Rust

Struct actix_web::client::Resume[][src]

pub struct Resume;

Resume connection process for ClientConnector

+
+

+ Trait Implementations +

+

impl Message for Resume
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Resume> for ClientConnector
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resume

impl Sync for Resume

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/client/struct.SendRequest.html b/static/api/actix-web/0.7.2/actix_web/client/struct.SendRequest.html new file mode 100644 index 0000000..3877ffb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/client/struct.SendRequest.html @@ -0,0 +1,52 @@ +actix_web::client::SendRequest - Rust

Struct actix_web::client::SendRequest[][src]

#[must_use = "SendRequest does nothing unless polled"] +
pub struct SendRequest { /* fields omitted */ }

SendRequest is a Future which represents an asynchronous +request sending process.

+
+

+ Methods +

+

impl SendRequest
[src]

Set request timeout

+

Request timeout is the total time before a response must be received. +Default value is 5 seconds.

+

Set connection timeout

+

Connection timeout includes resolving hostname and actual connection to +the host. +Default value is 1 second.

+

Set wait timeout

+

If connections pool limits are enabled, wait time indicates max time +to wait for available connection. Default value is 5 seconds.

+
+

+ Trait Implementations +

+

impl Future for SendRequest
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for SendRequest

impl !Sync for SendRequest

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/context/Drain.t.html b/static/api/actix-web/0.7.2/actix_web/context/Drain.t.html new file mode 100644 index 0000000..8e65c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/context/Drain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/context/HttpContext.t.html b/static/api/actix-web/0.7.2/actix_web/context/HttpContext.t.html new file mode 100644 index 0000000..f14d988 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/context/HttpContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/context/struct.Drain.html b/static/api/actix-web/0.7.2/actix_web/context/struct.Drain.html new file mode 100644 index 0000000..ef4e8bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/context/struct.Drain.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/context/struct.HttpContext.html b/static/api/actix-web/0.7.2/actix_web/context/struct.HttpContext.html new file mode 100644 index 0000000..ca7846c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/context/struct.HttpContext.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.HttpContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/AsyncResult.t.html b/static/api/actix-web/0.7.2/actix_web/dev/AsyncResult.t.html new file mode 100644 index 0000000..c60ebb4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/AsyncResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AsyncResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/BodyStream.t.html b/static/api/actix-web/0.7.2/actix_web/dev/BodyStream.t.html new file mode 100644 index 0000000..130b47a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/BodyStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.BodyStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/ConnectionInfo.t.html b/static/api/actix-web/0.7.2/actix_web/dev/ConnectionInfo.t.html new file mode 100644 index 0000000..43fd803 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/ConnectionInfo.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectionInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Drain.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Drain.t.html new file mode 100644 index 0000000..8e65c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Drain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/FormConfig.t.html b/static/api/actix-web/0.7.2/actix_web/dev/FormConfig.t.html new file mode 100644 index 0000000..2c22075 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/FormConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FormConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/FromParam.t.html b/static/api/actix-web/0.7.2/actix_web/dev/FromParam.t.html new file mode 100644 index 0000000..8ab3a55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/FromParam.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.FromParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Handler.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Handler.t.html new file mode 100644 index 0000000..6aa19e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Handler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/HttpResponseBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/dev/HttpResponseBuilder.t.html new file mode 100644 index 0000000..1c3cdc0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/HttpResponseBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpResponseBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/JsonBody.t.html b/static/api/actix-web/0.7.2/actix_web/dev/JsonBody.t.html new file mode 100644 index 0000000..c00312b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/JsonBody.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.JsonBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/JsonConfig.t.html b/static/api/actix-web/0.7.2/actix_web/dev/JsonConfig.t.html new file mode 100644 index 0000000..e013c07 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/JsonConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.JsonConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/MessageBody.t.html b/static/api/actix-web/0.7.2/actix_web/dev/MessageBody.t.html new file mode 100644 index 0000000..87d8a8f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/MessageBody.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MessageBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Params.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Params.t.html new file mode 100644 index 0000000..1d74bfb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Params.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Params.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Payload.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Payload.t.html new file mode 100644 index 0000000..ffa1048 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Payload.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Payload.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/PayloadBuffer.t.html b/static/api/actix-web/0.7.2/actix_web/dev/PayloadBuffer.t.html new file mode 100644 index 0000000..8f7ed80 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/PayloadBuffer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.PayloadBuffer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/PayloadConfig.t.html b/static/api/actix-web/0.7.2/actix_web/dev/PayloadConfig.t.html new file mode 100644 index 0000000..77d10b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/PayloadConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.PayloadConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Resource.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Resource.t.html new file mode 100644 index 0000000..887606b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Resource.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resource.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/ResourceDef.t.html b/static/api/actix-web/0.7.2/actix_web/dev/ResourceDef.t.html new file mode 100644 index 0000000..3b37fa0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/ResourceDef.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ResourceDef.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/ResourceInfo.t.html b/static/api/actix-web/0.7.2/actix_web/dev/ResourceInfo.t.html new file mode 100644 index 0000000..341e7e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/ResourceInfo.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ResourceInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/ResourceType.t.html b/static/api/actix-web/0.7.2/actix_web/dev/ResourceType.t.html new file mode 100644 index 0000000..8aa4f84 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/ResourceType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResourceType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Route.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Route.t.html new file mode 100644 index 0000000..8edf97f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Route.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Route.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/Router.t.html b/static/api/actix-web/0.7.2/actix_web/dev/Router.t.html new file mode 100644 index 0000000..160b27f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/Router.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Router.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/UrlEncoded.t.html b/static/api/actix-web/0.7.2/actix_web/dev/UrlEncoded.t.html new file mode 100644 index 0000000..f1d585a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/UrlEncoded.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.UrlEncoded.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/enum.ResourceType.html b/static/api/actix-web/0.7.2/actix_web/dev/enum.ResourceType.html new file mode 100644 index 0000000..b2bb801 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/enum.ResourceType.html @@ -0,0 +1,28 @@ +actix_web::dev::ResourceType - Rust

Enum actix_web::dev::ResourceType[][src]

pub enum ResourceType {
+    Normal,
+    Default,
+    External,
+    Unset,
+}

Resource type

+

+ Variants

+

Normal resource

+

Resource for application default handler

+

External resource

+

Unknown resource type

+
+

+ Trait Implementations +

+

impl Debug for ResourceType
[src]

Formats the value using the given formatter. Read more

+

impl Copy for ResourceType
[src]

impl Clone for ResourceType
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl PartialEq for ResourceType
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResourceType

impl Sync for ResourceType

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/index.html b/static/api/actix-web/0.7.2/actix_web/dev/index.html new file mode 100644 index 0000000..0f71801 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/index.html @@ -0,0 +1,188 @@ +actix_web::dev - Rust

Module actix_web::dev[][src]

The actix-web prelude for library developers

+

The purpose of this module is to alleviate imports of many common actix +traits by adding a glob import to the top of actix heavy modules:

+ +
+use actix_web::dev::*;
+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AsyncResult +

Represents async result

+ +
ConnectionInfo +

HttpRequest connection information

+ +
Drain +

Consume a future

+ +
FormConfig +

Form extractor configuration

+ +
HttpResponseBuilder +

An HTTP response builder

+ +
JsonBody +

Request payload json parser that resolves to a deserialized T value.

+ +
JsonConfig +

Json extractor configuration

+ +
MessageBody +

Future that resolves to a complete http message body.

+ +
Params +

Route match information

+ +
Payload +

Buffered stream of bytes chunks

+ +
PayloadBuffer +

Payload buffer

+ +
PayloadConfig +

Payload configuration for request's payload.

+ +
Resource +

Resource is an entry in route table which corresponds to requested URL.

+ +
ResourceDef +

Resource type describes an entry in resources table

+ +
ResourceInfo +

Information about current resource

+ +
Route +

Resource route definition

+ +
Router +

Interface for application router.

+ +
UrlEncoded +

Future that resolves to a parsed urlencoded values.

+ +

Enums

+ + + + +
ResourceType +

Resource type

+ +

Traits

+ + + + + + + + +
FromParam +

A trait to abstract the idea of creating a new instance of a type from a +path parameter.

+ +
Handler +

Trait defines object that could be registered as route handler

+ +

Type Definitions

+ + + + +
BodyStream +

Type represent streaming body

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/dev/sidebar-items.js new file mode 100644 index 0000000..506279e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ResourceType","Resource type"]],"struct":[["AsyncResult","Represents async result"],["ConnectionInfo","`HttpRequest` connection information"],["Drain","Consume a future"],["FormConfig","Form extractor configuration"],["HttpResponseBuilder","An HTTP response builder"],["JsonBody","Request payload json parser that resolves to a deserialized `T` value."],["JsonConfig","Json extractor configuration"],["MessageBody","Future that resolves to a complete http message body."],["Params","Route match information"],["Payload","Buffered stream of bytes chunks"],["PayloadBuffer","Payload buffer"],["PayloadConfig","Payload configuration for request's payload."],["Resource","Resource is an entry in route table which corresponds to requested URL."],["ResourceDef","Resource type describes an entry in resources table"],["ResourceInfo","Information about current resource"],["Route","Resource route definition"],["Router","Interface for application router."],["UrlEncoded","Future that resolves to a parsed urlencoded values."]],"trait":[["FromParam","A trait to abstract the idea of creating a new instance of a type from a path parameter."],["Handler","Trait defines object that could be registered as route handler"]],"type":[["BodyStream","Type represent streaming body"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.AsyncResult.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.AsyncResult.html new file mode 100644 index 0000000..14bf985 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.AsyncResult.html @@ -0,0 +1,59 @@ +actix_web::dev::AsyncResult - Rust

Struct actix_web::dev::AsyncResult[][src]

pub struct AsyncResult<I, E = Error>(_);

Represents async result

+

Result could be in tree different forms.

+
    +
  • Ok(T) - ready item
  • +
  • Err(E) - error happen during reply process
  • +
  • Future<T, E> - reply process completes in the future
  • +
+
+

+ Methods +

+

impl<I, E> AsyncResult<I, E>
[src]

Create async response

+

Send response

+

Send error

+
+

+ Trait Implementations +

+

impl<I, E> Future for AsyncResult<I, E>
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+

impl Responder for AsyncResult<HttpResponse>
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+

impl<T> From<T> for AsyncResult<T>
[src]

Performs the conversion.

+

impl<T, E: Into<Error>> From<Result<AsyncResult<T>, E>> for AsyncResult<T>
[src]

Performs the conversion.

+

impl<T, E: Into<Error>> From<Result<T, E>> for AsyncResult<T>
[src]

Performs the conversion.

+

impl<T, E: Into<Error>> From<Result<Box<Future<Item = T, Error = Error>>, E>> for AsyncResult<T>
[src]

Performs the conversion.

+

impl<T> From<Box<Future<Item = T, Error = Error>>> for AsyncResult<T>
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl<I, E = Error> !Send for AsyncResult<I, E>

impl<I, E = Error> !Sync for AsyncResult<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.ConnectionInfo.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.ConnectionInfo.html new file mode 100644 index 0000000..ba38efd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.ConnectionInfo.html @@ -0,0 +1,42 @@ +actix_web::dev::ConnectionInfo - Rust

Struct actix_web::dev::ConnectionInfo[][src]

pub struct ConnectionInfo { /* fields omitted */ }

HttpRequest connection information

+
+

+ Methods +

+

impl ConnectionInfo
[src]

Create ConnectionInfo instance for a request.

+

Scheme of the request.

+

Scheme is resolved through the following headers, in this order:

+
    +
  • Forwarded
  • +
  • X-Forwarded-Proto
  • +
  • Uri
  • +
+

Hostname of the request.

+

Hostname is resolved through the following headers, in this order:

+
    +
  • Forwarded
  • +
  • X-Forwarded-Host
  • +
  • Host
  • +
  • Uri
  • +
  • Server hostname
  • +
+

Remote IP of client initiated HTTP request.

+

The IP is resolved through the following headers, in this order:

+
    +
  • Forwarded
  • +
  • X-Forwarded-For
  • +
  • peer name of opened socket
  • +
+
+

+ Trait Implementations +

+

impl Clone for ConnectionInfo
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Default for ConnectionInfo
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Drain.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Drain.html new file mode 100644 index 0000000..d9e0a38 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Drain.html @@ -0,0 +1,29 @@ +actix_web::dev::Drain - Rust

Struct actix_web::dev::Drain[][src]

pub struct Drain<A> { /* fields omitted */ }

Consume a future

+
+

+ Methods +

+

impl<A> Drain<A>
[src]

Create a drain from a future

+
+

+ Trait Implementations +

+

impl<A: Actor> ActorFuture for Drain<A>
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for Drain<A> where
    A: Send

impl<A> Sync for Drain<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.FormConfig.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.FormConfig.html new file mode 100644 index 0000000..0e32431 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.FormConfig.html @@ -0,0 +1,44 @@ +actix_web::dev::FormConfig - Rust

Struct actix_web::dev::FormConfig[][src]

pub struct FormConfig<S> { /* fields omitted */ }

Form extractor configuration

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Form, Result};
+
+#[derive(Deserialize)]
+struct FormData {
+    username: String,
+}
+
+/// extract form data using serde.
+/// custom configuration is used for this handler, max payload size is 4k
+fn index(form: Form<FormData>) -> Result<String> {
+    Ok(format!("Welcome {}!", form.username))
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/index.html",
+        |r| {
+            r.method(http::Method::GET)
+                // register form handler and change form extractor configuration
+                .with_config(index, |cfg| {cfg.limit(4096);})
+        },
+    );
+}
+
+

+ Methods +

+

impl<S> FormConfig<S>
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

+

Important traits for &'a mut R

Set custom error handler

+
+

+ Trait Implementations +

+

impl<S> Default for FormConfig<S>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for FormConfig<S>

impl<S> !Sync for FormConfig<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.HttpResponseBuilder.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.HttpResponseBuilder.html new file mode 100644 index 0000000..d6b4339 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.HttpResponseBuilder.html @@ -0,0 +1,103 @@ +actix_web::dev::HttpResponseBuilder - Rust

Struct actix_web::dev::HttpResponseBuilder[][src]

pub struct HttpResponseBuilder { /* fields omitted */ }

An HTTP response builder

+

This type can be used to construct an instance of HttpResponse through a +builder-like pattern.

+
+

+ Methods +

+

impl HttpResponseBuilder
[src]

Important traits for &'a mut R

Set HTTP status code of this response.

+

Important traits for &'a mut R

Set HTTP version of this response.

+

By default response's http version depends on request's version.

+

Important traits for &'a mut R

Set a header.

+ +
+use actix_web::{http, HttpRequest, HttpResponse};
+
+fn index(req: HttpRequest) -> HttpResponse {
+    HttpResponse::Ok()
+        .header("X-TEST", "value")
+        .header(http::header::CONTENT_TYPE, "application/json")
+        .finish()
+}
+fn main() {}
+

Important traits for &'a mut R

Set the custom reason for the response.

+

Important traits for &'a mut R

Set content encoding.

+

By default ContentEncoding::Auto is used, which automatically +negotiates content encoding based on request's Accept-Encoding +headers. To enforce specific encoding, use specific +ContentEncoding` value.

+

Important traits for &'a mut R

Force close connection, even if it is marked as keep-alive

+

Important traits for &'a mut R

Enables automatic chunked transfer encoding

+

Important traits for &'a mut R

Force disable chunked encoding

+

Important traits for &'a mut R

Set response content type

+

Important traits for &'a mut R

Set content length

+

Important traits for &'a mut R

Set a cookie

+ +
+use actix_web::{http, HttpRequest, HttpResponse, Result};
+
+fn index(req: HttpRequest) -> HttpResponse {
+    HttpResponse::Ok()
+        .cookie(
+            http::Cookie::build("name", "value")
+                .domain("www.rust-lang.org")
+                .path("/")
+                .secure(true)
+                .http_only(true)
+                .finish(),
+        )
+        .finish()
+}
+

Remove cookie

+ +
+use actix_web::{http, HttpRequest, HttpResponse, Result};
+
+fn index(req: &HttpRequest) -> HttpResponse {
+    let mut builder = HttpResponse::Ok();
+
+    if let Some(ref cookie) = req.cookie("name") {
+        builder.del_cookie(cookie);
+    }
+
+    builder.finish()
+}
+

Important traits for &'a mut R

This method calls provided closure with builder reference if value is +true.

+

Important traits for &'a mut R

This method calls provided closure with builder reference if value is +Some.

+

Important traits for &'a mut R

Set write buffer capacity

+

This parameter makes sense only for streaming response +or actor. If write buffer reaches specified capacity, stream or actor +get paused.

+

Default write buffer capacity is 64kb

+

Set a body and generate HttpResponse.

+

HttpResponseBuilder can not be used after this call.

+

Set a streaming body and generate HttpResponse.

+

HttpResponseBuilder can not be used after this call.

+

Set a json body and generate HttpResponse

+

HttpResponseBuilder can not be used after this call.

+

Set an empty body and generate HttpResponse

+

HttpResponseBuilder can not be used after this call.

+

This method construct new HttpResponseBuilder

+
+

+ Trait Implementations +

+

impl From<HttpResponseBuilder> for HttpResponse
[src]

Performs the conversion.

+

impl Responder for HttpResponseBuilder
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+

impl<'a> From<&'a ClientResponse> for HttpResponseBuilder
[src]

Create HttpResponseBuilder from ClientResponse

+

It is useful for proxy response. This implementation +copies all responses's headers and status.

+

Performs the conversion.

+

impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonBody.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonBody.html new file mode 100644 index 0000000..fc14b8a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonBody.html @@ -0,0 +1,65 @@ +actix_web::dev::JsonBody - Rust

Struct actix_web::dev::JsonBody[][src]

pub struct JsonBody<T: HttpMessage, U: DeserializeOwned> { /* fields omitted */ }

Request payload json parser that resolves to a deserialized T value.

+

Returns error:

+
    +
  • content type is not application/json
  • +
  • content length is greater than 256k
  • +
+

Server example

+
+use actix_web::{AsyncResponder, Error, HttpMessage, HttpRequest, HttpResponse};
+use futures::future::Future;
+
+#[derive(Deserialize, Debug)]
+struct MyObj {
+    name: String,
+}
+
+fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    req.json()                   // <- get JsonBody future
+       .from_err()
+       .and_then(|val: MyObj| {  // <- deserialized value
+           println!("==== BODY ==== {:?}", val);
+           Ok(HttpResponse::Ok().into())
+       }).responder()
+}
+
+

+ Methods +

+

impl<T: HttpMessage, U: DeserializeOwned> JsonBody<T, U>
[src]

Create JsonBody for request.

+

Change max size of payload. By default max size is 256Kb

+
+

+ Trait Implementations +

+

impl<T: HttpMessage + 'static, U: DeserializeOwned + 'static> Future for JsonBody<T, U>
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, U> !Send for JsonBody<T, U>

impl<T, U> !Sync for JsonBody<T, U>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonConfig.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonConfig.html new file mode 100644 index 0000000..887c9b7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.JsonConfig.html @@ -0,0 +1,45 @@ +actix_web::dev::JsonConfig - Rust

Struct actix_web::dev::JsonConfig[][src]

pub struct JsonConfig<S> { /* fields omitted */ }

Json extractor configuration

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{error, http, App, HttpResponse, Json, Result};
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// deserialize `Info` from request's body, max payload size is 4kb
+fn index(info: Json<Info>) -> Result<String> {
+    Ok(format!("Welcome {}!", info.username))
+}
+
+fn main() {
+    let app = App::new().resource("/index.html", |r| {
+        r.method(http::Method::POST)
+              .with_config(index, |cfg| {
+                  cfg.limit(4096)   // <- change json extractor configuration
+                     .error_handler(|err, req| {  // <- create custom error response
+                         error::InternalError::from_response(
+                             err, HttpResponse::Conflict().finish()).into()
+                         });
+              })
+    });
+}
+
+

+ Methods +

+

impl<S> JsonConfig<S>
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

+

Important traits for &'a mut R

Set custom error handler

+
+

+ Trait Implementations +

+

impl<S> Default for JsonConfig<S>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for JsonConfig<S>

impl<S> !Sync for JsonConfig<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.MessageBody.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.MessageBody.html new file mode 100644 index 0000000..b54c3d4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.MessageBody.html @@ -0,0 +1,42 @@ +actix_web::dev::MessageBody - Rust

Struct actix_web::dev::MessageBody[][src]

pub struct MessageBody<T: HttpMessage> { /* fields omitted */ }

Future that resolves to a complete http message body.

+
+

+ Methods +

+

impl<T: HttpMessage> MessageBody<T>
[src]

Create MessageBody for request.

+

Change max size of payload. By default max size is 256Kb

+
+

+ Trait Implementations +

+

impl<T> Future for MessageBody<T> where
    T: HttpMessage + 'static, 
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> !Send for MessageBody<T>

impl<T> !Sync for MessageBody<T>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Params.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Params.html new file mode 100644 index 0000000..7897d13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Params.html @@ -0,0 +1,39 @@ +actix_web::dev::Params - Rust

Struct actix_web::dev::Params[][src]

pub struct Params { /* fields omitted */ }

Route match information

+

If resource path contains variable patterns, Params stores this variables.

+
+

+ Methods +

+

impl Params
[src]

Check if there are any matched patterns

+

Check number of extracted parameters

+

Get matched parameter by name without type conversion

+

Get unprocessed part of path

+

Get matched FromParam compatible parameter by name.

+

If keyed parameter is not available empty string is used as default +value.

+ +
+fn index(req: HttpRequest) -> Result<String> {
+    let ivalue: isize = req.match_info().query("val")?;
+    Ok(format!("isuze value: {:?}", ivalue))
+}
+

Return iterator to items in parameter container

+
+

+ Trait Implementations +

+

impl Debug for Params
[src]

Formats the value using the given formatter. Read more

+

impl Clone for Params
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<'a> Index<&'a str> for Params
[src]

+

The returned type after indexing.

+

Performs the indexing (container[index]) operation.

+

impl Index<usize> for Params
[src]

+

The returned type after indexing.

+

Performs the indexing (container[index]) operation.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Params

impl !Sync for Params

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Payload.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Payload.html new file mode 100644 index 0000000..12559c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Payload.html @@ -0,0 +1,78 @@ +actix_web::dev::Payload - Rust

Struct actix_web::dev::Payload[][src]

pub struct Payload { /* fields omitted */ }

Buffered stream of bytes chunks

+

Payload stores chunks in a vector. First chunk can be received with +.readany() method. Payload stream is not thread safe. Payload does not +notify current task when new data is available.

+

Payload stream can be used as HttpResponse body stream.

+
+

+ Methods +

+

impl Payload
[src]

Create payload stream.

+

This method construct two objects responsible for bytes stream +generation.

+
    +
  • +

    PayloadSender - Sender side of the stream

    +
  • +
  • +

    Payload - Receiver side of the stream

    +
  • +
+

Put unused data back to payload

+

Set read buffer capacity

+

Default buffer capacity is 32Kb.

+
+

+ Trait Implementations +

+

impl Debug for Payload
[src]

Formats the value using the given formatter. Read more

+

impl Stream for Payload
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+

impl Clone for Payload
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Payload

impl !Sync for Payload

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadBuffer.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadBuffer.html new file mode 100644 index 0000000..7f60310 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadBuffer.html @@ -0,0 +1,23 @@ +actix_web::dev::PayloadBuffer - Rust

Struct actix_web::dev::PayloadBuffer[][src]

pub struct PayloadBuffer<S> { /* fields omitted */ }

Payload buffer

+
+

+ Methods +

+

impl<S> PayloadBuffer<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create new PayloadBuffer instance

+

Important traits for &'a mut R

Get mutable reference to an inner stream.

+

Read first available chunk of bytes

+

Check if buffer contains enough bytes

+

Return reference to the first chunk of data

+

Read exact number of bytes

+

Remove specified amount if bytes from buffer

+

Copy buffered data

+

Read until specified ending

+

Read bytes until new line delimiter

+

Put unprocessed data back to the buffer

+

Get remaining data from the buffer

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for PayloadBuffer<S> where
    S: Send

impl<S> Sync for PayloadBuffer<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadConfig.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadConfig.html new file mode 100644 index 0000000..41315b2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.PayloadConfig.html @@ -0,0 +1,19 @@ +actix_web::dev::PayloadConfig - Rust

Struct actix_web::dev::PayloadConfig[][src]

pub struct PayloadConfig { /* fields omitted */ }

Payload configuration for request's payload.

+
+

+ Methods +

+

impl PayloadConfig
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

+

Important traits for &'a mut R

Set required mime-type of the request. By default mime type is not +enforced.

+
+

+ Trait Implementations +

+

impl Default for PayloadConfig
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for PayloadConfig

impl Sync for PayloadConfig

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Resource.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Resource.html new file mode 100644 index 0000000..36fa599 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Resource.html @@ -0,0 +1,117 @@ +actix_web::dev::Resource - Rust

Struct actix_web::dev::Resource[][src]

pub struct Resource<S = ()> { /* fields omitted */ }

Resource is an entry in route table which corresponds to requested URL.

+

Resource in turn has at least one route. +Route consists of an object that implements Handler trait (handler) +and list of predicates (objects that implement Predicate trait). +Route uses builder-like pattern for configuration. +During request handling, resource object iterate through all routes +and check all predicates for specific route, if request matches all +predicates route route considered matched and route handler get called.

+ +
+use actix_web::{App, HttpResponse, http};
+
+fn main() {
+    let app = App::new()
+        .resource(
+            "/", |r| r.method(http::Method::GET).f(|r| HttpResponse::Ok()))
+        .finish();
+}
+
+

+ Methods +

+

impl<S> Resource<S>
[src]

Create new resource with specified resource definition

+

Set resource name

+

Resource definition

+

impl<S: 'static> Resource<S>
[src]

Register a new route and return mutable reference to Route object. +Route is used for route configuration, i.e. adding predicates, +setting up handler.

+ +
+use actix_web::*;
+
+fn main() {
+    let app = App::new()
+        .resource("/", |r| {
+            r.route()
+                .filter(pred::Any(pred::Get()).or(pred::Put()))
+                .filter(pred::Header("Content-Type", "text/plain"))
+                .f(|r| HttpResponse::Ok())
+        })
+        .finish();
+}
+

Register a new GET route.

+

Register a new POST route.

+

Register a new PUT route.

+

Register a new DELETE route.

+

Register a new HEAD route.

+

Register a new route and add method check to route.

+ +
+use actix_web::*;
+fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+
+App::new().resource("/", |r| r.method(http::Method::GET).f(index));
+

This is shortcut for:

+ +
+App::new().resource("/", |r| r.route().filter(pred::Get()).f(index));
+

Register a new route and add handler object.

+ +
+use actix_web::*;
+fn handler(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+
+App::new().resource("/", |r| r.h(handler));
+

This is shortcut for:

+ +
+App::new().resource("/", |r| r.route().h(handler));
+

Register a new route and add handler function.

+ +
+use actix_web::*;
+fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+
+App::new().resource("/", |r| r.f(index));
+

This is shortcut for:

+ +
+App::new().resource("/", |r| r.route().f(index));
+

Register a new route and add handler.

+ +
+use actix_web::*;
+fn index(req: HttpRequest) -> HttpResponse { unimplemented!() }
+
+App::new().resource("/", |r| r.with(index));
+

This is shortcut for:

+ +
+App::new().resource("/", |r| r.route().with(index));
+

Register a new route and add async handler.

+ +
+use actix_web::*;
+use futures::future::Future;
+
+fn index(req: HttpRequest) -> Box<Future<Item=HttpResponse, Error=Error>> {
+    unimplemented!()
+}
+
+App::new().resource("/", |r| r.with_async(index));
+

This is shortcut for:

+ +
+App::new().resource("/", |r| r.route().with_async(index));
+

Register a resource middleware

+

This is similar to App's middlewares, but +middlewares get invoked on resource level.

+

Note Middleware::finish() fires right after response get +prepared. It does not wait until body get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl<S = ()> !Send for Resource<S>

impl<S = ()> !Sync for Resource<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceDef.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceDef.html new file mode 100644 index 0000000..54aac2c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceDef.html @@ -0,0 +1,38 @@ +actix_web::dev::ResourceDef - Rust

Struct actix_web::dev::ResourceDef[][src]

pub struct ResourceDef { /* fields omitted */ }

Resource type describes an entry in resources table

+
+

+ Methods +

+

impl ResourceDef
[src]

Parse path pattern and create new Resource instance.

+

Panics if path pattern is wrong.

+

Parse path pattern and create new Resource instance.

+

Use prefix type instead of static.

+

Panics if path regex pattern is wrong.

+

Construct external resource

+

Panics if path pattern is wrong.

+

Parse path pattern and create new Resource instance with custom prefix

+

Resource type

+

Resource name

+

Path pattern of the resource

+

Is this path a match against this resource?

+

Are the given path and parameters a match against this resource?

+

Is the given path a prefix match and do the parameters match against this resource?

+

Build resource path.

+
+

+ Trait Implementations +

+

impl Clone for ResourceDef
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ResourceDef
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for ResourceDef
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Eq for ResourceDef
[src]

impl Hash for ResourceDef
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ResourceDef

impl !Sync for ResourceDef

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceInfo.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceInfo.html new file mode 100644 index 0000000..d98b3b2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.ResourceInfo.html @@ -0,0 +1,40 @@ +actix_web::dev::ResourceInfo - Rust

Struct actix_web::dev::ResourceInfo[][src]

pub struct ResourceInfo { /* fields omitted */ }

Information about current resource

+
+

+ Methods +

+

impl ResourceInfo
[src]

Name os the resource

+

This method returns reference to matched ResourceDef object.

+

Get a reference to the Params object.

+

Params is a container for url parameters. +A variable segment is specified in the form {identifier}, +where the identifier can be used later in a request handler to +access the matched value for that segment.

+

Generate url for named resource

+

Check [HttpRequest::url_for()](../struct.HttpRequest.html#method. +url_for) for detailed information.

+

Check if application contains matching resource.

+

This method does not take prefix into account. +For example if prefix is /test and router contains route /name, +following path would be recognizable /test/name but has_resource() call +would return false.

+

Check if application contains matching resource.

+

This method does take prefix into account +but behaves like has_route in case prefix is not set in the router.

+

For example if prefix is /test and router contains route /name, the +following path would be recognizable /test/name and has_prefixed_route() call +would return true. +It will not match against prefix in case it's not given. For example for /name +with a /test prefix would return false

+
+

+ Trait Implementations +

+

impl Clone for ResourceInfo
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ResourceInfo

impl !Sync for ResourceInfo

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Route.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Route.html new file mode 100644 index 0000000..45ddf57 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Route.html @@ -0,0 +1,151 @@ +actix_web::dev::Route - Rust

Struct actix_web::dev::Route[][src]

pub struct Route<S> { /* fields omitted */ }

Resource route definition

+

Route uses builder-like pattern for configuration. +If handler is not explicitly set, default 404 Not Found handler is used.

+
+

+ Methods +

+

impl<S: 'static> Route<S>
[src]

Important traits for &'a mut R

Add match predicate to route.

+ +
+App::new().resource("/path", |r| {
+    r.route()
+        .filter(pred::Get())
+        .filter(pred::Header("content-type", "text/plain"))
+        .f(|req| HttpResponse::Ok())
+})
+

Set handler object. Usually call to this method is last call +during route configuration, so it does not return reference to self.

+

Set handler function. Usually call to this method is last call +during route configuration, so it does not return reference to self.

+

Set async handler function.

+

Set handler function, use request extractor for parameters.

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Path, Result};
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(info: Path<Info>) -> Result<String> {
+    Ok(format!("Welcome {}!", info.username))
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with(index),
+    ); // <- use `with` extractor
+}
+

It is possible to use tuples for specifing multiple extractors for one +handler function.

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Json, Path, Query, Result};
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(
+    info: (Path<Info>, Query<HashMap<String, String>>, Json<Info>),
+) -> Result<String> {
+    Ok(format!("Welcome {}!", info.0.username))
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with(index),
+    ); // <- use `with` extractor
+}
+

Set handler function. Same as .with() but it allows to configure +extractor.

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Path, Result};
+
+/// extract text data from request
+fn index(body: String) -> Result<String> {
+    Ok(format!("Body {}!", body))
+}
+
+fn main() {
+    let app = App::new().resource("/index.html", |r| {
+        r.method(http::Method::GET)
+               .with_config(index, |cfg| { // <- register handler
+                  cfg.limit(4096);  // <- limit size of the payload
+                })
+    });
+}
+

Set async handler function, use request extractor for parameters. +Also this method needs to be used if your handler function returns +impl Future<>

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Error, Path};
+use futures::Future;
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(info: Path<Info>) -> Box<Future<Item = &'static str, Error = Error>> {
+    unimplemented!()
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with_async(index),
+    ); // <- use `with` extractor
+}
+

Set async handler function, use request extractor for parameters. +This method allows to configure extractor.

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Error, Form};
+use futures::Future;
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(info: Form<Info>) -> Box<Future<Item = &'static str, Error = Error>> {
+    unimplemented!()
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET)
+           .with_async_config(index, |cfg| {
+               cfg.limit(4096);
+           }),
+    ); // <- use `with` extractor
+}
+
+

+ Trait Implementations +

+

impl<S: 'static> Default for Route<S>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for Route<S>

impl<S> !Sync for Route<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.Router.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.Router.html new file mode 100644 index 0000000..664ee1e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.Router.html @@ -0,0 +1,18 @@ +actix_web::dev::Router - Rust

Struct actix_web::dev::Router[][src]

pub struct Router<S> { /* fields omitted */ }

Interface for application router.

+
+

+ Methods +

+

impl<S: 'static> Router<S>
[src]

Handle request

+

Query for matched resource

+
+

+ Trait Implementations +

+

impl<S: 'static> Default for Router<S>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for Router<S>

impl<S> !Sync for Router<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/struct.UrlEncoded.html b/static/api/actix-web/0.7.2/actix_web/dev/struct.UrlEncoded.html new file mode 100644 index 0000000..a480fb9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/struct.UrlEncoded.html @@ -0,0 +1,42 @@ +actix_web::dev::UrlEncoded - Rust

Struct actix_web::dev::UrlEncoded[][src]

pub struct UrlEncoded<T: HttpMessage, U> { /* fields omitted */ }

Future that resolves to a parsed urlencoded values.

+
+

+ Methods +

+

impl<T: HttpMessage, U> UrlEncoded<T, U>
[src]

Create a new future to URL encode a request

+

Change max size of payload. By default max size is 256Kb

+
+

+ Trait Implementations +

+

impl<T, U> Future for UrlEncoded<T, U> where
    T: HttpMessage + 'static,
    U: DeserializeOwned + 'static, 
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, U> !Send for UrlEncoded<T, U>

impl<T, U> !Sync for UrlEncoded<T, U>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/trait.FromParam.html b/static/api/actix-web/0.7.2/actix_web/dev/trait.FromParam.html new file mode 100644 index 0000000..43959cc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/trait.FromParam.html @@ -0,0 +1,64 @@ +actix_web::dev::FromParam - Rust

Trait actix_web::dev::FromParam[][src]

pub trait FromParam: Sized {
+    type Err: ResponseError;
+    fn from_param(s: &str) -> Result<Self, Self::Err>;
+}

A trait to abstract the idea of creating a new instance of a type from a +path parameter.

+
+

+ Associated Types +

+
+

The associated error which can be returned from parsing.

+
+

+ Required Methods +

+
+

Parses a string s to return a value of this type.

+
+

+ Implementations on Foreign Types +

+

impl FromParam for PathBuf
[src]

Creates a PathBuf from a path parameter. The returned PathBuf is +percent-decoded. If a segment is equal to "..", the previous segment (if +any) is skipped.

+

For security purposes, if a segment meets any of the following conditions, +an Err is returned indicating the condition met:

+
    +
  • Decoded segment starts with any of: . (except ..), *
  • +
  • Decoded segment ends with any of: :, >, <
  • +
  • Decoded segment contains any of: /
  • +
  • On Windows, decoded segment contains any of: ''
  • +
  • Percent-encoding results in invalid UTF8.
  • +
+

As a result of these conditions, a PathBuf parsed from request path +parameter is safe to interpolate within, or use as a suffix of, a path +without additional checks.

+

impl FromParam for u8
[src]

+

impl FromParam for u16
[src]

+

impl FromParam for u32
[src]

+

impl FromParam for u64
[src]

+

impl FromParam for usize
[src]

+

impl FromParam for i8
[src]

+

impl FromParam for i16
[src]

+

impl FromParam for i32
[src]

+

impl FromParam for i64
[src]

+

impl FromParam for isize
[src]

+

impl FromParam for f32
[src]

+

impl FromParam for f64
[src]

+

impl FromParam for String
[src]

+

impl FromParam for IpAddr
[src]

+

impl FromParam for Ipv4Addr
[src]

+

impl FromParam for Ipv6Addr
[src]

+

impl FromParam for SocketAddr
[src]

+

impl FromParam for SocketAddrV4
[src]

+

impl FromParam for SocketAddrV6
[src]

+

+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/trait.Handler.html b/static/api/actix-web/0.7.2/actix_web/dev/trait.Handler.html new file mode 100644 index 0000000..bbbc8e2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/trait.Handler.html @@ -0,0 +1,27 @@ +actix_web::dev::Handler - Rust

Trait actix_web::dev::Handler[][src]

pub trait Handler<S>: 'static {
+    type Result: Responder;
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result;
+}

Trait defines object that could be registered as route handler

+
+

+ Associated Types +

+
+

The type of value that handler will return.

+
+

+ Required Methods +

+
+

Handle request

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/dev/type.BodyStream.html b/static/api/actix-web/0.7.2/actix_web/dev/type.BodyStream.html new file mode 100644 index 0000000..a37c70a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/dev/type.BodyStream.html @@ -0,0 +1,2 @@ +actix_web::dev::BodyStream - Rust

Type Definition actix_web::dev::BodyStream[][src]

type BodyStream = Box<Stream<Item = Bytes, Error = Error>>;

Type represent streaming body

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/enum.Binary.html b/static/api/actix-web/0.7.2/actix_web/enum.Binary.html new file mode 100644 index 0000000..2802d81 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/enum.Binary.html @@ -0,0 +1,53 @@ +actix_web::Binary - Rust

Enum actix_web::Binary[][src]

pub enum Binary {
+    Bytes(Bytes),
+    Slice(&'static [u8]),
+    SharedVec(Arc<Vec<u8>>),
+    // some variants omitted
+}

Represents various types of binary body. +Content-Length header is set to length of the body.

+

+ Variants

+

Bytes body

+

Static slice

+

Shared vec body

+
+

+ Methods +

+

impl Binary
[src]

Returns true if body is empty

+

Length of body in bytes

+

Create binary body from slice

+

Convert Binary to a Bytes instance

+
+

+ Trait Implementations +

+

impl Debug for Binary
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for Binary
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for Binary
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Into<Bytes> for Binary
[src]

Performs the conversion.

+

impl From<&'static str> for Binary
[src]

Performs the conversion.

+

impl From<&'static [u8]> for Binary
[src]

Performs the conversion.

+

impl From<Vec<u8>> for Binary
[src]

Performs the conversion.

+

impl From<String> for Binary
[src]

Performs the conversion.

+

impl<'a> From<&'a String> for Binary
[src]

Performs the conversion.

+

impl From<Bytes> for Binary
[src]

Performs the conversion.

+

impl From<BytesMut> for Binary
[src]

Performs the conversion.

+

impl From<Arc<String>> for Binary
[src]

Performs the conversion.

+

impl<'a> From<&'a Arc<String>> for Binary
[src]

Performs the conversion.

+

impl From<Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

+

impl<'a> From<&'a Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

+

impl AsRef<[u8]> for Binary
[src]

Important traits for &'a [u8]

Performs the conversion.

+

impl Responder for Binary
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+
+

+ Auto Trait Implementations +

+
+

impl Send for Binary

impl Sync for Binary

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/enum.Body.html b/static/api/actix-web/0.7.2/actix_web/enum.Body.html new file mode 100644 index 0000000..ce74b81 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/enum.Body.html @@ -0,0 +1,37 @@ +actix_web::Body - Rust

Enum actix_web::Body[][src]

pub enum Body {
+    Empty,
+    Binary(Binary),
+    Streaming(BodyStream),
+    Actor(Box<ActorHttpContext>),
+}

Represents various types of http message body.

+

+ Variants

+

Empty response. Content-Length header is set to 0

+

Specific response body.

+

Unspecified streaming response. Developer is responsible for setting +right Content-Length or Transfer-Encoding headers.

+

Special body type for actor response.

+
+

+ Methods +

+

impl Body
[src]

Does this body streaming.

+

Is this binary body.

+

Is this binary empy.

+

Create body from slice (copy)

+
+

+ Trait Implementations +

+

impl PartialEq for Body
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for Body
[src]

Formats the value using the given formatter. Read more

+

impl<T> From<T> for Body where
    T: Into<Binary>, 
[src]

Performs the conversion.

+

impl From<Box<ActorHttpContext>> for Body
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Body

impl !Sync for Body

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/enum.Either.html b/static/api/actix-web/0.7.2/actix_web/enum.Either.html new file mode 100644 index 0000000..b96cdab --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/enum.Either.html @@ -0,0 +1,71 @@ +actix_web::Either - Rust

Enum actix_web::Either[][src]

pub enum Either<A, B> {
+    A(A),
+    B(B),
+}

Combines two different responder types into a single type

+ +
+use actix_web::{AsyncResponder, Either, Error, HttpRequest, HttpResponse};
+use futures::future::result;
+
+type RegisterResult =
+    Either<HttpResponse, Box<Future<Item = HttpResponse, Error = Error>>>;
+
+fn index(req: HttpRequest) -> RegisterResult {
+    if is_a_variant() {
+        // <- choose variant A
+        Either::A(HttpResponse::BadRequest().body("Bad data"))
+    } else {
+        Either::B(
+            // <- variant B
+            result(Ok(HttpResponse::Ok()
+                .content_type("text/html")
+                .body("Hello!")))
+                .responder(),
+        )
+    }
+}
+

+ Variants

+

First branch of the type

+

Second branch of the type

+
+

+ Trait Implementations +

+

impl<A: Debug, B: Debug> Debug for Either<A, B>
[src]

Formats the value using the given formatter. Read more

+

impl<A, B> Responder for Either<A, B> where
    A: Responder,
    B: Responder
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+

impl<A, B, I, E> Future for Either<A, B> where
    A: Future<Item = I, Error = E>,
    B: Future<Item = I, Error = E>, 
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ContentTypeError.t.html b/static/api/actix-web/0.7.2/actix_web/error/ContentTypeError.t.html new file mode 100644 index 0000000..2d368f2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ContentTypeError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ContentTypeError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/CookieParseError.t.html b/static/api/actix-web/0.7.2/actix_web/error/CookieParseError.t.html new file mode 100644 index 0000000..5f9ac31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/CookieParseError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CookieParseError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/Error.t.html b/static/api/actix-web/0.7.2/actix_web/error/Error.t.html new file mode 100644 index 0000000..423d0a4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/Error.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Error.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorBadGateway.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorBadGateway.v.html new file mode 100644 index 0000000..d8293bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorBadGateway.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorBadGateway.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorBadRequest.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorBadRequest.v.html new file mode 100644 index 0000000..b672e05 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorBadRequest.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorBadRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorConflict.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorConflict.v.html new file mode 100644 index 0000000..735c47b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorConflict.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorConflict.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorExpectationFailed.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorExpectationFailed.v.html new file mode 100644 index 0000000..b1d755f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorExpectationFailed.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorExpectationFailed.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorForbidden.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorForbidden.v.html new file mode 100644 index 0000000..97c495e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorForbidden.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorForbidden.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorGatewayTimeout.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorGatewayTimeout.v.html new file mode 100644 index 0000000..b023210 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorGatewayTimeout.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorGatewayTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorGone.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorGone.v.html new file mode 100644 index 0000000..a7617cd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorGone.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorGone.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorInternalServerError.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorInternalServerError.v.html new file mode 100644 index 0000000..10b19ed --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorInternalServerError.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorInternalServerError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorMethodNotAllowed.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorMethodNotAllowed.v.html new file mode 100644 index 0000000..024b6c7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorMethodNotAllowed.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorMethodNotAllowed.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorNotFound.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorNotFound.v.html new file mode 100644 index 0000000..bd08dea --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorNotFound.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorNotFound.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorNotImplemented.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorNotImplemented.v.html new file mode 100644 index 0000000..c04b231 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorNotImplemented.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorNotImplemented.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorPreconditionFailed.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorPreconditionFailed.v.html new file mode 100644 index 0000000..1a69d31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorPreconditionFailed.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorPreconditionFailed.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorRequestTimeout.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorRequestTimeout.v.html new file mode 100644 index 0000000..2ac1258 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorRequestTimeout.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorRequestTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorServiceUnavailable.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorServiceUnavailable.v.html new file mode 100644 index 0000000..0b8f422 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorServiceUnavailable.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorServiceUnavailable.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ErrorUnauthorized.v.html b/static/api/actix-web/0.7.2/actix_web/error/ErrorUnauthorized.v.html new file mode 100644 index 0000000..d55dd9f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ErrorUnauthorized.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ErrorUnauthorized.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ExpectError.t.html b/static/api/actix-web/0.7.2/actix_web/error/ExpectError.t.html new file mode 100644 index 0000000..16bbd14 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ExpectError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ExpectError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/InternalError.t.html b/static/api/actix-web/0.7.2/actix_web/error/InternalError.t.html new file mode 100644 index 0000000..0fbc320 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/InternalError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InternalError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/JsonPayloadError.t.html b/static/api/actix-web/0.7.2/actix_web/error/JsonPayloadError.t.html new file mode 100644 index 0000000..f47a1ca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/JsonPayloadError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.JsonPayloadError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/MultipartError.t.html b/static/api/actix-web/0.7.2/actix_web/error/MultipartError.t.html new file mode 100644 index 0000000..6c12327 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/MultipartError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.MultipartError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ParseError.t.html b/static/api/actix-web/0.7.2/actix_web/error/ParseError.t.html new file mode 100644 index 0000000..77b8df6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ParseError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ParseError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/PayloadError.t.html b/static/api/actix-web/0.7.2/actix_web/error/PayloadError.t.html new file mode 100644 index 0000000..fb7e205 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/PayloadError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.PayloadError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ReadlinesError.t.html b/static/api/actix-web/0.7.2/actix_web/error/ReadlinesError.t.html new file mode 100644 index 0000000..aa95f33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ReadlinesError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ReadlinesError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/ResponseError.t.html b/static/api/actix-web/0.7.2/actix_web/error/ResponseError.t.html new file mode 100644 index 0000000..93322a7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/ResponseError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ResponseError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/Result.t.html b/static/api/actix-web/0.7.2/actix_web/error/Result.t.html new file mode 100644 index 0000000..865910f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/Result.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.Result.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/StaticFileError.t.html b/static/api/actix-web/0.7.2/actix_web/error/StaticFileError.t.html new file mode 100644 index 0000000..9dec299 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/StaticFileError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.StaticFileError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/UriSegmentError.t.html b/static/api/actix-web/0.7.2/actix_web/error/UriSegmentError.t.html new file mode 100644 index 0000000..9d58a6f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/UriSegmentError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.UriSegmentError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/UrlGenerationError.t.html b/static/api/actix-web/0.7.2/actix_web/error/UrlGenerationError.t.html new file mode 100644 index 0000000..bb98f51 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/UrlGenerationError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.UrlGenerationError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/UrlParseError.t.html b/static/api/actix-web/0.7.2/actix_web/error/UrlParseError.t.html new file mode 100644 index 0000000..a8cdd10 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/UrlParseError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.UrlParseError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/UrlencodedError.t.html b/static/api/actix-web/0.7.2/actix_web/error/UrlencodedError.t.html new file mode 100644 index 0000000..9bd9bbf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/UrlencodedError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.UrlencodedError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.ContentTypeError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.ContentTypeError.html new file mode 100644 index 0000000..c30a8af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.ContentTypeError.html @@ -0,0 +1,32 @@ +actix_web::error::ContentTypeError - Rust

Enum actix_web::error::ContentTypeError[][src]

pub enum ContentTypeError {
+    ParseError,
+    UnknownEncoding,
+}

A set of error that can occure during parsing content type

+

+ Variants

+

Can not parse content type

+

Unknown content encoding

+
+

+ Trait Implementations +

+

impl Fail for ContentTypeError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ContentTypeError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for ContentTypeError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for ContentTypeError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for ContentTypeError
[src]

Return BadRequest for ContentTypeError

+

Create response for error Read more

+

impl From<ContentTypeError> for ReadlinesError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.CookieParseError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.CookieParseError.html new file mode 100644 index 0000000..418ffff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.CookieParseError.html @@ -0,0 +1,37 @@ +actix_web::error::CookieParseError - Rust

Enum actix_web::error::CookieParseError[][src]

pub enum CookieParseError {
+    MissingPair,
+    EmptyName,
+    Utf8Error(Utf8Error),
+    // some variants omitted
+}

Enum corresponding to a parsing error.

+

+ Variants

+

The cookie did not contain a name/value pair.

+

The cookie's name was empty.

+

Decoding the cookie's name or value resulted in invalid UTF-8.

+
+

+ Methods +

+

impl ParseError
[src]

Returns a description of this error as a string

+
+

+ Trait Implementations +

+

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl From<Utf8Error> for ParseError
[src]

Performs the conversion.

+

impl Eq for ParseError
[src]

impl PartialEq<ParseError> for ParseError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Copy for ParseError
[src]

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for ParseError
[src]

Return BadRequest for cookie::ParseError

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ParseError

impl Sync for ParseError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.ExpectError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.ExpectError.html new file mode 100644 index 0000000..c919e72 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.ExpectError.html @@ -0,0 +1,30 @@ +actix_web::error::ExpectError - Rust

Enum actix_web::error::ExpectError[][src]

pub enum ExpectError {
+    Encoding,
+    UnknownExpect,
+}

Error during handling Expect header

+

+ Variants

+

Expect header value can not be converted to utf8

+

Unknown expect value

+
+

+ Trait Implementations +

+

impl Fail for ExpectError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ExpectError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for ExpectError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for ExpectError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for ExpectError
[src]

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ExpectError

impl Sync for ExpectError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.JsonPayloadError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.JsonPayloadError.html new file mode 100644 index 0000000..58cfdd8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.JsonPayloadError.html @@ -0,0 +1,34 @@ +actix_web::error::JsonPayloadError - Rust

Enum actix_web::error::JsonPayloadError[][src]

pub enum JsonPayloadError {
+    Overflow,
+    ContentType,
+    Deserialize(JsonError),
+    Payload(PayloadError),
+}

A set of errors that can occur during parsing json payloads

+

+ Variants

+

Payload size is bigger than allowed. (default: 256kB)

+

Content type error

+

Deserialize error

+

Payload error

+
+

+ Trait Implementations +

+

impl Fail for JsonPayloadError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for JsonPayloadError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for JsonPayloadError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for JsonPayloadError
[src]

Return BadRequest for UrlencodedError

+

Create response for error Read more

+

impl From<PayloadError> for JsonPayloadError
[src]

Performs the conversion.

+

impl From<JsonError> for JsonPayloadError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.MultipartError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.MultipartError.html new file mode 100644 index 0000000..d486890 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.MultipartError.html @@ -0,0 +1,38 @@ +actix_web::error::MultipartError - Rust

Enum actix_web::error::MultipartError[][src]

pub enum MultipartError {
+    NoContentType,
+    ParseContentType,
+    Boundary,
+    Incomplete,
+    Parse(ParseError),
+    Payload(PayloadError),
+}

A set of errors that can occur during parsing multipart streams

+

+ Variants

+

Content-Type header is not found

+

Can not parse Content-Type header

+

Multipart boundary is not found

+

Multipart stream is incomplete

+

Error during field parsing

+

Payload error

+
+

+ Trait Implementations +

+

impl Fail for MultipartError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for MultipartError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for MultipartError
[src]

Formats the value using the given formatter. Read more

+

impl From<ParseError> for MultipartError
[src]

Performs the conversion.

+

impl From<PayloadError> for MultipartError
[src]

Performs the conversion.

+

impl ResponseError for MultipartError
[src]

Return BadRequest for MultipartError

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.ParseError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.ParseError.html new file mode 100644 index 0000000..ec28f5f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.ParseError.html @@ -0,0 +1,51 @@ +actix_web::error::ParseError - Rust

Enum actix_web::error::ParseError[][src]

pub enum ParseError {
+    Method,
+    Uri(InvalidUri),
+    Version,
+    Header,
+    TooLarge,
+    Incomplete,
+    Status,
+    Timeout,
+    Io(IoError),
+    Utf8(Utf8Error),
+}

A set of errors that can occur during parsing HTTP streams

+

+ Variants

+

An invalid Method, such as GE.T.

+

An invalid Uri, such as exam ple.domain.

+

An invalid HttpVersion, such as HTP/1.1

+

An invalid Header.

+

A message head is too large to be reasonable.

+

A message reached EOF, but is not complete.

+

An invalid Status, such as 1337 ELITE.

+

A timeout occurred waiting for an IO event.

+

An io::Error that occurred while trying to read or write to a network +stream.

+

Parsing a field as string failed

+
+

+ Trait Implementations +

+

impl Fail for ParseError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for ParseError
[src]

Return BadRequest for ParseError

+

Create response for error Read more

+

impl From<IoError> for ParseError
[src]

Performs the conversion.

+

impl From<InvalidUri> for ParseError
[src]

Performs the conversion.

+

impl From<Utf8Error> for ParseError
[src]

Performs the conversion.

+

impl From<FromUtf8Error> for ParseError
[src]

Performs the conversion.

+

impl From<Error> for ParseError
[src]

Performs the conversion.

+

impl From<ParseError> for MultipartError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ParseError

impl Sync for ParseError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.PayloadError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.PayloadError.html new file mode 100644 index 0000000..d71a162 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.PayloadError.html @@ -0,0 +1,46 @@ +actix_web::error::PayloadError - Rust

Enum actix_web::error::PayloadError[][src]

pub enum PayloadError {
+    Incomplete,
+    EncodingCorrupted,
+    Overflow,
+    UnknownLength,
+    Io(IoError),
+    Http2(Http2Error),
+}

A set of errors that can occur during payload parsing

+

+ Variants

+

A payload reached EOF, but is not complete.

+

Content encoding stream corruption

+

A payload reached size limit.

+

A payload length is unknown.

+

Io error

+

Http2 error

+
+

+ Trait Implementations +

+

impl Fail for PayloadError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for PayloadError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for PayloadError
[src]

Formats the value using the given formatter. Read more

+

impl From<IoError> for PayloadError
[src]

Performs the conversion.

+

impl ResponseError for PayloadError
[src]

PayloadError returns two possible results:

+
    +
  • Overflow returns PayloadTooLarge
  • +
  • Other errors returns BadRequest
  • +
+

Create response for error Read more

+

impl From<PayloadError> for MultipartError
[src]

Performs the conversion.

+

impl From<PayloadError> for UrlencodedError
[src]

Performs the conversion.

+

impl From<PayloadError> for JsonPayloadError
[src]

Performs the conversion.

+

impl From<PayloadError> for ReadlinesError
[src]

Performs the conversion.

+

impl From<PayloadError> for ProtocolError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for PayloadError

impl Sync for PayloadError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.ReadlinesError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.ReadlinesError.html new file mode 100644 index 0000000..e17bcef --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.ReadlinesError.html @@ -0,0 +1,24 @@ +actix_web::error::ReadlinesError - Rust

Enum actix_web::error::ReadlinesError[][src]

pub enum ReadlinesError {
+    EncodingError,
+    PayloadError(PayloadError),
+    LimitOverflow,
+    ContentTypeError(ContentTypeError),
+}

Error type returned when reading body as lines.

+

+ Variants

+

Error when decoding a line.

+

Payload error.

+

Line limit exceeded.

+

ContentType error.

+
+

+ Trait Implementations +

+

impl From<PayloadError> for ReadlinesError
[src]

Performs the conversion.

+

impl From<ContentTypeError> for ReadlinesError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.StaticFileError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.StaticFileError.html new file mode 100644 index 0000000..d79a83d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.StaticFileError.html @@ -0,0 +1,31 @@ +actix_web::error::StaticFileError - Rust

Enum actix_web::error::StaticFileError[][src]

pub enum StaticFileError {
+    IsNotDirectory,
+    IsDirectory,
+}

Errors which can occur when serving static files.

+

+ Variants

+

Path is not a directory

+

Cannot render directory

+
+

+ Trait Implementations +

+

impl Fail for StaticFileError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for StaticFileError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for StaticFileError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for StaticFileError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl ResponseError for StaticFileError
[src]

Return NotFound for StaticFileError

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.UriSegmentError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.UriSegmentError.html new file mode 100644 index 0000000..b0a1291 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.UriSegmentError.html @@ -0,0 +1,33 @@ +actix_web::error::UriSegmentError - Rust

Enum actix_web::error::UriSegmentError[][src]

pub enum UriSegmentError {
+    BadStart(char),
+    BadChar(char),
+    BadEnd(char),
+}

Errors which can occur when attempting to interpret a segment string as a +valid path segment.

+

+ Variants

+

The segment started with the wrapped invalid character.

+

The segment contained the wrapped invalid character.

+

The segment ended with the wrapped invalid character.

+
+

+ Trait Implementations +

+

impl Fail for UriSegmentError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for UriSegmentError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for UriSegmentError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for UriSegmentError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl ResponseError for UriSegmentError
[src]

Return BadRequest for UriSegmentError

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.UrlGenerationError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlGenerationError.html new file mode 100644 index 0000000..daffd2d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlGenerationError.html @@ -0,0 +1,33 @@ +actix_web::error::UrlGenerationError - Rust

Enum actix_web::error::UrlGenerationError[][src]

pub enum UrlGenerationError {
+    ResourceNotFound,
+    NotEnoughElements,
+    ParseError(UrlParseError),
+}

Errors which can occur when attempting to generate resource uri.

+

+ Variants

+

Resource not found

+

Not all path pattern covered

+

URL parse error

+
+

+ Trait Implementations +

+

impl Fail for UrlGenerationError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for UrlGenerationError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for UrlGenerationError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for UrlGenerationError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl ResponseError for UrlGenerationError
[src]

InternalServerError for UrlGeneratorError

+

Create response for error Read more

+

impl From<UrlParseError> for UrlGenerationError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.UrlParseError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlParseError.html new file mode 100644 index 0000000..2dd0ccb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlParseError.html @@ -0,0 +1,39 @@ +actix_web::error::UrlParseError - Rust

Enum actix_web::error::UrlParseError[][src]

pub enum UrlParseError {
+    EmptyHost,
+    IdnaError,
+    InvalidPort,
+    InvalidIpv4Address,
+    InvalidIpv6Address,
+    InvalidDomainCharacter,
+    RelativeUrlWithoutBase,
+    RelativeUrlWithCannotBeABaseBase,
+    SetHostOnCannotBeABaseUrl,
+    Overflow,
+}

Errors that can occur during parsing.

+

+ Variants

+ +

+ Trait Implementations +

+

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl From<Errors> for ParseError
[src]

Performs the conversion.

+

impl Eq for ParseError
[src]

impl PartialEq<ParseError> for ParseError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Copy for ParseError
[src]

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl From<ParseError> for ProtoError

Performs the conversion.

+

impl ResponseError for UrlParseError
[src]

InternalServerError for UrlParseError

+

Create response for error Read more

+

impl From<UrlParseError> for UrlGenerationError
[src]

Performs the conversion.

+

impl From<UrlParseError> for ClientError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ParseError

impl Sync for ParseError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/enum.UrlencodedError.html b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlencodedError.html new file mode 100644 index 0000000..df21d80 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/enum.UrlencodedError.html @@ -0,0 +1,37 @@ +actix_web::error::UrlencodedError - Rust

Enum actix_web::error::UrlencodedError[][src]

pub enum UrlencodedError {
+    Chunked,
+    Overflow,
+    UnknownLength,
+    ContentType,
+    Parse,
+    Payload(PayloadError),
+}

A set of errors that can occur during parsing urlencoded payloads

+

+ Variants

+

Can not decode chunked transfer encoding

+

Payload size is bigger than allowed. (default: 256kB)

+

Payload size is now known

+

Content type error

+

Parse error

+

Payload error

+
+

+ Trait Implementations +

+

impl Fail for UrlencodedError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for UrlencodedError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for UrlencodedError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for UrlencodedError
[src]

Return BadRequest for UrlencodedError

+

Create response for error Read more

+

impl From<PayloadError> for UrlencodedError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadGateway.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadGateway.html new file mode 100644 index 0000000..3d68d1e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadGateway.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorBadGateway - Rust

Function actix_web::error::ErrorBadGateway[][src]

pub fn ErrorBadGateway<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and +generate BAD GATEWAY response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadRequest.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadRequest.html new file mode 100644 index 0000000..3b3dd1a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorBadRequest.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorBadRequest - Rust

Function actix_web::error::ErrorBadRequest[][src]

pub fn ErrorBadRequest<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate BAD +REQUEST response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorConflict.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorConflict.html new file mode 100644 index 0000000..5bdedda --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorConflict.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorConflict - Rust

Function actix_web::error::ErrorConflict[][src]

pub fn ErrorConflict<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate CONFLICT +response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorExpectationFailed.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorExpectationFailed.html new file mode 100644 index 0000000..2532945 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorExpectationFailed.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorExpectationFailed - Rust

Function actix_web::error::ErrorExpectationFailed[][src]

pub fn ErrorExpectationFailed<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate +EXPECTATION FAILED response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorForbidden.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorForbidden.html new file mode 100644 index 0000000..f194263 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorForbidden.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorForbidden - Rust

Function actix_web::error::ErrorForbidden[][src]

pub fn ErrorForbidden<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate FORBIDDEN +response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGatewayTimeout.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGatewayTimeout.html new file mode 100644 index 0000000..6dc933d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGatewayTimeout.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorGatewayTimeout - Rust

Function actix_web::error::ErrorGatewayTimeout[][src]

pub fn ErrorGatewayTimeout<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and +generate GATEWAY TIMEOUT response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGone.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGone.html new file mode 100644 index 0000000..e5bdbe7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorGone.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorGone - Rust

Function actix_web::error::ErrorGone[][src]

pub fn ErrorGone<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate GONE +response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorInternalServerError.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorInternalServerError.html new file mode 100644 index 0000000..5803189 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorInternalServerError.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorInternalServerError - Rust

Function actix_web::error::ErrorInternalServerError[][src]

pub fn ErrorInternalServerError<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and +generate INTERNAL SERVER ERROR response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorMethodNotAllowed.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorMethodNotAllowed.html new file mode 100644 index 0000000..e164198 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorMethodNotAllowed.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorMethodNotAllowed - Rust

Function actix_web::error::ErrorMethodNotAllowed[][src]

pub fn ErrorMethodNotAllowed<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate METHOD NOT +ALLOWED response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotFound.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotFound.html new file mode 100644 index 0000000..0cc5f40 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotFound.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorNotFound - Rust

Function actix_web::error::ErrorNotFound[][src]

pub fn ErrorNotFound<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate NOT FOUND +response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotImplemented.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotImplemented.html new file mode 100644 index 0000000..f69bf62 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorNotImplemented.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorNotImplemented - Rust

Function actix_web::error::ErrorNotImplemented[][src]

pub fn ErrorNotImplemented<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and +generate NOT IMPLEMENTED response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorPreconditionFailed.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorPreconditionFailed.html new file mode 100644 index 0000000..7143fc7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorPreconditionFailed.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorPreconditionFailed - Rust

Function actix_web::error::ErrorPreconditionFailed[][src]

pub fn ErrorPreconditionFailed<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate +PRECONDITION FAILED response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorRequestTimeout.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorRequestTimeout.html new file mode 100644 index 0000000..a94dde3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorRequestTimeout.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorRequestTimeout - Rust

Function actix_web::error::ErrorRequestTimeout[][src]

pub fn ErrorRequestTimeout<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate REQUEST +TIMEOUT response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorServiceUnavailable.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorServiceUnavailable.html new file mode 100644 index 0000000..db7436f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorServiceUnavailable.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorServiceUnavailable - Rust

Function actix_web::error::ErrorServiceUnavailable[][src]

pub fn ErrorServiceUnavailable<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and +generate SERVICE UNAVAILABLE response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorUnauthorized.html b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorUnauthorized.html new file mode 100644 index 0000000..ef1d417 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/fn.ErrorUnauthorized.html @@ -0,0 +1,3 @@ +actix_web::error::ErrorUnauthorized - Rust

Function actix_web::error::ErrorUnauthorized[][src]

pub fn ErrorUnauthorized<T>(err: T) -> Error where
    T: Send + Sync + Debug + Display + 'static, 

Helper function that creates wrapper of any error and generate +UNAUTHORIZED response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/index.html b/static/api/actix-web/0.7.2/actix_web/error/index.html new file mode 100644 index 0000000..790be25 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/index.html @@ -0,0 +1,280 @@ +actix_web::error - Rust

Module actix_web::error[][src]

Error and Result module

+

Structs

+ + + + + + + + +
Error +

General purpose actix web error.

+ +
InternalError +

Helper type that can wrap any error and generate custom response.

+ +

Enums

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ContentTypeError +

A set of error that can occure during parsing content type

+ +
CookieParseError +

Enum corresponding to a parsing error.

+ +
ExpectError +

Error during handling Expect header

+ +
JsonPayloadError +

A set of errors that can occur during parsing json payloads

+ +
MultipartError +

A set of errors that can occur during parsing multipart streams

+ +
ParseError +

A set of errors that can occur during parsing HTTP streams

+ +
PayloadError +

A set of errors that can occur during payload parsing

+ +
ReadlinesError +

Error type returned when reading body as lines.

+ +
StaticFileError +

Errors which can occur when serving static files.

+ +
UriSegmentError +

Errors which can occur when attempting to interpret a segment string as a +valid path segment.

+ +
UrlGenerationError +

Errors which can occur when attempting to generate resource uri.

+ +
UrlParseError +

Errors that can occur during parsing.

+ +
UrlencodedError +

A set of errors that can occur during parsing urlencoded payloads

+ +

Traits

+ + + + +
ResponseError +

Error that can be converted to HttpResponse

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ErrorBadGateway +

Helper function that creates wrapper of any error and +generate BAD GATEWAY response.

+ +
ErrorBadRequest +

Helper function that creates wrapper of any error and generate BAD +REQUEST response.

+ +
ErrorConflict +

Helper function that creates wrapper of any error and generate CONFLICT +response.

+ +
ErrorExpectationFailed +

Helper function that creates wrapper of any error and generate +EXPECTATION FAILED response.

+ +
ErrorForbidden +

Helper function that creates wrapper of any error and generate FORBIDDEN +response.

+ +
ErrorGatewayTimeout +

Helper function that creates wrapper of any error and +generate GATEWAY TIMEOUT response.

+ +
ErrorGone +

Helper function that creates wrapper of any error and generate GONE +response.

+ +
ErrorInternalServerError +

Helper function that creates wrapper of any error and +generate INTERNAL SERVER ERROR response.

+ +
ErrorMethodNotAllowed +

Helper function that creates wrapper of any error and generate METHOD NOT +ALLOWED response.

+ +
ErrorNotFound +

Helper function that creates wrapper of any error and generate NOT FOUND +response.

+ +
ErrorNotImplemented +

Helper function that creates wrapper of any error and +generate NOT IMPLEMENTED response.

+ +
ErrorPreconditionFailed +

Helper function that creates wrapper of any error and generate +PRECONDITION FAILED response.

+ +
ErrorRequestTimeout +

Helper function that creates wrapper of any error and generate REQUEST +TIMEOUT response.

+ +
ErrorServiceUnavailable +

Helper function that creates wrapper of any error and +generate SERVICE UNAVAILABLE response.

+ +
ErrorUnauthorized +

Helper function that creates wrapper of any error and generate +UNAUTHORIZED response.

+ +

Type Definitions

+ + + + +
Result +

A specialized Result +for actix web operations

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/error/sidebar-items.js new file mode 100644 index 0000000..2d6f1be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ContentTypeError","A set of error that can occure during parsing content type"],["CookieParseError","Enum corresponding to a parsing error."],["ExpectError","Error during handling `Expect` header"],["JsonPayloadError","A set of errors that can occur during parsing json payloads"],["MultipartError","A set of errors that can occur during parsing multipart streams"],["ParseError","A set of errors that can occur during parsing HTTP streams"],["PayloadError","A set of errors that can occur during payload parsing"],["ReadlinesError","Error type returned when reading body as lines."],["StaticFileError","Errors which can occur when serving static files."],["UriSegmentError","Errors which can occur when attempting to interpret a segment string as a valid path segment."],["UrlGenerationError","Errors which can occur when attempting to generate resource uri."],["UrlParseError","Errors that can occur during parsing."],["UrlencodedError","A set of errors that can occur during parsing urlencoded payloads"]],"fn":[["ErrorBadGateway","Helper function that creates wrapper of any error and generate BAD GATEWAY response."],["ErrorBadRequest","Helper function that creates wrapper of any error and generate BAD REQUEST response."],["ErrorConflict","Helper function that creates wrapper of any error and generate CONFLICT response."],["ErrorExpectationFailed","Helper function that creates wrapper of any error and generate EXPECTATION FAILED response."],["ErrorForbidden","Helper function that creates wrapper of any error and generate FORBIDDEN response."],["ErrorGatewayTimeout","Helper function that creates wrapper of any error and generate GATEWAY TIMEOUT response."],["ErrorGone","Helper function that creates wrapper of any error and generate GONE response."],["ErrorInternalServerError","Helper function that creates wrapper of any error and generate INTERNAL SERVER ERROR response."],["ErrorMethodNotAllowed","Helper function that creates wrapper of any error and generate METHOD NOT ALLOWED response."],["ErrorNotFound","Helper function that creates wrapper of any error and generate NOT FOUND response."],["ErrorNotImplemented","Helper function that creates wrapper of any error and generate NOT IMPLEMENTED response."],["ErrorPreconditionFailed","Helper function that creates wrapper of any error and generate PRECONDITION FAILED response."],["ErrorRequestTimeout","Helper function that creates wrapper of any error and generate REQUEST TIMEOUT response."],["ErrorServiceUnavailable","Helper function that creates wrapper of any error and generate SERVICE UNAVAILABLE response."],["ErrorUnauthorized","Helper function that creates wrapper of any error and generate UNAUTHORIZED response."]],"struct":[["Error","General purpose actix web error."],["InternalError","Helper type that can wrap any error and generate custom response."]],"trait":[["ResponseError","Error that can be converted to `HttpResponse`"]],"type":[["Result","A specialized `Result` for actix web operations"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/struct.Error.html b/static/api/actix-web/0.7.2/actix_web/error/struct.Error.html new file mode 100644 index 0000000..8fe7fa1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/struct.Error.html @@ -0,0 +1,40 @@ +actix_web::error::Error - Rust

Struct actix_web::error::Error[][src]

pub struct Error { /* fields omitted */ }

General purpose actix web error.

+

An actix web error is used to carry errors from failure or std::error +through actix in a convenient way. It can be created through +converting errors with into().

+

Whenever it is created from an external object a response error is created +for it that can be used to create an http response from it this means that +if you have access to an actix Error you can always get a +ResponseError reference from it.

+
+

+ Methods +

+

impl Error
[src]

Deprecated since 0.6.0

: please use Error::as_response_error() instead

+

Deprecated way to reference the underlying response error.

+

Returns a reference to the underlying cause of this Error as Fail

+

Returns the reference to the underlying ResponseError.

+

Returns a reference to the Backtrace carried by this error, if it +carries one.

+

This uses the same Backtrace type that failure uses.

+

Attempts to downcast this Error to a particular Fail type by +reference.

+

If the underlying error is not of type T, this will return None.

+
+

+ Trait Implementations +

+

impl Display for Error
[src]

Formats the value using the given formatter. Read more

+

impl Debug for Error
[src]

Formats the value using the given formatter. Read more

+

impl From<Error> for HttpResponse
[src]

Convert Error to a HttpResponse instance

+

Performs the conversion.

+

impl<T: ResponseError> From<T> for Error
[src]

Error for any error that implements ResponseError

+

Performs the conversion.

+

impl From<Error> for Error
[src]

Performs the conversion.

+

impl From<Error> for ClientError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for Error

impl Sync for Error

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/struct.InternalError.html b/static/api/actix-web/0.7.2/actix_web/error/struct.InternalError.html new file mode 100644 index 0000000..d830375 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/struct.InternalError.html @@ -0,0 +1,42 @@ +actix_web::error::InternalError - Rust

Struct actix_web::error::InternalError[][src]

pub struct InternalError<T> { /* fields omitted */ }

Helper type that can wrap any error and generate custom response.

+

In following example any io::Error will be converted into "BAD REQUEST" +response as opposite to INTERNAL SERVER ERROR which is defined by +default.

+ +
+use actix_web::fs::NamedFile;
+
+fn index(req: HttpRequest) -> Result<fs::NamedFile> {
+    let f = NamedFile::open("test.txt").map_err(error::ErrorBadRequest)?;
+    Ok(f)
+}
+
+

+ Methods +

+

impl<T> InternalError<T>
[src]

Create InternalError instance

+

Create InternalError with predefined HttpResponse.

+
+

+ Trait Implementations +

+

impl<T> Fail for InternalError<T> where
    T: Send + Sync + Debug + Display + 'static, 
[src]

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl<T> Debug for InternalError<T> where
    T: Send + Sync + Debug + 'static, 
[src]

Formats the value using the given formatter. Read more

+

impl<T> Display for InternalError<T> where
    T: Send + Sync + Display + 'static, 
[src]

Formats the value using the given formatter. Read more

+

impl<T> ResponseError for InternalError<T> where
    T: Send + Sync + Debug + Display + 'static, 
[src]

Create response for error Read more

+

impl<T> Responder for InternalError<T> where
    T: Send + Sync + Debug + Display + 'static, 
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for InternalError<T> where
    T: Send

impl<T> Sync for InternalError<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/trait.ResponseError.html b/static/api/actix-web/0.7.2/actix_web/error/trait.ResponseError.html new file mode 100644 index 0000000..f0498ec --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/trait.ResponseError.html @@ -0,0 +1,53 @@ +actix_web::error::ResponseError - Rust

Trait actix_web::error::ResponseError[][src]

pub trait ResponseError: Fail + InternalResponseErrorAsFail {
+    fn error_response(&self) -> HttpResponse { ... }
+}

Error that can be converted to HttpResponse

+
+

+ Provided Methods +

+
+

Create response for error

+

Internal server error is generated by default.

+
+

+ Implementations on Foreign Types +

+

impl<T> ResponseError for Compat<T> where
    T: Display + Debug + Sync + Send + 'static, 
[src]

Compatibility for failure::Error

+

impl ResponseError for JsonError
[src]

InternalServerError for JsonError

+

impl ResponseError for TimerError
[src]

InternalServerError for TimerError

+

impl ResponseError for DeError
[src]

Return BAD_REQUEST for de::value::Error

+

impl ResponseError for Utf8Error
[src]

Return BAD_REQUEST for Utf8Error

+

impl ResponseError for HttpError
[src]

Return InternalServerError for HttpError, +Response generation can return HttpError, so it is internal error

+

impl ResponseError for Error
[src]

Return InternalServerError for io::Error

+

impl ResponseError for Canceled
[src]

InternalServerError for futures::Canceled

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/error/type.Result.html b/static/api/actix-web/0.7.2/actix_web/error/type.Result.html new file mode 100644 index 0000000..aed586c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/error/type.Result.html @@ -0,0 +1,6 @@ +actix_web::error::Result - Rust

Type Definition actix_web::error::Result[][src]

type Result<T, E = Error> = Result<T, E>;

A specialized Result +for actix web operations

+

This typedef is generally used to avoid writing out +actix_web::error::Error directly and is otherwise a direct mapping to +Result.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extensions/Extensions.t.html b/static/api/actix-web/0.7.2/actix_web/extensions/Extensions.t.html new file mode 100644 index 0000000..222cdeb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extensions/Extensions.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Extensions.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extensions/struct.Extensions.html b/static/api/actix-web/0.7.2/actix_web/extensions/struct.Extensions.html new file mode 100644 index 0000000..03dec7e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extensions/struct.Extensions.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Extensions.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/Form.t.html b/static/api/actix-web/0.7.2/actix_web/extractor/Form.t.html new file mode 100644 index 0000000..00f1c92 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/Form.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Form.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/FormConfig.t.html b/static/api/actix-web/0.7.2/actix_web/extractor/FormConfig.t.html new file mode 100644 index 0000000..2c22075 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/FormConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FormConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/Path.t.html b/static/api/actix-web/0.7.2/actix_web/extractor/Path.t.html new file mode 100644 index 0000000..d7e4222 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/Path.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Path.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/PayloadConfig.t.html b/static/api/actix-web/0.7.2/actix_web/extractor/PayloadConfig.t.html new file mode 100644 index 0000000..77d10b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/PayloadConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.PayloadConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/Query.t.html b/static/api/actix-web/0.7.2/actix_web/extractor/Query.t.html new file mode 100644 index 0000000..8965f6c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/Query.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Query.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/struct.Form.html b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Form.html new file mode 100644 index 0000000..46d0a37 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Form.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Form.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/struct.FormConfig.html b/static/api/actix-web/0.7.2/actix_web/extractor/struct.FormConfig.html new file mode 100644 index 0000000..71a409a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/struct.FormConfig.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.FormConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/struct.Path.html b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Path.html new file mode 100644 index 0000000..5831045 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Path.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Path.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/struct.PayloadConfig.html b/static/api/actix-web/0.7.2/actix_web/extractor/struct.PayloadConfig.html new file mode 100644 index 0000000..c6187fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/struct.PayloadConfig.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.PayloadConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/extractor/struct.Query.html b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Query.html new file mode 100644 index 0000000..74291b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/extractor/struct.Query.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Query.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/ChunkedReadFile.t.html b/static/api/actix-web/0.7.2/actix_web/fs/ChunkedReadFile.t.html new file mode 100644 index 0000000..d9f0362 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/ChunkedReadFile.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ChunkedReadFile.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/DefaultConfig.t.html b/static/api/actix-web/0.7.2/actix_web/fs/DefaultConfig.t.html new file mode 100644 index 0000000..821aa6c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/DefaultConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/Directory.t.html b/static/api/actix-web/0.7.2/actix_web/fs/Directory.t.html new file mode 100644 index 0000000..c37a582 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/Directory.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Directory.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/NamedFile.t.html b/static/api/actix-web/0.7.2/actix_web/fs/NamedFile.t.html new file mode 100644 index 0000000..38484f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/NamedFile.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.NamedFile.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/StaticFileConfig.t.html b/static/api/actix-web/0.7.2/actix_web/fs/StaticFileConfig.t.html new file mode 100644 index 0000000..1894adb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/StaticFileConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.StaticFileConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/StaticFiles.t.html b/static/api/actix-web/0.7.2/actix_web/fs/StaticFiles.t.html new file mode 100644 index 0000000..8f4f6fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/StaticFiles.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StaticFiles.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/file_extension_to_mime.v.html b/static/api/actix-web/0.7.2/actix_web/fs/file_extension_to_mime.v.html new file mode 100644 index 0000000..f21ae9f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/file_extension_to_mime.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.file_extension_to_mime.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/fn.file_extension_to_mime.html b/static/api/actix-web/0.7.2/actix_web/fs/fn.file_extension_to_mime.html new file mode 100644 index 0000000..36f8dbb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/fn.file_extension_to_mime.html @@ -0,0 +1,4 @@ +actix_web::fs::file_extension_to_mime - Rust

Function actix_web::fs::file_extension_to_mime[][src]

pub fn file_extension_to_mime(ext: &str) -> Mime

Return the MIME type associated with a filename extension (case-insensitive). +If ext is empty or no associated type for the extension was found, returns +the type application/octet-stream.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/index.html b/static/api/actix-web/0.7.2/actix_web/fs/index.html new file mode 100644 index 0000000..149e181 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/index.html @@ -0,0 +1,65 @@ +actix_web::fs - Rust

Module actix_web::fs[][src]

Static files support

+

Structs

+ + + + + + + + + + + + + + + + + + + + +
ChunkedReadFile +

A helper created from a std::fs::File which reads the file +chunk-by-chunk on a CpuPool.

+ +
DefaultConfig +

Default content disposition as described in +StaticFileConfig

+ +
Directory +

A directory; responds with the generated directory listing.

+ +
NamedFile +

A file with an associated name.

+ +
StaticFiles +

Static files handling

+ +

Traits

+ + + + +
StaticFileConfig +

Describes StaticFiles configiration

+ +

Functions

+ + + + +
file_extension_to_mime +

Return the MIME type associated with a filename extension (case-insensitive). +If ext is empty or no associated type for the extension was found, returns +the type application/octet-stream.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/fs/sidebar-items.js new file mode 100644 index 0000000..51a5a33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"fn":[["file_extension_to_mime","Return the MIME type associated with a filename extension (case-insensitive). If `ext` is empty or no associated type for the extension was found, returns the type `application/octet-stream`."]],"struct":[["ChunkedReadFile","A helper created from a `std::fs::File` which reads the file chunk-by-chunk on a `CpuPool`."],["DefaultConfig","Default content disposition as described in StaticFileConfig"],["Directory","A directory; responds with the generated directory listing."],["NamedFile","A file with an associated name."],["StaticFiles","Static files handling"]],"trait":[["StaticFileConfig","Describes `StaticFiles` configiration"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/struct.ChunkedReadFile.html b/static/api/actix-web/0.7.2/actix_web/fs/struct.ChunkedReadFile.html new file mode 100644 index 0000000..1bac658 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/struct.ChunkedReadFile.html @@ -0,0 +1,54 @@ +actix_web::fs::ChunkedReadFile - Rust

Struct actix_web::fs::ChunkedReadFile[][src]

pub struct ChunkedReadFile { /* fields omitted */ }

A helper created from a std::fs::File which reads the file +chunk-by-chunk on a CpuPool.

+
+

+ Trait Implementations +

+

impl Stream for ChunkedReadFile
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/struct.DefaultConfig.html b/static/api/actix-web/0.7.2/actix_web/fs/struct.DefaultConfig.html new file mode 100644 index 0000000..7ec29f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/struct.DefaultConfig.html @@ -0,0 +1,17 @@ +actix_web::fs::DefaultConfig - Rust

Struct actix_web::fs::DefaultConfig[][src]

pub struct DefaultConfig;

Default content disposition as described in +StaticFileConfig

+
+

+ Trait Implementations +

+

impl Default for DefaultConfig
[src]

Returns the "default value" for a type. Read more

+

impl StaticFileConfig for DefaultConfig
[src]

Describes mapping for mime type to content disposition header Read more

+

Describes whether Actix should attempt to calculate ETag Read more

+

Describes whether Actix should use last modified date of file. Read more

+

Describes allowed methods to access static resources. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for DefaultConfig

impl Sync for DefaultConfig

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/struct.Directory.html b/static/api/actix-web/0.7.2/actix_web/fs/struct.Directory.html new file mode 100644 index 0000000..cd860bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/struct.Directory.html @@ -0,0 +1,32 @@ +actix_web::fs::Directory - Rust

Struct actix_web::fs::Directory[][src]

pub struct Directory {
+    pub base: PathBuf,
+    pub path: PathBuf,
+}

A directory; responds with the generated directory listing.

+

+ Fields

+ +

Base directory

+
+ +

Path of subdirectory to generate listing for

+
+

+ Methods +

+

impl Directory
[src]

Create a new directory

+

Is this entry visible from this directory?

+
+

+ Trait Implementations +

+

impl Debug for Directory
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Directory

impl Sync for Directory

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/struct.NamedFile.html b/static/api/actix-web/0.7.2/actix_web/fs/struct.NamedFile.html new file mode 100644 index 0000000..051e9f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/struct.NamedFile.html @@ -0,0 +1,183 @@ +actix_web::fs::NamedFile - Rust

Struct actix_web::fs::NamedFile[][src]

pub struct NamedFile<C = DefaultConfig> { /* fields omitted */ }

A file with an associated name.

+
+

+ Methods +

+

impl NamedFile
[src]

Attempts to open a file in read-only mode.

+

Examples

+
+use actix_web::fs::NamedFile;
+
+let file = NamedFile::open("foo.txt");
+

impl<C: StaticFileConfig> NamedFile<C>
[src]

Attempts to open a file in read-only mode using provided configiration.

+

Examples

+
+use actix_web::fs::{DefaultConfig, NamedFile};
+
+let file = NamedFile::open_with_config("foo.txt", DefaultConfig);
+

Important traits for &'a File

Returns reference to the underlying File object.

+

Retrieve the path of this file.

+

Examples

+
+use actix_web::fs::NamedFile;
+
+let file = NamedFile::open("test.txt")?;
+assert_eq!(file.path().as_os_str(), "foo.txt");
+

Set CpuPool to use

+

Set response Status Code

+

Set the MIME Content-Type for serving this file. By default +the Content-Type is inferred from the filename extension.

+

Set the Content-Disposition for serving this file. This allows +changing the inline/attachment disposition as well as the filename +sent to the peer. By default the disposition is inline for text, +image, and video content types, and attachment otherwise, and +the filename is taken from the path provided in the open method +after converting it to UTF-8 using +to_string_lossy.

+

Set content encoding for serving this file

+
+

+ Methods from Deref<Target = File> +

+

Attempts to sync all OS-internal metadata to disk.

+

This function will attempt to ensure that all in-core data reaches the +filesystem before returning.

+

Examples

+
+use std::fs::File;
+use std::io::prelude::*;
+
+fn main() -> std::io::Result<()> {
+    let mut f = File::create("foo.txt")?;
+    f.write_all(b"Hello, world!")?;
+
+    f.sync_all()?;
+    Ok(())
+}
+

This function is similar to sync_all, except that it may not +synchronize file metadata to the filesystem.

+

This is intended for use cases that must synchronize content, but don't +need the metadata on disk. The goal of this method is to reduce disk +operations.

+

Note that some platforms may simply implement this in terms of +sync_all.

+

Examples

+
+use std::fs::File;
+use std::io::prelude::*;
+
+fn main() -> std::io::Result<()> {
+    let mut f = File::create("foo.txt")?;
+    f.write_all(b"Hello, world!")?;
+
+    f.sync_data()?;
+    Ok(())
+}
+

Truncates or extends the underlying file, updating the size of +this file to become size.

+

If the size is less than the current file's size, then the file will +be shrunk. If it is greater than the current file's size, then the file +will be extended to size and have all of the intermediate data filled +in with 0s.

+

The file's cursor isn't changed. In particular, if the cursor was at the +end and the file is shrunk using this operation, the cursor will now be +past the end.

+

Errors

+

This function will return an error if the file is not opened for writing.

+

Examples

+
+use std::fs::File;
+
+fn main() -> std::io::Result<()> {
+    let mut f = File::create("foo.txt")?;
+    f.set_len(10)?;
+    Ok(())
+}
+

Note that this method alters the content of the underlying file, even +though it takes &self rather than &mut self.

+

Queries metadata about the underlying file.

+

Examples

+
+use std::fs::File;
+
+fn main() -> std::io::Result<()> {
+    let mut f = File::open("foo.txt")?;
+    let metadata = f.metadata()?;
+    Ok(())
+}
+

Create a new File instance that shares the same underlying file handle +as the existing File instance. Reads, writes, and seeks will affect +both File instances simultaneously.

+

Examples

+

Create two handles for a file named foo.txt:

+ +
+use std::fs::File;
+
+fn main() -> std::io::Result<()> {
+    let mut file = File::open("foo.txt")?;
+    let file_copy = file.try_clone()?;
+    Ok(())
+}
+

Assuming there’s a file named foo.txt with contents abcdef\n, create +two handles, seek one of them, and read the remaining bytes from the +other handle:

+ +
+use std::fs::File;
+use std::io::SeekFrom;
+use std::io::prelude::*;
+
+fn main() -> std::io::Result<()> {
+    let mut file = File::open("foo.txt")?;
+    let mut file_copy = file.try_clone()?;
+
+    file.seek(SeekFrom::Start(3))?;
+
+    let mut contents = vec![];
+    file_copy.read_to_end(&mut contents)?;
+    assert_eq!(contents, b"def\n");
+    Ok(())
+}
+

Changes the permissions on the underlying file.

+

Platform-specific behavior

+

This function currently corresponds to the fchmod function on Unix and +the SetFileInformationByHandle function on Windows. Note that, this +may change in the future.

+

Errors

+

This function will return an error if the user lacks permission change +attributes on the underlying file. It may also return an error in other +os-specific unspecified cases.

+

Examples

+
+fn main() -> std::io::Result<()> {
+    use std::fs::File;
+
+    let file = File::open("foo.txt")?;
+    let mut perms = file.metadata()?.permissions();
+    perms.set_readonly(true);
+    file.set_permissions(perms)?;
+    Ok(())
+}
+

Note that this method alters the permissions of the underlying file, +even though it takes &self rather than &mut self.

+
+

+ Trait Implementations +

+

impl<C: Debug> Debug for NamedFile<C>
[src]

Formats the value using the given formatter. Read more

+

impl<C> Deref for NamedFile<C>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a File

Dereferences the value.

+

impl<C> DerefMut for NamedFile<C>
[src]

Important traits for &'a File

Mutably dereferences the value.

+

impl<C: StaticFileConfig> Responder for NamedFile<C>
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+
+

+ Auto Trait Implementations +

+
+

impl<C> Send for NamedFile<C> where
    C: Send

impl<C> Sync for NamedFile<C> where
    C: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/struct.StaticFiles.html b/static/api/actix-web/0.7.2/actix_web/fs/struct.StaticFiles.html new file mode 100644 index 0000000..d5d0b97 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/struct.StaticFiles.html @@ -0,0 +1,46 @@ +actix_web::fs::StaticFiles - Rust

Struct actix_web::fs::StaticFiles[][src]

pub struct StaticFiles<S, C = DefaultConfig> { /* fields omitted */ }

Static files handling

+

StaticFile handler must be registered with App::handler() method, +because StaticFile handler requires access sub-path information.

+ +
+use actix_web::{fs, App};
+
+fn main() {
+    let app = App::new()
+        .handler("/static", fs::StaticFiles::new(".").unwrap())
+        .finish();
+}
+
+

+ Methods +

+

impl<S: 'static> StaticFiles<S>
[src]

Create new StaticFiles instance for specified base directory.

+

StaticFile uses CpuPool for blocking filesystem operations. +By default pool with 20 threads is used. +Pool size can be changed by setting ACTIX_CPU_POOL environment variable.

+

Create new StaticFiles instance for specified base directory and +CpuPool.

+

impl<S: 'static, C: StaticFileConfig> StaticFiles<S, C>
[src]

Create new StaticFiles instance for specified base directory.

+

Identical with new but allows to specify configiration to use.

+

Create new StaticFiles instance for specified base directory with config and +CpuPool.

+

Show files listing for directories.

+

By default show files listing is disabled.

+

Set custom directory renderer

+

Set index file

+

Redirects to specific index file for directory "/" instead of +showing files listing.

+

Sets default handler which is used when no matched file could be found.

+
+

+ Trait Implementations +

+

impl<S: 'static, C: 'static + StaticFileConfig> Handler<S> for StaticFiles<S, C>
[src]

+

The type of value that handler will return.

+

Handle request

+
+

+ Auto Trait Implementations +

+
+

impl<S, C = DefaultConfig> !Send for StaticFiles<S, C>

impl<S, C = DefaultConfig> !Sync for StaticFiles<S, C>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/fs/trait.StaticFileConfig.html b/static/api/actix-web/0.7.2/actix_web/fs/trait.StaticFileConfig.html new file mode 100644 index 0000000..71da5b7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/fs/trait.StaticFileConfig.html @@ -0,0 +1,50 @@ +actix_web::fs::StaticFileConfig - Rust

Trait actix_web::fs::StaticFileConfig[][src]

pub trait StaticFileConfig: Default {
+    fn content_disposition_map(typ: Name) -> DispositionType { ... }
+
fn is_use_etag() -> bool { ... } +
fn is_use_last_modifier() -> bool { ... } +
fn is_method_allowed(_method: &Method) -> bool { ... } +}

Describes StaticFiles configiration

+

To configure actix's static resources you need +to define own configiration type and implement any method +you wish to customize. +As trait implements reasonable defaults for Actix.

+

Example

+
+ extern crate mime;
+ extern crate actix_web;
+ use actix_web::http::header::DispositionType;
+ use actix_web::fs::{StaticFileConfig, NamedFile};
+
+ #[derive(Default)]
+ struct MyConfig;
+
+ impl StaticFileConfig for MyConfig {
+     fn content_disposition_map(typ: mime::Name) -> DispositionType {
+         DispositionType::Attachment
+     }
+ }
+
+ let file = NamedFile::open_with_config("foo.txt", MyConfig);
+
+

+ Provided Methods +

+
+

Describes mapping for mime type to content disposition header

+

By default IMAGE, TEXT and VIDEO are mapped to Inline. +Others are mapped to Attachment

+

Describes whether Actix should attempt to calculate ETag

+

Defaults to true

+

Describes whether Actix should use last modified date of file.

+

Defaults to true

+

Describes allowed methods to access static resources.

+

By default all methods are allowed

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/AsyncResponder.t.html b/static/api/actix-web/0.7.2/actix_web/handler/AsyncResponder.t.html new file mode 100644 index 0000000..232acc8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/AsyncResponder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncResponder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/AsyncResult.t.html b/static/api/actix-web/0.7.2/actix_web/handler/AsyncResult.t.html new file mode 100644 index 0000000..c60ebb4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/AsyncResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AsyncResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/Either.t.html b/static/api/actix-web/0.7.2/actix_web/handler/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/FromRequest.t.html b/static/api/actix-web/0.7.2/actix_web/handler/FromRequest.t.html new file mode 100644 index 0000000..0d34855 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/FromRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.FromRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/FutureResponse.t.html b/static/api/actix-web/0.7.2/actix_web/handler/FutureResponse.t.html new file mode 100644 index 0000000..67de650 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/FutureResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.FutureResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/Handler.t.html b/static/api/actix-web/0.7.2/actix_web/handler/Handler.t.html new file mode 100644 index 0000000..6aa19e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/Handler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/Responder.t.html b/static/api/actix-web/0.7.2/actix_web/handler/Responder.t.html new file mode 100644 index 0000000..949d3c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/Responder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Responder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/State.t.html b/static/api/actix-web/0.7.2/actix_web/handler/State.t.html new file mode 100644 index 0000000..0fb03b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/State.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.State.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/enum.Either.html b/static/api/actix-web/0.7.2/actix_web/handler/enum.Either.html new file mode 100644 index 0000000..ebbeb4f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/enum.Either.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/struct.AsyncResult.html b/static/api/actix-web/0.7.2/actix_web/handler/struct.AsyncResult.html new file mode 100644 index 0000000..ace44af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/struct.AsyncResult.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.AsyncResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/struct.State.html b/static/api/actix-web/0.7.2/actix_web/handler/struct.State.html new file mode 100644 index 0000000..aed0861 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/struct.State.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.State.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/trait.AsyncResponder.html b/static/api/actix-web/0.7.2/actix_web/handler/trait.AsyncResponder.html new file mode 100644 index 0000000..214a619 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/trait.AsyncResponder.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/trait.AsyncResponder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/trait.FromRequest.html b/static/api/actix-web/0.7.2/actix_web/handler/trait.FromRequest.html new file mode 100644 index 0000000..2845198 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/trait.FromRequest.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/trait.FromRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/trait.Handler.html b/static/api/actix-web/0.7.2/actix_web/handler/trait.Handler.html new file mode 100644 index 0000000..ec2db37 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/trait.Handler.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/trait.Responder.html b/static/api/actix-web/0.7.2/actix_web/handler/trait.Responder.html new file mode 100644 index 0000000..58397df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/trait.Responder.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/trait.Responder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/handler/type.FutureResponse.html b/static/api/actix-web/0.7.2/actix_web/handler/type.FutureResponse.html new file mode 100644 index 0000000..f2a533f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/handler/type.FutureResponse.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/type.FutureResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header.m.html b/static/api/actix-web/0.7.2/actix_web/header.m.html new file mode 100644 index 0000000..008a11c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header.m.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to macro.header.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCEPT.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT.v.html new file mode 100644 index 0000000..5b581a3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_CHARSET.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_CHARSET.v.html new file mode 100644 index 0000000..728af9e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_CHARSET.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_CHARSET.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_ENCODING.v.html new file mode 100644 index 0000000..bab2234 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_LANGUAGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_LANGUAGE.v.html new file mode 100644 index 0000000..09365eb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_LANGUAGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_RANGES.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_RANGES.v.html new file mode 100644 index 0000000..3a83831 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCEPT_RANGES.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_RANGES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html new file mode 100644 index 0000000..8ed993b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html new file mode 100644 index 0000000..3174de0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_METHODS.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_METHODS.v.html new file mode 100644 index 0000000..cd35630 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_METHODS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_METHODS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html new file mode 100644 index 0000000..55668d2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html new file mode 100644 index 0000000..b261f6f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_EXPOSE_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_MAX_AGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_MAX_AGE.v.html new file mode 100644 index 0000000..61616e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_MAX_AGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_MAX_AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html new file mode 100644 index 0000000..3a77e37 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_REQUEST_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_METHOD.v.html b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_METHOD.v.html new file mode 100644 index 0000000..b596ba8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ACCESS_CONTROL_REQUEST_METHOD.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_REQUEST_METHOD.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/AGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/AGE.v.html new file mode 100644 index 0000000..e4b584e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/AGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ALLOW.v.html b/static/api/actix-web/0.7.2/actix_web/header/ALLOW.v.html new file mode 100644 index 0000000..329dbe0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ALLOW.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ALLOW.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ALT_SVC.v.html b/static/api/actix-web/0.7.2/actix_web/header/ALT_SVC.v.html new file mode 100644 index 0000000..32693a5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ALT_SVC.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ALT_SVC.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/AUTHORIZATION.v.html b/static/api/actix-web/0.7.2/actix_web/header/AUTHORIZATION.v.html new file mode 100644 index 0000000..d81b53f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/AUTHORIZATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/AsHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/header/AsHeaderName.t.html new file mode 100644 index 0000000..d2f06f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/AsHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CACHE_CONTROL.v.html b/static/api/actix-web/0.7.2/actix_web/header/CACHE_CONTROL.v.html new file mode 100644 index 0000000..e9e5075 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CACHE_CONTROL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CACHE_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONNECTION.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONNECTION.v.html new file mode 100644 index 0000000..0ef8dc7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONNECTION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONNECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_DISPOSITION.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_DISPOSITION.v.html new file mode 100644 index 0000000..92511ff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_DISPOSITION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_DISPOSITION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_ENCODING.v.html new file mode 100644 index 0000000..a9b4eaf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LANGUAGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LANGUAGE.v.html new file mode 100644 index 0000000..f0782fc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LANGUAGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LENGTH.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LENGTH.v.html new file mode 100644 index 0000000..eafcf86 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LENGTH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LENGTH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LOCATION.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LOCATION.v.html new file mode 100644 index 0000000..ddea472 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_LOCATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_RANGE.v.html new file mode 100644 index 0000000..733eb6c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY.v.html new file mode 100644 index 0000000..3de1fa3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_SECURITY_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html new file mode 100644 index 0000000..4dfb48e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/CONTENT_TYPE.v.html b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_TYPE.v.html new file mode 100644 index 0000000..d2497c6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/CONTENT_TYPE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_TYPE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/COOKIE.v.html b/static/api/actix-web/0.7.2/actix_web/header/COOKIE.v.html new file mode 100644 index 0000000..f811b63 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/COOKIE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ContentEncoding.t.html b/static/api/actix-web/0.7.2/actix_web/header/ContentEncoding.t.html new file mode 100644 index 0000000..5783cdd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ContentEncoding.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ContentEncoding.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/DATE.v.html b/static/api/actix-web/0.7.2/actix_web/header/DATE.v.html new file mode 100644 index 0000000..f340f3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/DATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.DATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/DNT.v.html b/static/api/actix-web/0.7.2/actix_web/header/DNT.v.html new file mode 100644 index 0000000..0ad89d4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/DNT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.DNT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/Drain.t.html b/static/api/actix-web/0.7.2/actix_web/header/Drain.t.html new file mode 100644 index 0000000..8e65c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/Drain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ETAG.v.html b/static/api/actix-web/0.7.2/actix_web/header/ETAG.v.html new file mode 100644 index 0000000..66193ae --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ETAG.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ETAG.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/EXPECT.v.html b/static/api/actix-web/0.7.2/actix_web/header/EXPECT.v.html new file mode 100644 index 0000000..80c71e3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/EXPECT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.EXPECT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/EXPIRES.v.html b/static/api/actix-web/0.7.2/actix_web/header/EXPIRES.v.html new file mode 100644 index 0000000..e68486d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/EXPIRES.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.EXPIRES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/Entry.t.html b/static/api/actix-web/0.7.2/actix_web/header/Entry.t.html new file mode 100644 index 0000000..a0bc1c8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/Entry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Entry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ExtendedValue.t.html b/static/api/actix-web/0.7.2/actix_web/header/ExtendedValue.t.html new file mode 100644 index 0000000..83fe04b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ExtendedValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ExtendedValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/FORWARDED.v.html b/static/api/actix-web/0.7.2/actix_web/header/FORWARDED.v.html new file mode 100644 index 0000000..3e85006 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/FORWARDED.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.FORWARDED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/FROM.v.html b/static/api/actix-web/0.7.2/actix_web/header/FROM.v.html new file mode 100644 index 0000000..6b71c55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/FROM.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.FROM.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/GetAll.t.html b/static/api/actix-web/0.7.2/actix_web/header/GetAll.t.html new file mode 100644 index 0000000..1198485 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/GetAll.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.GetAll.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/HOST.v.html b/static/api/actix-web/0.7.2/actix_web/header/HOST.v.html new file mode 100644 index 0000000..770a383 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/HOST.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.HOST.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/HeaderMap.t.html b/static/api/actix-web/0.7.2/actix_web/header/HeaderMap.t.html new file mode 100644 index 0000000..3154877 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/HeaderMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/HeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/header/HeaderName.t.html new file mode 100644 index 0000000..6a9afe4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/HeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/HeaderValue.t.html b/static/api/actix-web/0.7.2/actix_web/header/HeaderValue.t.html new file mode 100644 index 0000000..29c71f0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/HeaderValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IF_MATCH.v.html b/static/api/actix-web/0.7.2/actix_web/header/IF_MATCH.v.html new file mode 100644 index 0000000..a9f5ebf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IF_MATCH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IF_MODIFIED_SINCE.v.html b/static/api/actix-web/0.7.2/actix_web/header/IF_MODIFIED_SINCE.v.html new file mode 100644 index 0000000..d8fa73f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IF_MODIFIED_SINCE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_MODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IF_NONE_MATCH.v.html b/static/api/actix-web/0.7.2/actix_web/header/IF_NONE_MATCH.v.html new file mode 100644 index 0000000..8b3eb6b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IF_NONE_MATCH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_NONE_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IF_RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/IF_RANGE.v.html new file mode 100644 index 0000000..53ccfe9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IF_RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IF_UNMODIFIED_SINCE.v.html b/static/api/actix-web/0.7.2/actix_web/header/IF_UNMODIFIED_SINCE.v.html new file mode 100644 index 0000000..1617dc7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IF_UNMODIFIED_SINCE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_UNMODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IntoHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/header/IntoHeaderName.t.html new file mode 100644 index 0000000..c57e6b7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IntoHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/IntoIter.t.html b/static/api/actix-web/0.7.2/actix_web/header/IntoIter.t.html new file mode 100644 index 0000000..33ee82f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/IntoIter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.IntoIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderName.t.html new file mode 100644 index 0000000..3c50a23 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderNameBytes.t.html b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderNameBytes.t.html new file mode 100644 index 0000000..c16700b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderNameBytes.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderNameBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValue.t.html b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValue.t.html new file mode 100644 index 0000000..ece1a05 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValueBytes.t.html b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValueBytes.t.html new file mode 100644 index 0000000..4cec243 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/InvalidHeaderValueBytes.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderValueBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/Iter.t.html b/static/api/actix-web/0.7.2/actix_web/header/Iter.t.html new file mode 100644 index 0000000..1aba368 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/Iter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Iter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/Keys.t.html b/static/api/actix-web/0.7.2/actix_web/header/Keys.t.html new file mode 100644 index 0000000..2efb7df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/Keys.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Keys.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/LAST_MODIFIED.v.html b/static/api/actix-web/0.7.2/actix_web/header/LAST_MODIFIED.v.html new file mode 100644 index 0000000..980abff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/LAST_MODIFIED.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LAST_MODIFIED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/LINK.v.html b/static/api/actix-web/0.7.2/actix_web/header/LINK.v.html new file mode 100644 index 0000000..9ef0021 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/LINK.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LINK.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/LOCATION.v.html b/static/api/actix-web/0.7.2/actix_web/header/LOCATION.v.html new file mode 100644 index 0000000..b5931c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/LOCATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/MAX_FORWARDS.v.html b/static/api/actix-web/0.7.2/actix_web/header/MAX_FORWARDS.v.html new file mode 100644 index 0000000..679335f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/MAX_FORWARDS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.MAX_FORWARDS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ORIGIN.v.html b/static/api/actix-web/0.7.2/actix_web/header/ORIGIN.v.html new file mode 100644 index 0000000..2c63122 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ORIGIN.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/OccupiedEntry.t.html b/static/api/actix-web/0.7.2/actix_web/header/OccupiedEntry.t.html new file mode 100644 index 0000000..84b49e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/OccupiedEntry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.OccupiedEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/PRAGMA.v.html b/static/api/actix-web/0.7.2/actix_web/header/PRAGMA.v.html new file mode 100644 index 0000000..3a3a5cf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/PRAGMA.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PRAGMA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHENTICATE.v.html b/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHENTICATE.v.html new file mode 100644 index 0000000..23a408a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHENTICATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PROXY_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHORIZATION.v.html b/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHORIZATION.v.html new file mode 100644 index 0000000..029e5ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/PROXY_AUTHORIZATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PROXY_AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS.v.html b/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS.v.html new file mode 100644 index 0000000..b24092a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PUBLIC_KEY_PINS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html b/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html new file mode 100644 index 0000000..9bded38 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PUBLIC_KEY_PINS_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/header/RANGE.v.html new file mode 100644 index 0000000..3b2c2fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/REFERER.v.html b/static/api/actix-web/0.7.2/actix_web/header/REFERER.v.html new file mode 100644 index 0000000..b3493a4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/REFERER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFERER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/REFERRER_POLICY.v.html b/static/api/actix-web/0.7.2/actix_web/header/REFERRER_POLICY.v.html new file mode 100644 index 0000000..d081797 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/REFERRER_POLICY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFERRER_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/REFRESH.v.html b/static/api/actix-web/0.7.2/actix_web/header/REFRESH.v.html new file mode 100644 index 0000000..f020218 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/REFRESH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFRESH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/RETRY_AFTER.v.html b/static/api/actix-web/0.7.2/actix_web/header/RETRY_AFTER.v.html new file mode 100644 index 0000000..5ed5cde --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/RETRY_AFTER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.RETRY_AFTER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_ACCEPT.v.html b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_ACCEPT.v.html new file mode 100644 index 0000000..9fec76f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_ACCEPT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_EXTENSIONS.v.html b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_EXTENSIONS.v.html new file mode 100644 index 0000000..3a1bc1e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_EXTENSIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_EXTENSIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_KEY.v.html b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_KEY.v.html new file mode 100644 index 0000000..79e1b40 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_KEY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_KEY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_PROTOCOL.v.html b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_PROTOCOL.v.html new file mode 100644 index 0000000..2dd38ca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_PROTOCOL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_PROTOCOL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_VERSION.v.html b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_VERSION.v.html new file mode 100644 index 0000000..0fa3658 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SEC_WEBSOCKET_VERSION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_VERSION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SERVER.v.html b/static/api/actix-web/0.7.2/actix_web/header/SERVER.v.html new file mode 100644 index 0000000..809ab3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SERVER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SERVER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/SET_COOKIE.v.html b/static/api/actix-web/0.7.2/actix_web/header/SET_COOKIE.v.html new file mode 100644 index 0000000..7c4c33b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/SET_COOKIE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SET_COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/STRICT_TRANSPORT_SECURITY.v.html b/static/api/actix-web/0.7.2/actix_web/header/STRICT_TRANSPORT_SECURITY.v.html new file mode 100644 index 0000000..23c57cd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/STRICT_TRANSPORT_SECURITY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.STRICT_TRANSPORT_SECURITY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/TE.v.html b/static/api/actix-web/0.7.2/actix_web/header/TE.v.html new file mode 100644 index 0000000..d34fb1b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/TE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/TRAILER.v.html b/static/api/actix-web/0.7.2/actix_web/header/TRAILER.v.html new file mode 100644 index 0000000..a8dfb4f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/TRAILER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TRAILER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/TRANSFER_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/header/TRANSFER_ENCODING.v.html new file mode 100644 index 0000000..9715521 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/TRANSFER_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TRANSFER_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ToStrError.t.html b/static/api/actix-web/0.7.2/actix_web/header/ToStrError.t.html new file mode 100644 index 0000000..eb1446c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ToStrError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ToStrError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/UPGRADE.v.html b/static/api/actix-web/0.7.2/actix_web/header/UPGRADE.v.html new file mode 100644 index 0000000..0eaaf27 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/UPGRADE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.UPGRADE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/UPGRADE_INSECURE_REQUESTS.v.html b/static/api/actix-web/0.7.2/actix_web/header/UPGRADE_INSECURE_REQUESTS.v.html new file mode 100644 index 0000000..b584d0f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/UPGRADE_INSECURE_REQUESTS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.UPGRADE_INSECURE_REQUESTS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/USER_AGENT.v.html b/static/api/actix-web/0.7.2/actix_web/header/USER_AGENT.v.html new file mode 100644 index 0000000..8eed0da --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/USER_AGENT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.USER_AGENT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/VARY.v.html b/static/api/actix-web/0.7.2/actix_web/header/VARY.v.html new file mode 100644 index 0000000..cad37fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/VARY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.VARY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/VIA.v.html b/static/api/actix-web/0.7.2/actix_web/header/VIA.v.html new file mode 100644 index 0000000..c52a882 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/VIA.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.VIA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/VacantEntry.t.html b/static/api/actix-web/0.7.2/actix_web/header/VacantEntry.t.html new file mode 100644 index 0000000..cfc2c03 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/VacantEntry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.VacantEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ValueDrain.t.html b/static/api/actix-web/0.7.2/actix_web/header/ValueDrain.t.html new file mode 100644 index 0000000..df94e78 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ValueDrain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueDrain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ValueIter.t.html b/static/api/actix-web/0.7.2/actix_web/header/ValueIter.t.html new file mode 100644 index 0000000..b7cb479 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ValueIter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/ValueIterMut.t.html b/static/api/actix-web/0.7.2/actix_web/header/ValueIterMut.t.html new file mode 100644 index 0000000..61a4221 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/ValueIterMut.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueIterMut.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/Values.t.html b/static/api/actix-web/0.7.2/actix_web/header/Values.t.html new file mode 100644 index 0000000..bb3749a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/Values.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Values.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/WARNING.v.html b/static/api/actix-web/0.7.2/actix_web/header/WARNING.v.html new file mode 100644 index 0000000..c26398b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/WARNING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.WARNING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/WWW_AUTHENTICATE.v.html b/static/api/actix-web/0.7.2/actix_web/header/WWW_AUTHENTICATE.v.html new file mode 100644 index 0000000..d7ffe43 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/WWW_AUTHENTICATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.WWW_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/X_CONTENT_TYPE_OPTIONS.v.html b/static/api/actix-web/0.7.2/actix_web/header/X_CONTENT_TYPE_OPTIONS.v.html new file mode 100644 index 0000000..aee9225 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/X_CONTENT_TYPE_OPTIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_CONTENT_TYPE_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/X_DNS_PREFETCH_CONTROL.v.html b/static/api/actix-web/0.7.2/actix_web/header/X_DNS_PREFETCH_CONTROL.v.html new file mode 100644 index 0000000..a8ad6e2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/X_DNS_PREFETCH_CONTROL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_DNS_PREFETCH_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/X_FRAME_OPTIONS.v.html b/static/api/actix-web/0.7.2/actix_web/header/X_FRAME_OPTIONS.v.html new file mode 100644 index 0000000..9aa08b2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/X_FRAME_OPTIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_FRAME_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/X_XSS_PROTECTION.v.html b/static/api/actix-web/0.7.2/actix_web/header/X_XSS_PROTECTION.v.html new file mode 100644 index 0000000..51b8abf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/X_XSS_PROTECTION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_XSS_PROTECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/ContentDisposition.t.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/ContentDisposition.t.html new file mode 100644 index 0000000..f42c4ff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/ContentDisposition.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ContentDisposition.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionParam.t.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionParam.t.html new file mode 100644 index 0000000..4f4d64c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionParam.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.DispositionParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionType.t.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionType.t.html new file mode 100644 index 0000000..a7914f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/DispositionType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.DispositionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionParam.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionParam.html new file mode 100644 index 0000000..05e10ec --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionParam.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../../actix_web/http/header/enum.DispositionParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionType.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionType.html new file mode 100644 index 0000000..742a2ab --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/enum.DispositionType.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../../actix_web/http/header/enum.DispositionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/struct.ContentDisposition.html b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/struct.ContentDisposition.html new file mode 100644 index 0000000..4d2b77f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/common/content_disposition/struct.ContentDisposition.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../../actix_web/http/header/struct.ContentDisposition.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT.html new file mode 100644 index 0000000..d8178df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_CHARSET.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_CHARSET.html new file mode 100644 index 0000000..8fe6cf8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_CHARSET.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCEPT_CHARSET.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_ENCODING.html new file mode 100644 index 0000000..f92f11e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_ENCODING.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCEPT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_LANGUAGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_LANGUAGE.html new file mode 100644 index 0000000..82aa0d0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_LANGUAGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCEPT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_RANGES.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_RANGES.html new file mode 100644 index 0000000..b8772bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCEPT_RANGES.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCEPT_RANGES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html new file mode 100644 index 0000000..2fd94c0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html new file mode 100644 index 0000000..a580f0e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html new file mode 100644 index 0000000..d27a196 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html new file mode 100644 index 0000000..c1ff821 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html new file mode 100644 index 0000000..4535eb5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_MAX_AGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_MAX_AGE.html new file mode 100644 index 0000000..7d76efd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_MAX_AGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html new file mode 100644 index 0000000..e7af2f6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html new file mode 100644 index 0000000..4610c77 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.AGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.AGE.html new file mode 100644 index 0000000..9966966 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.AGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ALLOW.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ALLOW.html new file mode 100644 index 0000000..bb14f42 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ALLOW.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ALLOW.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ALT_SVC.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ALT_SVC.html new file mode 100644 index 0000000..85a289e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ALT_SVC.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ALT_SVC.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.AUTHORIZATION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.AUTHORIZATION.html new file mode 100644 index 0000000..5ab7072 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.AUTHORIZATION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CACHE_CONTROL.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CACHE_CONTROL.html new file mode 100644 index 0000000..21e6bd0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CACHE_CONTROL.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CACHE_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONNECTION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONNECTION.html new file mode 100644 index 0000000..6c6679a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONNECTION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONNECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_DISPOSITION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_DISPOSITION.html new file mode 100644 index 0000000..e479336 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_DISPOSITION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_DISPOSITION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_ENCODING.html new file mode 100644 index 0000000..3e23195 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_ENCODING.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LANGUAGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LANGUAGE.html new file mode 100644 index 0000000..a32d2db --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LANGUAGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LENGTH.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LENGTH.html new file mode 100644 index 0000000..0699e14 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LENGTH.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_LENGTH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LOCATION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LOCATION.html new file mode 100644 index 0000000..30bbf7f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_LOCATION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_RANGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_RANGE.html new file mode 100644 index 0000000..dd10e0f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_RANGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY.html new file mode 100644 index 0000000..a467286 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html new file mode 100644 index 0000000..0abdd63 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_TYPE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_TYPE.html new file mode 100644 index 0000000..43a0924 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.CONTENT_TYPE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.CONTENT_TYPE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.COOKIE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.COOKIE.html new file mode 100644 index 0000000..2ff2471 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.COOKIE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.DATE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.DATE.html new file mode 100644 index 0000000..17a8323 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.DATE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.DATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.DNT.html b/static/api/actix-web/0.7.2/actix_web/header/constant.DNT.html new file mode 100644 index 0000000..642de85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.DNT.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.DNT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ETAG.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ETAG.html new file mode 100644 index 0000000..c2e6e47 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ETAG.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ETAG.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.EXPECT.html b/static/api/actix-web/0.7.2/actix_web/header/constant.EXPECT.html new file mode 100644 index 0000000..85db46f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.EXPECT.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.EXPECT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.EXPIRES.html b/static/api/actix-web/0.7.2/actix_web/header/constant.EXPIRES.html new file mode 100644 index 0000000..3b1904c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.EXPIRES.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.EXPIRES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.FORWARDED.html b/static/api/actix-web/0.7.2/actix_web/header/constant.FORWARDED.html new file mode 100644 index 0000000..d900e77 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.FORWARDED.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.FORWARDED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.FROM.html b/static/api/actix-web/0.7.2/actix_web/header/constant.FROM.html new file mode 100644 index 0000000..6ac549a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.FROM.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.FROM.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.HOST.html b/static/api/actix-web/0.7.2/actix_web/header/constant.HOST.html new file mode 100644 index 0000000..415fbf8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.HOST.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.HOST.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MATCH.html b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MATCH.html new file mode 100644 index 0000000..e6e8d8b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MATCH.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.IF_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MODIFIED_SINCE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MODIFIED_SINCE.html new file mode 100644 index 0000000..467a476 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_MODIFIED_SINCE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.IF_MODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.IF_NONE_MATCH.html b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_NONE_MATCH.html new file mode 100644 index 0000000..d9fc583 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_NONE_MATCH.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.IF_NONE_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.IF_RANGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_RANGE.html new file mode 100644 index 0000000..f14ce24 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_RANGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.IF_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.IF_UNMODIFIED_SINCE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_UNMODIFIED_SINCE.html new file mode 100644 index 0000000..5a19cf2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.IF_UNMODIFIED_SINCE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.LAST_MODIFIED.html b/static/api/actix-web/0.7.2/actix_web/header/constant.LAST_MODIFIED.html new file mode 100644 index 0000000..f4fee49 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.LAST_MODIFIED.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.LAST_MODIFIED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.LINK.html b/static/api/actix-web/0.7.2/actix_web/header/constant.LINK.html new file mode 100644 index 0000000..d3a9bf4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.LINK.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.LINK.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.LOCATION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.LOCATION.html new file mode 100644 index 0000000..2ac74f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.LOCATION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.MAX_FORWARDS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.MAX_FORWARDS.html new file mode 100644 index 0000000..3a104a9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.MAX_FORWARDS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.MAX_FORWARDS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.ORIGIN.html b/static/api/actix-web/0.7.2/actix_web/header/constant.ORIGIN.html new file mode 100644 index 0000000..a7230a3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.ORIGIN.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.PRAGMA.html b/static/api/actix-web/0.7.2/actix_web/header/constant.PRAGMA.html new file mode 100644 index 0000000..303caff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.PRAGMA.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.PRAGMA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHENTICATE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHENTICATE.html new file mode 100644 index 0000000..5030717 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHENTICATE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.PROXY_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHORIZATION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHORIZATION.html new file mode 100644 index 0000000..860765c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.PROXY_AUTHORIZATION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.PROXY_AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS.html new file mode 100644 index 0000000..00ca94c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.PUBLIC_KEY_PINS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html new file mode 100644 index 0000000..dcb07a9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.RANGE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.RANGE.html new file mode 100644 index 0000000..bcfaa77 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.RANGE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.REFERER.html b/static/api/actix-web/0.7.2/actix_web/header/constant.REFERER.html new file mode 100644 index 0000000..034a447 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.REFERER.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.REFERER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.REFERRER_POLICY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.REFERRER_POLICY.html new file mode 100644 index 0000000..84cc8ff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.REFERRER_POLICY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.REFERRER_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.REFRESH.html b/static/api/actix-web/0.7.2/actix_web/header/constant.REFRESH.html new file mode 100644 index 0000000..d1a4b87 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.REFRESH.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.REFRESH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.RETRY_AFTER.html b/static/api/actix-web/0.7.2/actix_web/header/constant.RETRY_AFTER.html new file mode 100644 index 0000000..e64801b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.RETRY_AFTER.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.RETRY_AFTER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_ACCEPT.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_ACCEPT.html new file mode 100644 index 0000000..26d2370 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_ACCEPT.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_EXTENSIONS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_EXTENSIONS.html new file mode 100644 index 0000000..5c37ab8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_EXTENSIONS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_KEY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_KEY.html new file mode 100644 index 0000000..7da256b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_KEY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_PROTOCOL.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_PROTOCOL.html new file mode 100644 index 0000000..ce8b94c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_PROTOCOL.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_VERSION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_VERSION.html new file mode 100644 index 0000000..24f915f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SEC_WEBSOCKET_VERSION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SERVER.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SERVER.html new file mode 100644 index 0000000..a17fc74 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SERVER.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SERVER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.SET_COOKIE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.SET_COOKIE.html new file mode 100644 index 0000000..51754a0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.SET_COOKIE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.SET_COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.STRICT_TRANSPORT_SECURITY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.STRICT_TRANSPORT_SECURITY.html new file mode 100644 index 0000000..38dfdf7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.STRICT_TRANSPORT_SECURITY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.TE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.TE.html new file mode 100644 index 0000000..4f77381 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.TE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.TE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.TRAILER.html b/static/api/actix-web/0.7.2/actix_web/header/constant.TRAILER.html new file mode 100644 index 0000000..2f52053 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.TRAILER.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.TRAILER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.TRANSFER_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/header/constant.TRANSFER_ENCODING.html new file mode 100644 index 0000000..d9d9a4e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.TRANSFER_ENCODING.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.TRANSFER_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE.html new file mode 100644 index 0000000..cb66c77 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.UPGRADE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE_INSECURE_REQUESTS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE_INSECURE_REQUESTS.html new file mode 100644 index 0000000..77d2ffd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.UPGRADE_INSECURE_REQUESTS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.USER_AGENT.html b/static/api/actix-web/0.7.2/actix_web/header/constant.USER_AGENT.html new file mode 100644 index 0000000..3a96036 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.USER_AGENT.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.USER_AGENT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.VARY.html b/static/api/actix-web/0.7.2/actix_web/header/constant.VARY.html new file mode 100644 index 0000000..4bf9464 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.VARY.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.VARY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.VIA.html b/static/api/actix-web/0.7.2/actix_web/header/constant.VIA.html new file mode 100644 index 0000000..7f6d373 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.VIA.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.VIA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.WARNING.html b/static/api/actix-web/0.7.2/actix_web/header/constant.WARNING.html new file mode 100644 index 0000000..f9537e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.WARNING.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.WARNING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.WWW_AUTHENTICATE.html b/static/api/actix-web/0.7.2/actix_web/header/constant.WWW_AUTHENTICATE.html new file mode 100644 index 0000000..afd603a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.WWW_AUTHENTICATE.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.WWW_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.X_CONTENT_TYPE_OPTIONS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.X_CONTENT_TYPE_OPTIONS.html new file mode 100644 index 0000000..e216c9f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.X_CONTENT_TYPE_OPTIONS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.X_DNS_PREFETCH_CONTROL.html b/static/api/actix-web/0.7.2/actix_web/header/constant.X_DNS_PREFETCH_CONTROL.html new file mode 100644 index 0000000..42b8fca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.X_DNS_PREFETCH_CONTROL.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.X_FRAME_OPTIONS.html b/static/api/actix-web/0.7.2/actix_web/header/constant.X_FRAME_OPTIONS.html new file mode 100644 index 0000000..9c4a4a5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.X_FRAME_OPTIONS.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.X_FRAME_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/constant.X_XSS_PROTECTION.html b/static/api/actix-web/0.7.2/actix_web/header/constant.X_XSS_PROTECTION.html new file mode 100644 index 0000000..73db2cd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/constant.X_XSS_PROTECTION.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/constant.X_XSS_PROTECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/enum.ContentEncoding.html b/static/api/actix-web/0.7.2/actix_web/header/enum.ContentEncoding.html new file mode 100644 index 0000000..e2ceea1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/enum.ContentEncoding.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/enum.ContentEncoding.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/enum.Entry.html b/static/api/actix-web/0.7.2/actix_web/header/enum.Entry.html new file mode 100644 index 0000000..dfa1ae3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/enum.Entry.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/enum.Entry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/fn.http_percent_encode.html b/static/api/actix-web/0.7.2/actix_web/header/fn.http_percent_encode.html new file mode 100644 index 0000000..d3cf867 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/fn.http_percent_encode.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/fn.http_percent_encode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/fn.parse_extended_value.html b/static/api/actix-web/0.7.2/actix_web/header/fn.parse_extended_value.html new file mode 100644 index 0000000..fa893d9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/fn.parse_extended_value.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/fn.parse_extended_value.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/http_percent_encode.v.html b/static/api/actix-web/0.7.2/actix_web/header/http_percent_encode.v.html new file mode 100644 index 0000000..d237a31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/http_percent_encode.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.http_percent_encode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/parse_extended_value.v.html b/static/api/actix-web/0.7.2/actix_web/header/parse_extended_value.v.html new file mode 100644 index 0000000..6089c2d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/parse_extended_value.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.parse_extended_value.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/shared/LanguageTag.t.html b/static/api/actix-web/0.7.2/actix_web/header/shared/LanguageTag.t.html new file mode 100644 index 0000000..622364a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/shared/LanguageTag.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.LanguageTag.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/shared/charset/Charset.t.html b/static/api/actix-web/0.7.2/actix_web/header/shared/charset/Charset.t.html new file mode 100644 index 0000000..c1d8033 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/shared/charset/Charset.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Charset.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/shared/charset/enum.Charset.html b/static/api/actix-web/0.7.2/actix_web/header/shared/charset/enum.Charset.html new file mode 100644 index 0000000..4a97d21 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/shared/charset/enum.Charset.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../../actix_web/http/header/enum.Charset.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/shared/struct.LanguageTag.html b/static/api/actix-web/0.7.2/actix_web/header/shared/struct.LanguageTag.html new file mode 100644 index 0000000..39fd9f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/shared/struct.LanguageTag.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/http/header/struct.LanguageTag.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.Drain.html b/static/api/actix-web/0.7.2/actix_web/header/struct.Drain.html new file mode 100644 index 0000000..ef76e94 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.Drain.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.ExtendedValue.html b/static/api/actix-web/0.7.2/actix_web/header/struct.ExtendedValue.html new file mode 100644 index 0000000..324f3af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.ExtendedValue.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.ExtendedValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.GetAll.html b/static/api/actix-web/0.7.2/actix_web/header/struct.GetAll.html new file mode 100644 index 0000000..0226352 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.GetAll.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.GetAll.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderMap.html b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderMap.html new file mode 100644 index 0000000..c1d9858 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderMap.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.HeaderMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderName.html b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderName.html new file mode 100644 index 0000000..f2348c7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderName.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.HeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderValue.html b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderValue.html new file mode 100644 index 0000000..a6b6738 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.HeaderValue.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.HeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.IntoIter.html b/static/api/actix-web/0.7.2/actix_web/header/struct.IntoIter.html new file mode 100644 index 0000000..5150a56 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.IntoIter.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.IntoIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderName.html b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderName.html new file mode 100644 index 0000000..f8235e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderName.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.InvalidHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderNameBytes.html b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderNameBytes.html new file mode 100644 index 0000000..2152fc8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderNameBytes.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.InvalidHeaderNameBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValue.html b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValue.html new file mode 100644 index 0000000..f192ae5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValue.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.InvalidHeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValueBytes.html b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValueBytes.html new file mode 100644 index 0000000..8110d25 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.InvalidHeaderValueBytes.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.InvalidHeaderValueBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.Iter.html b/static/api/actix-web/0.7.2/actix_web/header/struct.Iter.html new file mode 100644 index 0000000..b01076a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.Iter.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.Iter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.Keys.html b/static/api/actix-web/0.7.2/actix_web/header/struct.Keys.html new file mode 100644 index 0000000..c34097e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.Keys.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.Keys.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.OccupiedEntry.html b/static/api/actix-web/0.7.2/actix_web/header/struct.OccupiedEntry.html new file mode 100644 index 0000000..cd5a902 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.OccupiedEntry.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.OccupiedEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.ToStrError.html b/static/api/actix-web/0.7.2/actix_web/header/struct.ToStrError.html new file mode 100644 index 0000000..b7b68e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.ToStrError.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.ToStrError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.VacantEntry.html b/static/api/actix-web/0.7.2/actix_web/header/struct.VacantEntry.html new file mode 100644 index 0000000..91c5681 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.VacantEntry.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.VacantEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.ValueDrain.html b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueDrain.html new file mode 100644 index 0000000..f6d43bc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueDrain.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.ValueDrain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIter.html b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIter.html new file mode 100644 index 0000000..9549bec --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIter.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.ValueIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIterMut.html b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIterMut.html new file mode 100644 index 0000000..e33dbd9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.ValueIterMut.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.ValueIterMut.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/struct.Values.html b/static/api/actix-web/0.7.2/actix_web/header/struct.Values.html new file mode 100644 index 0000000..a98d0c1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/struct.Values.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/struct.Values.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/trait.AsHeaderName.html b/static/api/actix-web/0.7.2/actix_web/header/trait.AsHeaderName.html new file mode 100644 index 0000000..e8e60f9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/trait.AsHeaderName.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/trait.AsHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/header/trait.IntoHeaderName.html b/static/api/actix-web/0.7.2/actix_web/header/trait.IntoHeaderName.html new file mode 100644 index 0000000..1b03926 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/header/trait.IntoHeaderName.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/header/trait.IntoHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/helpers/NormalizePath.t.html b/static/api/actix-web/0.7.2/actix_web/helpers/NormalizePath.t.html new file mode 100644 index 0000000..1f40d5c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/helpers/NormalizePath.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.NormalizePath.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/helpers/struct.NormalizePath.html b/static/api/actix-web/0.7.2/actix_web/helpers/struct.NormalizePath.html new file mode 100644 index 0000000..27c2132 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/helpers/struct.NormalizePath.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/struct.NormalizePath.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/ConnectionType.t.html b/static/api/actix-web/0.7.2/actix_web/http/ConnectionType.t.html new file mode 100644 index 0000000..b6bc2b8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/ConnectionType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ConnectionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/ContentEncoding.t.html b/static/api/actix-web/0.7.2/actix_web/http/ContentEncoding.t.html new file mode 100644 index 0000000..5783cdd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/ContentEncoding.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ContentEncoding.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/Cookie.t.html b/static/api/actix-web/0.7.2/actix_web/http/Cookie.t.html new file mode 100644 index 0000000..6e0d41f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/Cookie.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Cookie.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/CookieBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/http/CookieBuilder.t.html new file mode 100644 index 0000000..a123dba --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/CookieBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CookieBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/Method.t.html b/static/api/actix-web/0.7.2/actix_web/http/Method.t.html new file mode 100644 index 0000000..6e92f57 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/Method.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Method.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/NormalizePath.t.html b/static/api/actix-web/0.7.2/actix_web/http/NormalizePath.t.html new file mode 100644 index 0000000..1f40d5c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/NormalizePath.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.NormalizePath.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/StatusCode.t.html b/static/api/actix-web/0.7.2/actix_web/http/StatusCode.t.html new file mode 100644 index 0000000..ffcd56c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/StatusCode.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StatusCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/Version.t.html b/static/api/actix-web/0.7.2/actix_web/http/Version.t.html new file mode 100644 index 0000000..3493bf6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/Version.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Version.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/enum.ConnectionType.html b/static/api/actix-web/0.7.2/actix_web/http/enum.ConnectionType.html new file mode 100644 index 0000000..7b5aaab --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/enum.ConnectionType.html @@ -0,0 +1,26 @@ +actix_web::http::ConnectionType - Rust

Enum actix_web::http::ConnectionType[][src]

pub enum ConnectionType {
+    Close,
+    KeepAlive,
+    Upgrade,
+}

Represents various types of connection

+

+ Variants

+

Close connection after response

+

Keep connection alive after response

+

Connection is upgraded to different type

+
+

+ Trait Implementations +

+

impl Copy for ConnectionType
[src]

impl Clone for ConnectionType
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl PartialEq for ConnectionType
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for ConnectionType
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/enum.ContentEncoding.html b/static/api/actix-web/0.7.2/actix_web/http/enum.ContentEncoding.html new file mode 100644 index 0000000..470ad51 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/enum.ContentEncoding.html @@ -0,0 +1,38 @@ +actix_web::http::ContentEncoding - Rust

Enum actix_web::http::ContentEncoding[][src]

pub enum ContentEncoding {
+    Auto,
+    Br,
+    Deflate,
+    Gzip,
+    Identity,
+}

Represents supported types of content encodings

+

+ Variants

+

Automatically select encoding based on encoding negotiation

+

A format using the Brotli algorithm

+

A format using the zlib structure with deflate algorithm

+

Gzip algorithm

+

Indicates the identity function (i.e. no compression, nor modification)

+
+

+ Methods +

+

impl ContentEncoding
[src]

Is the content compressed?

+

Convert content encoding to string

+

default quality value

+
+

+ Trait Implementations +

+

impl Copy for ContentEncoding
[src]

impl Clone for ContentEncoding
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl PartialEq for ContentEncoding
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for ContentEncoding
[src]

Formats the value using the given formatter. Read more

+

impl<'a> From<&'a str> for ContentEncoding
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT.v.html new file mode 100644 index 0000000..5b581a3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_CHARSET.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_CHARSET.v.html new file mode 100644 index 0000000..728af9e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_CHARSET.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_CHARSET.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_ENCODING.v.html new file mode 100644 index 0000000..bab2234 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_LANGUAGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_LANGUAGE.v.html new file mode 100644 index 0000000..09365eb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_LANGUAGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_RANGES.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_RANGES.v.html new file mode 100644 index 0000000..3a83831 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCEPT_RANGES.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCEPT_RANGES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html new file mode 100644 index 0000000..8ed993b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_CREDENTIALS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html new file mode 100644 index 0000000..3174de0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_METHODS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_METHODS.v.html new file mode 100644 index 0000000..cd35630 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_METHODS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_METHODS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html new file mode 100644 index 0000000..55668d2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_ALLOW_ORIGIN.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_ALLOW_ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html new file mode 100644 index 0000000..b261f6f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_EXPOSE_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_EXPOSE_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_MAX_AGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_MAX_AGE.v.html new file mode 100644 index 0000000..61616e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_MAX_AGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_MAX_AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html new file mode 100644 index 0000000..3a77e37 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_HEADERS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_REQUEST_HEADERS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_METHOD.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_METHOD.v.html new file mode 100644 index 0000000..b596ba8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ACCESS_CONTROL_REQUEST_METHOD.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ACCESS_CONTROL_REQUEST_METHOD.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/AGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/AGE.v.html new file mode 100644 index 0000000..e4b584e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/AGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.AGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ALLOW.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ALLOW.v.html new file mode 100644 index 0000000..329dbe0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ALLOW.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ALLOW.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ALT_SVC.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ALT_SVC.v.html new file mode 100644 index 0000000..32693a5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ALT_SVC.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ALT_SVC.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/AUTHORIZATION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/AUTHORIZATION.v.html new file mode 100644 index 0000000..d81b53f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/AUTHORIZATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/AsHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/AsHeaderName.t.html new file mode 100644 index 0000000..d2f06f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/AsHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CACHE_CONTROL.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CACHE_CONTROL.v.html new file mode 100644 index 0000000..e9e5075 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CACHE_CONTROL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CACHE_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONNECTION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONNECTION.v.html new file mode 100644 index 0000000..0ef8dc7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONNECTION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONNECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_DISPOSITION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_DISPOSITION.v.html new file mode 100644 index 0000000..92511ff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_DISPOSITION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_DISPOSITION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_ENCODING.v.html new file mode 100644 index 0000000..a9b4eaf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LANGUAGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LANGUAGE.v.html new file mode 100644 index 0000000..f0782fc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LANGUAGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LANGUAGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LENGTH.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LENGTH.v.html new file mode 100644 index 0000000..eafcf86 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LENGTH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LENGTH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LOCATION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LOCATION.v.html new file mode 100644 index 0000000..ddea472 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_LOCATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_RANGE.v.html new file mode 100644 index 0000000..733eb6c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY.v.html new file mode 100644 index 0000000..3de1fa3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_SECURITY_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html new file mode 100644 index 0000000..4dfb48e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_SECURITY_POLICY_REPORT_ONLY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_TYPE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_TYPE.v.html new file mode 100644 index 0000000..d2497c6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/CONTENT_TYPE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.CONTENT_TYPE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/COOKIE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/COOKIE.v.html new file mode 100644 index 0000000..f811b63 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/COOKIE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Charset.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Charset.t.html new file mode 100644 index 0000000..c1d8033 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Charset.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Charset.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ContentDisposition.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ContentDisposition.t.html new file mode 100644 index 0000000..f42c4ff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ContentDisposition.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ContentDisposition.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ContentEncoding.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ContentEncoding.t.html new file mode 100644 index 0000000..5783cdd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ContentEncoding.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ContentEncoding.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/DATE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/DATE.v.html new file mode 100644 index 0000000..f340f3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/DATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.DATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/DNT.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/DNT.v.html new file mode 100644 index 0000000..0ad89d4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/DNT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.DNT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/DispositionParam.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/DispositionParam.t.html new file mode 100644 index 0000000..4f4d64c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/DispositionParam.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.DispositionParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/DispositionType.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/DispositionType.t.html new file mode 100644 index 0000000..a7914f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/DispositionType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.DispositionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Drain.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Drain.t.html new file mode 100644 index 0000000..8e65c3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Drain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Drain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ETAG.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ETAG.v.html new file mode 100644 index 0000000..66193ae --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ETAG.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ETAG.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/EXPECT.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/EXPECT.v.html new file mode 100644 index 0000000..80c71e3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/EXPECT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.EXPECT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/EXPIRES.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/EXPIRES.v.html new file mode 100644 index 0000000..e68486d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/EXPIRES.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.EXPIRES.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Entry.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Entry.t.html new file mode 100644 index 0000000..a0bc1c8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Entry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Entry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ExtendedValue.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ExtendedValue.t.html new file mode 100644 index 0000000..83fe04b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ExtendedValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ExtendedValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/FORWARDED.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/FORWARDED.v.html new file mode 100644 index 0000000..3e85006 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/FORWARDED.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.FORWARDED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/FROM.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/FROM.v.html new file mode 100644 index 0000000..6b71c55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/FROM.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.FROM.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/GetAll.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/GetAll.t.html new file mode 100644 index 0000000..1198485 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/GetAll.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.GetAll.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/HOST.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/HOST.v.html new file mode 100644 index 0000000..770a383 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/HOST.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.HOST.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/HeaderMap.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderMap.t.html new file mode 100644 index 0000000..3154877 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/HeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderName.t.html new file mode 100644 index 0000000..6a9afe4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/HeaderValue.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderValue.t.html new file mode 100644 index 0000000..29c71f0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/HeaderValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IF_MATCH.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/IF_MATCH.v.html new file mode 100644 index 0000000..a9f5ebf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IF_MATCH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IF_MODIFIED_SINCE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/IF_MODIFIED_SINCE.v.html new file mode 100644 index 0000000..d8fa73f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IF_MODIFIED_SINCE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_MODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IF_NONE_MATCH.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/IF_NONE_MATCH.v.html new file mode 100644 index 0000000..8b3eb6b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IF_NONE_MATCH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_NONE_MATCH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IF_RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/IF_RANGE.v.html new file mode 100644 index 0000000..53ccfe9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IF_RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IF_UNMODIFIED_SINCE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/IF_UNMODIFIED_SINCE.v.html new file mode 100644 index 0000000..1617dc7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IF_UNMODIFIED_SINCE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.IF_UNMODIFIED_SINCE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IntoHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/IntoHeaderName.t.html new file mode 100644 index 0000000..c57e6b7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IntoHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/IntoIter.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/IntoIter.t.html new file mode 100644 index 0000000..33ee82f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/IntoIter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.IntoIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderName.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderName.t.html new file mode 100644 index 0000000..3c50a23 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderName.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderName.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderNameBytes.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderNameBytes.t.html new file mode 100644 index 0000000..c16700b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderNameBytes.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderNameBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValue.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValue.t.html new file mode 100644 index 0000000..ece1a05 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValue.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderValue.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValueBytes.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValueBytes.t.html new file mode 100644 index 0000000..4cec243 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/InvalidHeaderValueBytes.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.InvalidHeaderValueBytes.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Iter.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Iter.t.html new file mode 100644 index 0000000..1aba368 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Iter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Iter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Keys.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Keys.t.html new file mode 100644 index 0000000..2efb7df --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Keys.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Keys.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/LAST_MODIFIED.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/LAST_MODIFIED.v.html new file mode 100644 index 0000000..980abff --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/LAST_MODIFIED.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LAST_MODIFIED.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/LINK.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/LINK.v.html new file mode 100644 index 0000000..9ef0021 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/LINK.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LINK.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/LOCATION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/LOCATION.v.html new file mode 100644 index 0000000..b5931c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/LOCATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.LOCATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/LanguageTag.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/LanguageTag.t.html new file mode 100644 index 0000000..622364a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/LanguageTag.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.LanguageTag.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/MAX_FORWARDS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/MAX_FORWARDS.v.html new file mode 100644 index 0000000..679335f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/MAX_FORWARDS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.MAX_FORWARDS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ORIGIN.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/ORIGIN.v.html new file mode 100644 index 0000000..2c63122 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ORIGIN.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.ORIGIN.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/OccupiedEntry.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/OccupiedEntry.t.html new file mode 100644 index 0000000..84b49e0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/OccupiedEntry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.OccupiedEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/PRAGMA.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/PRAGMA.v.html new file mode 100644 index 0000000..3a3a5cf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/PRAGMA.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PRAGMA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHENTICATE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHENTICATE.v.html new file mode 100644 index 0000000..23a408a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHENTICATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PROXY_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHORIZATION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHORIZATION.v.html new file mode 100644 index 0000000..029e5ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/PROXY_AUTHORIZATION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PROXY_AUTHORIZATION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS.v.html new file mode 100644 index 0000000..b24092a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PUBLIC_KEY_PINS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html new file mode 100644 index 0000000..9bded38 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/PUBLIC_KEY_PINS_REPORT_ONLY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.PUBLIC_KEY_PINS_REPORT_ONLY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/RANGE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/RANGE.v.html new file mode 100644 index 0000000..3b2c2fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/RANGE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.RANGE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/REFERER.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/REFERER.v.html new file mode 100644 index 0000000..b3493a4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/REFERER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFERER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/REFERRER_POLICY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/REFERRER_POLICY.v.html new file mode 100644 index 0000000..d081797 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/REFERRER_POLICY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFERRER_POLICY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/REFRESH.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/REFRESH.v.html new file mode 100644 index 0000000..f020218 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/REFRESH.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.REFRESH.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/RETRY_AFTER.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/RETRY_AFTER.v.html new file mode 100644 index 0000000..5ed5cde --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/RETRY_AFTER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.RETRY_AFTER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_ACCEPT.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_ACCEPT.v.html new file mode 100644 index 0000000..9fec76f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_ACCEPT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_ACCEPT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_EXTENSIONS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_EXTENSIONS.v.html new file mode 100644 index 0000000..3a1bc1e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_EXTENSIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_EXTENSIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_KEY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_KEY.v.html new file mode 100644 index 0000000..79e1b40 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_KEY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_KEY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_PROTOCOL.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_PROTOCOL.v.html new file mode 100644 index 0000000..2dd38ca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_PROTOCOL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_PROTOCOL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_VERSION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_VERSION.v.html new file mode 100644 index 0000000..0fa3658 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SEC_WEBSOCKET_VERSION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SEC_WEBSOCKET_VERSION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SERVER.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SERVER.v.html new file mode 100644 index 0000000..809ab3a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SERVER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SERVER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/SET_COOKIE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/SET_COOKIE.v.html new file mode 100644 index 0000000..7c4c33b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/SET_COOKIE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.SET_COOKIE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/STRICT_TRANSPORT_SECURITY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/STRICT_TRANSPORT_SECURITY.v.html new file mode 100644 index 0000000..23c57cd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/STRICT_TRANSPORT_SECURITY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.STRICT_TRANSPORT_SECURITY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/TE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/TE.v.html new file mode 100644 index 0000000..d34fb1b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/TE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/TRAILER.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/TRAILER.v.html new file mode 100644 index 0000000..a8dfb4f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/TRAILER.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TRAILER.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/TRANSFER_ENCODING.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/TRANSFER_ENCODING.v.html new file mode 100644 index 0000000..9715521 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/TRANSFER_ENCODING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.TRANSFER_ENCODING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ToStrError.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ToStrError.t.html new file mode 100644 index 0000000..eb1446c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ToStrError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ToStrError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE.v.html new file mode 100644 index 0000000..0eaaf27 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.UPGRADE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE_INSECURE_REQUESTS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE_INSECURE_REQUESTS.v.html new file mode 100644 index 0000000..b584d0f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/UPGRADE_INSECURE_REQUESTS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.UPGRADE_INSECURE_REQUESTS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/USER_AGENT.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/USER_AGENT.v.html new file mode 100644 index 0000000..8eed0da --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/USER_AGENT.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.USER_AGENT.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/VARY.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/VARY.v.html new file mode 100644 index 0000000..cad37fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/VARY.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.VARY.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/VIA.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/VIA.v.html new file mode 100644 index 0000000..c52a882 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/VIA.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.VIA.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/VacantEntry.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/VacantEntry.t.html new file mode 100644 index 0000000..cfc2c03 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/VacantEntry.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.VacantEntry.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ValueDrain.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ValueDrain.t.html new file mode 100644 index 0000000..df94e78 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ValueDrain.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueDrain.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ValueIter.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ValueIter.t.html new file mode 100644 index 0000000..b7cb479 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ValueIter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueIter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/ValueIterMut.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/ValueIterMut.t.html new file mode 100644 index 0000000..61a4221 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/ValueIterMut.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ValueIterMut.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/Values.t.html b/static/api/actix-web/0.7.2/actix_web/http/header/Values.t.html new file mode 100644 index 0000000..bb3749a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/Values.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Values.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/WARNING.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/WARNING.v.html new file mode 100644 index 0000000..c26398b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/WARNING.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.WARNING.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/WWW_AUTHENTICATE.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/WWW_AUTHENTICATE.v.html new file mode 100644 index 0000000..d7ffe43 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/WWW_AUTHENTICATE.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.WWW_AUTHENTICATE.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/X_CONTENT_TYPE_OPTIONS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/X_CONTENT_TYPE_OPTIONS.v.html new file mode 100644 index 0000000..aee9225 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/X_CONTENT_TYPE_OPTIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_CONTENT_TYPE_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/X_DNS_PREFETCH_CONTROL.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/X_DNS_PREFETCH_CONTROL.v.html new file mode 100644 index 0000000..a8ad6e2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/X_DNS_PREFETCH_CONTROL.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_DNS_PREFETCH_CONTROL.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/X_FRAME_OPTIONS.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/X_FRAME_OPTIONS.v.html new file mode 100644 index 0000000..9aa08b2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/X_FRAME_OPTIONS.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_FRAME_OPTIONS.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/X_XSS_PROTECTION.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/X_XSS_PROTECTION.v.html new file mode 100644 index 0000000..51b8abf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/X_XSS_PROTECTION.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to constant.X_XSS_PROTECTION.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT.html new file mode 100644 index 0000000..4e96222 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT.html @@ -0,0 +1,10 @@ +actix_web::http::header::ACCEPT - Rust

Constant actix_web::http::header::ACCEPT[][src]

pub const ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Accept),}

Advertises which content types the client is able to understand.

+

The Accept request HTTP header advertises which content types, expressed +as MIME types, the client is able to understand. Using content +negotiation, the server then selects one of the proposals, uses it and +informs the client of its choice with the Content-Type response header. +Browsers set adequate values for this header depending of the context +where the request is done: when fetching a CSS stylesheet a different +value is set for the request than when fetching an image, video or a +script.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_CHARSET.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_CHARSET.html new file mode 100644 index 0000000..3659f82 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_CHARSET.html @@ -0,0 +1,12 @@ +actix_web::http::header::ACCEPT_CHARSET - Rust

Constant actix_web::http::header::ACCEPT_CHARSET[][src]

pub const ACCEPT_CHARSET: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptCharset),}

Advertises which character set the client is able to understand.

+

The Accept-Charset request HTTP header advertises which character set +the client is able to understand. Using content negotiation, the server +then selects one of the proposals, uses it and informs the client of its +choice within the Content-Type response header. Browsers usually don't +set this header as the default value for each content type is usually +correct and transmitting it would allow easier fingerprinting.

+

If the server cannot serve any matching character set, it can +theoretically send back a 406 (Not Acceptable) error code. But, for a +better user experience, this is rarely done and the more common way is +to ignore the Accept-Charset header in this case.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_ENCODING.html new file mode 100644 index 0000000..f346134 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_ENCODING.html @@ -0,0 +1,28 @@ +actix_web::http::header::ACCEPT_ENCODING - Rust

Constant actix_web::http::header::ACCEPT_ENCODING[][src]

pub const ACCEPT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptEncoding),}

Advertises which content encoding the client is able to understand.

+

The Accept-Encoding request HTTP header advertises which content +encoding, usually a compression algorithm, the client is able to +understand. Using content negotiation, the server selects one of the +proposals, uses it and informs the client of its choice with the +Content-Encoding response header.

+

Even if both the client and the server supports the same compression +algorithms, the server may choose not to compress the body of a +response, if the identity value is also acceptable. Two common cases +lead to this:

+
    +
  • +

    The data to be sent is already compressed and a second compression +won't lead to smaller data to be transmitted. This may the case with +some image formats;

    +
  • +
  • +

    The server is overloaded and cannot afford the computational overhead +induced by the compression requirement. Typically, Microsoft recommends +not to compress if a server use more than 80 % of its computational +power.

    +
  • +
+

As long as the identity value, meaning no encryption, is not explicitly +forbidden, by an identity;q=0 or a *;q=0 without another explicitly set +value for identity, the server must never send back a 406 Not Acceptable +error.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_LANGUAGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_LANGUAGE.html new file mode 100644 index 0000000..7b60075 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_LANGUAGE.html @@ -0,0 +1,21 @@ +actix_web::http::header::ACCEPT_LANGUAGE - Rust

Constant actix_web::http::header::ACCEPT_LANGUAGE[][src]

pub const ACCEPT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptLanguage),}

Advertises which languages the client is able to understand.

+

The Accept-Language request HTTP header advertises which languages the +client is able to understand, and which locale variant is preferred. +Using content negotiation, the server then selects one of the proposals, +uses it and informs the client of its choice with the Content-Language +response header. Browsers set adequate values for this header according +their user interface language and even if a user can change it, this +happens rarely (and is frown upon as it leads to fingerprinting).

+

This header is a hint to be used when the server has no way of +determining the language via another way, like a specific URL, that is +controlled by an explicit user decision. It is recommended that the +server never overrides an explicit decision. The content of the +Accept-Language is often out of the control of the user (like when +traveling and using an Internet Cafe in a different country); the user +may also want to visit a page in another language than the locale of +their user interface.

+

If the server cannot serve any matching language, it can theoretically +send back a 406 (Not Acceptable) error code. But, for a better user +experience, this is rarely done and more common way is to ignore the +Accept-Language header in this case.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_RANGES.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_RANGES.html new file mode 100644 index 0000000..adf2b09 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCEPT_RANGES.html @@ -0,0 +1,7 @@ +actix_web::http::header::ACCEPT_RANGES - Rust

Constant actix_web::http::header::ACCEPT_RANGES[][src]

pub const ACCEPT_RANGES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptRanges),}

Marker used by the server to advertise partial request support.

+

The Accept-Ranges response HTTP header is a marker used by the server to +advertise its support of partial requests. The value of this field +indicates the unit that can be used to define a range.

+

In presence of an Accept-Ranges header, the browser may try to resume an +interrupted download, rather than to start it from the start again.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html new file mode 100644 index 0000000..c7ca4a3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html @@ -0,0 +1,21 @@ +actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS[][src]

pub const ACCESS_CONTROL_ALLOW_CREDENTIALS: HeaderName = HeaderName{inner:
+               Repr::Standard(StandardHeader::AccessControlAllowCredentials),}

Preflight response indicating if the response to the request can be +exposed to the page.

+

The Access-Control-Allow-Credentials response header indicates whether +or not the response to the request can be exposed to the page. It can be +exposed when the true value is returned; it can't in other cases.

+

Credentials are cookies, authorization headers or TLS client +certificates.

+

When used as part of a response to a preflight request, this indicates +whether or not the actual request can be made using credentials. Note +that simple GET requests are not preflighted, and so if a request is +made for a resource with credentials, if this header is not returned +with the resource, the response is ignored by the browser and not +returned to web content.

+

The Access-Control-Allow-Credentials header works in conjunction with +the XMLHttpRequest.withCredentials property or with the credentials +option in the Request() constructor of the Fetch API. Credentials must +be set on both sides (the Access-Control-Allow-Credentials header and in +the XHR or Fetch request) in order for the CORS request with credentials +to succeed.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html new file mode 100644 index 0000000..b2616b9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html @@ -0,0 +1,12 @@ +actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS[][src]

pub const ACCESS_CONTROL_ALLOW_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowHeaders),}

Preflight response indicating permitted HTTP headers.

+

The Access-Control-Allow-Headers response header is used in response to +a preflight request to indicate which HTTP headers will be available via +Access-Control-Expose-Headers when making the actual request.

+

The simple headers, Accept, Accept-Language, Content-Language, +Content-Type (but only with a MIME type of its parsed value (ignoring +parameters) of either application/x-www-form-urlencoded, +multipart/form-data, or text/plain), are always available and don't need +to be listed by this header.

+

This header is required if the request has an +Access-Control-Request-Headers header.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html new file mode 100644 index 0000000..ca33eb2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html @@ -0,0 +1,5 @@ +actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS[][src]

pub const ACCESS_CONTROL_ALLOW_METHODS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowMethods),}

Preflight header response indicating permitted access methods.

+

The Access-Control-Allow-Methods response header specifies the method or +methods allowed when accessing the resource in response to a preflight +request.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html new file mode 100644 index 0000000..bd74a34 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html @@ -0,0 +1,3 @@ +actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN[][src]

pub const ACCESS_CONTROL_ALLOW_ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowOrigin),}

Indicates whether the response can be shared with resources with the +given origin.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html new file mode 100644 index 0000000..af7d58f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html @@ -0,0 +1,3 @@ +actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS[][src]

pub const ACCESS_CONTROL_EXPOSE_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlExposeHeaders),}

Indicates which headers can be exposed as part of the response by +listing their names.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html new file mode 100644 index 0000000..c514477 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html @@ -0,0 +1,2 @@ +actix_web::http::header::ACCESS_CONTROL_MAX_AGE - Rust

Constant actix_web::http::header::ACCESS_CONTROL_MAX_AGE[][src]

pub const ACCESS_CONTROL_MAX_AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlMaxAge),}

Indicates how long the results of a preflight request can be cached.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html new file mode 100644 index 0000000..ea87078 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html @@ -0,0 +1,4 @@ +actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS[][src]

pub const ACCESS_CONTROL_REQUEST_HEADERS: HeaderName = HeaderName{inner:
+               Repr::Standard(StandardHeader::AccessControlRequestHeaders),}

Informs the server which HTTP headers will be used when an actual +request is made.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html new file mode 100644 index 0000000..be5d9af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html @@ -0,0 +1,3 @@ +actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD[][src]

pub const ACCESS_CONTROL_REQUEST_METHOD: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlRequestMethod),}

Informs the server know which HTTP method will be used when the actual +request is made.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.AGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.AGE.html new file mode 100644 index 0000000..024b161 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.AGE.html @@ -0,0 +1,6 @@ +actix_web::http::header::AGE - Rust

Constant actix_web::http::header::AGE[][src]

pub const AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Age),}

Indicates the time in seconds the object has been in a proxy cache.

+

The Age header is usually close to zero. If it is Age: 0, it was +probably just fetched from the origin server; otherwise It is usually +calculated as a difference between the proxy's current date and the Date +general header included in the HTTP response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALLOW.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALLOW.html new file mode 100644 index 0000000..3c8860e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALLOW.html @@ -0,0 +1,7 @@ +actix_web::http::header::ALLOW - Rust

Constant actix_web::http::header::ALLOW[][src]

pub const ALLOW: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Allow),}

Lists the set of methods support by a resource.

+

This header must be sent if the server responds with a 405 Method Not +Allowed status code to indicate which request methods can be used. An +empty Allow header indicates that the resource allows no request +methods, which might occur temporarily for a given resource, for +example.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALT_SVC.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALT_SVC.html new file mode 100644 index 0000000..8c5fbce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ALT_SVC.html @@ -0,0 +1,2 @@ +actix_web::http::header::ALT_SVC - Rust

Constant actix_web::http::header::ALT_SVC[][src]

pub const ALT_SVC: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AltSvc),}

Advertises the availability of alternate services to clients.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.AUTHORIZATION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.AUTHORIZATION.html new file mode 100644 index 0000000..5750747 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.AUTHORIZATION.html @@ -0,0 +1,4 @@ +actix_web::http::header::AUTHORIZATION - Rust

Constant actix_web::http::header::AUTHORIZATION[][src]

pub const AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Authorization),}

Contains the credentials to authenticate a user agent with a server.

+

Usually this header is included after the server has responded with a +401 Unauthorized status and the WWW-Authenticate header.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CACHE_CONTROL.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CACHE_CONTROL.html new file mode 100644 index 0000000..4e2a3c8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CACHE_CONTROL.html @@ -0,0 +1,6 @@ +actix_web::http::header::CACHE_CONTROL - Rust

Constant actix_web::http::header::CACHE_CONTROL[][src]

pub const CACHE_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::CacheControl),}

Specifies directives for caching mechanisms in both requests and +responses.

+

Caching directives are unidirectional, meaning that a given directive in +a request is not implying that the same directive is to be given in the +response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONNECTION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONNECTION.html new file mode 100644 index 0000000..0b3daf0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONNECTION.html @@ -0,0 +1,12 @@ +actix_web::http::header::CONNECTION - Rust

Constant actix_web::http::header::CONNECTION[][src]

pub const CONNECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Connection),}

Controls whether or not the network connection stays open after the +current transaction finishes.

+

If the value sent is keep-alive, the connection is persistent and not +closed, allowing for subsequent requests to the same server to be done.

+

Except for the standard hop-by-hop headers (Keep-Alive, +Transfer-Encoding, TE, Connection, Trailer, Upgrade, Proxy-Authorization +and Proxy-Authenticate), any hop-by-hop headers used by the message must +be listed in the Connection header, so that the first proxy knows he has +to consume them and not to forward them further. Standard hop-by-hop +headers can be listed too (it is often the case of Keep-Alive, but this +is not mandatory.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_DISPOSITION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_DISPOSITION.html new file mode 100644 index 0000000..a563ed6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_DISPOSITION.html @@ -0,0 +1,16 @@ +actix_web::http::header::CONTENT_DISPOSITION - Rust

Constant actix_web::http::header::CONTENT_DISPOSITION[][src]

pub const CONTENT_DISPOSITION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentDisposition),}

Indicates if the content is expected to be displayed inline.

+

In a regular HTTP response, the Content-Disposition response header is a +header indicating if the content is expected to be displayed inline in +the browser, that is, as a Web page or as part of a Web page, or as an +attachment, that is downloaded and saved locally.

+

In a multipart/form-data body, the HTTP Content-Disposition general +header is a header that can be used on the subpart of a multipart body +to give information about the field it applies to. The subpart is +delimited by the boundary defined in the Content-Type header. Used on +the body itself, Content-Disposition has no effect.

+

The Content-Disposition header is defined in the larger context of MIME +messages for e-mail, but only a subset of the possible parameters apply +to HTTP forms and POST requests. Only the value form-data, as well as +the optional directive name and filename, can be used in the HTTP +context.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_ENCODING.html new file mode 100644 index 0000000..1ac312a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_ENCODING.html @@ -0,0 +1,9 @@ +actix_web::http::header::CONTENT_ENCODING - Rust

Constant actix_web::http::header::CONTENT_ENCODING[][src]

pub const CONTENT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentEncoding),}

Used to compress the media-type.

+

When present, its value indicates what additional content encoding has +been applied to the entity-body. It lets the client know, how to decode +in order to obtain the media-type referenced by the Content-Type header.

+

It is recommended to compress data as much as possible and therefore to +use this field, but some types of resources, like jpeg images, are +already compressed. Sometimes using additional compression doesn't +reduce payload size and can even make the payload longer.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LANGUAGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LANGUAGE.html new file mode 100644 index 0000000..1c701d2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LANGUAGE.html @@ -0,0 +1,12 @@ +actix_web::http::header::CONTENT_LANGUAGE - Rust

Constant actix_web::http::header::CONTENT_LANGUAGE[][src]

pub const CONTENT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLanguage),}

Used to describe the languages intended for the audience.

+

This header allows a user to differentiate according to the users' own +preferred language. For example, if "Content-Language: de-DE" is set, it +says that the document is intended for German language speakers +(however, it doesn't indicate the document is written in German. For +example, it might be written in English as part of a language course for +German speakers).

+

If no Content-Language is specified, the default is that the content is +intended for all language audiences. Multiple language tags are also +possible, as well as applying the Content-Language header to various +media types and not only to textual documents.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LENGTH.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LENGTH.html new file mode 100644 index 0000000..b6ac917 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LENGTH.html @@ -0,0 +1,4 @@ +actix_web::http::header::CONTENT_LENGTH - Rust

Constant actix_web::http::header::CONTENT_LENGTH[][src]

pub const CONTENT_LENGTH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLength),}

Indicates the size fo the entity-body.

+

The header value must be a decimal indicating the number of octets sent +to the recipient.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LOCATION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LOCATION.html new file mode 100644 index 0000000..c9d7ccf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_LOCATION.html @@ -0,0 +1,10 @@ +actix_web::http::header::CONTENT_LOCATION - Rust

Constant actix_web::http::header::CONTENT_LOCATION[][src]

pub const CONTENT_LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLocation),}

Indicates an alternate location for the returned data.

+

The principal use case is to indicate the URL of the resource +transmitted as the result of content negotiation.

+

Location and Content-Location are different: Location indicates the +target of a redirection (or the URL of a newly created document), while +Content-Location indicates the direct URL to use to access the resource, +without the need of further content negotiation. Location is a header +associated with the response, while Content-Location is associated with +the entity returned.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_RANGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_RANGE.html new file mode 100644 index 0000000..31d7058 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_RANGE.html @@ -0,0 +1,2 @@ +actix_web::http::header::CONTENT_RANGE - Rust

Constant actix_web::http::header::CONTENT_RANGE[][src]

pub const CONTENT_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentRange),}

Indicates where in a full body message a partial message belongs.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html new file mode 100644 index 0000000..81e4a53 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html @@ -0,0 +1,6 @@ +actix_web::http::header::CONTENT_SECURITY_POLICY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY[][src]

pub const CONTENT_SECURITY_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentSecurityPolicy),}

Allows controlling resources the user agent is allowed to load for a +given page.

+

With a few exceptions, policies mostly involve specifying server origins +and script endpoints. This helps guard against cross-site scripting +attacks (XSS).

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html new file mode 100644 index 0000000..96cf3fc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html @@ -0,0 +1,7 @@ +actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY[][src]

pub const CONTENT_SECURITY_POLICY_REPORT_ONLY: HeaderName = HeaderName{inner:
+               Repr::Standard(StandardHeader::ContentSecurityPolicyReportOnly),}

Allows experimenting with policies by monitoring their effects.

+

The HTTP Content-Security-Policy-Report-Only response header allows web +developers to experiment with policies by monitoring (but not enforcing) +their effects. These violation reports consist of JSON documents sent +via an HTTP POST request to the specified URI.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_TYPE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_TYPE.html new file mode 100644 index 0000000..6c79b0f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.CONTENT_TYPE.html @@ -0,0 +1,9 @@ +actix_web::http::header::CONTENT_TYPE - Rust

Constant actix_web::http::header::CONTENT_TYPE[][src]

pub const CONTENT_TYPE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentType),}

Used to indicate the media type of the resource.

+

In responses, a Content-Type header tells the client what the content +type of the returned content actually is. Browsers will do MIME sniffing +in some cases and will not necessarily follow the value of this header; +to prevent this behavior, the header X-Content-Type-Options can be set +to nosniff.

+

In requests, (such as POST or PUT), the client tells the server what +type of data is actually sent.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.COOKIE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.COOKIE.html new file mode 100644 index 0000000..bd4ab3b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.COOKIE.html @@ -0,0 +1,5 @@ +actix_web::http::header::COOKIE - Rust

Constant actix_web::http::header::COOKIE[][src]

pub const COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Cookie),}

Contains stored HTTP cookies previously sent by the server with the +Set-Cookie header.

+

The Cookie header might be omitted entirely, if the privacy setting of +the browser are set to block them, for example.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.DATE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.DATE.html new file mode 100644 index 0000000..ab36403 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.DATE.html @@ -0,0 +1,2 @@ +actix_web::http::header::DATE - Rust

Constant actix_web::http::header::DATE[][src]

pub const DATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Date),}

Contains the date and time at which the message was originated.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.DNT.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.DNT.html new file mode 100644 index 0000000..9a0e5d9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.DNT.html @@ -0,0 +1,4 @@ +actix_web::http::header::DNT - Rust

Constant actix_web::http::header::DNT[][src]

pub const DNT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Dnt),}

Indicates the client's tracking preference.

+

This header lets users indicate whether they would prefer privacy rather +than personalized content.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ETAG.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ETAG.html new file mode 100644 index 0000000..b808242 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ETAG.html @@ -0,0 +1,13 @@ +actix_web::http::header::ETAG - Rust

Constant actix_web::http::header::ETAG[][src]

pub const ETAG: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Etag),}

Identifier for a specific version of a resource.

+

This header allows caches to be more efficient, and saves bandwidth, as +a web server does not need to send a full response if the content has +not changed. On the other side, if the content has changed, etags are +useful to help prevent simultaneous updates of a resource from +overwriting each other ("mid-air collisions").

+

If the resource at a given URL changes, a new Etag value must be +generated. Etags are therefore similar to fingerprints and might also be +used for tracking purposes by some servers. A comparison of them allows +to quickly determine whether two representations of a resource are the +same, but they might also be set to persist indefinitely by a tracking +server.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPECT.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPECT.html new file mode 100644 index 0000000..39c4a75 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPECT.html @@ -0,0 +1,19 @@ +actix_web::http::header::EXPECT - Rust

Constant actix_web::http::header::EXPECT[][src]

pub const EXPECT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expect),}

Indicates expectations that need to be fulfilled by the server in order +to properly handle the request.

+

The only expectation defined in the specification is Expect: +100-continue, to which the server shall respond with:

+
    +
  • +

    100 if the information contained in the header is sufficient to cause +an immediate success,

    +
  • +
  • +

    417 (Expectation Failed) if it cannot meet the expectation; or any +other 4xx status otherwise.

    +
  • +
+

For example, the server may reject a request if its Content-Length is +too large.

+

No common browsers send the Expect header, but some other clients such +as cURL do so by default.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPIRES.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPIRES.html new file mode 100644 index 0000000..e51d239 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.EXPIRES.html @@ -0,0 +1,6 @@ +actix_web::http::header::EXPIRES - Rust

Constant actix_web::http::header::EXPIRES[][src]

pub const EXPIRES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expires),}

Contains the date/time after which the response is considered stale.

+

Invalid dates, like the value 0, represent a date in the past and mean +that the resource is already expired.

+

If there is a Cache-Control header with the "max-age" or "s-max-age" +directive in the response, the Expires header is ignored.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.FORWARDED.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.FORWARDED.html new file mode 100644 index 0000000..1e12742 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.FORWARDED.html @@ -0,0 +1,9 @@ +actix_web::http::header::FORWARDED - Rust

Constant actix_web::http::header::FORWARDED[][src]

pub const FORWARDED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Forwarded),}

Contains information from the client-facing side of proxy servers that +is altered or lost when a proxy is involved in the path of the request.

+

The alternative and de-facto standard versions of this header are the +X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Proto headers.

+

This header is used for debugging, statistics, and generating +location-dependent content and by design it exposes privacy sensitive +information, such as the IP address of the client. Therefore the user's +privacy must be kept in mind when deploying this header.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.FROM.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.FROM.html new file mode 100644 index 0000000..2d26d22 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.FROM.html @@ -0,0 +1,7 @@ +actix_web::http::header::FROM - Rust

Constant actix_web::http::header::FROM[][src]

pub const FROM: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::From),}

Contains an Internet email address for a human user who controls the +requesting user agent.

+

If you are running a robotic user agent (e.g. a crawler), the From +header should be sent, so you can be contacted if problems occur on +servers, such as if the robot is sending excessive, unwanted, or invalid +requests.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.HOST.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.HOST.html new file mode 100644 index 0000000..823c59a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.HOST.html @@ -0,0 +1,8 @@ +actix_web::http::header::HOST - Rust

Constant actix_web::http::header::HOST[][src]

pub const HOST: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Host),}

Specifies the domain name of the server and (optionally) the TCP port +number on which the server is listening.

+

If no port is given, the default port for the service requested (e.g., +"80" for an HTTP URL) is implied.

+

A Host header field must be sent in all HTTP/1.1 request messages. A 400 +(Bad Request) status code will be sent to any HTTP/1.1 request message +that lacks a Host header field or contains more than one.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MATCH.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MATCH.html new file mode 100644 index 0000000..c793146 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MATCH.html @@ -0,0 +1,25 @@ +actix_web::http::header::IF_MATCH - Rust

Constant actix_web::http::header::IF_MATCH[][src]

pub const IF_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfMatch),}

Makes a request conditional based on the E-Tag.

+

For GET and HEAD methods, the server will send back the requested +resource only if it matches one of the listed ETags. For PUT and other +non-safe methods, it will only upload the resource in this case.

+

The comparison with the stored ETag uses the strong comparison +algorithm, meaning two files are considered identical byte to byte only. +This is weakened when the W/ prefix is used in front of the ETag.

+

There are two common use cases:

+
    +
  • +

    For GET and HEAD methods, used in combination with an Range header, it +can guarantee that the new ranges requested comes from the same resource +than the previous one. If it doesn't match, then a 416 (Range Not +Satisfiable) response is returned.

    +
  • +
  • +

    For other methods, and in particular for PUT, If-Match can be used to +prevent the lost update problem. It can check if the modification of a +resource that the user wants to upload will not override another change +that has been done since the original resource was fetched. If the +request cannot be fulfilled, the 412 (Precondition Failed) response is +returned.

    +
  • +
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MODIFIED_SINCE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MODIFIED_SINCE.html new file mode 100644 index 0000000..36c53d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_MODIFIED_SINCE.html @@ -0,0 +1,13 @@ +actix_web::http::header::IF_MODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_MODIFIED_SINCE[][src]

pub const IF_MODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfModifiedSince),}

Makes a request conditional based on the modification date.

+

The If-Modified-Since request HTTP header makes the request conditional: +the server will send back the requested resource, with a 200 status, +only if it has been last modified after the given date. If the request +has not been modified since, the response will be a 304 without any +body; the Last-Modified header will contain the date of last +modification. Unlike If-Unmodified-Since, If-Modified-Since can only be +used with a GET or HEAD.

+

When used in combination with If-None-Match, it is ignored, unless the +server doesn't support If-None-Match.

+

The most common use case is to update a cached entity that has no +associated ETag.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_NONE_MATCH.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_NONE_MATCH.html new file mode 100644 index 0000000..c9af84c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_NONE_MATCH.html @@ -0,0 +1,31 @@ +actix_web::http::header::IF_NONE_MATCH - Rust

Constant actix_web::http::header::IF_NONE_MATCH[][src]

pub const IF_NONE_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfNoneMatch),}

Makes a request conditional based on the E-Tag.

+

The If-None-Match HTTP request header makes the request conditional. For +GET and HEAD methods, the server will send back the requested resource, +with a 200 status, only if it doesn't have an ETag matching the given +ones. For other methods, the request will be processed only if the +eventually existing resource's ETag doesn't match any of the values +listed.

+

When the condition fails for GET and HEAD methods, then the server must +return HTTP status code 304 (Not Modified). For methods that apply +server-side changes, the status code 412 (Precondition Failed) is used. +Note that the server generating a 304 response MUST generate any of the +following header fields that would have been sent in a 200 (OK) response +to the same request: Cache-Control, Content-Location, Date, ETag, +Expires, and Vary.

+

The comparison with the stored ETag uses the weak comparison algorithm, +meaning two files are considered identical not only if they are +identical byte to byte, but if the content is equivalent. For example, +two pages that would differ only by the date of generation in the footer +would be considered as identical.

+

When used in combination with If-Modified-Since, it has precedence (if +the server supports it).

+

There are two common use cases:

+
    +
  • For GET and HEAD methods, to update a cached entity that has an associated ETag.
  • +
  • For other methods, and in particular for PUT, If-None-Match used with +the * value can be used to save a file not known to exist, +guaranteeing that another upload didn't happen before, losing the data +of the previous put; this problems is the variation of the lost update +problem.
  • +
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_RANGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_RANGE.html new file mode 100644 index 0000000..d271475 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_RANGE.html @@ -0,0 +1,12 @@ +actix_web::http::header::IF_RANGE - Rust

Constant actix_web::http::header::IF_RANGE[][src]

pub const IF_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfRange),}

Makes a request conditional based on range.

+

The If-Range HTTP request header makes a range request conditional: if +the condition is fulfilled, the range request will be issued and the +server sends back a 206 Partial Content answer with the appropriate +body. If the condition is not fulfilled, the full resource is sent back, +with a 200 OK status.

+

This header can be used either with a Last-Modified validator, or with +an ETag, but not with both.

+

The most common use case is to resume a download, to guarantee that the +stored resource has not been modified since the last fragment has been +received.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html new file mode 100644 index 0000000..8b7a850 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html @@ -0,0 +1,22 @@ +actix_web::http::header::IF_UNMODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_UNMODIFIED_SINCE[][src]

pub const IF_UNMODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfUnmodifiedSince),}

Makes the request conditional based on the last modification date.

+

The If-Unmodified-Since request HTTP header makes the request +conditional: the server will send back the requested resource, or accept +it in the case of a POST or another non-safe method, only if it has not +been last modified after the given date. If the request has been +modified after the given date, the response will be a 412 (Precondition +Failed) error.

+

There are two common use cases:

+
    +
  • +

    In conjunction non-safe methods, like POST, it can be used to +implement an optimistic concurrency control, like done by some wikis: +editions are rejected if the stored document has been modified since the +original has been retrieved.

    +
  • +
  • +

    In conjunction with a range request with a If-Range header, it can be +used to ensure that the new fragment requested comes from an unmodified +document.

    +
  • +
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.LAST_MODIFIED.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LAST_MODIFIED.html new file mode 100644 index 0000000..690eacc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LAST_MODIFIED.html @@ -0,0 +1,2 @@ +actix_web::http::header::LAST_MODIFIED - Rust

Constant actix_web::http::header::LAST_MODIFIED[][src]

pub const LAST_MODIFIED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::LastModified),}

Content-Types that are acceptable for the response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.LINK.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LINK.html new file mode 100644 index 0000000..bbb19b3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LINK.html @@ -0,0 +1,3 @@ +actix_web::http::header::LINK - Rust

Constant actix_web::http::header::LINK[][src]

pub const LINK: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Link),}

Allows the server to point an interested client to another resource +containing metadata about the requested resource.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.LOCATION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LOCATION.html new file mode 100644 index 0000000..2449cba --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.LOCATION.html @@ -0,0 +1,29 @@ +actix_web::http::header::LOCATION - Rust

Constant actix_web::http::header::LOCATION[][src]

pub const LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Location),}

Indicates the URL to redirect a page to.

+

The Location response header indicates the URL to redirect a page to. It +only provides a meaning when served with a 3xx status response.

+

The HTTP method used to make the new request to fetch the page pointed +to by Location depends of the original method and of the kind of +redirection:

+
    +
  • +

    If 303 (See Also) responses always lead to the use of a GET method, +307 (Temporary Redirect) and 308 (Permanent Redirect) don't change the +method used in the original request;

    +
  • +
  • +

    301 (Permanent Redirect) and 302 (Found) doesn't change the method +most of the time, though older user-agents may (so you basically don't +know).

    +
  • +
+

All responses with one of these status codes send a Location header.

+

Beside redirect response, messages with 201 (Created) status also +include the Location header. It indicates the URL to the newly created +resource.

+

Location and Content-Location are different: Location indicates the +target of a redirection (or the URL of a newly created resource), while +Content-Location indicates the direct URL to use to access the resource +when content negotiation happened, without the need of further content +negotiation. Location is a header associated with the response, while +Content-Location is associated with the entity returned.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.MAX_FORWARDS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.MAX_FORWARDS.html new file mode 100644 index 0000000..c358fe1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.MAX_FORWARDS.html @@ -0,0 +1,3 @@ +actix_web::http::header::MAX_FORWARDS - Rust

Constant actix_web::http::header::MAX_FORWARDS[][src]

pub const MAX_FORWARDS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::MaxForwards),}

Indicates the max number of intermediaries the request should be sent +through.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.ORIGIN.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ORIGIN.html new file mode 100644 index 0000000..171350e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.ORIGIN.html @@ -0,0 +1,6 @@ +actix_web::http::header::ORIGIN - Rust

Constant actix_web::http::header::ORIGIN[][src]

pub const ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Origin),}

Indicates where a fetch originates from.

+

It doesn't include any path information, but only the server name. It is +sent with CORS requests, as well as with POST requests. It is similar to +the Referer header, but, unlike this header, it doesn't disclose the +whole path.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.PRAGMA.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PRAGMA.html new file mode 100644 index 0000000..caa6847 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PRAGMA.html @@ -0,0 +1,6 @@ +actix_web::http::header::PRAGMA - Rust

Constant actix_web::http::header::PRAGMA[][src]

pub const PRAGMA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Pragma),}

HTTP/1.0 header usually used for backwards compatibility.

+

The Pragma HTTP/1.0 general header is an implementation-specific header +that may have various effects along the request-response chain. It is +used for backwards compatibility with HTTP/1.0 caches where the +Cache-Control HTTP/1.1 header is not yet present.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHENTICATE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHENTICATE.html new file mode 100644 index 0000000..3e989c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHENTICATE.html @@ -0,0 +1,14 @@ +actix_web::http::header::PROXY_AUTHENTICATE - Rust

Constant actix_web::http::header::PROXY_AUTHENTICATE[][src]

pub const PROXY_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthenticate),}

Defines the authentication method that should be used to gain access to +a proxy.

+

Unlike www-authenticate, the proxy-authenticate header field applies +only to the next outbound client on the response chain. This is because +only the client that chose a given proxy is likely to have the +credentials necessary for authentication. However, when multiple proxies +are used within the same administrative domain, such as office and +regional caching proxies within a large corporate network, it is common +for credentials to be generated by the user agent and passed through the +hierarchy until consumed. Hence, in such a configuration, it will appear +as if Proxy-Authenticate is being forwarded because each proxy will send +the same challenge set.

+

The proxy-authenticate header is sent along with a 407 Proxy Authentication Required.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHORIZATION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHORIZATION.html new file mode 100644 index 0000000..e4c6f61 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PROXY_AUTHORIZATION.html @@ -0,0 +1,5 @@ +actix_web::http::header::PROXY_AUTHORIZATION - Rust

Constant actix_web::http::header::PROXY_AUTHORIZATION[][src]

pub const PROXY_AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthorization),}

Contains the credentials to authenticate a user agent to a proxy server.

+

This header is usually included after the server has responded with a +407 Proxy Authentication Required status and the Proxy-Authenticate +header.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS.html new file mode 100644 index 0000000..baf75e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS.html @@ -0,0 +1,6 @@ +actix_web::http::header::PUBLIC_KEY_PINS - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS[][src]

pub const PUBLIC_KEY_PINS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPins),}

Associates a specific cryptographic public key with a certain server.

+

This decreases the risk of MITM attacks with forged certificates. If one +or several keys are pinned and none of them are used by the server, the +browser will not accept the response as legitimate, and will not display +it.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html new file mode 100644 index 0000000..104a52d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html @@ -0,0 +1,5 @@ +actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY[][src]

pub const PUBLIC_KEY_PINS_REPORT_ONLY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPinsReportOnly),}

Sends reports of pinning violation to the report-uri specified in the +header.

+

Unlike Public-Key-Pins, this header still allows browsers to connect +to the server if the pinning is violated.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.RANGE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.RANGE.html new file mode 100644 index 0000000..3867c7d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.RANGE.html @@ -0,0 +1,8 @@ +actix_web::http::header::RANGE - Rust

Constant actix_web::http::header::RANGE[][src]

pub const RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Range),}

Indicates the part of a document that the server should return.

+

Several parts can be requested with one Range header at once, and the +server may send back these ranges in a multipart document. If the server +sends back ranges, it uses the 206 Partial Content for the response. If +the ranges are invalid, the server returns the 416 Range Not Satisfiable +error. The server can also ignore the Range header and return the whole +document with a 200 status code.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERER.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERER.html new file mode 100644 index 0000000..94c0299 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERER.html @@ -0,0 +1,6 @@ +actix_web::http::header::REFERER - Rust

Constant actix_web::http::header::REFERER[][src]

pub const REFERER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Referer),}

Contains the address of the previous web page from which a link to the +currently requested page was followed.

+

The Referer header allows servers to identify where people are visiting +them from and may use that data for analytics, logging, or optimized +caching, for example.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERRER_POLICY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERRER_POLICY.html new file mode 100644 index 0000000..8347716 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFERRER_POLICY.html @@ -0,0 +1,3 @@ +actix_web::http::header::REFERRER_POLICY - Rust

Constant actix_web::http::header::REFERRER_POLICY[][src]

pub const REFERRER_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ReferrerPolicy),}

Governs which referrer information should be included with requests +made.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFRESH.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFRESH.html new file mode 100644 index 0000000..aa37153 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.REFRESH.html @@ -0,0 +1,3 @@ +actix_web::http::header::REFRESH - Rust

Constant actix_web::http::header::REFRESH[][src]

pub const REFRESH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Refresh),}

Informs the web browser that the current page or frame should be +refreshed.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.RETRY_AFTER.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.RETRY_AFTER.html new file mode 100644 index 0000000..a125616 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.RETRY_AFTER.html @@ -0,0 +1,15 @@ +actix_web::http::header::RETRY_AFTER - Rust

Constant actix_web::http::header::RETRY_AFTER[][src]

pub const RETRY_AFTER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::RetryAfter),}

The Retry-After response HTTP header indicates how long the user agent +should wait before making a follow-up request. There are two main cases +this header is used:

+
    +
  • +

    When sent with a 503 (Service Unavailable) response, it indicates how +long the service is expected to be unavailable.

    +
  • +
  • +

    When sent with a redirect response, such as 301 (Moved Permanently), +it indicates the minimum time that the user agent is asked to wait +before issuing the redirected request.

    +
  • +
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html new file mode 100644 index 0000000..859435f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html @@ -0,0 +1,5 @@ +actix_web::http::header::SEC_WEBSOCKET_ACCEPT - Rust

Constant actix_web::http::header::SEC_WEBSOCKET_ACCEPT[][src]

pub const SEC_WEBSOCKET_ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketAccept),}

The |Sec-WebSocket-Accept| header field is used in the WebSocket +opening handshake. It is sent from the server to the client to +confirm that the server is willing to initiate the WebSocket +connection.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html new file mode 100644 index 0000000..4f1eb30 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html @@ -0,0 +1,6 @@ +actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS - Rust

Constant actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS[][src]

pub const SEC_WEBSOCKET_EXTENSIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketExtensions),}

The |Sec-WebSocket-Extensions| header field is used in the WebSocket +opening handshake. It is initially sent from the client to the +server, and then subsequently sent from the server to the client, to +agree on a set of protocol-level extensions to use for the duration +of the connection.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html new file mode 100644 index 0000000..68d8b18 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html @@ -0,0 +1,8 @@ +actix_web::http::header::SEC_WEBSOCKET_KEY - Rust

Constant actix_web::http::header::SEC_WEBSOCKET_KEY[][src]

pub const SEC_WEBSOCKET_KEY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketKey),}

The |Sec-WebSocket-Key| header field is used in the WebSocket opening +handshake. It is sent from the client to the server to provide part +of the information used by the server to prove that it received a +valid WebSocket opening handshake. This helps ensure that the server +does not accept connections from non-WebSocket clients (e.g., HTTP +clients) that are being abused to send data to unsuspecting WebSocket +servers.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html new file mode 100644 index 0000000..6c249fd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html @@ -0,0 +1,6 @@ +actix_web::http::header::SEC_WEBSOCKET_PROTOCOL - Rust

Constant actix_web::http::header::SEC_WEBSOCKET_PROTOCOL[][src]

pub const SEC_WEBSOCKET_PROTOCOL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketProtocol),}

The |Sec-WebSocket-Protocol| header field is used in the WebSocket +opening handshake. It is sent from the client to the server and back +from the server to the client to confirm the subprotocol of the +connection. This enables scripts to both select a subprotocol and be +sure that the server agreed to serve that subprotocol.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html new file mode 100644 index 0000000..4d587fa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html @@ -0,0 +1,7 @@ +actix_web::http::header::SEC_WEBSOCKET_VERSION - Rust

Constant actix_web::http::header::SEC_WEBSOCKET_VERSION[][src]

pub const SEC_WEBSOCKET_VERSION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketVersion),}

The |Sec-WebSocket-Version| header field is used in the WebSocket +opening handshake. It is sent from the client to the server to +indicate the protocol version of the connection. This enables +servers to correctly interpret the opening handshake and subsequent +data being sent from the data, and close the connection if the server +cannot interpret that data in a safe manner.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SERVER.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SERVER.html new file mode 100644 index 0000000..4805c87 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SERVER.html @@ -0,0 +1,7 @@ +actix_web::http::header::SERVER - Rust

Constant actix_web::http::header::SERVER[][src]

pub const SERVER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Server),}

Contains information about the software used by the origin server to +handle the request.

+

Overly long and detailed Server values should be avoided as they +potentially reveal internal implementation details that might make it +(slightly) easier for attackers to find and exploit known security +holes.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.SET_COOKIE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SET_COOKIE.html new file mode 100644 index 0000000..9cbc369 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.SET_COOKIE.html @@ -0,0 +1,2 @@ +actix_web::http::header::SET_COOKIE - Rust

Constant actix_web::http::header::SET_COOKIE[][src]

pub const SET_COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SetCookie),}

Used to send cookies from the server to the user agent.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html new file mode 100644 index 0000000..4b1d278 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html @@ -0,0 +1,2 @@ +actix_web::http::header::STRICT_TRANSPORT_SECURITY - Rust

Constant actix_web::http::header::STRICT_TRANSPORT_SECURITY[][src]

pub const STRICT_TRANSPORT_SECURITY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::StrictTransportSecurity),}

Tells the client to communicate with HTTPS instead of using HTTP.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.TE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TE.html new file mode 100644 index 0000000..715201c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TE.html @@ -0,0 +1,8 @@ +actix_web::http::header::TE - Rust

Constant actix_web::http::header::TE[][src]

pub const TE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Te),}

Informs the server of transfer encodings willing to be accepted as part +of the response.

+

See also the Transfer-Encoding response header for more details on +transfer encodings. Note that chunked is always acceptable for HTTP/1.1 +recipients and you that don't have to specify "chunked" using the TE +header. However, it is useful for setting if the client is accepting +trailer fields in a chunked transfer coding using the "trailers" value.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRAILER.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRAILER.html new file mode 100644 index 0000000..9abc75e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRAILER.html @@ -0,0 +1,3 @@ +actix_web::http::header::TRAILER - Rust

Constant actix_web::http::header::TRAILER[][src]

pub const TRAILER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Trailer),}

Allows the sender to include additional fields at the end of chunked +messages.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRANSFER_ENCODING.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRANSFER_ENCODING.html new file mode 100644 index 0000000..a4b7bc0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.TRANSFER_ENCODING.html @@ -0,0 +1,11 @@ +actix_web::http::header::TRANSFER_ENCODING - Rust

Constant actix_web::http::header::TRANSFER_ENCODING[][src]

pub const TRANSFER_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::TransferEncoding),}

Specifies the form of encoding used to safely transfer the entity to the +client.

+

transfer-encoding is a hop-by-hop header, that is applying to a +message between two nodes, not to a resource itself. Each segment of a +multi-node connection can use different transfer-encoding values. If +you want to compress data over the whole connection, use the end-to-end +header content-encoding header instead.

+

When present on a response to a HEAD request that has no body, it +indicates the value that would have applied to the corresponding GET +message.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE.html new file mode 100644 index 0000000..1ab7f37 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE.html @@ -0,0 +1,2 @@ +actix_web::http::header::UPGRADE - Rust

Constant actix_web::http::header::UPGRADE[][src]

pub const UPGRADE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Upgrade),}

Used as part of the exchange to upgrade the protocol.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html new file mode 100644 index 0000000..53a5c0b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html @@ -0,0 +1,3 @@ +actix_web::http::header::UPGRADE_INSECURE_REQUESTS - Rust

Constant actix_web::http::header::UPGRADE_INSECURE_REQUESTS[][src]

pub const UPGRADE_INSECURE_REQUESTS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UpgradeInsecureRequests),}

Sends a signal to the server expressing the client’s preference for an +encrypted and authenticated response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.USER_AGENT.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.USER_AGENT.html new file mode 100644 index 0000000..94d5d33 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.USER_AGENT.html @@ -0,0 +1,3 @@ +actix_web::http::header::USER_AGENT - Rust

Constant actix_web::http::header::USER_AGENT[][src]

pub const USER_AGENT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UserAgent),}

Contains a string that allows identifying the requesting client's +software.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.VARY.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.VARY.html new file mode 100644 index 0000000..1748e5e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.VARY.html @@ -0,0 +1,9 @@ +actix_web::http::header::VARY - Rust

Constant actix_web::http::header::VARY[][src]

pub const VARY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Vary),}

Determines how to match future requests with cached responses.

+

The vary HTTP response header determines how to match future request +headers to decide whether a cached response can be used rather than +requesting a fresh one from the origin server. It is used by the server +to indicate which headers it used when selecting a representation of a +resource in a content negotiation algorithm.

+

The vary header should be set on a 304 Not Modified response exactly +like it would have been set on an equivalent 200 OK response.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.VIA.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.VIA.html new file mode 100644 index 0000000..07fb0ad --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.VIA.html @@ -0,0 +1,7 @@ +actix_web::http::header::VIA - Rust

Constant actix_web::http::header::VIA[][src]

pub const VIA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Via),}

Added by proxies to track routing.

+

The via general header is added by proxies, both forward and reverse +proxies, and can appear in the request headers and the response headers. +It is used for tracking message forwards, avoiding request loops, and +identifying the protocol capabilities of senders along the +request/response chain.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.WARNING.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.WARNING.html new file mode 100644 index 0000000..c14196f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.WARNING.html @@ -0,0 +1,6 @@ +actix_web::http::header::WARNING - Rust

Constant actix_web::http::header::WARNING[][src]

pub const WARNING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Warning),}

General HTTP header contains information about possible problems with +the status of the message.

+

More than one warning header may appear in a response. Warning header +fields can in general be applied to any message, however some warn-codes +are specific to caches and can only be applied to response messages.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.WWW_AUTHENTICATE.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.WWW_AUTHENTICATE.html new file mode 100644 index 0000000..475abd9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.WWW_AUTHENTICATE.html @@ -0,0 +1,3 @@ +actix_web::http::header::WWW_AUTHENTICATE - Rust

Constant actix_web::http::header::WWW_AUTHENTICATE[][src]

pub const WWW_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::WwwAuthenticate),}

Defines the authentication method that should be used to gain access to +a resource.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html new file mode 100644 index 0000000..c0dac69 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html @@ -0,0 +1,11 @@ +actix_web::http::header::X_CONTENT_TYPE_OPTIONS - Rust

Constant actix_web::http::header::X_CONTENT_TYPE_OPTIONS[][src]

pub const X_CONTENT_TYPE_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XContentTypeOptions),}

Marker used by the server to indicate that the MIME types advertised in +the content-type headers should not be changed and be followed.

+

This allows to opt-out of MIME type sniffing, or, in other words, it is +a way to say that the webmasters knew what they were doing.

+

This header was introduced by Microsoft in IE 8 as a way for webmasters +to block content sniffing that was happening and could transform +non-executable MIME types into executable MIME types. Since then, other +browsers have introduced it, even if their MIME sniffing algorithms were +less aggressive.

+

Site security testers usually expect this header to be set.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html new file mode 100644 index 0000000..343e616 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html @@ -0,0 +1,10 @@ +actix_web::http::header::X_DNS_PREFETCH_CONTROL - Rust

Constant actix_web::http::header::X_DNS_PREFETCH_CONTROL[][src]

pub const X_DNS_PREFETCH_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XDnsPrefetchControl),}

Controls DNS prefetching.

+

The x-dns-prefetch-control HTTP response header controls DNS +prefetching, a feature by which browsers proactively perform domain name +resolution on both links that the user may choose to follow as well as +URLs for items referenced by the document, including images, CSS, +JavaScript, and so forth.

+

This prefetching is performed in the background, so that the DNS is +likely to have been resolved by the time the referenced items are +needed. This reduces latency when the user clicks a link.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_FRAME_OPTIONS.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_FRAME_OPTIONS.html new file mode 100644 index 0000000..bd997d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_FRAME_OPTIONS.html @@ -0,0 +1,7 @@ +actix_web::http::header::X_FRAME_OPTIONS - Rust

Constant actix_web::http::header::X_FRAME_OPTIONS[][src]

pub const X_FRAME_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XFrameOptions),}

Indicates whether or not a browser should be allowed to render a page in +a frame.

+

Sites can use this to avoid clickjacking attacks, by ensuring that their +content is not embedded into other sites.

+

The added security is only provided if the user accessing the document +is using a browser supporting x-frame-options.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_XSS_PROTECTION.html b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_XSS_PROTECTION.html new file mode 100644 index 0000000..4c13c36 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/constant.X_XSS_PROTECTION.html @@ -0,0 +1,9 @@ +actix_web::http::header::X_XSS_PROTECTION - Rust

Constant actix_web::http::header::X_XSS_PROTECTION[][src]

pub const X_XSS_PROTECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XXssProtection),}

Stop pages from loading when an XSS attack is detected.

+

The HTTP X-XSS-Protection response header is a feature of Internet +Explorer, Chrome and Safari that stops pages from loading when they +detect reflected cross-site scripting (XSS) attacks. Although these +protections are largely unnecessary in modern browsers when sites +implement a strong Content-Security-Policy that disables the use of +inline JavaScript ('unsafe-inline'), they can still provide protections +for users of older web browsers that don't yet support CSP.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/enum.Charset.html b/static/api/actix-web/0.7.2/actix_web/http/header/enum.Charset.html new file mode 100644 index 0000000..42cf2b1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/enum.Charset.html @@ -0,0 +1,75 @@ +actix_web::http::header::Charset - Rust

Enum actix_web::http::header::Charset[][src]

pub enum Charset {
+    Us_Ascii,
+    Iso_8859_1,
+    Iso_8859_2,
+    Iso_8859_3,
+    Iso_8859_4,
+    Iso_8859_5,
+    Iso_8859_6,
+    Iso_8859_7,
+    Iso_8859_8,
+    Iso_8859_9,
+    Iso_8859_10,
+    Shift_Jis,
+    Euc_Jp,
+    Iso_2022_Kr,
+    Euc_Kr,
+    Iso_2022_Jp,
+    Iso_2022_Jp_2,
+    Iso_8859_6_E,
+    Iso_8859_6_I,
+    Iso_8859_8_E,
+    Iso_8859_8_I,
+    Gb2312,
+    Big5,
+    Koi8_R,
+    Ext(String),
+}

A Mime charset.

+

The string representation is normalized to upper case.

+

See http://www.iana.org/assignments/character-sets/character-sets.xhtml.

+

+ Variants

+

US ASCII

+

ISO-8859-1

+

ISO-8859-2

+

ISO-8859-3

+

ISO-8859-4

+

ISO-8859-5

+

ISO-8859-6

+

ISO-8859-7

+

ISO-8859-8

+

ISO-8859-9

+

ISO-8859-10

+

Shift_JIS

+

EUC-JP

+

ISO-2022-KR

+

EUC-KR

+

ISO-2022-JP

+

ISO-2022-JP-2

+

ISO-8859-6-E

+

ISO-8859-6-I

+

ISO-8859-8-E

+

ISO-8859-8-I

+

GB2312

+

Big5

+

KOI8-R

+

An arbitrary charset specified as a string

+
+

+ Trait Implementations +

+

impl Clone for Charset
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for Charset
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for Charset
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Display for Charset
[src]

Formats the value using the given formatter. Read more

+

impl FromStr for Charset
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Charset

impl Sync for Charset

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/enum.ContentEncoding.html b/static/api/actix-web/0.7.2/actix_web/http/header/enum.ContentEncoding.html new file mode 100644 index 0000000..0ec2dfc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/enum.ContentEncoding.html @@ -0,0 +1,38 @@ +actix_web::http::header::ContentEncoding - Rust

Enum actix_web::http::header::ContentEncoding[][src]

pub enum ContentEncoding {
+    Auto,
+    Br,
+    Deflate,
+    Gzip,
+    Identity,
+}

Represents supported types of content encodings

+

+ Variants

+

Automatically select encoding based on encoding negotiation

+

A format using the Brotli algorithm

+

A format using the zlib structure with deflate algorithm

+

Gzip algorithm

+

Indicates the identity function (i.e. no compression, nor modification)

+
+

+ Methods +

+

impl ContentEncoding
[src]

Is the content compressed?

+

Convert content encoding to string

+

default quality value

+
+

+ Trait Implementations +

+

impl Copy for ContentEncoding
[src]

impl Clone for ContentEncoding
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl PartialEq for ContentEncoding
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for ContentEncoding
[src]

Formats the value using the given formatter. Read more

+

impl<'a> From<&'a str> for ContentEncoding
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionParam.html b/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionParam.html new file mode 100644 index 0000000..0105bb4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionParam.html @@ -0,0 +1,25 @@ +actix_web::http::header::DispositionParam - Rust

Enum actix_web::http::header::DispositionParam[][src]

pub enum DispositionParam {
+    Filename(CharsetOption<LanguageTag>, Vec<u8>),
+    Ext(StringString),
+}

A parameter to the disposition type.

+

+ Variants

+

A Filename consisting of a Charset, an optional LanguageTag, and finally a sequence of +bytes representing the filename

+

Extension type consisting of token and value. Recipients should ignore unrecognized +parameters.

+
+

+ Trait Implementations +

+

impl Clone for DispositionParam
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for DispositionParam
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for DispositionParam
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionType.html b/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionType.html new file mode 100644 index 0000000..40d35bc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/enum.DispositionType.html @@ -0,0 +1,26 @@ +actix_web::http::header::DispositionType - Rust

Enum actix_web::http::header::DispositionType[][src]

pub enum DispositionType {
+    Inline,
+    Attachment,
+    Ext(String),
+}

The implied disposition of the content of the HTTP body.

+

+ Variants

+

Inline implies default processing

+

Attachment implies that the recipient should prompt the user to save the response locally, +rather than process it normally (as per its media type).

+

Extension type. Should be handled by recipients the same way as Attachment

+
+

+ Trait Implementations +

+

impl Clone for DispositionType
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for DispositionType
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for DispositionType
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/enum.Entry.html b/static/api/actix-web/0.7.2/actix_web/http/header/enum.Entry.html new file mode 100644 index 0000000..44fdead --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/enum.Entry.html @@ -0,0 +1,77 @@ +actix_web::http::header::Entry - Rust

Enum actix_web::http::header::Entry[][src]

pub enum Entry<'a, T> where
    T: 'a, 
{ + Occupied(OccupiedEntry<'a, T>), + Vacant(VacantEntry<'a, T>), +}

A view into a single location in a HeaderMap, which may be vacant or occupied.

+

+ Variants

+

An occupied entry

+

A vacant entry

+
+

+ Methods +

+

impl<'a, T> Entry<'a, T>
[src]

Important traits for &'a mut R

Ensures a value is in the entry by inserting the default if empty.

+

Returns a mutable reference to the first value in the entry.

+

Examples

+
+let mut map: HeaderMap<u32> = HeaderMap::default();
+
+let headers = &[
+    "content-length",
+    "x-hello",
+    "Content-Length",
+    "x-world",
+];
+
+for &header in headers {
+    let counter = map.entry(header)
+        .expect("valid header names")
+        .or_insert(0);
+    *counter += 1;
+}
+
+assert_eq!(map["content-length"], 2);
+assert_eq!(map["x-hello"], 1);
+

Important traits for &'a mut R

Ensures a value is in the entry by inserting the result of the default +function if empty.

+

The default function is not called if the entry exists in the map. +Returns a mutable reference to the first value in the entry.

+

Examples

+

Basic usage.

+ +
+let mut map = HeaderMap::new();
+
+let res = map.entry("x-hello").unwrap()
+    .or_insert_with(|| "world".parse().unwrap());
+
+assert_eq!(res, "world");
+

The default function is not called if the entry exists in the map.

+ +
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+
+let res = map.entry("host")
+    .expect("host is a valid string")
+    .or_insert_with(|| unreachable!());
+
+
+assert_eq!(res, "world");
+

Returns a reference to the entry's key

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert_eq!(map.entry("x-hello").unwrap().key(), "x-hello");
+
+

+ Trait Implementations +

+

impl<'a, T> Debug for Entry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for Entry<'a, T> where
    T: Send

impl<'a, T> Sync for Entry<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/fn.http_percent_encode.html b/static/api/actix-web/0.7.2/actix_web/http/header/fn.http_percent_encode.html new file mode 100644 index 0000000..c8cc33d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/fn.http_percent_encode.html @@ -0,0 +1,3 @@ +actix_web::http::header::http_percent_encode - Rust

Function actix_web::http::header::http_percent_encode[][src]

pub fn http_percent_encode(f: &mut Formatter, bytes: &[u8]) -> Result

Percent encode a sequence of bytes with a character set defined in +https://tools.ietf.org/html/rfc5987#section-3.2

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/fn.parse_extended_value.html b/static/api/actix-web/0.7.2/actix_web/http/header/fn.parse_extended_value.html new file mode 100644 index 0000000..94653d6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/fn.parse_extended_value.html @@ -0,0 +1,32 @@ +actix_web::http::header::parse_extended_value - Rust

Function actix_web::http::header::parse_extended_value[][src]

pub fn parse_extended_value(val: &str) -> Result<ExtendedValue, ParseError>

Parses extended header parameter values (ext-value), as defined in +RFC 5987.

+

Extended values are denoted by parameter names that end with *.

+

ABNF

+
ext-value     = charset  "'" [ language ] "'" value-chars
+              ; like RFC 2231's <extended-initial-value>
+              ; (see [RFC2231], Section 7)
+
+charset       = "UTF-8" / "ISO-8859-1" / mime-charset
+
+mime-charset  = 1*mime-charsetc
+mime-charsetc = ALPHA / DIGIT
+              / "!" / "#" / "$" / "%" / "&"
+              / "+" / "-" / "^" / "_" / "`"
+              / "{" / "}" / "~"
+              ; as <mime-charset> in Section 2.3 of [RFC2978]
+              ; except that the single quote is not included
+              ; SHOULD be registered in the IANA charset registry
+
+language      = <Language-Tag, defined in [RFC5646], Section 2.1>
+
+value-chars   = *( pct-encoded / attr-char )
+
+pct-encoded   = "%" HEXDIG HEXDIG
+              ; see [RFC3986], Section 2.1
+
+attr-char     = ALPHA / DIGIT
+              / "!" / "#" / "$" / "&" / "+" / "-" / "."
+              / "^" / "_" / "`" / "|" / "~"
+              ; token except ( "*" / "'" / "%" )
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/http_percent_encode.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/http_percent_encode.v.html new file mode 100644 index 0000000..d237a31 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/http_percent_encode.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.http_percent_encode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/index.html b/static/api/actix-web/0.7.2/actix_web/http/header/index.html new file mode 100644 index 0000000..4635b86 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/index.html @@ -0,0 +1,948 @@ +actix_web::http::header - Rust

Module actix_web::http::header[][src]

Various http headers

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ContentDisposition +

A Content-Disposition header, (re)defined in RFC6266.

+ +
Drain +

A drain iterator for HeaderMap.

+ +
ExtendedValue +

An extended header parameter value (i.e., tagged with a character set and optionally, +a language), as defined in RFC 5987.

+ +
GetAll +

A view to all values stored in a single entry.

+ +
HeaderMap +

A set of HTTP headers

+ +
HeaderName +

Represents an HTTP header field name

+ +
HeaderValue +

Represents an HTTP header field value.

+ +
IntoIter +

An owning iterator over the entries of a HeaderMap.

+ +
InvalidHeaderName +

A possible error when converting a HeaderName from another type.

+ +
InvalidHeaderNameBytes +

A possible error when converting a HeaderName from another type.

+ +
InvalidHeaderValue +

A possible error when converting a HeaderValue from a string or byte +slice.

+ +
InvalidHeaderValueBytes +

A possible error when converting a HeaderValue from a string or byte +slice.

+ +
Iter +

HeaderMap entry iterator.

+ +
Keys +

An iterator over HeaderMap keys.

+ +
LanguageTag +

A language tag as described in BCP47.

+ +
OccupiedEntry +

A view into a single occupied location in a HeaderMap.

+ +
ToStrError +

A possible error when converting a HeaderValue to a string representation.

+ +
VacantEntry +

A view into a single empty location in a HeaderMap.

+ +
ValueDrain +

An drain iterator of all values associated with a single header name.

+ +
ValueIter +

An iterator of all values associated with a single header name.

+ +
ValueIterMut +

A mutable iterator of all values associated with a single header name.

+ +
Values +

HeaderMap value iterator.

+ +

Enums

+ + + + + + + + + + + + + + + + + + + + +
Charset +

A Mime charset.

+ +
ContentEncoding +

Represents supported types of content encodings

+ +
DispositionParam +

A parameter to the disposition type.

+ +
DispositionType +

The implied disposition of the content of the HTTP body.

+ +
Entry +

A view into a single location in a HeaderMap, which may be vacant or occupied.

+ +

Constants

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ACCEPT +

Advertises which content types the client is able to understand.

+ +
ACCEPT_CHARSET +

Advertises which character set the client is able to understand.

+ +
ACCEPT_ENCODING +

Advertises which content encoding the client is able to understand.

+ +
ACCEPT_LANGUAGE +

Advertises which languages the client is able to understand.

+ +
ACCEPT_RANGES +

Marker used by the server to advertise partial request support.

+ +
ACCESS_CONTROL_ALLOW_CREDENTIALS +

Preflight response indicating if the response to the request can be +exposed to the page.

+ +
ACCESS_CONTROL_ALLOW_HEADERS +

Preflight response indicating permitted HTTP headers.

+ +
ACCESS_CONTROL_ALLOW_METHODS +

Preflight header response indicating permitted access methods.

+ +
ACCESS_CONTROL_ALLOW_ORIGIN +

Indicates whether the response can be shared with resources with the +given origin.

+ +
ACCESS_CONTROL_EXPOSE_HEADERS +

Indicates which headers can be exposed as part of the response by +listing their names.

+ +
ACCESS_CONTROL_MAX_AGE +

Indicates how long the results of a preflight request can be cached.

+ +
ACCESS_CONTROL_REQUEST_HEADERS +

Informs the server which HTTP headers will be used when an actual +request is made.

+ +
ACCESS_CONTROL_REQUEST_METHOD +

Informs the server know which HTTP method will be used when the actual +request is made.

+ +
AGE +

Indicates the time in seconds the object has been in a proxy cache.

+ +
ALLOW +

Lists the set of methods support by a resource.

+ +
ALT_SVC +

Advertises the availability of alternate services to clients.

+ +
AUTHORIZATION +

Contains the credentials to authenticate a user agent with a server.

+ +
CACHE_CONTROL +

Specifies directives for caching mechanisms in both requests and +responses.

+ +
CONNECTION +

Controls whether or not the network connection stays open after the +current transaction finishes.

+ +
CONTENT_DISPOSITION +

Indicates if the content is expected to be displayed inline.

+ +
CONTENT_ENCODING +

Used to compress the media-type.

+ +
CONTENT_LANGUAGE +

Used to describe the languages intended for the audience.

+ +
CONTENT_LENGTH +

Indicates the size fo the entity-body.

+ +
CONTENT_LOCATION +

Indicates an alternate location for the returned data.

+ +
CONTENT_RANGE +

Indicates where in a full body message a partial message belongs.

+ +
CONTENT_SECURITY_POLICY +

Allows controlling resources the user agent is allowed to load for a +given page.

+ +
CONTENT_SECURITY_POLICY_REPORT_ONLY +

Allows experimenting with policies by monitoring their effects.

+ +
CONTENT_TYPE +

Used to indicate the media type of the resource.

+ +
COOKIE +

Contains stored HTTP cookies previously sent by the server with the +Set-Cookie header.

+ +
DATE +

Contains the date and time at which the message was originated.

+ +
DNT +

Indicates the client's tracking preference.

+ +
ETAG +

Identifier for a specific version of a resource.

+ +
EXPECT +

Indicates expectations that need to be fulfilled by the server in order +to properly handle the request.

+ +
EXPIRES +

Contains the date/time after which the response is considered stale.

+ +
FORWARDED +

Contains information from the client-facing side of proxy servers that +is altered or lost when a proxy is involved in the path of the request.

+ +
FROM +

Contains an Internet email address for a human user who controls the +requesting user agent.

+ +
HOST +

Specifies the domain name of the server and (optionally) the TCP port +number on which the server is listening.

+ +
IF_MATCH +

Makes a request conditional based on the E-Tag.

+ +
IF_MODIFIED_SINCE +

Makes a request conditional based on the modification date.

+ +
IF_NONE_MATCH +

Makes a request conditional based on the E-Tag.

+ +
IF_RANGE +

Makes a request conditional based on range.

+ +
IF_UNMODIFIED_SINCE +

Makes the request conditional based on the last modification date.

+ +
LAST_MODIFIED +

Content-Types that are acceptable for the response.

+ +
LINK +

Allows the server to point an interested client to another resource +containing metadata about the requested resource.

+ +
LOCATION +

Indicates the URL to redirect a page to.

+ +
MAX_FORWARDS +

Indicates the max number of intermediaries the request should be sent +through.

+ +
ORIGIN +

Indicates where a fetch originates from.

+ +
PRAGMA +

HTTP/1.0 header usually used for backwards compatibility.

+ +
PROXY_AUTHENTICATE +

Defines the authentication method that should be used to gain access to +a proxy.

+ +
PROXY_AUTHORIZATION +

Contains the credentials to authenticate a user agent to a proxy server.

+ +
PUBLIC_KEY_PINS +

Associates a specific cryptographic public key with a certain server.

+ +
PUBLIC_KEY_PINS_REPORT_ONLY +

Sends reports of pinning violation to the report-uri specified in the +header.

+ +
RANGE +

Indicates the part of a document that the server should return.

+ +
REFERER +

Contains the address of the previous web page from which a link to the +currently requested page was followed.

+ +
REFERRER_POLICY +

Governs which referrer information should be included with requests +made.

+ +
REFRESH +

Informs the web browser that the current page or frame should be +refreshed.

+ +
RETRY_AFTER +

The Retry-After response HTTP header indicates how long the user agent +should wait before making a follow-up request. There are two main cases +this header is used:

+ +
SEC_WEBSOCKET_ACCEPT +

The |Sec-WebSocket-Accept| header field is used in the WebSocket +opening handshake. It is sent from the server to the client to +confirm that the server is willing to initiate the WebSocket +connection.

+ +
SEC_WEBSOCKET_EXTENSIONS +

The |Sec-WebSocket-Extensions| header field is used in the WebSocket +opening handshake. It is initially sent from the client to the +server, and then subsequently sent from the server to the client, to +agree on a set of protocol-level extensions to use for the duration +of the connection.

+ +
SEC_WEBSOCKET_KEY +

The |Sec-WebSocket-Key| header field is used in the WebSocket opening +handshake. It is sent from the client to the server to provide part +of the information used by the server to prove that it received a +valid WebSocket opening handshake. This helps ensure that the server +does not accept connections from non-WebSocket clients (e.g., HTTP +clients) that are being abused to send data to unsuspecting WebSocket +servers.

+ +
SEC_WEBSOCKET_PROTOCOL +

The |Sec-WebSocket-Protocol| header field is used in the WebSocket +opening handshake. It is sent from the client to the server and back +from the server to the client to confirm the subprotocol of the +connection. This enables scripts to both select a subprotocol and be +sure that the server agreed to serve that subprotocol.

+ +
SEC_WEBSOCKET_VERSION +

The |Sec-WebSocket-Version| header field is used in the WebSocket +opening handshake. It is sent from the client to the server to +indicate the protocol version of the connection. This enables +servers to correctly interpret the opening handshake and subsequent +data being sent from the data, and close the connection if the server +cannot interpret that data in a safe manner.

+ +
SERVER +

Contains information about the software used by the origin server to +handle the request.

+ +
SET_COOKIE +

Used to send cookies from the server to the user agent.

+ +
STRICT_TRANSPORT_SECURITY +

Tells the client to communicate with HTTPS instead of using HTTP.

+ +
TE +

Informs the server of transfer encodings willing to be accepted as part +of the response.

+ +
TRAILER +

Allows the sender to include additional fields at the end of chunked +messages.

+ +
TRANSFER_ENCODING +

Specifies the form of encoding used to safely transfer the entity to the +client.

+ +
UPGRADE +

Used as part of the exchange to upgrade the protocol.

+ +
UPGRADE_INSECURE_REQUESTS +

Sends a signal to the server expressing the client’s preference for an +encrypted and authenticated response.

+ +
USER_AGENT +

Contains a string that allows identifying the requesting client's +software.

+ +
VARY +

Determines how to match future requests with cached responses.

+ +
VIA +

Added by proxies to track routing.

+ +
WARNING +

General HTTP header contains information about possible problems with +the status of the message.

+ +
WWW_AUTHENTICATE +

Defines the authentication method that should be used to gain access to +a resource.

+ +
X_CONTENT_TYPE_OPTIONS +

Marker used by the server to indicate that the MIME types advertised in +the content-type headers should not be changed and be followed.

+ +
X_DNS_PREFETCH_CONTROL +

Controls DNS prefetching.

+ +
X_FRAME_OPTIONS +

Indicates whether or not a browser should be allowed to render a page in +a frame.

+ +
X_XSS_PROTECTION +

Stop pages from loading when an XSS attack is detected.

+ +

Traits

+ + + + + + + + +
AsHeaderName +

A marker trait used to identify values that can be used as search keys +to a HeaderMap.

+ +
IntoHeaderName +

A marker trait used to identify values that can be used as insert keys +to a HeaderMap.

+ +

Functions

+ + + + + + + + +
http_percent_encode +

Percent encode a sequence of bytes with a character set defined in +https://tools.ietf.org/html/rfc5987#section-3.2

+ +
parse_extended_value +

Parses extended header parameter values (ext-value), as defined in +RFC 5987.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/parse_extended_value.v.html b/static/api/actix-web/0.7.2/actix_web/http/header/parse_extended_value.v.html new file mode 100644 index 0000000..6089c2d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/parse_extended_value.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.parse_extended_value.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/http/header/sidebar-items.js new file mode 100644 index 0000000..327fdcd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"constant":[["ACCEPT","Advertises which content types the client is able to understand."],["ACCEPT_CHARSET","Advertises which character set the client is able to understand."],["ACCEPT_ENCODING","Advertises which content encoding the client is able to understand."],["ACCEPT_LANGUAGE","Advertises which languages the client is able to understand."],["ACCEPT_RANGES","Marker used by the server to advertise partial request support."],["ACCESS_CONTROL_ALLOW_CREDENTIALS","Preflight response indicating if the response to the request can be exposed to the page."],["ACCESS_CONTROL_ALLOW_HEADERS","Preflight response indicating permitted HTTP headers."],["ACCESS_CONTROL_ALLOW_METHODS","Preflight header response indicating permitted access methods."],["ACCESS_CONTROL_ALLOW_ORIGIN","Indicates whether the response can be shared with resources with the given origin."],["ACCESS_CONTROL_EXPOSE_HEADERS","Indicates which headers can be exposed as part of the response by listing their names."],["ACCESS_CONTROL_MAX_AGE","Indicates how long the results of a preflight request can be cached."],["ACCESS_CONTROL_REQUEST_HEADERS","Informs the server which HTTP headers will be used when an actual request is made."],["ACCESS_CONTROL_REQUEST_METHOD","Informs the server know which HTTP method will be used when the actual request is made."],["AGE","Indicates the time in seconds the object has been in a proxy cache."],["ALLOW","Lists the set of methods support by a resource."],["ALT_SVC","Advertises the availability of alternate services to clients."],["AUTHORIZATION","Contains the credentials to authenticate a user agent with a server."],["CACHE_CONTROL","Specifies directives for caching mechanisms in both requests and responses."],["CONNECTION","Controls whether or not the network connection stays open after the current transaction finishes."],["CONTENT_DISPOSITION","Indicates if the content is expected to be displayed inline."],["CONTENT_ENCODING","Used to compress the media-type."],["CONTENT_LANGUAGE","Used to describe the languages intended for the audience."],["CONTENT_LENGTH","Indicates the size fo the entity-body."],["CONTENT_LOCATION","Indicates an alternate location for the returned data."],["CONTENT_RANGE","Indicates where in a full body message a partial message belongs."],["CONTENT_SECURITY_POLICY","Allows controlling resources the user agent is allowed to load for a given page."],["CONTENT_SECURITY_POLICY_REPORT_ONLY","Allows experimenting with policies by monitoring their effects."],["CONTENT_TYPE","Used to indicate the media type of the resource."],["COOKIE","Contains stored HTTP cookies previously sent by the server with the Set-Cookie header."],["DATE","Contains the date and time at which the message was originated."],["DNT","Indicates the client's tracking preference."],["ETAG","Identifier for a specific version of a resource."],["EXPECT","Indicates expectations that need to be fulfilled by the server in order to properly handle the request."],["EXPIRES","Contains the date/time after which the response is considered stale."],["FORWARDED","Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request."],["FROM","Contains an Internet email address for a human user who controls the requesting user agent."],["HOST","Specifies the domain name of the server and (optionally) the TCP port number on which the server is listening."],["IF_MATCH","Makes a request conditional based on the E-Tag."],["IF_MODIFIED_SINCE","Makes a request conditional based on the modification date."],["IF_NONE_MATCH","Makes a request conditional based on the E-Tag."],["IF_RANGE","Makes a request conditional based on range."],["IF_UNMODIFIED_SINCE","Makes the request conditional based on the last modification date."],["LAST_MODIFIED","Content-Types that are acceptable for the response."],["LINK","Allows the server to point an interested client to another resource containing metadata about the requested resource."],["LOCATION","Indicates the URL to redirect a page to."],["MAX_FORWARDS","Indicates the max number of intermediaries the request should be sent through."],["ORIGIN","Indicates where a fetch originates from."],["PRAGMA","HTTP/1.0 header usually used for backwards compatibility."],["PROXY_AUTHENTICATE","Defines the authentication method that should be used to gain access to a proxy."],["PROXY_AUTHORIZATION","Contains the credentials to authenticate a user agent to a proxy server."],["PUBLIC_KEY_PINS","Associates a specific cryptographic public key with a certain server."],["PUBLIC_KEY_PINS_REPORT_ONLY","Sends reports of pinning violation to the report-uri specified in the header."],["RANGE","Indicates the part of a document that the server should return."],["REFERER","Contains the address of the previous web page from which a link to the currently requested page was followed."],["REFERRER_POLICY","Governs which referrer information should be included with requests made."],["REFRESH","Informs the web browser that the current page or frame should be refreshed."],["RETRY_AFTER","The Retry-After response HTTP header indicates how long the user agent should wait before making a follow-up request. There are two main cases this header is used:"],["SEC_WEBSOCKET_ACCEPT","The |Sec-WebSocket-Accept| header field is used in the WebSocket opening handshake. It is sent from the server to the client to confirm that the server is willing to initiate the WebSocket connection."],["SEC_WEBSOCKET_EXTENSIONS","The |Sec-WebSocket-Extensions| header field is used in the WebSocket opening handshake. It is initially sent from the client to the server, and then subsequently sent from the server to the client, to agree on a set of protocol-level extensions to use for the duration of the connection."],["SEC_WEBSOCKET_KEY","The |Sec-WebSocket-Key| header field is used in the WebSocket opening handshake. It is sent from the client to the server to provide part of the information used by the server to prove that it received a valid WebSocket opening handshake. This helps ensure that the server does not accept connections from non-WebSocket clients (e.g., HTTP clients) that are being abused to send data to unsuspecting WebSocket servers."],["SEC_WEBSOCKET_PROTOCOL","The |Sec-WebSocket-Protocol| header field is used in the WebSocket opening handshake. It is sent from the client to the server and back from the server to the client to confirm the subprotocol of the connection. This enables scripts to both select a subprotocol and be sure that the server agreed to serve that subprotocol."],["SEC_WEBSOCKET_VERSION","The |Sec-WebSocket-Version| header field is used in the WebSocket opening handshake. It is sent from the client to the server to indicate the protocol version of the connection. This enables servers to correctly interpret the opening handshake and subsequent data being sent from the data, and close the connection if the server cannot interpret that data in a safe manner."],["SERVER","Contains information about the software used by the origin server to handle the request."],["SET_COOKIE","Used to send cookies from the server to the user agent."],["STRICT_TRANSPORT_SECURITY","Tells the client to communicate with HTTPS instead of using HTTP."],["TE","Informs the server of transfer encodings willing to be accepted as part of the response."],["TRAILER","Allows the sender to include additional fields at the end of chunked messages."],["TRANSFER_ENCODING","Specifies the form of encoding used to safely transfer the entity to the client."],["UPGRADE","Used as part of the exchange to upgrade the protocol."],["UPGRADE_INSECURE_REQUESTS","Sends a signal to the server expressing the client’s preference for an encrypted and authenticated response."],["USER_AGENT","Contains a string that allows identifying the requesting client's software."],["VARY","Determines how to match future requests with cached responses."],["VIA","Added by proxies to track routing."],["WARNING","General HTTP header contains information about possible problems with the status of the message."],["WWW_AUTHENTICATE","Defines the authentication method that should be used to gain access to a resource."],["X_CONTENT_TYPE_OPTIONS","Marker used by the server to indicate that the MIME types advertised in the `content-type` headers should not be changed and be followed."],["X_DNS_PREFETCH_CONTROL","Controls DNS prefetching."],["X_FRAME_OPTIONS","Indicates whether or not a browser should be allowed to render a page in a frame."],["X_XSS_PROTECTION","Stop pages from loading when an XSS attack is detected."]],"enum":[["Charset","A Mime charset."],["ContentEncoding","Represents supported types of content encodings"],["DispositionParam","A parameter to the disposition type."],["DispositionType","The implied disposition of the content of the HTTP body."],["Entry","A view into a single location in a `HeaderMap`, which may be vacant or occupied."]],"fn":[["http_percent_encode","Percent encode a sequence of bytes with a character set defined in [https://tools.ietf.org/html/rfc5987#section-3.2][url]"],["parse_extended_value","Parses extended header parameter values (`ext-value`), as defined in RFC 5987."]],"struct":[["ContentDisposition","A `Content-Disposition` header, (re)defined in RFC6266."],["Drain","A drain iterator for `HeaderMap`."],["ExtendedValue","An extended header parameter value (i.e., tagged with a character set and optionally, a language), as defined in RFC 5987."],["GetAll","A view to all values stored in a single entry."],["HeaderMap","A set of HTTP headers"],["HeaderName","Represents an HTTP header field name"],["HeaderValue","Represents an HTTP header field value."],["IntoIter","An owning iterator over the entries of a `HeaderMap`."],["InvalidHeaderName","A possible error when converting a `HeaderName` from another type."],["InvalidHeaderNameBytes","A possible error when converting a `HeaderName` from another type."],["InvalidHeaderValue","A possible error when converting a `HeaderValue` from a string or byte slice."],["InvalidHeaderValueBytes","A possible error when converting a `HeaderValue` from a string or byte slice."],["Iter","`HeaderMap` entry iterator."],["Keys","An iterator over `HeaderMap` keys."],["LanguageTag","A language tag as described in BCP47."],["OccupiedEntry","A view into a single occupied location in a `HeaderMap`."],["ToStrError","A possible error when converting a `HeaderValue` to a string representation."],["VacantEntry","A view into a single empty location in a `HeaderMap`."],["ValueDrain","An drain iterator of all values associated with a single header name."],["ValueIter","An iterator of all values associated with a single header name."],["ValueIterMut","A mutable iterator of all values associated with a single header name."],["Values","`HeaderMap` value iterator."]],"trait":[["AsHeaderName","A marker trait used to identify values that can be used as search keys to a `HeaderMap`."],["IntoHeaderName","A marker trait used to identify values that can be used as insert keys to a `HeaderMap`."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ContentDisposition.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ContentDisposition.html new file mode 100644 index 0000000..b312e54 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ContentDisposition.html @@ -0,0 +1,80 @@ +actix_web::http::header::ContentDisposition - Rust

Struct actix_web::http::header::ContentDisposition[][src]

pub struct ContentDisposition {
+    pub disposition: DispositionType,
+    pub parameters: Vec<DispositionParam>,
+}

A Content-Disposition header, (re)defined in RFC6266.

+

The Content-Disposition response header field is used to convey +additional information about how to process the response payload, and +also can be used to attach additional metadata, such as the filename +to use when saving the response payload locally.

+

ABNF

+
content-disposition = "Content-Disposition" ":"
+                      disposition-type *( ";" disposition-parm )
+
+disposition-type    = "inline" | "attachment" | disp-ext-type
+                      ; case-insensitive
+
+disp-ext-type       = token
+
+disposition-parm    = filename-parm | disp-ext-parm
+
+filename-parm       = "filename" "=" value
+                    | "filename*" "=" ext-value
+
+disp-ext-parm       = token "=" value
+                    | ext-token "=" ext-value
+
+ext-token           = <the characters in token, followed by "*">
+
+

Example

+
+use actix_web::http::header::{ContentDisposition, DispositionType, DispositionParam, Charset};
+
+let cd1 = ContentDisposition {
+    disposition: DispositionType::Attachment,
+    parameters: vec![DispositionParam::Filename(
+      Charset::Iso_8859_1, // The character set for the bytes of the filename
+      None, // The optional language tag (see `language-tag` crate)
+      b"\xa9 Copyright 1989.txt".to_vec() // the actual bytes of the filename
+    )]
+};
+
+let cd2 = ContentDisposition {
+    disposition: DispositionType::Inline,
+    parameters: vec![DispositionParam::Filename(
+      Charset::Ext("UTF-8".to_owned()),
+      None,
+      "\u{2764}".as_bytes().to_vec()
+    )]
+};
+

+ Fields

+ +

The disposition

+
+ +

Disposition parameters

+
+

+ Methods +

+

impl ContentDisposition
[src]

Parse a raw Content-Disposition header value

+
+

+ Trait Implementations +

+

impl Clone for ContentDisposition
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ContentDisposition
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for ContentDisposition
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Display for ContentDisposition
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.Drain.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Drain.html new file mode 100644 index 0000000..bb71ef2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Drain.html @@ -0,0 +1,67 @@ +actix_web::http::header::Drain - Rust

Struct actix_web::http::header::Drain[][src]

pub struct Drain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A drain iterator for HeaderMap.

+
+

+ Trait Implementations +

+

impl<'a, T> Drop for Drain<'a, T>
[src]

Executes the destructor for this type. Read more

+

impl<'a, T> Sync for Drain<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for Drain<'a, T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for Drain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for Drain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ExtendedValue.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ExtendedValue.html new file mode 100644 index 0000000..f1971f6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ExtendedValue.html @@ -0,0 +1,38 @@ +actix_web::http::header::ExtendedValue - Rust

Struct actix_web::http::header::ExtendedValue[][src]

pub struct ExtendedValue {
+    pub charset: Charset,
+    pub language_tag: Option<LanguageTag>,
+    pub value: Vec<u8>,
+}

An extended header parameter value (i.e., tagged with a character set and optionally, +a language), as defined in RFC 5987.

+

+ Fields

+ +

The character set that is used to encode the value to a string.

+
+ +

The human language details of the value, if available.

+
+ +

The parameter value, as expressed in octets.

+
+

+ Trait Implementations +

+

impl Clone for ExtendedValue
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ExtendedValue
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for ExtendedValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Display for ExtendedValue
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ExtendedValue

impl Sync for ExtendedValue

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.GetAll.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.GetAll.html new file mode 100644 index 0000000..069f716 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.GetAll.html @@ -0,0 +1,43 @@ +actix_web::http::header::GetAll - Rust

Struct actix_web::http::header::GetAll[][src]

pub struct GetAll<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view to all values stored in a single entry.

+

This struct is returned by HeaderMap::get_all.

+
+

+ Methods +

+

impl<'a, T> GetAll<'a, T> where
    T: 'a, 
[src]

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

+

Values are iterated in insertion order.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "hello.world".parse().unwrap());
+map.append(HOST, "hello.earth".parse().unwrap());
+
+let values = map.get_all("host");
+let mut iter = values.iter();
+assert_eq!(&"hello.world", iter.next().unwrap());
+assert_eq!(&"hello.earth", iter.next().unwrap());
+assert!(iter.next().is_none());
+
+

+ Trait Implementations +

+

impl<'a, T> PartialEq<GetAll<'a, T>> for GetAll<'a, T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a, 'b, T> IntoIterator for &'b GetAll<'a, T> where
    'b: 'a, 
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> IntoIterator for GetAll<'a, T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> Debug for GetAll<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for GetAll<'a, T> where
    T: Sync

impl<'a, T> Sync for GetAll<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderMap.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderMap.html new file mode 100644 index 0000000..56978be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderMap.html @@ -0,0 +1,448 @@ +actix_web::http::header::HeaderMap - Rust

Struct actix_web::http::header::HeaderMap[][src]

pub struct HeaderMap<T = HeaderValue> { /* fields omitted */ }

A set of HTTP headers

+

HeaderMap is an multimap of HeaderName to values.

+

Examples

+

Basic usage

+ +
+let mut headers = HeaderMap::new();
+
+headers.insert(HOST, "example.com".parse().unwrap());
+headers.insert(CONTENT_LENGTH, "123".parse().unwrap());
+
+assert!(headers.contains_key(HOST));
+assert!(!headers.contains_key(LOCATION));
+
+assert_eq!(headers[HOST], "example.com");
+
+headers.remove(HOST);
+
+assert!(!headers.contains_key(HOST));
+
+

+ Methods +

+

impl HeaderMap<HeaderValue>
[src]

Create an empty HeaderMap.

+

The map will be created without any capacity. This function will not +allocate.

+

Examples

+
+let map = HeaderMap::new();
+
+assert!(map.is_empty());
+assert_eq!(0, map.capacity());
+

impl<T> HeaderMap<T>
[src]

Create an empty HeaderMap with the specified capacity.

+

The returned map will allocate internal storage in order to hold about +capacity elements without reallocating. However, this is a "best +effort" as there are usage patterns that could cause additional +allocations before capacity headers are stored in the map.

+

More capacity than requested may be allocated.

+

Examples

+
+let map: HeaderMap<u32> = HeaderMap::with_capacity(10);
+
+assert!(map.is_empty());
+assert_eq!(12, map.capacity());
+

Returns the number of headers stored in the map.

+

This number represents the total number of values stored in the map. +This number can be greater than or equal to the number of keys +stored given that a single key may have more than one associated value.

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert_eq!(0, map.len());
+
+map.insert(ACCEPT, "text/plain".parse().unwrap());
+map.insert(HOST, "localhost".parse().unwrap());
+
+assert_eq!(2, map.len());
+
+map.append(ACCEPT, "text/html".parse().unwrap());
+
+assert_eq!(3, map.len());
+

Returns the number of keys stored in the map.

+

This number will be less than or equal to len() as each key may have +more than one associated value.

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert_eq!(0, map.keys_len());
+
+map.insert(ACCEPT, "text/plain".parse().unwrap());
+map.insert(HOST, "localhost".parse().unwrap());
+
+assert_eq!(2, map.keys_len());
+
+map.insert(ACCEPT, "text/html".parse().unwrap());
+
+assert_eq!(2, map.keys_len());
+

Returns true if the map contains no elements.

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert!(map.is_empty());
+
+map.insert(HOST, "hello.world".parse().unwrap());
+
+assert!(!map.is_empty());
+

Clears the map, removing all key-value pairs. Keeps the allocated memory +for reuse.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "hello.world".parse().unwrap());
+
+map.clear();
+assert!(map.is_empty());
+assert!(map.capacity() > 0);
+

Returns the number of headers the map can hold without reallocating.

+

This number is an approximation as certain usage patterns could cause +additional allocations before the returned capacity is filled.

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert_eq!(0, map.capacity());
+
+map.insert(HOST, "hello.world".parse().unwrap());
+assert_eq!(6, map.capacity());
+

Reserves capacity for at least additional more headers to be inserted +into the HeaderMap.

+

The header map may reserve more space to avoid frequent reallocations. +Like with with_capacity, this will be a "best effort" to avoid +allocations until additional more headers are inserted. Certain usage +patterns could cause additional allocations before the number is +reached.

+

Panics

+

Panics if the new allocation size overflows usize.

+

Examples

+
+let mut map = HeaderMap::new();
+map.reserve(10);
+

Returns a reference to the value associated with the key.

+

If there are multiple values associated with the key, then the first one +is returned. Use get_all to get all values associated with a given +key. Returns None if there are no values associated with the key.

+

Examples

+
+let mut map = HeaderMap::new();
+assert!(map.get("host").is_none());
+
+map.insert(HOST, "hello".parse().unwrap());
+assert_eq!(map.get(HOST).unwrap(), &"hello");
+assert_eq!(map.get("host").unwrap(), &"hello");
+
+map.append(HOST, "world".parse().unwrap());
+assert_eq!(map.get("host").unwrap(), &"hello");
+

Returns a mutable reference to the value associated with the key.

+

If there are multiple values associated with the key, then the first one +is returned. Use entry to get all values associated with a given +key. Returns None if there are no values associated with the key.

+

Examples

+
+let mut map = HeaderMap::default();
+map.insert(HOST, "hello".to_string());
+map.get_mut("host").unwrap().push_str("-world");
+
+assert_eq!(map.get(HOST).unwrap(), &"hello-world");
+

Returns a view of all values associated with a key.

+

The returned view does not incur any allocations and allows iterating +the values associated with the key. See GetAll for more details. +Returns None if there are no values associated with the key.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(HOST, "hello".parse().unwrap());
+map.append(HOST, "goodbye".parse().unwrap());
+
+let view = map.get_all("host");
+
+let mut iter = view.iter();
+assert_eq!(&"hello", iter.next().unwrap());
+assert_eq!(&"goodbye", iter.next().unwrap());
+assert!(iter.next().is_none());
+

Returns true if the map contains a value for the specified key.

+

Examples

+
+let mut map = HeaderMap::new();
+assert!(!map.contains_key(HOST));
+
+map.insert(HOST, "world".parse().unwrap());
+assert!(map.contains_key("host"));
+

Important traits for Iter<'a, T>

An iterator visiting all key-value pairs.

+

The iteration order is arbitrary, but consistent across platforms for +the same crate version. Each key will be yielded once per associated +value. So, if a key has 3 associated values, it will be yielded 3 times.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(HOST, "hello".parse().unwrap());
+map.append(HOST, "goodbye".parse().unwrap());
+map.insert(CONTENT_LENGTH, "123".parse().unwrap());
+
+for (key, value) in map.iter() {
+    println!("{:?}: {:?}", key, value);
+}
+

An iterator visiting all key-value pairs, with mutable value references.

+

The iterator order is arbitrary, but consistent across platforms for the +same crate version. Each key will be yielded once per associated value, +so if a key has 3 associated values, it will be yielded 3 times.

+

Examples

+
+let mut map = HeaderMap::default();
+
+map.insert(HOST, "hello".to_string());
+map.append(HOST, "goodbye".to_string());
+map.insert(CONTENT_LENGTH, "123".to_string());
+
+for (key, value) in map.iter_mut() {
+    value.push_str("-boop");
+}
+

Important traits for Keys<'a, T>

An iterator visiting all keys.

+

The iteration order is arbitrary, but consistent across platforms for +the same crate version. Each key will be yielded only once even if it +has multiple associated values.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(HOST, "hello".parse().unwrap());
+map.append(HOST, "goodbye".parse().unwrap());
+map.insert(CONTENT_LENGTH, "123".parse().unwrap());
+
+for key in map.keys() {
+    println!("{:?}", key);
+}
+

Important traits for Values<'a, T>

An iterator visiting all values.

+

The iteration order is arbitrary, but consistent across platforms for +the same crate version.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(HOST, "hello".parse().unwrap());
+map.append(HOST, "goodbye".parse().unwrap());
+map.insert(CONTENT_LENGTH, "123".parse().unwrap());
+
+for value in map.values() {
+    println!("{:?}", value);
+}
+

An iterator visiting all values mutably.

+

The iteration order is arbitrary, but consistent across platforms for +the same crate version.

+

Examples

+
+let mut map = HeaderMap::default();
+
+map.insert(HOST, "hello".to_string());
+map.append(HOST, "goodbye".to_string());
+map.insert(CONTENT_LENGTH, "123".to_string());
+
+for value in map.values_mut() {
+    value.push_str("-boop");
+}
+

Important traits for Drain<'a, T>

Clears the map, returning all entries as an iterator.

+

The internal memory is kept for reuse.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(HOST, "hello".parse().unwrap());
+map.append(HOST, "goodbye".parse().unwrap());
+map.insert(CONTENT_LENGTH, "123".parse().unwrap());
+
+let mut drain = map.drain();
+
+let (key, mut vals) = drain.next().unwrap();
+
+assert_eq!("host", key);
+assert_eq!("hello", vals.next().unwrap());
+assert_eq!("goodbye", vals.next().unwrap());
+assert!(vals.next().is_none());
+
+let (key, mut vals) = drain.next().unwrap();
+
+assert_eq!("content-length", key);
+assert_eq!("123", vals.next().unwrap());
+assert!(vals.next().is_none());
+

Gets the given key's corresponding entry in the map for in-place +manipulation.

+

Examples

+
+let mut map: HeaderMap<u32> = HeaderMap::default();
+
+let headers = &[
+    "content-length",
+    "x-hello",
+    "Content-Length",
+    "x-world",
+];
+
+for &header in headers {
+    let counter = map.entry(header).unwrap().or_insert(0);
+    *counter += 1;
+}
+
+assert_eq!(map["content-length"], 2);
+assert_eq!(map["x-hello"], 1);
+

Inserts a key-value pair into the map.

+

If the map did not previously have this key present, then None is +returned.

+

If the map did have this key present, the new value is associated with +the key and all previous values are removed. Note that only a single +one of the previous values is returned. If there are multiple values +that have been previously associated with the key, then the first one is +returned. See insert_mult on OccupiedEntry for an API that returns +all values.

+

The key is not updated, though; this matters for types that can be == +without being identical.

+

Examples

+
+let mut map = HeaderMap::new();
+assert!(map.insert(HOST, "world".parse().unwrap()).is_none());
+assert!(!map.is_empty());
+
+let mut prev = map.insert(HOST, "earth".parse().unwrap()).unwrap();
+assert_eq!("world", prev);
+

Inserts a key-value pair into the map.

+

If the map did not previously have this key present, then false is +returned.

+

If the map did have this key present, the new value is pushed to the end +of the list of values currently associated with the key. The key is not +updated, though; this matters for types that can be == without being +identical.

+

Examples

+
+let mut map = HeaderMap::new();
+assert!(map.insert(HOST, "world".parse().unwrap()).is_none());
+assert!(!map.is_empty());
+
+map.append(HOST, "earth".parse().unwrap());
+
+let values = map.get_all("host");
+let mut i = values.iter();
+assert_eq!("world", *i.next().unwrap());
+assert_eq!("earth", *i.next().unwrap());
+

Removes a key from the map, returning the value associated with the key.

+

Returns None if the map does not contain the key. If there are +multiple values associated with the key, then the first one is returned. +See remove_entry_mult on OccupiedEntry for an API that yields all +values.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "hello.world".parse().unwrap());
+
+let prev = map.remove(HOST).unwrap();
+assert_eq!("hello.world", prev);
+
+assert!(map.remove(HOST).is_none());
+
+

+ Trait Implementations +

+

impl<T> Default for HeaderMap<T>
[src]

Returns the "default value" for a type. Read more

+

impl<T> Eq for HeaderMap<T> where
    T: Eq
[src]

impl<T> PartialEq<HeaderMap<T>> for HeaderMap<T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T> Extend<(Option<HeaderName>, T)> for HeaderMap<T>
[src]

Extend a HeaderMap with the contents of another HeaderMap.

+

This function expects the yielded items to follow the same structure as +IntoIter.

+

Panics

+

This panics if the first yielded item does not have a HeaderName.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(ACCEPT, "text/plain".parse().unwrap());
+map.insert(HOST, "hello.world".parse().unwrap());
+
+let mut extra = HeaderMap::new();
+
+extra.insert(HOST, "foo.bar".parse().unwrap());
+extra.insert(COOKIE, "hello".parse().unwrap());
+extra.append(COOKIE, "world".parse().unwrap());
+
+map.extend(extra);
+
+assert_eq!(map["host"], "foo.bar");
+assert_eq!(map["accept"], "text/plain");
+assert_eq!(map["cookie"], "hello");
+
+let v = map.get_all("host");
+assert_eq!(1, v.iter().count());
+
+let v = map.get_all("cookie");
+assert_eq!(2, v.iter().count());
+

impl<T> Extend<(HeaderName, T)> for HeaderMap<T>
[src]

Extends a collection with the contents of an iterator. Read more

+

impl<'a, K, T> Index<K> for HeaderMap<T> where
    K: AsHeaderName
[src]

+

The returned type after indexing.

+

Important traits for &'a mut R

Panics

+

Using the index operator will cause a panic if the header you're querying isn't set.

+

impl<'a, T> IntoIterator for &'a HeaderMap<T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for Iter<'a, T>

Creates an iterator from a value. Read more

+

impl<T> IntoIterator for HeaderMap<T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for IntoIter<T>

Creates a consuming iterator, that is, one that moves keys and values +out of the map in arbitary order. The map cannot be used after calling +this.

+

For each yielded item that has None provided for the HeaderName, +then the associated header name is the same as that of the previously +yielded item. The first yielded item will have HeaderName set.

+

Examples

+

Basic usage.

+ +
+let mut map = HeaderMap::new();
+map.insert(header::CONTENT_LENGTH, "123".parse().unwrap());
+map.insert(header::CONTENT_TYPE, "json".parse().unwrap());
+
+let mut iter = map.into_iter();
+assert_eq!(iter.next(), Some((Some(header::CONTENT_LENGTH), "123".parse().unwrap())));
+assert_eq!(iter.next(), Some((Some(header::CONTENT_TYPE), "json".parse().unwrap())));
+assert!(iter.next().is_none());
+

Multiple values per key.

+ +
+let mut map = HeaderMap::new();
+
+map.append(header::CONTENT_LENGTH, "123".parse().unwrap());
+map.append(header::CONTENT_LENGTH, "456".parse().unwrap());
+
+map.append(header::CONTENT_TYPE, "json".parse().unwrap());
+map.append(header::CONTENT_TYPE, "html".parse().unwrap());
+map.append(header::CONTENT_TYPE, "xml".parse().unwrap());
+
+let mut iter = map.into_iter();
+
+assert_eq!(iter.next(), Some((Some(header::CONTENT_LENGTH), "123".parse().unwrap())));
+assert_eq!(iter.next(), Some((None, "456".parse().unwrap())));
+
+assert_eq!(iter.next(), Some((Some(header::CONTENT_TYPE), "json".parse().unwrap())));
+assert_eq!(iter.next(), Some((None, "html".parse().unwrap())));
+assert_eq!(iter.next(), Some((None, "xml".parse().unwrap())));
+assert!(iter.next().is_none());
+

impl<'a, T> IntoIterator for &'a mut HeaderMap<T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Creates an iterator from a value. Read more

+

impl<T> Clone for HeaderMap<T> where
    T: Clone
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<T> Debug for HeaderMap<T> where
    T: Debug
[src]

Formats the value using the given formatter. Read more

+

impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
[src]

Creates a value from an iterator. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for HeaderMap<T> where
    T: Send

impl<T> Sync for HeaderMap<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderName.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderName.html new file mode 100644 index 0000000..d930faa --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderName.html @@ -0,0 +1,131 @@ +actix_web::http::header::HeaderName - Rust

Struct actix_web::http::header::HeaderName[][src]

pub struct HeaderName { /* fields omitted */ }

Represents an HTTP header field name

+

Header field names identify the header. Header sets may include multiple +headers with the same name. The HTTP specification defines a number of +standard headers, but HTTP messages may include non-standard header names as +well as long as they adhere to the specification.

+

HeaderName is used as the HeaderMap key. Constants are available for +all standard header names in the header module.

+

Representation

+

HeaderName represents standard header names using an enum, as such they +will not require an allocation for storage. All custom header names are +lower cased upon conversion to a HeaderName value. This avoids the +overhead of dynamically doing lower case conversion during the hash code +computation and the comparison operation.

+
+

+ Methods +

+

impl HeaderName
[src]

Converts a slice of bytes to an HTTP header name.

+

This function normalizes the input.

+

Converts a slice of bytes to an HTTP header name.

+

This function expects the input to only contain lowercase characters. +This is useful when decoding HTTP/2.0 headers. The HTTP/2.0 +specification requires that all headers be represented in lower case.

+

Examples

+
+
+// Parsing a lower case header
+let hdr = HeaderName::from_lowercase(b"content-length").unwrap();
+assert_eq!(CONTENT_LENGTH, hdr);
+
+// Parsing a header that contains uppercase characters
+assert!(HeaderName::from_lowercase(b"Content-Length").is_err());
+

Converts a static string to a HTTP header name.

+

This function panics when the static string is a invalid header.

+

This function requires the static string to only contain lowercase +characters, numerals and symbols, as per the HTTP/2.0 specification +and header names internal representation within this library.

+

Examples

+
+// Parsing a standard header
+let hdr = HeaderName::from_static("content-length");
+assert_eq!(CONTENT_LENGTH, hdr);
+ 
+// Parsing a custom header
+let CUSTOM_HEADER: &'static str = "custom-header";
+ 
+let a = HeaderName::from_lowercase(b"custom-header").unwrap();
+let b = HeaderName::from_static(CUSTOM_HEADER);
+assert_eq!(a, b);
+ +
+// Parsing a header that contains invalid symbols(s):
+HeaderName::from_static("content{}{}length"); // This line panics!
+ 
+// Parsing a header that contains invalid uppercase characters.
+let a = HeaderName::from_static("foobar");
+let b = HeaderName::from_static("FOOBAR"); // This line panics!
+

Returns a str representation of the header.

+

The returned string will always be lower case.

+
+

+ Trait Implementations +

+

impl Eq for HeaderName
[src]

impl<'a> PartialEq<HeaderName> for &'a str
[src]

Performs a case-insensitive comparison of the string against the header +name

+

This method tests for !=.

+

impl PartialEq<HeaderName> for HeaderName
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<&'a HeaderName> for HeaderName
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<HeaderName> for str
[src]

Performs a case-insensitive comparison of the string against the header +name

+

Examples

+
+use http::header::CONTENT_LENGTH;
+
+assert_eq!(CONTENT_LENGTH, "content-length");
+assert_eq!(CONTENT_LENGTH, "Content-Length");
+assert_ne!(CONTENT_LENGTH, "content length");
+

This method tests for !=.

+

impl<'a> PartialEq<HeaderName> for &'a HeaderName
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<str> for HeaderName
[src]

Performs a case-insensitive comparison of the string against the header +name

+

Examples

+
+use http::header::CONTENT_LENGTH;
+
+assert_eq!(CONTENT_LENGTH, "content-length");
+assert_eq!(CONTENT_LENGTH, "Content-Length");
+assert_ne!(CONTENT_LENGTH, "content length");
+

This method tests for !=.

+

impl<'a> PartialEq<&'a str> for HeaderName
[src]

Performs a case-insensitive comparison of the string against the header +name

+

This method tests for !=.

+

impl Hash for HeaderName
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl FromStr for HeaderName
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl Borrow<str> for HeaderName
[src]

Immutably borrows from an owned value. Read more

+

impl From<HeaderName> for Bytes
[src]

Performs the conversion.

+

impl From<HeaderName> for HeaderValue
[src]

Performs the conversion.

+

impl<'a> From<&'a HeaderName> for HeaderName
[src]

Performs the conversion.

+

impl AsRef<[u8]> for HeaderName
[src]

Important traits for &'a [u8]

Performs the conversion.

+

impl AsRef<str> for HeaderName
[src]

Performs the conversion.

+

impl<'a> IntoHeaderName for &'a HeaderName
[src]

impl IntoHeaderName for HeaderName
[src]

impl Clone for HeaderName
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<'a> HttpTryFrom<&'a str> for HeaderName
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<Bytes> for HeaderName
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<HeaderName> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<HeaderName> for HeaderName
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a [u8]> for HeaderName
[src]

+

Associated error with the conversion this implementation represents.

+

impl Debug for HeaderName
[src]

Formats the value using the given formatter. Read more

+

impl AsHeaderName for HeaderName
[src]

impl<'a> AsHeaderName for &'a HeaderName
[src]

+

+ Auto Trait Implementations +

+
+

impl Send for HeaderName

impl Sync for HeaderName

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderValue.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderValue.html new file mode 100644 index 0000000..795225a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.HeaderValue.html @@ -0,0 +1,298 @@ +actix_web::http::header::HeaderValue - Rust

Struct actix_web::http::header::HeaderValue[][src]

pub struct HeaderValue { /* fields omitted */ }

Represents an HTTP header field value.

+

In practice, HTTP header field values are usually valid ASCII. However, the +HTTP spec allows for a header value to contain opaque bytes as well. In this +case, the header field value is not able to be represented as a string.

+

To handle this, the HeaderValue is useable as a type and can be compared +with strings and implements Debug. A to_str fn is provided that returns +an Err if the header value contains non visible ascii characters.

+
+

+ Methods +

+

impl HeaderValue
[src]

Convert a static string to a HeaderValue.

+

This function will not perform any copying, however the string is +checked to ensure that no invalid characters are present. Only visible +ASCII characters (32-127) are permitted.

+

Panics

+

This function panics if the argument contains invalid header value +characters.

+

Examples

+
+let val = HeaderValue::from_static("hello");
+assert_eq!(val, "hello");
+

Attempt to convert a string to a HeaderValue.

+

If the argument contains invalid header value characters, an error is +returned. Only visible ASCII characters (32-127) are permitted. Use +from_bytes to create a HeaderValue that includes opaque octets +(128-255).

+

This function is intended to be replaced in the future by a TryFrom +implementation once the trait is stabilized in std.

+

Examples

+
+let val = HeaderValue::from_str("hello").unwrap();
+assert_eq!(val, "hello");
+

An invalid value

+ +
+let val = HeaderValue::from_str("\n");
+assert!(val.is_err());
+

Converts a HeaderName into a HeaderValue

+

Since every valid HeaderName is a valid HeaderValue this is done infallibly.

+

Examples

+
+let val = HeaderValue::from_name(ACCEPT);
+assert_eq!(val, HeaderValue::from_bytes(b"accept").unwrap());
+

Attempt to convert a byte slice to a HeaderValue.

+

If the argument contains invalid header value bytes, an error is +returned. Only byte values between 32 and 255 (inclusive) are permitted, +excluding byte 127 (DEL).

+

This function is intended to be replaced in the future by a TryFrom +implementation once the trait is stabilized in std.

+

Examples

+
+let val = HeaderValue::from_bytes(b"hello\xfa").unwrap();
+assert_eq!(val, &b"hello\xfa"[..]);
+

An invalid value

+ +
+let val = HeaderValue::from_bytes(b"\n");
+assert!(val.is_err());
+

Attempt to convert a Bytes buffer to a HeaderValue.

+

If the argument contains invalid header value bytes, an error is +returned. Only byte values between 32 and 255 (inclusive) are permitted, +excluding byte 127 (DEL).

+

This function is intended to be replaced in the future by a TryFrom +implementation once the trait is stabilized in std.

+

Convert a Bytes directly into a HeaderValue without validating.

+

This function does NOT validate that illegal bytes are not contained +within the buffer.

+

Yields a &str slice if the HeaderValue only contains visible ASCII +chars.

+

This function will perform a scan of the header value, checking all the +characters.

+

Examples

+
+let val = HeaderValue::from_static("hello");
+assert_eq!(val.to_str().unwrap(), "hello");
+

Returns the length of self.

+

This length is in bytes.

+

Examples

+
+let val = HeaderValue::from_static("hello");
+assert_eq!(val.len(), 5);
+

Returns true if the HeaderValue has a length of zero bytes.

+

Examples

+
+let val = HeaderValue::from_static("");
+assert!(val.is_empty());
+
+let val = HeaderValue::from_static("hello");
+assert!(!val.is_empty());
+

Important traits for &'a [u8]

Converts a HeaderValue to a byte slice.

+

Examples

+
+let val = HeaderValue::from_static("hello");
+assert_eq!(val.as_bytes(), b"hello");
+

Mark that the header value represents sensitive information.

+

Examples

+
+let mut val = HeaderValue::from_static("my secret");
+
+val.set_sensitive(true);
+assert!(val.is_sensitive());
+
+val.set_sensitive(false);
+assert!(!val.is_sensitive());
+

Returns true if the value represents sensitive data.

+

Sensitive data could represent passwords or other data that should not +be stored on disk or in memory. This setting can be used by components +like caches to avoid storing the value. HPACK encoders must set the +header field to never index when is_sensitive returns true.

+

Note that sensitivity is not factored into equality or ordering.

+

Examples

+
+let mut val = HeaderValue::from_static("my secret");
+
+val.set_sensitive(true);
+assert!(val.is_sensitive());
+
+val.set_sensitive(false);
+assert!(!val.is_sensitive());
+
+

+ Trait Implementations +

+

impl Eq for HeaderValue
[src]

impl PartialEq<String> for HeaderValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<HeaderValue> for [u8]
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<HeaderValue> for HeaderValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<HeaderValue> for &'a HeaderValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a, T> PartialEq<&'a T> for HeaderValue where
    T: ?Sized,
    HeaderValue: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<HeaderValue> for str
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<HeaderValue> for String
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<HeaderValue> for &'a str
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<[u8]> for HeaderValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<str> for HeaderValue
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for HeaderValue
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl FromStr for HeaderValue
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl Ord for HeaderValue
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl PartialOrd<[u8]> for HeaderValue
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<HeaderValue> for String
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<str> for HeaderValue
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<HeaderValue> for [u8]
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<HeaderValue> for HeaderValue
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<'a, T> PartialOrd<&'a T> for HeaderValue where
    T: ?Sized,
    HeaderValue: PartialOrd<T>, 
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<HeaderValue> for str
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<'a> PartialOrd<HeaderValue> for &'a HeaderValue
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl PartialOrd<String> for HeaderValue
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<'a> PartialOrd<HeaderValue> for &'a str
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl From<HeaderValue> for Bytes
[src]

Performs the conversion.

+

impl From<i64> for HeaderValue
[src]

Performs the conversion.

+

impl From<isize> for HeaderValue
[src]

Performs the conversion.

+

impl From<i32> for HeaderValue
[src]

Performs the conversion.

+

impl From<u64> for HeaderValue
[src]

Performs the conversion.

+

impl From<i16> for HeaderValue
[src]

Performs the conversion.

+

impl From<u32> for HeaderValue
[src]

Performs the conversion.

+

impl From<usize> for HeaderValue
[src]

Performs the conversion.

+

impl From<u16> for HeaderValue
[src]

Performs the conversion.

+

impl From<HeaderName> for HeaderValue
[src]

Performs the conversion.

+

impl AsRef<[u8]> for HeaderValue
[src]

Important traits for &'a [u8]

Performs the conversion.

+

impl Clone for HeaderValue
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl HttpTryFrom<i64> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<i32> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<HeaderValue> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a [u8]> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<i16> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<usize> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<u64> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<isize> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<HeaderName> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<u16> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<u32> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a str> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<Bytes> for HeaderValue
[src]

+

Associated error with the conversion this implementation represents.

+

impl Debug for HeaderValue
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for HeaderValue

impl Sync for HeaderValue

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.IntoIter.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.IntoIter.html new file mode 100644 index 0000000..63e6123 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.IntoIter.html @@ -0,0 +1,73 @@ +actix_web::http::header::IntoIter - Rust

Struct actix_web::http::header::IntoIter[][src]

pub struct IntoIter<T> { /* fields omitted */ }

An owning iterator over the entries of a HeaderMap.

+

This struct is created by the into_iter method on HeaderMap.

+
+

+ Trait Implementations +

+

impl<T> Drop for IntoIter<T>
[src]

Executes the destructor for this type. Read more

+

impl<T> Iterator for IntoIter<T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<T> Debug for IntoIter<T> where
    T: Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for IntoIter<T> where
    T: Send

impl<T> Sync for IntoIter<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderName.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderName.html new file mode 100644 index 0000000..a281897 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderName.html @@ -0,0 +1,16 @@ +actix_web::http::header::InvalidHeaderName - Rust

Struct actix_web::http::header::InvalidHeaderName[][src]

pub struct InvalidHeaderName { /* fields omitted */ }

A possible error when converting a HeaderName from another type.

+
+

+ Trait Implementations +

+

impl Display for InvalidHeaderName
[src]

Formats the value using the given formatter. Read more

+

impl From<InvalidHeaderName> for Error
[src]

Performs the conversion.

+

impl Error for InvalidHeaderName
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for InvalidHeaderName
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderNameBytes.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderNameBytes.html new file mode 100644 index 0000000..04d81c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderNameBytes.html @@ -0,0 +1,16 @@ +actix_web::http::header::InvalidHeaderNameBytes - Rust

Struct actix_web::http::header::InvalidHeaderNameBytes[][src]

pub struct InvalidHeaderNameBytes(_);

A possible error when converting a HeaderName from another type.

+
+

+ Trait Implementations +

+

impl Display for InvalidHeaderNameBytes
[src]

Formats the value using the given formatter. Read more

+

impl From<InvalidHeaderNameBytes> for Error
[src]

Performs the conversion.

+

impl Error for InvalidHeaderNameBytes
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for InvalidHeaderNameBytes
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValue.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValue.html new file mode 100644 index 0000000..e2fd558 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValue.html @@ -0,0 +1,19 @@ +actix_web::http::header::InvalidHeaderValue - Rust

Struct actix_web::http::header::InvalidHeaderValue[][src]

pub struct InvalidHeaderValue { /* fields omitted */ }

A possible error when converting a HeaderValue from a string or byte +slice.

+
+

+ Trait Implementations +

+

impl Display for InvalidHeaderValue
[src]

Formats the value using the given formatter. Read more

+

impl From<InvalidHeaderValue> for Error
[src]

Performs the conversion.

+

impl Error for InvalidHeaderValue
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for InvalidHeaderValue
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for InvalidHeaderValue
[src]

BadRequest for InvalidHeaderValue

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValueBytes.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValueBytes.html new file mode 100644 index 0000000..794fe60 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.InvalidHeaderValueBytes.html @@ -0,0 +1,19 @@ +actix_web::http::header::InvalidHeaderValueBytes - Rust

Struct actix_web::http::header::InvalidHeaderValueBytes[][src]

pub struct InvalidHeaderValueBytes(_);

A possible error when converting a HeaderValue from a string or byte +slice.

+
+

+ Trait Implementations +

+

impl Display for InvalidHeaderValueBytes
[src]

Formats the value using the given formatter. Read more

+

impl From<InvalidHeaderValueBytes> for Error
[src]

Performs the conversion.

+

impl Error for InvalidHeaderValueBytes
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for InvalidHeaderValueBytes
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for InvalidHeaderValueBytes
[src]

BadRequest for InvalidHeaderValue

+

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.Iter.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Iter.html new file mode 100644 index 0000000..c2600f5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Iter.html @@ -0,0 +1,68 @@ +actix_web::http::header::Iter - Rust

Struct actix_web::http::header::Iter[][src]

pub struct Iter<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

HeaderMap entry iterator.

+

Yields (&HeaderName, &value) tuples. The same header name may be yielded +more than once if it has more than one associated value.

+
+

+ Trait Implementations +

+

impl<'a, T> Sync for Iter<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for Iter<'a, T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for Iter<'a, T> where
    T: Sync
[src]

impl<'a, T> Debug for Iter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.Keys.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Keys.html new file mode 100644 index 0000000..254a399 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Keys.html @@ -0,0 +1,75 @@ +actix_web::http::header::Keys - Rust

Struct actix_web::http::header::Keys[][src]

pub struct Keys<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator over HeaderMap keys.

+

Each header name is yielded only once, even if it has more than one +associated value.

+
+

+ Trait Implementations +

+

impl<'a, T> ExactSizeIterator for Keys<'a, T>
[src]

Returns the exact number of times the iterator will iterate. Read more

+

🔬 This is a nightly-only experimental API. (exact_size_is_empty)

Returns whether the iterator is empty. Read more

+

impl<'a, T> Iterator for Keys<'a, T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Debug for Keys<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for Keys<'a, T> where
    T: Sync

impl<'a, T> Sync for Keys<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.LanguageTag.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.LanguageTag.html new file mode 100644 index 0000000..b497ad6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.LanguageTag.html @@ -0,0 +1,127 @@ +actix_web::http::header::LanguageTag - Rust

Struct actix_web::http::header::LanguageTag[]

pub struct LanguageTag {
+    pub language: Option<String>,
+    pub extlangs: Vec<String>,
+    pub script: Option<String>,
+    pub region: Option<String>,
+    pub variants: Vec<String>,
+    pub extensions: BTreeMap<u8, Vec<String>>,
+    pub privateuse: Vec<String>,
+}

A language tag as described in BCP47.

+

Language tags are used to help identify languages, whether spoken, +written, signed, or otherwise signaled, for the purpose of +communication. This includes constructed and artificial languages +but excludes languages not intended primarily for human +communication, such as programming languages.

+

+ Fields

+ +

Language subtags are used to indicate the language, ignoring all +other aspects such as script, region or spefic invariants.

+
+ +

Extended language subtags are used to identify certain specially +selected languages that, for various historical and compatibility +reasons, are closely identified with or tagged using an existing +primary language subtag.

+
+ +

Script subtags are used to indicate the script or writing system +variations that distinguish the written forms of a language or its +dialects.

+
+ +

Region subtags are used to indicate linguistic variations associated +with or appropriate to a specific country, territory, or region. +Typically, a region subtag is used to indicate variations such as +regional dialects or usage, or region-specific spelling conventions. +It can also be used to indicate that content is expressed in a way +that is appropriate for use throughout a region, for instance, +Spanish content tailored to be useful throughout Latin America.

+
+ +

Variant subtags are used to indicate additional, well-recognized +variations that define a language or its dialects that are not +covered by other available subtags.

+
+ +

Extensions provide a mechanism for extending language tags for use in +various applications. They are intended to identify information that +is commonly used in association with languages or language tags but +that is not part of language identification.

+
+ +

Private use subtags are used to indicate distinctions in language +that are important in a given context by private agreement.

+
+

+ Methods +

+

impl LanguageTag

Matches language tags. The first language acts as a language range, the second one is used +as a normal language tag. None fields in the language range are ignored. If the language +tag has more extlangs than the range these extlangs are ignored. Matches are +case-insensitive. * in language ranges are represented using None values. The language +range * that matches language tags is created by the default language tag: +let wildcard: LanguageTag = Default::default();.

+

For example the range en-GB matches only en-GB and en-Arab-GB but not en. +The range en matches all language tags starting with en including en, en-GB, +en-Arab and en-Arab-GB.

+

Panics

+

If the language range has extensions or private use tags.

+

Examples

+
+let range_italian = langtag!(it);
+let tag_german = langtag!(de);
+let tag_italian_switzerland = langtag!(it;;;CH);
+assert!(!range_italian.matches(&tag_german));
+assert!(range_italian.matches(&tag_italian_switzerland));
+
+let range_spanish_brazil = langtag!(es;;;BR);
+let tag_spanish = langtag!(es);
+assert!(!range_spanish_brazil.matches(&tag_spanish));
+

Checks if it is a language range, meaning that there are no extension and privateuse tags.

+

Returns the canonical version of the language tag.

+

It currently applies the following steps:

+
    +
  • Grandfathered tags are replaced with the canonical version if possible.
  • +
  • Extension languages are promoted to primary language.
  • +
  • Deprecated languages are replaced with modern equivalents.
  • +
  • Deprecated regions are replaced with new country names.
  • +
  • The heploc variant is replaced with alalc97.
  • +
+

The returned language tags may not be completly canonical and they are +not validated.

+
+

+ Trait Implementations +

+

impl Display for LanguageTag

Formats the value using the given formatter. Read more

+

impl Default for LanguageTag

Returns the "default value" for a type. Read more

+

impl Eq for LanguageTag

impl PartialEq<LanguageTag> for LanguageTag

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl FromStr for LanguageTag

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl Clone for LanguageTag

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for LanguageTag

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for LanguageTag

impl Sync for LanguageTag

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.OccupiedEntry.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.OccupiedEntry.html new file mode 100644 index 0000000..c0a8c97 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.OccupiedEntry.html @@ -0,0 +1,199 @@ +actix_web::http::header::OccupiedEntry - Rust

Struct actix_web::http::header::OccupiedEntry[][src]

pub struct OccupiedEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single occupied location in a HeaderMap.

+

This struct is returned as part of the Entry enum.

+
+

+ Methods +

+

impl<'a, T> OccupiedEntry<'a, T>
[src]

Returns a reference to the entry's key.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+
+if let Entry::Occupied(e) = map.entry("host").unwrap() {
+    assert_eq!("host", e.key());
+}
+

Important traits for &'a mut R

Get a reference to the first value in the entry.

+

Values are stored in insertion order.

+

Panics

+

get panics if there are no values associated with the entry.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "hello.world".parse().unwrap());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    assert_eq!(e.get(), &"hello.world");
+
+    e.append("hello.earth".parse().unwrap());
+
+    assert_eq!(e.get(), &"hello.world");
+}
+

Important traits for &'a mut R

Get a mutable reference to the first value in the entry.

+

Values are stored in insertion order.

+

Panics

+

get_mut panics if there are no values associated with the entry.

+

Examples

+
+let mut map = HeaderMap::default();
+map.insert(HOST, "hello.world".to_string());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    e.get_mut().push_str("-2");
+    assert_eq!(e.get(), &"hello.world-2");
+}
+

Important traits for &'a mut R

Converts the OccupiedEntry into a mutable reference to the first +value.

+

The lifetime of the returned reference is bound to the original map.

+

Panics

+

into_mut panics if there are no values associated with the entry.

+

Examples

+
+let mut map = HeaderMap::default();
+map.insert(HOST, "hello.world".to_string());
+map.append(HOST, "hello.earth".to_string());
+
+if let Entry::Occupied(e) = map.entry("host").unwrap() {
+    e.into_mut().push_str("-2");
+}
+
+assert_eq!("hello.world-2", map["host"]);
+

Sets the value of the entry.

+

All previous values associated with the entry are removed and the first +one is returned. See insert_mult for an API that returns all values.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "hello.world".parse().unwrap());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    let mut prev = e.insert("earth".parse().unwrap());
+    assert_eq!("hello.world", prev);
+}
+
+assert_eq!("earth", map["host"]);
+

Important traits for ValueDrain<'a, T>

Sets the value of the entry.

+

This function does the same as insert except it returns an iterator +that yields all values previously associated with the key.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+map.append(HOST, "world2".parse().unwrap());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    let mut prev = e.insert_mult("earth".parse().unwrap());
+    assert_eq!("world", prev.next().unwrap());
+    assert_eq!("world2", prev.next().unwrap());
+    assert!(prev.next().is_none());
+}
+
+assert_eq!("earth", map["host"]);
+

Insert the value into the entry.

+

The new value is appended to the end of the entry's value list. All +previous values associated with the entry are retained.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    e.append("earth".parse().unwrap());
+}
+
+let values = map.get_all("host");
+let mut i = values.iter();
+assert_eq!("world", *i.next().unwrap());
+assert_eq!("earth", *i.next().unwrap());
+

Remove the entry from the map.

+

All values associated with the entry are removed and the first one is +returned. See remove_entry_mult for an API that returns all values.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+
+if let Entry::Occupied(e) = map.entry("host").unwrap() {
+    let mut prev = e.remove();
+    assert_eq!("world", prev);
+}
+
+assert!(!map.contains_key("host"));
+

Remove the entry from the map.

+

The key and all values associated with the entry are removed and the +first one is returned. See remove_entry_mult for an API that returns +all values.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+
+if let Entry::Occupied(e) = map.entry("host").unwrap() {
+    let (key, mut prev) = e.remove_entry();
+    assert_eq!("host", key.as_str());
+    assert_eq!("world", prev);
+}
+
+assert!(!map.contains_key("host"));
+

Remove the entry from the map.

+

The key and all values associated with the entry are removed and +returned.

+

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

+

Values are iterated in insertion order.

+

Examples

+
+let mut map = HeaderMap::new();
+map.insert(HOST, "world".parse().unwrap());
+map.append(HOST, "earth".parse().unwrap());
+
+if let Entry::Occupied(e) = map.entry("host").unwrap() {
+    let mut iter = e.iter();
+    assert_eq!(&"world", iter.next().unwrap());
+    assert_eq!(&"earth", iter.next().unwrap());
+    assert!(iter.next().is_none());
+}
+

Important traits for ValueIterMut<'a, T>

Returns an iterator mutably visiting all values associated with the +entry.

+

Values are iterated in insertion order.

+

Examples

+
+let mut map = HeaderMap::default();
+map.insert(HOST, "world".to_string());
+map.append(HOST, "earth".to_string());
+
+if let Entry::Occupied(mut e) = map.entry("host").unwrap() {
+    for e in e.iter_mut() {
+        e.push_str("-boop");
+    }
+}
+
+let mut values = map.get_all("host");
+let mut i = values.iter();
+assert_eq!(&"world-boop", i.next().unwrap());
+assert_eq!(&"earth-boop", i.next().unwrap());
+
+

+ Trait Implementations +

+

impl<'a, 'b, T> IntoIterator for &'b OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, 'b, T> IntoIterator for &'b mut OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> IntoIterator for OccupiedEntry<'a, T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> Debug for OccupiedEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for OccupiedEntry<'a, T> where
    T: Send

impl<'a, T> Sync for OccupiedEntry<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ToStrError.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ToStrError.html new file mode 100644 index 0000000..db8bd5e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ToStrError.html @@ -0,0 +1,17 @@ +actix_web::http::header::ToStrError - Rust

Struct actix_web::http::header::ToStrError[][src]

pub struct ToStrError { /* fields omitted */ }

A possible error when converting a HeaderValue to a string representation.

+

Header field values may contain opaque bytes, in which case it is not +possible to represent the value as a string.

+
+

+ Trait Implementations +

+

impl Display for ToStrError
[src]

Formats the value using the given formatter. Read more

+

impl Error for ToStrError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for ToStrError
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ToStrError

impl Sync for ToStrError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.VacantEntry.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.VacantEntry.html new file mode 100644 index 0000000..fad8a61 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.VacantEntry.html @@ -0,0 +1,56 @@ +actix_web::http::header::VacantEntry - Rust

Struct actix_web::http::header::VacantEntry[][src]

pub struct VacantEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single empty location in a HeaderMap.

+

This struct is returned as part of the Entry enum.

+
+

+ Methods +

+

impl<'a, T> VacantEntry<'a, T>
[src]

Returns a reference to the entry's key

+

Examples

+
+let mut map = HeaderMap::new();
+
+assert_eq!(map.entry("x-hello").unwrap().key().as_str(), "x-hello");
+

Take ownership of the key

+

Examples

+
+let mut map = HeaderMap::new();
+
+if let Entry::Vacant(v) = map.entry("x-hello").unwrap() {
+    assert_eq!(v.into_key().as_str(), "x-hello");
+}
+

Important traits for &'a mut R

Insert the value into the entry.

+

The value will be associated with this entry's key. A mutable reference +to the inserted value will be returned.

+

Examples

+
+let mut map = HeaderMap::new();
+
+if let Entry::Vacant(v) = map.entry("x-hello").unwrap() {
+    v.insert("world".parse().unwrap());
+}
+
+assert_eq!(map["x-hello"], "world");
+

Insert the value into the entry.

+

The value will be associated with this entry's key. The new +OccupiedEntry is returned, allowing for further manipulation.

+

Examples

+
+let mut map = HeaderMap::new();
+
+if let Entry::Vacant(v) = map.entry("x-hello").unwrap() {
+    let mut e = v.insert_entry("world".parse().unwrap());
+    e.insert("world2".parse().unwrap());
+}
+
+assert_eq!(map["x-hello"], "world2");
+
+

+ Trait Implementations +

+

impl<'a, T> Debug for VacantEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for VacantEntry<'a, T> where
    T: Send

impl<'a, T> Sync for VacantEntry<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueDrain.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueDrain.html new file mode 100644 index 0000000..eed0338 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueDrain.html @@ -0,0 +1,67 @@ +actix_web::http::header::ValueDrain - Rust

Struct actix_web::http::header::ValueDrain[][src]

pub struct ValueDrain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An drain iterator of all values associated with a single header name.

+
+

+ Trait Implementations +

+

impl<'a, T> Drop for ValueDrain<'a, T>
[src]

Executes the destructor for this type. Read more

+

impl<'a, T> Sync for ValueDrain<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for ValueDrain<'a, T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for ValueDrain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueDrain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIter.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIter.html new file mode 100644 index 0000000..291faed --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIter.html @@ -0,0 +1,75 @@ +actix_web::http::header::ValueIter - Rust

Struct actix_web::http::header::ValueIter[][src]

pub struct ValueIter<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator of all values associated with a single header name.

+
+

+ Trait Implementations +

+

impl<'a, T> Iterator for ValueIter<'a, T> where
    T: 'a, 
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> DoubleEndedIterator for ValueIter<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

+

This is the reverse version of [try_fold()]: it takes elements starting from the back of the iterator. Read more

+

An iterator method that reduces the iterator's elements to a single, final value, starting from the back. Read more

+

Searches for an element of an iterator from the back that satisfies a predicate. Read more

+

impl<'a, T> Debug for ValueIter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for ValueIter<'a, T> where
    T: Sync

impl<'a, T> Sync for ValueIter<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIterMut.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIterMut.html new file mode 100644 index 0000000..d371717 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.ValueIterMut.html @@ -0,0 +1,70 @@ +actix_web::http::header::ValueIterMut - Rust

Struct actix_web::http::header::ValueIterMut[][src]

pub struct ValueIterMut<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A mutable iterator of all values associated with a single header name.

+
+

+ Trait Implementations +

+

impl<'a, T> Sync for ValueIterMut<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> DoubleEndedIterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

+

This is the reverse version of [try_fold()]: it takes elements starting from the back of the iterator. Read more

+

An iterator method that reduces the iterator's elements to a single, final value, starting from the back. Read more

+

Searches for an element of an iterator from the back that satisfies a predicate. Read more

+

impl<'a, T> Send for ValueIterMut<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueIterMut<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/struct.Values.html b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Values.html new file mode 100644 index 0000000..9fb5b51 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/struct.Values.html @@ -0,0 +1,72 @@ +actix_web::http::header::Values - Rust

Struct actix_web::http::header::Values[][src]

pub struct Values<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

HeaderMap value iterator.

+

Each value contained in the HeaderMap will be yielded.

+
+

+ Trait Implementations +

+

impl<'a, T> Iterator for Values<'a, T>
[src]

+

The type of the elements being iterated over.

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+

Returns the nth element of the iterator. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+

Applies function to the elements of iterator and returns the first non-none result. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Debug for Values<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'a, T> Send for Values<'a, T> where
    T: Sync

impl<'a, T> Sync for Values<'a, T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/trait.AsHeaderName.html b/static/api/actix-web/0.7.2/actix_web/http/header/trait.AsHeaderName.html new file mode 100644 index 0000000..74072f7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/trait.AsHeaderName.html @@ -0,0 +1,16 @@ +actix_web::http::header::AsHeaderName - Rust

Trait actix_web::http::header::AsHeaderName[][src]

pub trait AsHeaderName: Sealed { }

A marker trait used to identify values that can be used as search keys +to a HeaderMap.

+
+

+ Implementations on Foreign Types +

+

impl<'a> AsHeaderName for &'a String
[src]

impl<'a> AsHeaderName for &'a str
[src]

impl AsHeaderName for String
[src]

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/header/trait.IntoHeaderName.html b/static/api/actix-web/0.7.2/actix_web/http/header/trait.IntoHeaderName.html new file mode 100644 index 0000000..7568c5a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/header/trait.IntoHeaderName.html @@ -0,0 +1,16 @@ +actix_web::http::header::IntoHeaderName - Rust

Trait actix_web::http::header::IntoHeaderName[][src]

pub trait IntoHeaderName: Sealed { }

A marker trait used to identify values that can be used as insert keys +to a HeaderMap.

+
+

+ Implementations on Foreign Types +

+

impl IntoHeaderName for &'static str
[src]

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/index.html b/static/api/actix-web/0.7.2/actix_web/http/index.html new file mode 100644 index 0000000..3dad790 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/index.html @@ -0,0 +1,77 @@ +actix_web::http - Rust

Module actix_web::http[][src]

Various HTTP related types

+

Modules

+ + + + +
header +

Various http headers

+ +

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + +
Cookie +

Representation of an HTTP cookie.

+ +
CookieBuilder +

Structure that follows the builder pattern for building Cookie structs.

+ +
Method +

The Request Method (VERB)

+ +
NormalizePath +

Path normalization helper

+ +
StatusCode +

An HTTP status code (status-code in RFC 7230 et al.).

+ +
Version +

Represents a version of the HTTP spec.

+ +

Enums

+ + + + + + + + +
ConnectionType +

Represents various types of connection

+ +
ContentEncoding +

Represents supported types of content encodings

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/http/sidebar-items.js new file mode 100644 index 0000000..89f94ba --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ConnectionType","Represents various types of connection"],["ContentEncoding","Represents supported types of content encodings"]],"mod":[["header","Various http headers"]],"struct":[["Cookie","Representation of an HTTP cookie."],["CookieBuilder","Structure that follows the builder pattern for building `Cookie` structs."],["Method","The Request Method (VERB)"],["NormalizePath","Path normalization helper"],["StatusCode","An HTTP status code (`status-code` in RFC 7230 et al.)."],["Version","Represents a version of the HTTP spec."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.Cookie.html b/static/api/actix-web/0.7.2/actix_web/http/struct.Cookie.html new file mode 100644 index 0000000..8a39101 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.Cookie.html @@ -0,0 +1,437 @@ +actix_web::http::Cookie - Rust

Struct actix_web::http::Cookie[][src]

pub struct Cookie<'c> { /* fields omitted */ }

Representation of an HTTP cookie.

+

Constructing a Cookie

+

To construct a cookie with only a name/value, use the new +method:

+ +
+use cookie::Cookie;
+
+let cookie = Cookie::new("name", "value");
+assert_eq!(&cookie.to_string(), "name=value");
+

To construct more elaborate cookies, use the build method +and CookieBuilder methods:

+ +
+use cookie::Cookie;
+
+let cookie = Cookie::build("name", "value")
+    .domain("www.rust-lang.org")
+    .path("/")
+    .secure(true)
+    .http_only(true)
+    .finish();
+
+

+ Methods +

+

impl Cookie<'static>
[src]

Creates a new Cookie with the given name and value.

+

Example

+
+use cookie::Cookie;
+
+let cookie = Cookie::new("name", "value");
+assert_eq!(cookie.name_value(), ("name", "value"));
+

Creates a new Cookie with the given name and an empty value.

+

Example

+
+use cookie::Cookie;
+
+let cookie = Cookie::named("name");
+assert_eq!(cookie.name(), "name");
+assert!(cookie.value().is_empty());
+

Creates a new CookieBuilder instance from the given key and value +strings.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar").finish();
+assert_eq!(c.name_value(), ("foo", "bar"));
+

impl<'c> Cookie<'c>
[src]

Parses a Cookie from the given HTTP cookie header value string. Does +not perform any percent-decoding.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("foo=bar%20baz; HttpOnly").unwrap();
+assert_eq!(c.name_value(), ("foo", "bar%20baz"));
+assert_eq!(c.http_only(), Some(true));
+

Parses a Cookie from the given HTTP cookie header value string where +the name and value fields are percent-encoded. Percent-decodes the +name/value fields.

+

This API requires the percent-encode feature to be enabled on this +crate.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse_encoded("foo=bar%20baz; HttpOnly").unwrap();
+assert_eq!(c.name_value(), ("foo", "bar baz"));
+assert_eq!(c.http_only(), Some(true));
+

Wraps self in an EncodedCookie: a cost-free wrapper around Cookie +whose Display implementation percent-encodes the name and value of the +wrapped Cookie.

+

This method is only available when the percent-encode feature is +enabled.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("my name", "this; value?");
+assert_eq!(&c.encoded().to_string(), "my%20name=this%3B%20value%3F");
+

Converts self into a Cookie with a static lifetime. This method +results in at most one allocation.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::new("a", "b");
+let owned_cookie = c.into_owned();
+assert_eq!(owned_cookie.name_value(), ("a", "b"));
+

Returns the name of self.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::new("name", "value");
+assert_eq!(c.name(), "name");
+

Returns the value of self.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::new("name", "value");
+assert_eq!(c.value(), "value");
+

Returns the name and value of self as a tuple of (name, value).

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::new("name", "value");
+assert_eq!(c.name_value(), ("name", "value"));
+

Returns whether this cookie was marked HttpOnly or not. Returns +Some(true) when the cookie was explicitly set (manually or parsed) as +HttpOnly, Some(false) when http_only was manually set to false, +and None otherwise.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value; httponly").unwrap();
+assert_eq!(c.http_only(), Some(true));
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.http_only(), None);
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.http_only(), None);
+
+// An explicitly set "false" value.
+c.set_http_only(false);
+assert_eq!(c.http_only(), Some(false));
+
+// An explicitly set "true" value.
+c.set_http_only(true);
+assert_eq!(c.http_only(), Some(true));
+

Returns whether this cookie was marked Secure or not. Returns +Some(true) when the cookie was explicitly set (manually or parsed) as +Secure, Some(false) when secure was manually set to false, and +None otherwise.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value; Secure").unwrap();
+assert_eq!(c.secure(), Some(true));
+
+let mut c = Cookie::parse("name=value").unwrap();
+assert_eq!(c.secure(), None);
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.secure(), None);
+
+// An explicitly set "false" value.
+c.set_secure(false);
+assert_eq!(c.secure(), Some(false));
+
+// An explicitly set "true" value.
+c.set_secure(true);
+assert_eq!(c.secure(), Some(true));
+

Returns the SameSite attribute of this cookie if one was specified.

+

Example

+
+use cookie::{Cookie, SameSite};
+
+let c = Cookie::parse("name=value; SameSite=Lax").unwrap();
+assert_eq!(c.same_site(), Some(SameSite::Lax));
+

Returns the specified max-age of the cookie if one was specified.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value").unwrap();
+assert_eq!(c.max_age(), None);
+
+let c = Cookie::parse("name=value; Max-Age=3600").unwrap();
+assert_eq!(c.max_age().map(|age| age.num_hours()), Some(1));
+

Returns the Path of the cookie if one was specified.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value").unwrap();
+assert_eq!(c.path(), None);
+
+let c = Cookie::parse("name=value; Path=/").unwrap();
+assert_eq!(c.path(), Some("/"));
+
+let c = Cookie::parse("name=value; path=/sub").unwrap();
+assert_eq!(c.path(), Some("/sub"));
+

Returns the Domain of the cookie if one was specified.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value").unwrap();
+assert_eq!(c.domain(), None);
+
+let c = Cookie::parse("name=value; Domain=crates.io").unwrap();
+assert_eq!(c.domain(), Some("crates.io"));
+

Returns the Expires time of the cookie if one was specified.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::parse("name=value").unwrap();
+assert_eq!(c.expires(), None);
+
+let expire_time = "Wed, 21 Oct 2017 07:28:00 GMT";
+let cookie_str = format!("name=value; Expires={}", expire_time);
+let c = Cookie::parse(cookie_str).unwrap();
+assert_eq!(c.expires().map(|t| t.tm_year), Some(117));
+

Sets the name of self to name.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.name(), "name");
+
+c.set_name("foo");
+assert_eq!(c.name(), "foo");
+

Sets the value of self to value.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.value(), "value");
+
+c.set_value("bar");
+assert_eq!(c.value(), "bar");
+

Sets the value of http_only in self to value.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.http_only(), None);
+
+c.set_http_only(true);
+assert_eq!(c.http_only(), Some(true));
+

Sets the value of secure in self to value.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.secure(), None);
+
+c.set_secure(true);
+assert_eq!(c.secure(), Some(true));
+

Sets the value of same_site in self to value.

+

Example

+
+use cookie::{Cookie, SameSite};
+
+let mut c = Cookie::new("name", "value");
+assert!(c.same_site().is_none());
+
+c.set_same_site(SameSite::Strict);
+assert_eq!(c.same_site(), Some(SameSite::Strict));
+

Sets the value of max_age in self to value.

+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+use time::Duration;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.max_age(), None);
+
+c.set_max_age(Duration::hours(10));
+assert_eq!(c.max_age(), Some(Duration::hours(10)));
+

Sets the path of self to path.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.path(), None);
+
+c.set_path("/");
+assert_eq!(c.path(), Some("/"));
+

Sets the domain of self to domain.

+

Example

+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.domain(), None);
+
+c.set_domain("rust-lang.org");
+assert_eq!(c.domain(), Some("rust-lang.org"));
+

Sets the expires field of self to time.

+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+
+let mut c = Cookie::new("name", "value");
+assert_eq!(c.expires(), None);
+
+let mut now = time::now();
+now.tm_year += 1;
+
+c.set_expires(now);
+assert!(c.expires().is_some())
+

Makes self a "permanent" cookie by extending its expiration and max +age 20 years into the future.

+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+use time::Duration;
+
+let mut c = Cookie::new("foo", "bar");
+assert!(c.expires().is_none());
+assert!(c.max_age().is_none());
+
+c.make_permanent();
+assert!(c.expires().is_some());
+assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
+

Returns the name of self as a string slice of the raw string self +was originally parsed from. If self was not originally parsed from a +raw string, returns None.

+

This method differs from name in that it returns a +string with the same lifetime as the originally parsed string. This +lifetime may outlive self. If a longer lifetime is not required, or +you're unsure if you need a longer lifetime, use name.

+

Example

+
+use cookie::Cookie;
+
+let cookie_string = format!("{}={}", "foo", "bar");
+
+// `c` will be dropped at the end of the scope, but `name` will live on
+let name = {
+    let c = Cookie::parse(cookie_string.as_str()).unwrap();
+    c.name_raw()
+};
+
+assert_eq!(name, Some("foo"));
+

Returns the value of self as a string slice of the raw string self +was originally parsed from. If self was not originally parsed from a +raw string, returns None.

+

This method differs from value in that it returns a +string with the same lifetime as the originally parsed string. This +lifetime may outlive self. If a longer lifetime is not required, or +you're unsure if you need a longer lifetime, use value.

+

Example

+
+use cookie::Cookie;
+
+let cookie_string = format!("{}={}", "foo", "bar");
+
+// `c` will be dropped at the end of the scope, but `value` will live on
+let value = {
+    let c = Cookie::parse(cookie_string.as_str()).unwrap();
+    c.value_raw()
+};
+
+assert_eq!(value, Some("bar"));
+

Returns the Path of self as a string slice of the raw string self +was originally parsed from. If self was not originally parsed from a +raw string, or if self doesn't contain a Path, or if the Path has +changed since parsing, returns None.

+

This method differs from path in that it returns a +string with the same lifetime as the originally parsed string. This +lifetime may outlive self. If a longer lifetime is not required, or +you're unsure if you need a longer lifetime, use path.

+

Example

+
+use cookie::Cookie;
+
+let cookie_string = format!("{}={}; Path=/", "foo", "bar");
+
+// `c` will be dropped at the end of the scope, but `path` will live on
+let path = {
+    let c = Cookie::parse(cookie_string.as_str()).unwrap();
+    c.path_raw()
+};
+
+assert_eq!(path, Some("/"));
+

Returns the Domain of self as a string slice of the raw string +self was originally parsed from. If self was not originally parsed +from a raw string, or if self doesn't contain a Domain, or if the +Domain has changed since parsing, returns None.

+

This method differs from domain in that it returns a +string with the same lifetime as the originally parsed string. This +lifetime may outlive self struct. If a longer lifetime is not +required, or you're unsure if you need a longer lifetime, use +domain.

+

Example

+
+use cookie::Cookie;
+
+let cookie_string = format!("{}={}; Domain=crates.io", "foo", "bar");
+
+//`c` will be dropped at the end of the scope, but `domain` will live on
+let domain = {
+    let c = Cookie::parse(cookie_string.as_str()).unwrap();
+    c.domain_raw()
+};
+
+assert_eq!(domain, Some("crates.io"));
+
+

+ Trait Implementations +

+

impl<'c> Display for Cookie<'c>
[src]

Formats the cookie self as a Set-Cookie header value.

+

Example

+
+use cookie::Cookie;
+
+let mut cookie = Cookie::build("foo", "bar")
+    .path("/")
+    .finish();
+
+assert_eq!(&cookie.to_string(), "foo=bar; Path=/");
+

impl<'a, 'b> PartialEq<Cookie<'b>> for Cookie<'a>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'c> Clone for Cookie<'c>
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl FromStr for Cookie<'static>
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl<'c> Debug for Cookie<'c>
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<'c> Send for Cookie<'c>

impl<'c> Sync for Cookie<'c>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.CookieBuilder.html b/static/api/actix-web/0.7.2/actix_web/http/struct.CookieBuilder.html new file mode 100644 index 0000000..ec46ad9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.CookieBuilder.html @@ -0,0 +1,149 @@ +actix_web::http::CookieBuilder - Rust

Struct actix_web::http::CookieBuilder[][src]

pub struct CookieBuilder { /* fields omitted */ }

Structure that follows the builder pattern for building Cookie structs.

+

To construct a cookie:

+
    +
  1. Call Cookie::build to start building.
  2. +
  3. Use any of the builder methods to set fields in the cookie.
  4. +
  5. Call finish to retrieve the built cookie.
  6. +
+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+use time::Duration;
+
+let cookie: Cookie = Cookie::build("name", "value")
+    .domain("www.rust-lang.org")
+    .path("/")
+    .secure(true)
+    .http_only(true)
+    .max_age(Duration::days(1))
+    .finish();
+
+

+ Methods +

+

impl CookieBuilder
[src]

Creates a new CookieBuilder instance from the given name and value.

+

This method is typically called indirectly via +Cookie::build.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar").finish();
+assert_eq!(c.name_value(), ("foo", "bar"));
+

Sets the expires field in the cookie being built.

+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .expires(time::now())
+    .finish();
+
+assert!(c.expires().is_some());
+

Sets the max_age field in the cookie being built.

+

Example

+
+extern crate time;
+use time::Duration;
+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .max_age(Duration::minutes(30))
+    .finish();
+
+assert_eq!(c.max_age(), Some(Duration::seconds(30 * 60)));
+

Sets the domain field in the cookie being built.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .domain("www.rust-lang.org")
+    .finish();
+
+assert_eq!(c.domain(), Some("www.rust-lang.org"));
+

Sets the path field in the cookie being built.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .path("/")
+    .finish();
+
+assert_eq!(c.path(), Some("/"));
+

Sets the secure field in the cookie being built.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .secure(true)
+    .finish();
+
+assert_eq!(c.secure(), Some(true));
+

Sets the http_only field in the cookie being built.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .http_only(true)
+    .finish();
+
+assert_eq!(c.http_only(), Some(true));
+

Sets the same_site field in the cookie being built.

+

Example

+
+use cookie::{Cookie, SameSite};
+
+let c = Cookie::build("foo", "bar")
+    .same_site(SameSite::Strict)
+    .finish();
+
+assert_eq!(c.same_site(), Some(SameSite::Strict));
+

Makes the cookie being built 'permanent' by extending its expiration and +max age 20 years into the future.

+

Example

+
+extern crate time;
+
+use cookie::Cookie;
+use time::Duration;
+
+let c = Cookie::build("foo", "bar")
+    .permanent()
+    .finish();
+
+assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
+

Finishes building and returns the built Cookie.

+

Example

+
+use cookie::Cookie;
+
+let c = Cookie::build("foo", "bar")
+    .domain("crates.io")
+    .path("/")
+    .finish();
+
+assert_eq!(c.name_value(), ("foo", "bar"));
+assert_eq!(c.domain(), Some("crates.io"));
+assert_eq!(c.path(), Some("/"));
+
+

+ Trait Implementations +

+

impl Clone for CookieBuilder
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for CookieBuilder
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for CookieBuilder

impl Sync for CookieBuilder

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.Method.html b/static/api/actix-web/0.7.2/actix_web/http/struct.Method.html new file mode 100644 index 0000000..bf8a7c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.Method.html @@ -0,0 +1,110 @@ +actix_web::http::Method - Rust

Struct actix_web::http::Method[][src]

pub struct Method(_);

The Request Method (VERB)

+

This type also contains constants for a number of common HTTP methods such +as GET, POST, etc.

+

Currently includes 8 variants representing the 8 methods defined in +RFC 7230, plus PATCH, +and an Extension variant for all extensions.

+

Examples

+
+use http::Method;
+
+assert_eq!(Method::GET, Method::from_bytes(b"GET").unwrap());
+assert!(Method::GET.is_idempotent());
+assert_eq!(Method::POST.as_str(), "POST");
+
+

+ Methods +

+

impl Method
[src]

+
+GET: Method = Method(Get)
+

GET

+

+
+POST: Method = Method(Post)
+

POST

+

+
+PUT: Method = Method(Put)
+

PUT

+

+
+DELETE: Method = Method(Delete)
+

DELETE

+

+
+HEAD: Method = Method(Head)
+

HEAD

+

+
+OPTIONS: Method = Method(Options)
+

OPTIONS

+

+
+CONNECT: Method = Method(Connect)
+

CONNECT

+

+
+PATCH: Method = Method(Patch)
+

PATCH

+

+
+TRACE: Method = Method(Trace)
+

TRACE

+

Converts a slice of bytes to an HTTP method.

+

Whether a method is considered "safe", meaning the request is +essentially read-only.

+

See the spec +for more words.

+

Whether a method is considered "idempotent", meaning the request has +the same result if executed multiple times.

+

See the spec for +more words.

+

Return a &str representation of the HTTP method

+
+

+ Trait Implementations +

+

impl Default for Method
[src]

Returns the "default value" for a type. Read more

+

impl Eq for Method
[src]

impl PartialEq<Method> for str
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<Method> for &'a Method
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<Method> for Method
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<str> for Method
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<&'a str> for Method
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<Method> for &'a str
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a> PartialEq<&'a Method> for Method
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for Method
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl FromStr for Method
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl Display for Method
[src]

Formats the value using the given formatter. Read more

+

impl AsRef<str> for Method
[src]

Performs the conversion.

+

impl Clone for Method
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<'a> HttpTryFrom<&'a [u8]> for Method
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a str> for Method
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<Method> for Method
[src]

+

Associated error with the conversion this implementation represents.

+

impl Debug for Method
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Method

impl Sync for Method

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.NormalizePath.html b/static/api/actix-web/0.7.2/actix_web/http/struct.NormalizePath.html new file mode 100644 index 0000000..b5943e2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.NormalizePath.html @@ -0,0 +1,50 @@ +actix_web::http::NormalizePath - Rust

Struct actix_web::http::NormalizePath[][src]

pub struct NormalizePath { /* fields omitted */ }

Path normalization helper

+

By normalizing it means:

+
    +
  • Add a trailing slash to the path.
  • +
  • Remove a trailing slash from the path.
  • +
  • Double slashes are replaced by one.
  • +
+

The handler returns as soon as it finds a path that resolves +correctly. The order if all enable is 1) merge, 3) both merge and append +and 3) append. If the path resolves with +at least one of those conditions, it will redirect to the new path.

+

If append is true append slash when needed. If a resource is +defined with trailing slash and the request comes without it, it will +append it automatically.

+

If merge is true, merge multiple consecutive slashes in the path into +one.

+

This handler designed to be use as a handler for application's default +resource.

+ +
+use actix_web::http::NormalizePath;
+
+fn main() {
+    let app = App::new()
+        .resource("/test/", |r| r.f(index))
+        .default_resource(|r| r.h(NormalizePath::default()))
+        .finish();
+}
+

In this example /test, /test/// will be redirected to /test/ url.

+
+

+ Methods +

+

impl NormalizePath
[src]

Create new NormalizePath instance

+
+

+ Trait Implementations +

+

impl Default for NormalizePath
[src]

Create default NormalizePath instance, append is set to true, +merge is set to true and redirect is set to +StatusCode::MOVED_PERMANENTLY

+

impl<S> Handler<S> for NormalizePath
[src]

+

The type of value that handler will return.

+

Handle request

+
+

+ Auto Trait Implementations +

+
+

impl Send for NormalizePath

impl Sync for NormalizePath

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.StatusCode.html b/static/api/actix-web/0.7.2/actix_web/http/struct.StatusCode.html new file mode 100644 index 0000000..9877217 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.StatusCode.html @@ -0,0 +1,413 @@ +actix_web::http::StatusCode - Rust

Struct actix_web::http::StatusCode[][src]

pub struct StatusCode(_);

An HTTP status code (status-code in RFC 7230 et al.).

+

This type contains constants for all common status codes. +It allows status codes in the range [100, 599].

+

IANA maintain the Hypertext Transfer Protocol (HTTP) Status Code +Registry which is +the source for this enum (with one exception, 418 I'm a teapot, which is +inexplicably not in the register).

+

Examples

+
+use http::StatusCode;
+
+assert_eq!(StatusCode::from_u16(200).unwrap(), StatusCode::OK);
+assert_eq!(StatusCode::NOT_FOUND.as_u16(), 404);
+assert!(StatusCode::OK.is_success());
+
+

+ Methods +

+

impl StatusCode
[src]

Converts a u16 to a status code.

+

The function validates the correctness of the supplied u16. It must be +greater or equal to 100 but less than 600.

+

Example

+
+use http::StatusCode;
+
+let ok = StatusCode::from_u16(200).unwrap();
+assert_eq!(ok, StatusCode::OK);
+
+let err = StatusCode::from_u16(99);
+assert!(err.is_err());
+

Converts a &u8 to a status code

+

Returns the u16 corresponding to this StatusCode.

+

Note

+

This is the same as the From<StatusCode> implementation, but +included as an inherent method because that implementation doesn't +appear in rustdocs, as well as a way to force the type instead of +relying on inference.

+

Example

+
+let status = http::StatusCode::OK;
+assert_eq!(status.as_u16(), 200);
+

Returns a &str representation of the StatusCode

+

The return value only includes a numerical representation of the +status code. The canonical reason is not included.

+

Example

+
+let status = http::StatusCode::OK;
+assert_eq!(status.as_str(), "200");
+

Get the standardised reason-phrase for this status code.

+

This is mostly here for servers writing responses, but could potentially have application +at other times.

+

The reason phrase is defined as being exclusively for human readers. You should avoid +deriving any meaning from it at all costs.

+

Bear in mind also that in HTTP/2.0 the reason phrase is abolished from transmission, and so +this canonical reason phrase really is the only reason phrase you’ll find.

+

Example

+
+let status = http::StatusCode::OK;
+assert_eq!(status.canonical_reason(), Some("OK"));
+

Check if status is within 100-199.

+

Check if status is within 200-299.

+

Check if status is within 300-399.

+

Check if status is within 400-499.

+

Check if status is within 500-599.

+

impl StatusCode
[src]

+
+CONTINUE: StatusCode = StatusCode(100)
+

100 Continue +[RFC7231, Section 6.2.1]

+

+
+SWITCHING_PROTOCOLS: StatusCode = StatusCode(101)
+

101 Switching Protocols +[RFC7231, Section 6.2.2]

+

+
+PROCESSING: StatusCode = StatusCode(102)
+

102 Processing +[RFC2518]

+

+
+OK: StatusCode = StatusCode(200)
+

200 OK +[RFC7231, Section 6.3.1]

+

+
+CREATED: StatusCode = StatusCode(201)
+

201 Created +[RFC7231, Section 6.3.2]

+

+
+ACCEPTED: StatusCode = StatusCode(202)
+

202 Accepted +[RFC7231, Section 6.3.3]

+

+
+NON_AUTHORITATIVE_INFORMATION: StatusCode = StatusCode(203)
+

203 Non-Authoritative Information +[RFC7231, Section 6.3.4]

+

+
+NO_CONTENT: StatusCode = StatusCode(204)
+

204 No Content +[RFC7231, Section 6.3.5]

+

+
+RESET_CONTENT: StatusCode = StatusCode(205)
+

205 Reset Content +[RFC7231, Section 6.3.6]

+

+
+PARTIAL_CONTENT: StatusCode = StatusCode(206)
+

206 Partial Content +[RFC7233, Section 4.1]

+

+
+MULTI_STATUS: StatusCode = StatusCode(207)
+

207 Multi-Status +[RFC4918]

+

+
+ALREADY_REPORTED: StatusCode = StatusCode(208)
+

208 Already Reported +[RFC5842]

+

+
+IM_USED: StatusCode = StatusCode(226)
+

226 IM Used +[RFC3229]

+

+
+MULTIPLE_CHOICES: StatusCode = StatusCode(300)
+

300 Multiple Choices +[RFC7231, Section 6.4.1]

+

+
+MOVED_PERMANENTLY: StatusCode = StatusCode(301)
+

301 Moved Permanently +[RFC7231, Section 6.4.2]

+

+
+FOUND: StatusCode = StatusCode(302)
+

302 Found +[RFC7231, Section 6.4.3]

+

+
+SEE_OTHER: StatusCode = StatusCode(303)
+

303 See Other +[RFC7231, Section 6.4.4]

+

+
+NOT_MODIFIED: StatusCode = StatusCode(304)
+

304 Not Modified +[RFC7232, Section 4.1]

+

+
+USE_PROXY: StatusCode = StatusCode(305)
+

305 Use Proxy +[RFC7231, Section 6.4.5]

+

+
+TEMPORARY_REDIRECT: StatusCode = StatusCode(307)
+

307 Temporary Redirect +[RFC7231, Section 6.4.7]

+

+
+PERMANENT_REDIRECT: StatusCode = StatusCode(308)
+

308 Permanent Redirect +[RFC7238]

+

+
+BAD_REQUEST: StatusCode = StatusCode(400)
+

400 Bad Request +[RFC7231, Section 6.5.1]

+

+
+UNAUTHORIZED: StatusCode = StatusCode(401)
+

401 Unauthorized +[RFC7235, Section 3.1]

+

+
+PAYMENT_REQUIRED: StatusCode = StatusCode(402)
+

402 Payment Required +[RFC7231, Section 6.5.2]

+

+
+FORBIDDEN: StatusCode = StatusCode(403)
+

403 Forbidden +[RFC7231, Section 6.5.3]

+

+
+NOT_FOUND: StatusCode = StatusCode(404)
+

404 Not Found +[RFC7231, Section 6.5.4]

+

+
+METHOD_NOT_ALLOWED: StatusCode = StatusCode(405)
+

405 Method Not Allowed +[RFC7231, Section 6.5.5]

+

+
+NOT_ACCEPTABLE: StatusCode = StatusCode(406)
+

406 Not Acceptable +[RFC7231, Section 6.5.6]

+

+
+PROXY_AUTHENTICATION_REQUIRED: StatusCode = StatusCode(407)
+

407 Proxy Authentication Required +[RFC7235, Section 3.2]

+

+
+REQUEST_TIMEOUT: StatusCode = StatusCode(408)
+

408 Request Timeout +[RFC7231, Section 6.5.7]

+

+
+CONFLICT: StatusCode = StatusCode(409)
+

409 Conflict +[RFC7231, Section 6.5.8]

+

+
+GONE: StatusCode = StatusCode(410)
+

410 Gone +[RFC7231, Section 6.5.9]

+

+
+LENGTH_REQUIRED: StatusCode = StatusCode(411)
+

411 Length Required +[RFC7231, Section 6.5.10]

+

+
+PRECONDITION_FAILED: StatusCode = StatusCode(412)
+

412 Precondition Failed +[RFC7232, Section 4.2]

+

+
+PAYLOAD_TOO_LARGE: StatusCode = StatusCode(413)
+

413 Payload Too Large +[RFC7231, Section 6.5.11]

+

+
+URI_TOO_LONG: StatusCode = StatusCode(414)
+

414 URI Too Long +[RFC7231, Section 6.5.12]

+

+
+UNSUPPORTED_MEDIA_TYPE: StatusCode = StatusCode(415)
+

415 Unsupported Media Type +[RFC7231, Section 6.5.13]

+

+
+RANGE_NOT_SATISFIABLE: StatusCode = StatusCode(416)
+

416 Range Not Satisfiable +[RFC7233, Section 4.4]

+

+
+EXPECTATION_FAILED: StatusCode = StatusCode(417)
+

417 Expectation Failed +[RFC7231, Section 6.5.14]

+

+
+IM_A_TEAPOT: StatusCode = StatusCode(418)
+

418 I'm a teapot +[curiously not registered by IANA but RFC2324]

+

+
+MISDIRECTED_REQUEST: StatusCode = StatusCode(421)
+

421 Misdirected Request +RFC7540, Section 9.1.2

+

+
+UNPROCESSABLE_ENTITY: StatusCode = StatusCode(422)
+

422 Unprocessable Entity +[RFC4918]

+

+
+LOCKED: StatusCode = StatusCode(423)
+

423 Locked +[RFC4918]

+

+
+FAILED_DEPENDENCY: StatusCode = StatusCode(424)
+

424 Failed Dependency +[RFC4918]

+

+
+UPGRADE_REQUIRED: StatusCode = StatusCode(426)
+

426 Upgrade Required +[RFC7231, Section 6.5.15]

+

+
+PRECONDITION_REQUIRED: StatusCode = StatusCode(428)
+

428 Precondition Required +[RFC6585]

+

+
+TOO_MANY_REQUESTS: StatusCode = StatusCode(429)
+

429 Too Many Requests +[RFC6585]

+

+
+REQUEST_HEADER_FIELDS_TOO_LARGE: StatusCode = StatusCode(431)
+

431 Request Header Fields Too Large +[RFC6585]

+
+
+UNAVAILABLE_FOR_LEGAL_REASONS: StatusCode = StatusCode(451)
+

451 Unavailable For Legal Reasons +[RFC7725]

+

+
+INTERNAL_SERVER_ERROR: StatusCode = StatusCode(500)
+

500 Internal Server Error +[RFC7231, Section 6.6.1]

+

+
+NOT_IMPLEMENTED: StatusCode = StatusCode(501)
+

501 Not Implemented +[RFC7231, Section 6.6.2]

+

+
+BAD_GATEWAY: StatusCode = StatusCode(502)
+

502 Bad Gateway +[RFC7231, Section 6.6.3]

+

+
+SERVICE_UNAVAILABLE: StatusCode = StatusCode(503)
+

503 Service Unavailable +[RFC7231, Section 6.6.4]

+

+
+GATEWAY_TIMEOUT: StatusCode = StatusCode(504)
+

504 Gateway Timeout +[RFC7231, Section 6.6.5]

+

+
+HTTP_VERSION_NOT_SUPPORTED: StatusCode = StatusCode(505)
+

505 HTTP Version Not Supported +[RFC7231, Section 6.6.6]

+

+
+VARIANT_ALSO_NEGOTIATES: StatusCode = StatusCode(506)
+

506 Variant Also Negotiates +[RFC2295]

+

+
+INSUFFICIENT_STORAGE: StatusCode = StatusCode(507)
+

507 Insufficient Storage +[RFC4918]

+

+
+LOOP_DETECTED: StatusCode = StatusCode(508)
+

508 Loop Detected +[RFC5842]

+

+
+NOT_EXTENDED: StatusCode = StatusCode(510)
+

510 Not Extended +[RFC2774]

+

+
+NETWORK_AUTHENTICATION_REQUIRED: StatusCode = StatusCode(511)
+

511 Network Authentication Required +[RFC6585]

+
+

+ Trait Implementations +

+

impl Default for StatusCode
[src]

Returns the "default value" for a type. Read more

+

impl Eq for StatusCode
[src]

impl PartialEq<StatusCode> for StatusCode
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<StatusCode> for u16
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl PartialEq<u16> for StatusCode
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for StatusCode
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl FromStr for StatusCode
[src]

+

The associated error which can be returned from parsing.

+

Parses a string s to return a value of this type. Read more

+

impl Ord for StatusCode
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl PartialOrd<StatusCode> for StatusCode
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl Display for StatusCode
[src]

Formats the status code, including the canonical reason.

+

Example

+
+assert_eq!(format!("{}", StatusCode::OK), "200 OK");
+

Formats the value using the given formatter. Read more

+

impl From<StatusCode> for u16
[src]

Performs the conversion.

+

impl Copy for StatusCode
[src]

impl Clone for StatusCode
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl HttpTryFrom<StatusCode> for StatusCode
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a [u8]> for StatusCode
[src]

+

Associated error with the conversion this implementation represents.

+

impl<'a> HttpTryFrom<&'a str> for StatusCode
[src]

+

Associated error with the conversion this implementation represents.

+

impl HttpTryFrom<u16> for StatusCode
[src]

+

Associated error with the conversion this implementation represents.

+

impl Debug for StatusCode
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for StatusCode

impl Sync for StatusCode

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/http/struct.Version.html b/static/api/actix-web/0.7.2/actix_web/http/struct.Version.html new file mode 100644 index 0000000..e966d2f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/http/struct.Version.html @@ -0,0 +1,47 @@ +actix_web::http::Version - Rust

Struct actix_web::http::Version[][src]

pub struct Version(_);

Represents a version of the HTTP spec.

+
+

+ Methods +

+

impl Version
[src]

+
+HTTP_09: Version = Version(Http::Http09)
+

HTTP/0.9

+

+
+HTTP_10: Version = Version(Http::Http10)
+

HTTP/1.0

+

+
+HTTP_11: Version = Version(Http::Http11)
+

HTTP/1.1

+

+
+HTTP_2: Version = Version(Http::H2)
+

HTTP/2.0

+
+

+ Trait Implementations +

+

impl Default for Version
[src]

Returns the "default value" for a type. Read more

+

impl Eq for Version
[src]

impl PartialEq<Version> for Version
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for Version
[src]

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl Ord for Version
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl PartialOrd<Version> for Version
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl Copy for Version
[src]

impl Clone for Version
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for Version
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Version

impl Sync for Version

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/HttpMessage.t.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/HttpMessage.t.html new file mode 100644 index 0000000..8eb5be9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/HttpMessage.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.HttpMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/MessageBody.t.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/MessageBody.t.html new file mode 100644 index 0000000..87d8a8f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/MessageBody.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MessageBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/UrlEncoded.t.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/UrlEncoded.t.html new file mode 100644 index 0000000..f1d585a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/UrlEncoded.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.UrlEncoded.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.MessageBody.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.MessageBody.html new file mode 100644 index 0000000..c394b26 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.MessageBody.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.MessageBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.UrlEncoded.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.UrlEncoded.html new file mode 100644 index 0000000..7f5a703 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/struct.UrlEncoded.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.UrlEncoded.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpmessage/trait.HttpMessage.html b/static/api/actix-web/0.7.2/actix_web/httpmessage/trait.HttpMessage.html new file mode 100644 index 0000000..b045b11 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpmessage/trait.HttpMessage.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/trait.HttpMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httprequest/HttpRequest.t.html b/static/api/actix-web/0.7.2/actix_web/httprequest/HttpRequest.t.html new file mode 100644 index 0000000..140a78b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httprequest/HttpRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httprequest/struct.HttpRequest.html b/static/api/actix-web/0.7.2/actix_web/httprequest/struct.HttpRequest.html new file mode 100644 index 0000000..b701bd2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httprequest/struct.HttpRequest.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.HttpRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/ConnectionType.t.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/ConnectionType.t.html new file mode 100644 index 0000000..b6bc2b8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/ConnectionType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ConnectionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponse.t.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponse.t.html new file mode 100644 index 0000000..2a125c6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponseBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponseBuilder.t.html new file mode 100644 index 0000000..1c3cdc0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/HttpResponseBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpResponseBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/enum.ConnectionType.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/enum.ConnectionType.html new file mode 100644 index 0000000..6c184b6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/enum.ConnectionType.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/http/enum.ConnectionType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponse.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponse.html new file mode 100644 index 0000000..c4a78a4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponse.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.HttpResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponseBuilder.html b/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponseBuilder.html new file mode 100644 index 0000000..e4bdc47 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/httpresponse/struct.HttpResponseBuilder.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.HttpResponseBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/index.html b/static/api/actix-web/0.7.2/actix_web/index.html new file mode 100644 index 0000000..45c92a1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/index.html @@ -0,0 +1,348 @@ +actix_web - Rust

Crate actix_web[][src]

Actix web is a small, pragmatic, and extremely fast web framework +for Rust.

+ +
+use actix_web::{server, App, Path, Responder};
+
+fn index(info: Path<(String, u32)>) -> impl Responder {
+    format!("Hello {}! id:{}", info.0, info.1)
+}
+
+fn main() {
+    server::new(|| {
+        App::new().resource("/{name}/{id}/index.html", |r| r.with(index))
+    }).bind("127.0.0.1:8080")
+        .unwrap()
+        .run();
+}
+

Documentation & community resources

+

Besides the API documentation (which you are currently looking +at!), several other resources are available:

+ +

To get started navigating the API documentation you may want to +consider looking at the following pages:

+
    +
  • +

    App: This struct represents an actix-web +application and is used to configure routes and other common +settings.

    +
  • +
  • +

    HttpServer: This struct +represents an HTTP server instance and is used to instantiate and +configure servers.

    +
  • +
  • +

    HttpRequest and +HttpResponse: These structs +represent HTTP requests and responses and expose various methods +for inspecting, creating and otherwise utilizing them.

    +
  • +
+

Features

+
    +
  • Supported HTTP/1.x and HTTP/2.0 protocols
  • +
  • Streaming and pipelining
  • +
  • Keep-alive and slow requests handling
  • +
  • WebSockets server/client
  • +
  • Transparent content compression/decompression (br, gzip, deflate)
  • +
  • Configurable request routing
  • +
  • Graceful server shutdown
  • +
  • Multipart streams
  • +
  • SSL support with OpenSSL or native-tls
  • +
  • Middlewares (Logger, Session, CORS, CSRF, DefaultHeaders)
  • +
  • Built on top of Actix actor framework
  • +
  • Supported Rust version: 1.26 or later
  • +
+

Package feature

+
    +
  • tls - enables ssl support via native-tls crate
  • +
  • alpn - enables ssl support via openssl crate, require for http/2 +support
  • +
  • session - enables session support, includes ring crate as +dependency
  • +
  • brotli - enables brotli compression support, requires c +compiler
  • +
  • flate2-c - enables gzip, deflate compression support, requires +c compiler
  • +
  • flate2-rust - experimental rust based implementation for +gzip, deflate compression.
  • +
+

Re-exports

+
pub use error::Error;
pub use error::ResponseError;
pub use error::Result;

Modules

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
actix +

Re-exports actix's prelude

+ +
client +

Http client api

+ +
dev +

The actix-web prelude for library developers

+ +
error +

Error and Result module

+ +
fs +

Static files support

+ +
http +

Various HTTP related types

+ +
middleware +

Middlewares

+ +
multipart +

Multipart requests support

+ +
pred +

Route match predicates

+ +
server +

Http server

+ +
test +

Various helpers for Actix applications to use during testing.

+ +
ws +

WebSocket support for Actix

+ +

Macros

+ + + + +
header + +

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
App +

Structure that follows the builder pattern for building application +instances.

+ +
Extensions +

A type map of request extensions.

+ +
Form +

Extract typed information from the request's body.

+ +
HttpContext +

Execution context for http actors

+ +
HttpRequest +

An HTTP Request

+ +
HttpResponse +

An HTTP Response

+ +
Json +

Json helper

+ +
Path +

Extract typed information from the request's path.

+ +
Query +

Extract typed information from from the request's query.

+ +
Request +

Request's context

+ +
Scope +

Resources scope

+ +
State +

Access an application state

+ +

Enums

+ + + + + + + + + + + + +
Binary +

Represents various types of binary body. +Content-Length header is set to length of the body.

+ +
Body +

Represents various types of http message body.

+ +
Either +

Combines two different responder types into a single type

+ +

Traits

+ + + + + + + + + + + + + + + + +
AsyncResponder +

Convenience trait that converts Future object to a Boxed future

+ +
FromRequest +

Trait implemented by types that can be extracted from request.

+ +
HttpMessage +

Trait that implements general purpose operations on http messages

+ +
Responder +

Trait implemented by types that generate responses for clients.

+ +

Type Definitions

+ + + + +
FutureResponse +

Convenience type alias

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/info/ConnectionInfo.t.html b/static/api/actix-web/0.7.2/actix_web/info/ConnectionInfo.t.html new file mode 100644 index 0000000..43fd803 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/info/ConnectionInfo.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectionInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/info/struct.ConnectionInfo.html b/static/api/actix-web/0.7.2/actix_web/info/struct.ConnectionInfo.html new file mode 100644 index 0000000..0eed44a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/info/struct.ConnectionInfo.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.ConnectionInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/Json.t.html b/static/api/actix-web/0.7.2/actix_web/json/Json.t.html new file mode 100644 index 0000000..13b6772 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/Json.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Json.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/JsonBody.t.html b/static/api/actix-web/0.7.2/actix_web/json/JsonBody.t.html new file mode 100644 index 0000000..c00312b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/JsonBody.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.JsonBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/JsonConfig.t.html b/static/api/actix-web/0.7.2/actix_web/json/JsonConfig.t.html new file mode 100644 index 0000000..e013c07 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/JsonConfig.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.JsonConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/struct.Json.html b/static/api/actix-web/0.7.2/actix_web/json/struct.Json.html new file mode 100644 index 0000000..c4afa50 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/struct.Json.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Json.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/struct.JsonBody.html b/static/api/actix-web/0.7.2/actix_web/json/struct.JsonBody.html new file mode 100644 index 0000000..6f40171 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/struct.JsonBody.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.JsonBody.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/json/struct.JsonConfig.html b/static/api/actix-web/0.7.2/actix_web/json/struct.JsonConfig.html new file mode 100644 index 0000000..99f79c0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/json/struct.JsonConfig.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.JsonConfig.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/macro.header!.html b/static/api/actix-web/0.7.2/actix_web/macro.header!.html new file mode 100644 index 0000000..008a11c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/macro.header!.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to macro.header.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/macro.header.html b/static/api/actix-web/0.7.2/actix_web/macro.header.html new file mode 100644 index 0000000..47f153d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/macro.header.html @@ -0,0 +1,12 @@ +actix_web::header - Rust

Macro actix_web::header[][src]

+macro_rules! header {
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)*) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)+) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => [$value:ty]) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => {Any / ($item:ty)+}) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)* $tm:ident{$($tf:item)*}) => { ... };
+    ($(#[$a:meta])*($id:ident, $n:expr) => ($item:ty)+ $tm:ident{$($tf:item)*}) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => [$item:ty] $tm:ident{$($tf:item)*}) => { ... };
+    ($(#[$a:meta])*($id:ident, $name:expr) => {Any / ($item:ty)+} $tm:ident{$($tf:item)*}) => { ... };
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/DefaultHeaders.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/DefaultHeaders.t.html new file mode 100644 index 0000000..dce063c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/DefaultHeaders.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultHeaders.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/ErrorHandlers.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/ErrorHandlers.t.html new file mode 100644 index 0000000..661e97e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/ErrorHandlers.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ErrorHandlers.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/Finished.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/Finished.t.html new file mode 100644 index 0000000..0dca501 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/Finished.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Finished.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/Logger.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/Logger.t.html new file mode 100644 index 0000000..4b1c695 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/Logger.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Logger.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/Middleware.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/Middleware.t.html new file mode 100644 index 0000000..547eab6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/Middleware.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Middleware.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/Response.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/Response.t.html new file mode 100644 index 0000000..ec92071 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/Response.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Response.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/Started.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/Started.t.html new file mode 100644 index 0000000..6599ea5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/Started.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Started.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/AllOrSome.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/AllOrSome.t.html new file mode 100644 index 0000000..7eecd0c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/AllOrSome.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.AllOrSome.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/Cors.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/Cors.t.html new file mode 100644 index 0000000..34884a2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/Cors.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Cors.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsBuilder.t.html new file mode 100644 index 0000000..ad6cb6d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CorsBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsError.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsError.t.html new file mode 100644 index 0000000..0fedc57 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/CorsError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CorsError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.AllOrSome.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.AllOrSome.html new file mode 100644 index 0000000..4a51ec3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.AllOrSome.html @@ -0,0 +1,33 @@ +actix_web::middleware::cors::AllOrSome - Rust

Enum actix_web::middleware::cors::AllOrSome[][src]

pub enum AllOrSome<T> {
+    All,
+    Some(T),
+}

An enum signifying that some of type T is allowed, or All (everything is +allowed).

+

Default is implemented for this enum and is All.

+

+ Variants

+

Everything is allowed. Usually equivalent to the "*" value.

+

Only some of T is allowed

+
+

+ Methods +

+

impl<T> AllOrSome<T>
[src]

Returns whether this is an All variant

+

Returns whether this is a Some variant

+

Returns &T

+
+

+ Trait Implementations +

+

impl<T: Clone> Clone for AllOrSome<T>
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<T: Debug> Debug for AllOrSome<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Eq> Eq for AllOrSome<T>
[src]

impl<T: PartialEq> PartialEq for AllOrSome<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T> Default for AllOrSome<T>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for AllOrSome<T> where
    T: Send

impl<T> Sync for AllOrSome<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.CorsError.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.CorsError.html new file mode 100644 index 0000000..3e9fa24 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/enum.CorsError.html @@ -0,0 +1,44 @@ +actix_web::middleware::cors::CorsError - Rust

Enum actix_web::middleware::cors::CorsError[][src]

pub enum CorsError {
+    MissingOrigin,
+    BadOrigin,
+    MissingRequestMethod,
+    BadRequestMethod,
+    BadRequestHeaders,
+    MissingRequestHeaders,
+    OriginNotAllowed,
+    MethodNotAllowed,
+    HeadersNotAllowed,
+}

A set of errors that can occur during processing CORS

+

+ Variants

+

The HTTP request header Origin is required but was not provided

+

The HTTP request header Origin could not be parsed correctly.

+

The request header Access-Control-Request-Method is required but is +missing

+

The request header Access-Control-Request-Method has an invalid value

+

The request header Access-Control-Request-Headers has an invalid +value

+

The request header Access-Control-Request-Headers is required but is +missing.

+

Origin is not allowed to make this request

+

Requested method is not allowed

+

One or more headers requested are not allowed

+
+

+ Trait Implementations +

+

impl Debug for CorsError
[src]

Formats the value using the given formatter. Read more

+

impl Fail for CorsError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for CorsError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for CorsError
[src]

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for CorsError

impl Sync for CorsError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/index.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/index.html new file mode 100644 index 0000000..3f00d5c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/index.html @@ -0,0 +1,77 @@ +actix_web::middleware::cors - Rust

Module actix_web::middleware::cors[][src]

Cross-origin resource sharing (CORS) for Actix applications

+

CORS middleware could be used with application and with resource. +First you need to construct CORS middleware instance.

+

To construct a cors:

+
    +
  1. Call Cors::build to start building.
  2. +
  3. Use any of the builder methods to set fields in the backend.
  4. +
  5. Call finish to retrieve the +constructed backend.
  6. +
+

Cors middleware could be used as parameter for App::middleware() or +Resource::middleware() methods. But you have to use +Cors::for_app() method to support preflight OPTIONS request.

+

Example

+
+use actix_web::middleware::cors::Cors;
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn index(mut req: HttpRequest) -> &'static str {
+    "Hello world"
+}
+
+fn main() {
+    let app = App::new().configure(|app| {
+        Cors::for_app(app) // <- Construct CORS middleware builder
+            .allowed_origin("https://www.rust-lang.org/")
+            .allowed_methods(vec!["GET", "POST"])
+            .allowed_headers(vec![http::header::AUTHORIZATION, http::header::ACCEPT])
+            .allowed_header(http::header::CONTENT_TYPE)
+            .max_age(3600)
+            .resource("/index.html", |r| {
+                r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+                r.method(http::Method::HEAD).f(|_| HttpResponse::MethodNotAllowed());
+            })
+            .register()
+    });
+}
+

In this example custom CORS middleware get registered for "/index.html" +endpoint.

+

Cors middleware automatically handle OPTIONS preflight request.

+

Structs

+ + + + + + + + +
Cors +

Middleware for Cross-origin resource sharing support

+ +
CorsBuilder +

Structure that follows the builder pattern for building Cors middleware +structs.

+ +

Enums

+ + + + + + + + +
AllOrSome +

An enum signifying that some of type T is allowed, or All (everything is +allowed).

+ +
CorsError +

A set of errors that can occur during processing CORS

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/middleware/cors/sidebar-items.js new file mode 100644 index 0000000..b56e06b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["AllOrSome","An enum signifying that some of type T is allowed, or `All` (everything is allowed)."],["CorsError","A set of errors that can occur during processing CORS"]],"struct":[["Cors","`Middleware` for Cross-origin resource sharing support"],["CorsBuilder","Structure that follows the builder pattern for building `Cors` middleware structs."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.Cors.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.Cors.html new file mode 100644 index 0000000..c3ce7d3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.Cors.html @@ -0,0 +1,47 @@ +actix_web::middleware::cors::Cors - Rust

Struct actix_web::middleware::cors::Cors[][src]

pub struct Cors { /* fields omitted */ }

Middleware for Cross-origin resource sharing support

+

The Cors struct contains the settings for CORS requests to be validated and +for responses to be generated.

+
+

+ Methods +

+

impl Cors
[src]

Build a new CORS middleware instance

+

Create CorsBuilder for a specified application.

+ +
+use actix_web::middleware::cors::Cors;
+use actix_web::{http, App, HttpResponse};
+
+fn main() {
+    let app = App::new().configure(
+        |app| {
+            Cors::for_app(app)   // <- Construct CORS builder
+            .allowed_origin("https://www.rust-lang.org/")
+            .resource("/resource", |r| {       // register resource
+                 r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+            })
+            .register()
+        }, // construct CORS and return application instance
+    );
+}
+

This method register cors middleware with resource and +adds route for OPTIONS preflight requests.

+

It is possible to register Cors middleware with +Resource::middleware() method, but in that case Cors +middleware wont be able to handle OPTIONS requests.

+
+

+ Trait Implementations +

+

impl Clone for Cors
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Default for Cors
[src]

Returns the "default value" for a type. Read more

+

impl<S> Middleware<S> for Cors
[src]

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Cors

impl !Sync for Cors

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.CorsBuilder.html b/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.CorsBuilder.html new file mode 100644 index 0000000..6f688d8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/cors/struct.CorsBuilder.html @@ -0,0 +1,130 @@ +actix_web::middleware::cors::CorsBuilder - Rust

Struct actix_web::middleware::cors::CorsBuilder[][src]

pub struct CorsBuilder<S = ()> { /* fields omitted */ }

Structure that follows the builder pattern for building Cors middleware +structs.

+

To construct a cors:

+
    +
  1. Call Cors::build to start building.
  2. +
  3. Use any of the builder methods to set fields in the backend.
  4. +
  5. Call finish to retrieve the +constructed backend.
  6. +
+

Example

+
+use actix_web::middleware::cors;
+use http::header;
+
+let cors = cors::Cors::build()
+    .allowed_origin("https://www.rust-lang.org/")
+    .allowed_methods(vec!["GET", "POST"])
+    .allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
+    .allowed_header(header::CONTENT_TYPE)
+    .max_age(3600)
+    .finish();
+
+

+ Methods +

+

impl<S: 'static> CorsBuilder<S>
[src]

Add an origin that are allowed to make requests. +Will be verified against the Origin request header.

+

When All is set, and send_wildcard is set, "*" will be sent in +the Access-Control-Allow-Origin response header. Otherwise, the +client's Origin request header will be echoed back in the +Access-Control-Allow-Origin response header.

+

When Some is set, the client's Origin request header will be +checked in a case-sensitive manner.

+

This is the list of origins in the +Resource Processing Model.

+

Defaults to All.

+

Builder panics if supplied origin is not valid uri.

+

Set a list of methods which the allowed origins are allowed to access +for requests.

+

This is the list of methods in the +Resource Processing Model.

+

Defaults to [GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]

+

Set an allowed header

+

Set a list of header field names which can be used when +this resource is accessed by allowed origins.

+

If All is set, whatever is requested by the client in +Access-Control-Request-Headers will be echoed back in the +Access-Control-Allow-Headers header.

+

This is the list of headers in the +Resource Processing Model.

+

Defaults to All.

+

Set a list of headers which are safe to expose to the API of a CORS API +specification. This corresponds to the +Access-Control-Expose-Headers response header.

+

This is the list of exposed headers in the +Resource Processing Model.

+

This defaults to an empty set.

+

Set a maximum time for which this CORS request maybe cached. +This value is set as the Access-Control-Max-Age header.

+

This defaults to None (unset).

+

Set a wildcard origins

+

If send wildcard is set and the allowed_origins parameter is All, a +wildcard Access-Control-Allow-Origin response header is sent, +rather than the request’s Origin header.

+

This is the supports credentials flag in the +Resource Processing Model.

+

This CANNOT be used in conjunction with allowed_origins set to +All and allow_credentials set to true. Depending on the mode +of usage, this will either result in an Error:: CredentialsWithWildcardOrigin error during actix launch or runtime.

+

Defaults to false.

+

Allows users to make authenticated requests

+

If true, injects the Access-Control-Allow-Credentials header in +responses. This allows cookies and credentials to be submitted +across domains.

+

This option cannot be used in conjunction with an allowed_origin set +to All and send_wildcards set to true.

+

Defaults to false.

+

Builder panics if credentials are allowed, but the Origin is set to "*". +This is not allowed by W3C

+

Disable Vary header support.

+

When enabled the header Vary: Origin will be returned as per the W3 +implementation guidelines.

+

Setting this header when the Access-Control-Allow-Origin is +dynamically generated (e.g. when there is more than one allowed +origin, and an Origin than '*' is returned) informs CDNs and other +caches that the CORS headers are dynamic, and cannot be cached.

+

By default vary header support is enabled.

+

Disable preflight request support.

+

When enabled cors middleware automatically handles OPTIONS request. +This is useful application level middleware.

+

By default preflight support is enabled.

+

Configure resource for a specific path.

+

This is similar to a App::resource() method. Except, cors middleware +get registered for the resource.

+ +
+use actix_web::middleware::cors::Cors;
+use actix_web::{http, App, HttpResponse};
+
+fn main() {
+    let app = App::new().configure(
+        |app| {
+            Cors::for_app(app)   // <- Construct CORS builder
+            .allowed_origin("https://www.rust-lang.org/")
+            .allowed_methods(vec!["GET", "POST"])
+            .allowed_header(http::header::CONTENT_TYPE)
+            .max_age(3600)
+            .resource("/resource1", |r| {       // register resource
+                 r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+            })
+            .resource("/resource2", |r| {       // register another resource
+                 r.method(http::Method::HEAD)
+                     .f(|_| HttpResponse::MethodNotAllowed());
+            })
+            .register()
+        }, // construct CORS and return application instance
+    );
+}
+

Finishes building and returns the built Cors instance.

+

This method panics in case of any configuration error.

+

Finishes building Cors middleware and register middleware for +application

+

This method panics in case of any configuration error or if non of +resources are registered.

+
+

+ Auto Trait Implementations +

+
+

impl<S = ()> !Send for CorsBuilder<S>

impl<S = ()> !Sync for CorsBuilder<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfError.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfError.t.html new file mode 100644 index 0000000..80c4d70 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CsrfError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfFilter.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfFilter.t.html new file mode 100644 index 0000000..195e190 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/CsrfFilter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CsrfFilter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/enum.CsrfError.html b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/enum.CsrfError.html new file mode 100644 index 0000000..697b8b0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/enum.CsrfError.html @@ -0,0 +1,29 @@ +actix_web::middleware::csrf::CsrfError - Rust

Enum actix_web::middleware::csrf::CsrfError[][src]

pub enum CsrfError {
+    MissingOrigin,
+    BadOrigin,
+    CsrDenied,
+}

Potential cross-site request forgery detected.

+

+ Variants

+

The HTTP request header Origin was required but not provided.

+

The HTTP request header Origin could not be parsed correctly.

+

The cross-site request was denied.

+
+

+ Trait Implementations +

+

impl Debug for CsrfError
[src]

Formats the value using the given formatter. Read more

+

impl Fail for CsrfError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for CsrfError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for CsrfError
[src]

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for CsrfError

impl Sync for CsrfError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/index.html b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/index.html new file mode 100644 index 0000000..76e9b6e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/index.html @@ -0,0 +1,57 @@ +actix_web::middleware::csrf - Rust

Module actix_web::middleware::csrf[][src]

A filter for cross-site request forgery (CSRF).

+

This middleware is stateless and based on request +headers.

+

By default requests are allowed only if one of these is true:

+
    +
  • The request method is safe (GET, HEAD, OPTIONS). It is the +applications responsibility to ensure these methods cannot be used to +execute unwanted actions. Note that upgrade requests for websockets are +also considered safe.
  • +
  • The Origin header (added automatically by the browser) matches one +of the allowed origins.
  • +
  • There is no Origin header but the Referer header matches one of +the allowed origins.
  • +
+

Use CsrfFilter::allow_xhr() +if you want to allow requests with unprotected methods via +CORS.

+

Example

+
+use actix_web::middleware::csrf;
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn handle_post(_: &HttpRequest) -> &'static str {
+    "This action should only be triggered with requests from the same site"
+}
+
+fn main() {
+    let app = App::new()
+        .middleware(
+            csrf::CsrfFilter::new().allowed_origin("https://www.example.com"),
+        )
+        .resource("/", |r| {
+            r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+            r.method(http::Method::POST).f(handle_post);
+        })
+        .finish();
+}
+

In this example the entire application is protected from CSRF.

+

Structs

+ + + + +
CsrfFilter +

A middleware that filters cross-site requests.

+ +

Enums

+ + + + +
CsrfError +

Potential cross-site request forgery detected.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/sidebar-items.js new file mode 100644 index 0000000..ef9450a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["CsrfError","Potential cross-site request forgery detected."]],"struct":[["CsrfFilter","A middleware that filters cross-site requests."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/csrf/struct.CsrfFilter.html b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/struct.CsrfFilter.html new file mode 100644 index 0000000..11aff38 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/csrf/struct.CsrfFilter.html @@ -0,0 +1,52 @@ +actix_web::middleware::csrf::CsrfFilter - Rust

Struct actix_web::middleware::csrf::CsrfFilter[][src]

pub struct CsrfFilter { /* fields omitted */ }

A middleware that filters cross-site requests.

+

To construct a CSRF filter:

+
    +
  1. Call CsrfFilter::build to +start building.
  2. +
  3. Add allowed +origins.
  4. +
  5. Call finish to retrieve +the constructed filter.
  6. +
+

Example

+
+use actix_web::middleware::csrf;
+use actix_web::App;
+
+let app = App::new()
+    .middleware(csrf::CsrfFilter::new().allowed_origin("https://www.example.com"));
+
+

+ Methods +

+

impl CsrfFilter
[src]

Start building a CsrfFilter.

+

Add an origin that is allowed to make requests. Will be verified +against the Origin request header.

+

Allow all requests with an X-Requested-With header.

+

A cross-site attacker should not be able to send requests with custom +headers unless a CORS policy whitelists them. Therefore it should be +safe to allow requests with an X-Requested-With header (added +automatically by many JavaScript libraries).

+

This is disabled by default, because in Safari it is possible to +circumvent this using redirects and Flash.

+

Use this method to enable more lax filtering.

+

Allow requests if the expected Origin header is missing (and +there is no Referer to fall back on).

+

The filter is conservative by default, but it should be safe to allow +missing Origin headers because a cross-site attacker cannot prevent +the browser from sending Origin on unprotected requests.

+

Allow cross-site upgrade requests (for example to open a WebSocket).

+
+

+ Trait Implementations +

+

impl Default for CsrfFilter
[src]

Returns the "default value" for a type. Read more

+

impl<S> Middleware<S> for CsrfFilter
[src]

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl Send for CsrfFilter

impl Sync for CsrfFilter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/DefaultHeaders.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/DefaultHeaders.t.html new file mode 100644 index 0000000..dce063c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/DefaultHeaders.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultHeaders.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/struct.DefaultHeaders.html b/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/struct.DefaultHeaders.html new file mode 100644 index 0000000..d513087 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/defaultheaders/struct.DefaultHeaders.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/middleware/struct.DefaultHeaders.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/enum.Finished.html b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Finished.html new file mode 100644 index 0000000..59be676 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Finished.html @@ -0,0 +1,14 @@ +actix_web::middleware::Finished - Rust

Enum actix_web::middleware::Finished[][src]

pub enum Finished {
+    Done,
+    Future(Box<Future<Item = (), Error = Error>>),
+}

Middleware finish result

+

+ Variants

+

Execution completed

+

Execution completed, but run future to completion

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Finished

impl !Sync for Finished

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/enum.Response.html b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Response.html new file mode 100644 index 0000000..3c68a6f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Response.html @@ -0,0 +1,14 @@ +actix_web::middleware::Response - Rust

Enum actix_web::middleware::Response[][src]

pub enum Response {
+    Done(HttpResponse),
+    Future(Box<Future<Item = HttpResponse, Error = Error>>),
+}

Middleware execution result

+

+ Variants

+

New http response got generated

+

Result is a future that resolves to a new http response

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Response

impl !Sync for Response

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/enum.Started.html b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Started.html new file mode 100644 index 0000000..b59f1e6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/enum.Started.html @@ -0,0 +1,17 @@ +actix_web::middleware::Started - Rust

Enum actix_web::middleware::Started[][src]

pub enum Started {
+    Done,
+    Response(HttpResponse),
+    Future(Box<Future<Item = Option<HttpResponse>, Error = Error>>),
+}

Middleware start result

+

+ Variants

+

Middleware is completed, continue to next middleware

+

New http response got generated. If middleware generates response +handler execution halts.

+

Execution completed, runs future to completion.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Started

impl !Sync for Started

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/ErrorHandlers.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/ErrorHandlers.t.html new file mode 100644 index 0000000..661e97e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/ErrorHandlers.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ErrorHandlers.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/struct.ErrorHandlers.html b/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/struct.ErrorHandlers.html new file mode 100644 index 0000000..72b5ea4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/errhandlers/struct.ErrorHandlers.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/middleware/struct.ErrorHandlers.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/CookieIdentityPolicy.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/CookieIdentityPolicy.t.html new file mode 100644 index 0000000..2fc76a8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/CookieIdentityPolicy.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CookieIdentityPolicy.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/Identity.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/Identity.t.html new file mode 100644 index 0000000..ca53592 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/Identity.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Identity.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityPolicy.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityPolicy.t.html new file mode 100644 index 0000000..c60c2f6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityPolicy.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IdentityPolicy.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityService.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityService.t.html new file mode 100644 index 0000000..86d1ce9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/IdentityService.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.IdentityService.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/RequestIdentity.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/RequestIdentity.t.html new file mode 100644 index 0000000..f5def90 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/RequestIdentity.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.RequestIdentity.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/index.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/index.html new file mode 100644 index 0000000..e3282bf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/index.html @@ -0,0 +1,86 @@ +actix_web::middleware::identity - Rust

Module actix_web::middleware::identity[][src]

Request identity service for Actix applications.

+

IdentityService middleware can be +used with different policies types to store identity information.

+

By default, only cookie identity policy is implemented. Other backend +implementations can be added separately.

+

CookieIdentityPolicy +uses cookies as identity storage.

+

To access current request identity +RequestIdentity should be used. +HttpRequest implements RequestIdentity trait.

+ +
+use actix_web::middleware::identity::RequestIdentity;
+use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+use actix_web::*;
+
+fn index(req: HttpRequest) -> Result<String> {
+    // access request identity
+    if let Some(id) = req.identity() {
+        Ok(format!("Welcome! {}", id))
+    } else {
+        Ok("Welcome Anonymous!".to_owned())
+    }
+}
+
+fn login(mut req: HttpRequest) -> HttpResponse {
+    req.remember("User1".to_owned()); // <- remember identity
+    HttpResponse::Ok().finish()
+}
+
+fn logout(mut req: HttpRequest) -> HttpResponse {
+    req.forget(); // <- remove identity
+    HttpResponse::Ok().finish()
+}
+
+fn main() {
+    let app = App::new().middleware(IdentityService::new(
+        // <- create identity middleware
+        CookieIdentityPolicy::new(&[0; 32])    // <- create cookie session backend
+              .name("auth-cookie")
+              .secure(false),
+    ));
+}
+

Structs

+ + + + + + + + +
CookieIdentityPolicy +

Use cookies for request identity storage.

+ +
IdentityService +

Request identity middleware

+ +

Traits

+ + + + + + + + + + + + +
Identity +

An identity

+ +
IdentityPolicy +

Identity policy definition.

+ +
RequestIdentity +

The helper trait to obtain your identity from a request.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/middleware/identity/sidebar-items.js new file mode 100644 index 0000000..ab9d577 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["CookieIdentityPolicy","Use cookies for request identity storage."],["IdentityService","Request identity middleware"]],"trait":[["Identity","An identity"],["IdentityPolicy","Identity policy definition."],["RequestIdentity","The helper trait to obtain your identity from a request."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.CookieIdentityPolicy.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.CookieIdentityPolicy.html new file mode 100644 index 0000000..b262667 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.CookieIdentityPolicy.html @@ -0,0 +1,48 @@ +actix_web::middleware::identity::CookieIdentityPolicy - Rust

Struct actix_web::middleware::identity::CookieIdentityPolicy[][src]

pub struct CookieIdentityPolicy(_);

Use cookies for request identity storage.

+

The constructors take a key as an argument. +This is the private key for cookie - when this value is changed, +all identities are lost. The constructors will panic if the key is less +than 32 bytes in length.

+

Example

+
+use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+use actix_web::App;
+
+fn main() {
+    let app = App::new().middleware(IdentityService::new(
+        // <- create identity middleware
+        CookieIdentityPolicy::new(&[0; 32])  // <- construct cookie policy
+               .domain("www.rust-lang.org")
+               .name("actix_auth")
+               .path("/")
+               .secure(true),
+    ));
+}
+
+

+ Methods +

+

impl CookieIdentityPolicy
[src]

Construct new CookieIdentityPolicy instance.

+

Panics if key length is less than 32 bytes.

+

Sets the path field in the session cookie being built.

+

Sets the name field in the session cookie being built.

+

Sets the domain field in the session cookie being built.

+

Sets the secure field in the session cookie being built.

+

If the secure field is set, a cookie will only be transmitted when the +connection is secure - i.e. https

+

Sets the max-age field in the session cookie being built.

+
+

+ Trait Implementations +

+

impl<S> IdentityPolicy<S> for CookieIdentityPolicy
[src]

+

The associated identity

+

+

The return type of the middleware

+

Parse the session from request and load data from a service identity.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.IdentityService.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.IdentityService.html new file mode 100644 index 0000000..42f10ec --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/struct.IdentityService.html @@ -0,0 +1,32 @@ +actix_web::middleware::identity::IdentityService - Rust

Struct actix_web::middleware::identity::IdentityService[][src]

pub struct IdentityService<T> { /* fields omitted */ }

Request identity middleware

+ +
+use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+use actix_web::App;
+
+fn main() {
+    let app = App::new().middleware(IdentityService::new(
+        // <- create identity middleware
+        CookieIdentityPolicy::new(&[0; 32])    // <- create cookie session backend
+              .name("auth-cookie")
+              .secure(false),
+    ));
+}
+
+

+ Methods +

+

impl<T> IdentityService<T>
[src]

Create new identity service with specified backend.

+
+

+ Trait Implementations +

+

impl<S: 'static, T: IdentityPolicy<S>> Middleware<S> for IdentityService<T>
[src]

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for IdentityService<T> where
    T: Send

impl<T> Sync for IdentityService<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.Identity.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.Identity.html new file mode 100644 index 0000000..7c28136 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.Identity.html @@ -0,0 +1,25 @@ +actix_web::middleware::identity::Identity - Rust

Trait actix_web::middleware::identity::Identity[][src]

pub trait Identity: 'static {
+    fn identity(&self) -> Option<&str>;
+
fn remember(&mut self, key: String); +
fn forget(&mut self); +
fn write(&mut self, resp: HttpResponse) -> Result<Response>; +}

An identity

+
+

+ Required Methods +

+
+

Return the claimed identity of the user associated request or +None if no identity can be found associated with the request.

+

Remember identity.

+

This method is used to 'forget' the current identity on subsequent +requests.

+

Write session to storage backend.

+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.IdentityPolicy.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.IdentityPolicy.html new file mode 100644 index 0000000..ea14a9f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.IdentityPolicy.html @@ -0,0 +1,27 @@ +actix_web::middleware::identity::IdentityPolicy - Rust

Trait actix_web::middleware::identity::IdentityPolicy[][src]

pub trait IdentityPolicy<S>: Sized + 'static {
+    type Identity: Identity;
+    type Future: Future<Item = Self::Identity, Error = Error>;
+    fn from_request(&self, request: &HttpRequest<S>) -> Self::Future;
+}

Identity policy definition.

+
+

+ Associated Types +

+
+

The associated identity

+

The return type of the middleware

+
+

+ Required Methods +

+
+

Parse the session from request and load data from a service identity.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.RequestIdentity.html b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.RequestIdentity.html new file mode 100644 index 0000000..cc2b694 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/identity/trait.RequestIdentity.html @@ -0,0 +1,47 @@ +actix_web::middleware::identity::RequestIdentity - Rust

Trait actix_web::middleware::identity::RequestIdentity[][src]

pub trait RequestIdentity {
+    fn identity(&self) -> Option<String>;
+
fn remember(&self, identity: String); +
fn forget(&self); +}

The helper trait to obtain your identity from a request.

+ +
+use actix_web::middleware::identity::RequestIdentity;
+use actix_web::*;
+
+fn index(req: HttpRequest) -> Result<String> {
+    // access request identity
+    if let Some(id) = req.identity() {
+        Ok(format!("Welcome! {}", id))
+    } else {
+        Ok("Welcome Anonymous!".to_owned())
+    }
+}
+
+fn login(mut req: HttpRequest) -> HttpResponse {
+    req.remember("User1".to_owned()); // <- remember identity
+    HttpResponse::Ok().finish()
+}
+
+fn logout(mut req: HttpRequest) -> HttpResponse {
+    req.forget(); // <- remove identity
+    HttpResponse::Ok().finish()
+}
+
+

+ Required Methods +

+
+

Return the claimed identity of the user associated request or +None if no identity can be found associated with the request.

+

Remember identity.

+

This method is used to 'forget' the current identity on subsequent +requests.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/index.html b/static/api/actix-web/0.7.2/actix_web/middleware/index.html new file mode 100644 index 0000000..e0fca19 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/index.html @@ -0,0 +1,94 @@ +actix_web::middleware - Rust

Module actix_web::middleware[][src]

Middlewares

+

Modules

+ + + + + + + + + + + + + + + + +
cors +

Cross-origin resource sharing (CORS) for Actix applications

+ +
csrf +

A filter for cross-site request forgery (CSRF).

+ +
identity +

Request identity service for Actix applications.

+ +
session +

User sessions.

+ +

Structs

+ + + + + + + + + + + + +
DefaultHeaders +

Middleware for setting default response headers.

+ +
ErrorHandlers +

Middleware for allowing custom handlers for responses.

+ +
Logger +

Middleware for logging request and response info to the terminal.

+ +

Enums

+ + + + + + + + + + + + +
Finished +

Middleware finish result

+ +
Response +

Middleware execution result

+ +
Started +

Middleware start result

+ +

Traits

+ + + + +
Middleware +

Middleware definition

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/logger/Logger.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/logger/Logger.t.html new file mode 100644 index 0000000..4b1c695 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/logger/Logger.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Logger.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/logger/struct.Logger.html b/static/api/actix-web/0.7.2/actix_web/middleware/logger/struct.Logger.html new file mode 100644 index 0000000..69c4d53 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/logger/struct.Logger.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/middleware/struct.Logger.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSession.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSession.t.html new file mode 100644 index 0000000..d32f7f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSession.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CookieSession.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionBackend.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionBackend.t.html new file mode 100644 index 0000000..9693ea7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionBackend.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CookieSessionBackend.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionError.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionError.t.html new file mode 100644 index 0000000..e7dbb85 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/CookieSessionError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CookieSessionError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/RequestSession.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/RequestSession.t.html new file mode 100644 index 0000000..c29a4ca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/RequestSession.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.RequestSession.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/Session.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/Session.t.html new file mode 100644 index 0000000..e24ab9d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/Session.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Session.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/SessionStorage.t.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/SessionStorage.t.html new file mode 100644 index 0000000..4adc109 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/SessionStorage.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SessionStorage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/enum.CookieSessionError.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/enum.CookieSessionError.html new file mode 100644 index 0000000..731604d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/enum.CookieSessionError.html @@ -0,0 +1,27 @@ +actix_web::middleware::session::CookieSessionError - Rust

Enum actix_web::middleware::session::CookieSessionError[][src]

pub enum CookieSessionError {
+    Overflow,
+    Serialize(JsonError),
+}

Errors that can occur during handling cookie session

+

+ Variants

+

Size of the serialized session is greater than 4000 bytes.

+

Fail to serialize session.

+
+

+ Trait Implementations +

+

impl Fail for CookieSessionError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for CookieSessionError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for CookieSessionError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for CookieSessionError
[src]

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/index.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/index.html new file mode 100644 index 0000000..9af4761 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/index.html @@ -0,0 +1,106 @@ +actix_web::middleware::session - Rust

Module actix_web::middleware::session[][src]

User sessions.

+

Actix provides a general solution for session management. The +SessionStorage +middleware can be used with different backend types to store session +data in different backends.

+

By default, only cookie session backend is implemented. Other +backend implementations can be added.

+

CookieSessionBackend +uses cookies as session storage. CookieSessionBackend creates sessions +which are limited to storing fewer than 4000 bytes of data, as the payload +must fit into a single cookie. An internal server error is generated if a +session contains more than 4000 bytes.

+

A cookie may have a security policy of signed or private. Each has +a respective CookieSessionBackend constructor.

+

A signed cookie may be viewed but not modified by the client. A private +cookie may neither be viewed nor modified by the client.

+

The constructors take a key as an argument. This is the private key +for cookie session - when this value is changed, all session data is lost.

+

In general, you create a SessionStorage middleware and initialize it +with specific backend implementation, such as a CookieSessionBackend. +To access session data, +HttpRequest::session() +must be used. This method returns a +Session object, which allows us to get or set +session data.

+ +
+use actix_web::{actix, server, App, HttpRequest, Result};
+use actix_web::middleware::session::{RequestSession, SessionStorage, CookieSessionBackend};
+
+fn index(req: HttpRequest) -> Result<&'static str> {
+    // access session data
+    if let Some(count) = req.session().get::<i32>("counter")? {
+        println!("SESSION value: {}", count);
+        req.session().set("counter", count+1)?;
+    } else {
+        req.session().set("counter", 1)?;
+    }
+
+    Ok("Welcome!")
+}
+
+fn main() {
+    actix::System::run(|| {
+        server::new(
+          || App::new().middleware(
+              SessionStorage::new(          // <- create session middleware
+                CookieSessionBackend::signed(&[0; 32]) // <- create signed cookie session backend
+                    .secure(false)
+             )))
+            .bind("127.0.0.1:59880").unwrap()
+            .start();
+    });
+}
+

Structs

+ + + + + + + + + + + + + + + + +
CookieSession +

Session that uses signed cookies as session storage

+ +
CookieSessionBackend +

Use cookies for session storage.

+ +
Session +

The high-level interface you use to modify session data.

+ +
SessionStorage +

Session storage middleware

+ +

Enums

+ + + + +
CookieSessionError +

Errors that can occur during handling cookie session

+ +

Traits

+ + + + +
RequestSession +

The helper trait to obtain your session data from a request.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/middleware/session/sidebar-items.js new file mode 100644 index 0000000..eff4496 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["CookieSessionError","Errors that can occur during handling cookie session"]],"struct":[["CookieSession","Session that uses signed cookies as session storage"],["CookieSessionBackend","Use cookies for session storage."],["Session","The high-level interface you use to modify session data."],["SessionStorage","Session storage middleware"]],"trait":[["RequestSession","The helper trait to obtain your session data from a request."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSession.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSession.html new file mode 100644 index 0000000..7123596 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSession.html @@ -0,0 +1,7 @@ +actix_web::middleware::session::CookieSession - Rust

Struct actix_web::middleware::session::CookieSession[][src]

pub struct CookieSession { /* fields omitted */ }

Session that uses signed cookies as session storage

+
+

+ Auto Trait Implementations +

+
+

impl !Send for CookieSession

impl !Sync for CookieSession

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSessionBackend.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSessionBackend.html new file mode 100644 index 0000000..9f602e7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.CookieSessionBackend.html @@ -0,0 +1,51 @@ +actix_web::middleware::session::CookieSessionBackend - Rust

Struct actix_web::middleware::session::CookieSessionBackend[][src]

pub struct CookieSessionBackend(_);

Use cookies for session storage.

+

CookieSessionBackend creates sessions which are limited to storing +fewer than 4000 bytes of data (as the payload must fit into a single +cookie). An Internal Server Error is generated if the session contains more +than 4000 bytes.

+

A cookie may have a security policy of signed or private. Each has a +respective CookieSessionBackend constructor.

+

A signed cookie is stored on the client as plaintext alongside +a signature such that the cookie may be viewed but not modified by the +client.

+

A private cookie is stored on the client as encrypted text +such that it may neither be viewed nor modified by the client.

+

The constructors take a key as an argument. +This is the private key for cookie session - when this value is changed, +all session data is lost. The constructors will panic if the key is less +than 32 bytes in length.

+

The backend relies on cookie crate to create and read cookies. +By default all cookies are percent encoded, but certain symbols may +cause troubles when reading cookie, if they are not properly percent encoded.

+

Example

+
+use actix_web::middleware::session::CookieSessionBackend;
+
+let backend: CookieSessionBackend = CookieSessionBackend::signed(&[0; 32])
+    .domain("www.rust-lang.org")
+    .name("actix_session")
+    .path("/")
+    .secure(true);
+
+

+ Methods +

+

impl CookieSessionBackend
[src]

Construct new signed CookieSessionBackend instance.

+

Panics if key length is less than 32 bytes.

+

Construct new private CookieSessionBackend instance.

+

Panics if key length is less than 32 bytes.

+

Sets the path field in the session cookie being built.

+

Sets the name field in the session cookie being built.

+

Sets the domain field in the session cookie being built.

+

Sets the secure field in the session cookie being built.

+

If the secure field is set, a cookie will only be transmitted when the +connection is secure - i.e. https

+

Sets the http_only field in the session cookie being built.

+

Sets the same_site field in the session cookie being built.

+

Sets the max-age field in the session cookie being built.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.Session.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.Session.html new file mode 100644 index 0000000..0ab8bca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.Session.html @@ -0,0 +1,58 @@ +actix_web::middleware::session::Session - Rust

Struct actix_web::middleware::session::Session[][src]

pub struct Session(_);

The high-level interface you use to modify session data.

+

Session object could be obtained with +RequestSession::session +method. RequestSession trait is implemented for HttpRequest.

+ +
+use actix_web::middleware::session::RequestSession;
+use actix_web::*;
+
+fn index(mut req: HttpRequest) -> Result<&'static str> {
+    // access session data
+    if let Some(count) = req.session().get::<i32>("counter")? {
+        req.session().set("counter", count + 1)?;
+    } else {
+        req.session().set("counter", 1)?;
+    }
+
+    Ok("Welcome!")
+}
+
+

+ Methods +

+

impl Session
[src]

Get a value from the session.

+

Set a value from the session.

+

Remove value from the session.

+

Clear the session.

+
+

+ Trait Implementations +

+

impl<S> FromRequest<S> for Session
[src]

Extractor implementation for Session type.

+ +
+use actix_web::middleware::session::Session;
+
+fn index(session: Session) -> Result<&'static str> {
+    // access session data
+    if let Some(count) = session.get::<i32>("counter")? {
+        session.set("counter", count + 1)?;
+    } else {
+        session.set("counter", 1)?;
+    }
+
+    Ok("Welcome!")
+}
+

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Session

impl !Sync for Session

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.SessionStorage.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.SessionStorage.html new file mode 100644 index 0000000..58a59e2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/struct.SessionStorage.html @@ -0,0 +1,31 @@ +actix_web::middleware::session::SessionStorage - Rust

Struct actix_web::middleware::session::SessionStorage[][src]

pub struct SessionStorage<T, S>(_, _);

Session storage middleware

+ +
+use actix_web::middleware::session::{CookieSessionBackend, SessionStorage};
+use actix_web::App;
+
+fn main() {
+    let app = App::new().middleware(SessionStorage::new(
+        // <- create session middleware
+        CookieSessionBackend::signed(&[0; 32]) // <- create cookie session backend
+              .secure(false),
+    ));
+}
+
+

+ Methods +

+

impl<S, T: SessionBackend<S>> SessionStorage<T, S>
[src]

Create session storage

+
+

+ Trait Implementations +

+

impl<S: 'static, T: SessionBackend<S>> Middleware<S> for SessionStorage<T, S>
[src]

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl<T, S> Send for SessionStorage<T, S> where
    S: Send,
    T: Send

impl<T, S> Sync for SessionStorage<T, S> where
    S: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/session/trait.RequestSession.html b/static/api/actix-web/0.7.2/actix_web/middleware/session/trait.RequestSession.html new file mode 100644 index 0000000..b9ecf8f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/session/trait.RequestSession.html @@ -0,0 +1,33 @@ +actix_web::middleware::session::RequestSession - Rust

Trait actix_web::middleware::session::RequestSession[][src]

pub trait RequestSession {
+    fn session(&self) -> Session;
+}

The helper trait to obtain your session data from a request.

+ +
+use actix_web::middleware::session::RequestSession;
+use actix_web::*;
+
+fn index(mut req: HttpRequest) -> Result<&'static str> {
+    // access session data
+    if let Some(count) = req.session().get::<i32>("counter")? {
+        req.session().set("counter", count + 1)?;
+    } else {
+        req.session().set("counter", 1)?;
+    }
+
+    Ok("Welcome!")
+}
+
+

+ Required Methods +

+
+

Get the session from the request

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/middleware/sidebar-items.js new file mode 100644 index 0000000..c43c05d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Finished","Middleware finish result"],["Response","Middleware execution result"],["Started","Middleware start result"]],"mod":[["cors","Cross-origin resource sharing (CORS) for Actix applications"],["csrf","A filter for cross-site request forgery (CSRF)."],["identity","Request identity service for Actix applications."],["session","User sessions."]],"struct":[["DefaultHeaders","`Middleware` for setting default response headers."],["ErrorHandlers","`Middleware` for allowing custom handlers for responses."],["Logger","`Middleware` for logging request and response info to the terminal."]],"trait":[["Middleware","Middleware definition"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/struct.DefaultHeaders.html b/static/api/actix-web/0.7.2/actix_web/middleware/struct.DefaultHeaders.html new file mode 100644 index 0000000..514a5bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/struct.DefaultHeaders.html @@ -0,0 +1,37 @@ +actix_web::middleware::DefaultHeaders - Rust

Struct actix_web::middleware::DefaultHeaders[][src]

pub struct DefaultHeaders { /* fields omitted */ }

Middleware for setting default response headers.

+

This middleware does not set header if response headers already contains it.

+ +
+use actix_web::{http, middleware, App, HttpResponse};
+
+fn main() {
+    let app = App::new()
+        .middleware(middleware::DefaultHeaders::new().header("X-Version", "0.2"))
+        .resource("/test", |r| {
+            r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+            r.method(http::Method::HEAD)
+                .f(|_| HttpResponse::MethodNotAllowed());
+        })
+        .finish();
+}
+
+

+ Methods +

+

impl DefaultHeaders
[src]

Construct DefaultHeaders middleware.

+

Set a header.

+

Set CONTENT-TYPE header if response does not contain this header.

+
+

+ Trait Implementations +

+

impl Default for DefaultHeaders
[src]

Returns the "default value" for a type. Read more

+

impl<S> Middleware<S> for DefaultHeaders
[src]

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/struct.ErrorHandlers.html b/static/api/actix-web/0.7.2/actix_web/middleware/struct.ErrorHandlers.html new file mode 100644 index 0000000..7331039 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/struct.ErrorHandlers.html @@ -0,0 +1,48 @@ +actix_web::middleware::ErrorHandlers - Rust

Struct actix_web::middleware::ErrorHandlers[][src]

pub struct ErrorHandlers<S> { /* fields omitted */ }

Middleware for allowing custom handlers for responses.

+

You can use ErrorHandlers::handler() method to register a custom error +handler for specific status code. You can modify existing response or +create completely new one.

+

Example

+
+use actix_web::middleware::{ErrorHandlers, Response};
+use actix_web::{http, App, HttpRequest, HttpResponse, Result};
+
+fn render_500<S>(_: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+    let mut builder = resp.into_builder();
+    builder.header(http::header::CONTENT_TYPE, "application/json");
+    Ok(Response::Done(builder.into()))
+}
+
+fn main() {
+    let app = App::new()
+        .middleware(
+            ErrorHandlers::new()
+                .handler(http::StatusCode::INTERNAL_SERVER_ERROR, render_500),
+        )
+        .resource("/test", |r| {
+            r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+            r.method(http::Method::HEAD)
+                .f(|_| HttpResponse::MethodNotAllowed());
+        })
+        .finish();
+}
+
+

+ Methods +

+

impl<S> ErrorHandlers<S>
[src]

Construct new ErrorHandlers instance

+

Register error handler for specified status code

+
+

+ Trait Implementations +

+

impl<S> Default for ErrorHandlers<S>
[src]

Returns the "default value" for a type. Read more

+

impl<S: 'static> Middleware<S> for ErrorHandlers<S>
[src]

Method is called when handler returns response, but before sending http message to peer. Read more

+

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called after body stream get sent to peer.

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for ErrorHandlers<S>

impl<S> !Sync for ErrorHandlers<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/struct.Logger.html b/static/api/actix-web/0.7.2/actix_web/middleware/struct.Logger.html new file mode 100644 index 0000000..5432d92 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/struct.Logger.html @@ -0,0 +1,62 @@ +actix_web::middleware::Logger - Rust

Struct actix_web::middleware::Logger[][src]

pub struct Logger { /* fields omitted */ }

Middleware for logging request and response info to the terminal.

+

Logger middleware uses standard log crate to log information. You should +enable logger for actix_web package to see access log. +(env_logger or similar)

+

Usage

+

Create Logger middleware with the specified format. +Default Logger could be created with default method, it uses the +default format:

+ +
This example is not tested
+ %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
+ +
+extern crate env_logger;
+use actix_web::middleware::Logger;
+use actix_web::App;
+
+fn main() {
+    std::env::set_var("RUST_LOG", "actix_web=info");
+    env_logger::init();
+
+    let app = App::new()
+        .middleware(Logger::default())
+        .middleware(Logger::new("%a %{User-Agent}i"))
+        .finish();
+}
+

Format

+

%% The percent sign

+

%a Remote IP-address (IP-address of proxy if using reverse proxy)

+

%t Time when the request was started to process

+

%r First line of request

+

%s Response status code

+

%b Size of response in bytes, including HTTP headers

+

%T Time taken to serve the request, in seconds with floating fraction in +.06f format

+

%D Time taken to serve the request, in milliseconds

+

%{FOO}i request.headers['FOO']

+

%{FOO}o response.headers['FOO']

+

%{FOO}e os.environ['FOO']

+
+

+ Methods +

+

impl Logger
[src]

Create Logger middleware with the specified format.

+

Ignore and do not log access info for specified path.

+
+

+ Trait Implementations +

+

impl Default for Logger
[src]

Create Logger middleware with format:

+ +
This example is not tested
+%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
+

impl<S> Middleware<S> for Logger
[src]

Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

+

Method is called after body stream get sent to peer.

+

Method is called when handler returns response, but before sending http message to peer. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Logger

impl Sync for Logger

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/middleware/trait.Middleware.html b/static/api/actix-web/0.7.2/actix_web/middleware/trait.Middleware.html new file mode 100644 index 0000000..6ae9c7e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/middleware/trait.Middleware.html @@ -0,0 +1,30 @@ +actix_web::middleware::Middleware - Rust

Trait actix_web::middleware::Middleware[][src]

pub trait Middleware<S>: 'static {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> { ... }
+
fn response(
        &self,
        req: &HttpRequest<S>,
        resp: HttpResponse
    ) -> Result<Response> { ... } +
fn finish(&self, req: &HttpRequest<S>, resp: &HttpResponse) -> Finished { ... } +}

Middleware definition

+
+

+ Provided Methods +

+
+

Method is called when request is ready. It may return +future, which should resolve before next middleware get called.

+

Method is called when handler returns response, +but before sending http message to peer.

+

Method is called after body stream get sent to peer.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/Field.t.html b/static/api/actix-web/0.7.2/actix_web/multipart/Field.t.html new file mode 100644 index 0000000..2b84085 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/Field.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Field.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/Multipart.t.html b/static/api/actix-web/0.7.2/actix_web/multipart/Multipart.t.html new file mode 100644 index 0000000..d15001e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/Multipart.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Multipart.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/MultipartItem.t.html b/static/api/actix-web/0.7.2/actix_web/multipart/MultipartItem.t.html new file mode 100644 index 0000000..76f6e22 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/MultipartItem.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.MultipartItem.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/enum.MultipartItem.html b/static/api/actix-web/0.7.2/actix_web/multipart/enum.MultipartItem.html new file mode 100644 index 0000000..de800ee --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/enum.MultipartItem.html @@ -0,0 +1,13 @@ +actix_web::multipart::MultipartItem - Rust

Enum actix_web::multipart::MultipartItem[][src]

pub enum MultipartItem<S> {
+    Field(Field<S>),
+    Nested(Multipart<S>),
+}

+ Variants

+

Multipart field

+

Nested multipart stream

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for MultipartItem<S>

impl<S> !Sync for MultipartItem<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/index.html b/static/api/actix-web/0.7.2/actix_web/multipart/index.html new file mode 100644 index 0000000..ec9dbb9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/index.html @@ -0,0 +1,27 @@ +actix_web::multipart - Rust

Module actix_web::multipart[][src]

Multipart requests support

+

Structs

+ + + + + + + + +
Field +

A single field in a multipart stream

+ +
Multipart +

The server-side implementation of multipart/form-data requests.

+ +

Enums

+ + + + +
MultipartItem + +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/multipart/sidebar-items.js new file mode 100644 index 0000000..fc05b6e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["MultipartItem",""]],"struct":[["Field","A single field in a multipart stream"],["Multipart","The server-side implementation of `multipart/form-data` requests."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/struct.Field.html b/static/api/actix-web/0.7.2/actix_web/multipart/struct.Field.html new file mode 100644 index 0000000..70be5b1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/struct.Field.html @@ -0,0 +1,61 @@ +actix_web::multipart::Field - Rust

Struct actix_web::multipart::Field[][src]

pub struct Field<S> { /* fields omitted */ }

A single field in a multipart stream

+
+

+ Methods +

+

impl<S> Field<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Get a map of headers

+

Get the content type of the field

+

Get the content disposition of the field, if it exists

+
+

+ Trait Implementations +

+

impl<S> Stream for Field<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+

impl<S> Debug for Field<S>
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for Field<S>

impl<S> !Sync for Field<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/multipart/struct.Multipart.html b/static/api/actix-web/0.7.2/actix_web/multipart/struct.Multipart.html new file mode 100644 index 0000000..2b8c4fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/multipart/struct.Multipart.html @@ -0,0 +1,63 @@ +actix_web::multipart::Multipart - Rust

Struct actix_web::multipart::Multipart[][src]

pub struct Multipart<S> { /* fields omitted */ }

The server-side implementation of multipart/form-data requests.

+

This will parse the incoming stream into MultipartItem instances via its +Stream implementation. +MultipartItem::Field contains multipart field. MultipartItem::Multipart +is used for nested multipart streams.

+
+

+ Methods +

+

impl Multipart<()>
[src]

Extract boundary info from headers.

+

impl<S> Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create multipart instance for boundary.

+
+

+ Trait Implementations +

+

impl<S> Stream for Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for Multipart<S>

impl<S> !Sync for Multipart<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/param/FromParam.t.html b/static/api/actix-web/0.7.2/actix_web/param/FromParam.t.html new file mode 100644 index 0000000..8ab3a55 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/param/FromParam.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.FromParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/param/Params.t.html b/static/api/actix-web/0.7.2/actix_web/param/Params.t.html new file mode 100644 index 0000000..1d74bfb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/param/Params.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Params.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/param/struct.Params.html b/static/api/actix-web/0.7.2/actix_web/param/struct.Params.html new file mode 100644 index 0000000..fbd62d1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/param/struct.Params.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Params.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/param/trait.FromParam.html b/static/api/actix-web/0.7.2/actix_web/param/trait.FromParam.html new file mode 100644 index 0000000..0859694 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/param/trait.FromParam.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/trait.FromParam.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/payload/Payload.t.html b/static/api/actix-web/0.7.2/actix_web/payload/Payload.t.html new file mode 100644 index 0000000..ffa1048 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/payload/Payload.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Payload.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/payload/PayloadBuffer.t.html b/static/api/actix-web/0.7.2/actix_web/payload/PayloadBuffer.t.html new file mode 100644 index 0000000..8f7ed80 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/payload/PayloadBuffer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.PayloadBuffer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/payload/struct.Payload.html b/static/api/actix-web/0.7.2/actix_web/payload/struct.Payload.html new file mode 100644 index 0000000..a7258fb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/payload/struct.Payload.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Payload.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/payload/struct.PayloadBuffer.html b/static/api/actix-web/0.7.2/actix_web/payload/struct.PayloadBuffer.html new file mode 100644 index 0000000..5a808fb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/payload/struct.PayloadBuffer.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.PayloadBuffer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/All.v.html b/static/api/actix-web/0.7.2/actix_web/pred/All.v.html new file mode 100644 index 0000000..140992f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/All.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.All.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/AllPredicate.t.html b/static/api/actix-web/0.7.2/actix_web/pred/AllPredicate.t.html new file mode 100644 index 0000000..cb470e6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/AllPredicate.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AllPredicate.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Any.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Any.v.html new file mode 100644 index 0000000..3e30f58 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Any.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Any.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/AnyPredicate.t.html b/static/api/actix-web/0.7.2/actix_web/pred/AnyPredicate.t.html new file mode 100644 index 0000000..758298d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/AnyPredicate.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AnyPredicate.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Connect.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Connect.v.html new file mode 100644 index 0000000..d66c1c5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Connect.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Delete.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Delete.v.html new file mode 100644 index 0000000..1561e17 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Delete.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Delete.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Get.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Get.v.html new file mode 100644 index 0000000..7c47d74 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Get.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Get.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Head.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Head.v.html new file mode 100644 index 0000000..ddf6186 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Head.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Head.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Header.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Header.v.html new file mode 100644 index 0000000..5c5e76e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Header.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Header.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Host.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Host.v.html new file mode 100644 index 0000000..4c08a00 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Host.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Host.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Method.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Method.v.html new file mode 100644 index 0000000..5c70d21 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Method.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Method.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Not.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Not.v.html new file mode 100644 index 0000000..6043ef9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Not.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Not.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Options.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Options.v.html new file mode 100644 index 0000000..d4c75a0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Options.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Options.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Patch.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Patch.v.html new file mode 100644 index 0000000..96aa110 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Patch.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Patch.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Post.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Post.v.html new file mode 100644 index 0000000..e6e9025 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Post.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Post.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Predicate.t.html b/static/api/actix-web/0.7.2/actix_web/pred/Predicate.t.html new file mode 100644 index 0000000..94bd7fe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Predicate.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Predicate.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Put.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Put.v.html new file mode 100644 index 0000000..34f2b0d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Put.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Put.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/Trace.v.html b/static/api/actix-web/0.7.2/actix_web/pred/Trace.v.html new file mode 100644 index 0000000..70adf73 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/Trace.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.Trace.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.All.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.All.html new file mode 100644 index 0000000..d65287d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.All.html @@ -0,0 +1,16 @@ +actix_web::pred::All - Rust

Function actix_web::pred::All[][src]

pub fn All<S: 'static, P: Predicate<S> + 'static>(pred: P) -> AllPredicate<S>

Return predicate that matches if all of supplied predicate matches.

+ +
+use actix_web::{pred, App, HttpResponse};
+
+fn main() {
+    App::new().resource("/index.html", |r| {
+        r.route()
+            .filter(
+                pred::All(pred::Get())
+                    .and(pred::Header("content-type", "text/plain")),
+            )
+            .f(|_| HttpResponse::MethodNotAllowed())
+    });
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Any.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Any.html new file mode 100644 index 0000000..1b43050 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Any.html @@ -0,0 +1,13 @@ +actix_web::pred::Any - Rust

Function actix_web::pred::Any[][src]

pub fn Any<S: 'static, P: Predicate<S> + 'static>(pred: P) -> AnyPredicate<S>

Return predicate that matches if any of supplied predicate matches.

+ +
+use actix_web::{pred, App, HttpResponse};
+
+fn main() {
+    App::new().resource("/index.html", |r| {
+        r.route()
+            .filter(pred::Any(pred::Get()).or(pred::Post()))
+            .f(|r| HttpResponse::MethodNotAllowed())
+    });
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Connect.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Connect.html new file mode 100644 index 0000000..1bd0bd2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Connect.html @@ -0,0 +1,2 @@ +actix_web::pred::Connect - Rust

Function actix_web::pred::Connect[][src]

pub fn Connect<S: 'static>() -> MethodPredicate<S>

Predicate to match CONNECT http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Delete.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Delete.html new file mode 100644 index 0000000..47eee0f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Delete.html @@ -0,0 +1,2 @@ +actix_web::pred::Delete - Rust

Function actix_web::pred::Delete[][src]

pub fn Delete<S: 'static>() -> MethodPredicate<S>

Predicate to match DELETE http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Get.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Get.html new file mode 100644 index 0000000..eaea6dd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Get.html @@ -0,0 +1,2 @@ +actix_web::pred::Get - Rust

Function actix_web::pred::Get[][src]

pub fn Get<S: 'static>() -> MethodPredicate<S>

Predicate to match GET http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Head.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Head.html new file mode 100644 index 0000000..25d8a67 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Head.html @@ -0,0 +1,2 @@ +actix_web::pred::Head - Rust

Function actix_web::pred::Head[][src]

pub fn Head<S: 'static>() -> MethodPredicate<S>

Predicate to match HEAD http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Header.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Header.html new file mode 100644 index 0000000..1f3b514 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Header.html @@ -0,0 +1,3 @@ +actix_web::pred::Header - Rust

Function actix_web::pred::Header[][src]

pub fn Header<S: 'static>(
    name: &'static str,
    value: &'static str
) -> HeaderPredicate<S>

Return predicate that matches if request contains specified header and +value.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Host.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Host.html new file mode 100644 index 0000000..8776273 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Host.html @@ -0,0 +1,13 @@ +actix_web::pred::Host - Rust

Function actix_web::pred::Host[][src]

pub fn Host<S: 'static, H: AsRef<str>>(host: H) -> HostPredicate<S>

Return predicate that matches if request contains specified Host name.

+ +
+use actix_web::{pred, App, HttpResponse};
+
+fn main() {
+    App::new().resource("/index.html", |r| {
+        r.route()
+            .filter(pred::Host("www.rust-lang.org"))
+            .f(|_| HttpResponse::MethodNotAllowed())
+    });
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Method.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Method.html new file mode 100644 index 0000000..7b76179 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Method.html @@ -0,0 +1,2 @@ +actix_web::pred::Method - Rust

Function actix_web::pred::Method[][src]

pub fn Method<S: 'static>(method: Method) -> MethodPredicate<S>

Predicate to match specified http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Not.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Not.html new file mode 100644 index 0000000..ed2ce16 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Not.html @@ -0,0 +1,2 @@ +actix_web::pred::Not - Rust

Function actix_web::pred::Not[][src]

pub fn Not<S: 'static, P: Predicate<S> + 'static>(pred: P) -> NotPredicate<S>

Return predicate that matches if supplied predicate does not match.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Options.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Options.html new file mode 100644 index 0000000..7785e4b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Options.html @@ -0,0 +1,2 @@ +actix_web::pred::Options - Rust

Function actix_web::pred::Options[][src]

pub fn Options<S: 'static>() -> MethodPredicate<S>

Predicate to match OPTIONS http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Patch.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Patch.html new file mode 100644 index 0000000..389aae5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Patch.html @@ -0,0 +1,2 @@ +actix_web::pred::Patch - Rust

Function actix_web::pred::Patch[][src]

pub fn Patch<S: 'static>() -> MethodPredicate<S>

Predicate to match PATCH http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Post.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Post.html new file mode 100644 index 0000000..f8ccdf0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Post.html @@ -0,0 +1,2 @@ +actix_web::pred::Post - Rust

Function actix_web::pred::Post[][src]

pub fn Post<S: 'static>() -> MethodPredicate<S>

Predicate to match POST http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Put.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Put.html new file mode 100644 index 0000000..092adf4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Put.html @@ -0,0 +1,2 @@ +actix_web::pred::Put - Rust

Function actix_web::pred::Put[][src]

pub fn Put<S: 'static>() -> MethodPredicate<S>

Predicate to match PUT http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/fn.Trace.html b/static/api/actix-web/0.7.2/actix_web/pred/fn.Trace.html new file mode 100644 index 0000000..844791b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/fn.Trace.html @@ -0,0 +1,2 @@ +actix_web::pred::Trace - Rust

Function actix_web::pred::Trace[][src]

pub fn Trace<S: 'static>() -> MethodPredicate<S>

Predicate to match TRACE http method

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/index.html b/static/api/actix-web/0.7.2/actix_web/pred/index.html new file mode 100644 index 0000000..873a510 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/index.html @@ -0,0 +1,153 @@ +actix_web::pred - Rust

Module actix_web::pred[][src]

Route match predicates

+

Structs

+ + + + + + + + +
AllPredicate +

Matches if all of supplied predicate matches.

+ +
AnyPredicate +

Matches if any of supplied predicate matches.

+ +

Traits

+ + + + +
Predicate +

Trait defines resource route predicate. +Predicate can modify request object. It is also possible to +to store extra attributes on request by using Extensions container, +Extensions container available via HttpRequest::extensions() method.

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
All +

Return predicate that matches if all of supplied predicate matches.

+ +
Any +

Return predicate that matches if any of supplied predicate matches.

+ +
Connect +

Predicate to match CONNECT http method

+ +
Delete +

Predicate to match DELETE http method

+ +
Get +

Predicate to match GET http method

+ +
Head +

Predicate to match HEAD http method

+ +
Header +

Return predicate that matches if request contains specified header and +value.

+ +
Host +

Return predicate that matches if request contains specified Host name.

+ +
Method +

Predicate to match specified http method

+ +
Not +

Return predicate that matches if supplied predicate does not match.

+ +
Options +

Predicate to match OPTIONS http method

+ +
Patch +

Predicate to match PATCH http method

+ +
Post +

Predicate to match POST http method

+ +
Put +

Predicate to match PUT http method

+ +
Trace +

Predicate to match TRACE http method

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/pred/sidebar-items.js new file mode 100644 index 0000000..ea11ef0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"fn":[["All","Return predicate that matches if all of supplied predicate matches."],["Any","Return predicate that matches if any of supplied predicate matches."],["Connect","Predicate to match CONNECT http method"],["Delete","Predicate to match DELETE http method"],["Get","Predicate to match GET http method"],["Head","Predicate to match HEAD http method"],["Header","Return predicate that matches if request contains specified header and value."],["Host","Return predicate that matches if request contains specified Host name."],["Method","Predicate to match specified http method"],["Not","Return predicate that matches if supplied predicate does not match."],["Options","Predicate to match OPTIONS http method"],["Patch","Predicate to match PATCH http method"],["Post","Predicate to match POST http method"],["Put","Predicate to match PUT http method"],["Trace","Predicate to match TRACE http method"]],"struct":[["AllPredicate","Matches if all of supplied predicate matches."],["AnyPredicate","Matches if any of supplied predicate matches."]],"trait":[["Predicate","Trait defines resource route predicate. Predicate can modify request object. It is also possible to to store extra attributes on request by using `Extensions` container, Extensions container available via `HttpRequest::extensions()` method."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/struct.AllPredicate.html b/static/api/actix-web/0.7.2/actix_web/pred/struct.AllPredicate.html new file mode 100644 index 0000000..cd08538 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/struct.AllPredicate.html @@ -0,0 +1,17 @@ +actix_web::pred::AllPredicate - Rust

Struct actix_web::pred::AllPredicate[][src]

pub struct AllPredicate<S>(_);

Matches if all of supplied predicate matches.

+
+

+ Methods +

+

impl<S> AllPredicate<S>
[src]

Add new predicate to list of predicates to check

+
+

+ Trait Implementations +

+

impl<S: 'static> Predicate<S> for AllPredicate<S>
[src]

Check if request matches predicate

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for AllPredicate<S>

impl<S> !Sync for AllPredicate<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/struct.AnyPredicate.html b/static/api/actix-web/0.7.2/actix_web/pred/struct.AnyPredicate.html new file mode 100644 index 0000000..c1d052c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/struct.AnyPredicate.html @@ -0,0 +1,17 @@ +actix_web::pred::AnyPredicate - Rust

Struct actix_web::pred::AnyPredicate[][src]

pub struct AnyPredicate<S>(_);

Matches if any of supplied predicate matches.

+
+

+ Methods +

+

impl<S> AnyPredicate<S>
[src]

Add new predicate to list of predicates to check

+
+

+ Trait Implementations +

+

impl<S: 'static> Predicate<S> for AnyPredicate<S>
[src]

Check if request matches predicate

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for AnyPredicate<S>

impl<S> !Sync for AnyPredicate<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/pred/trait.Predicate.html b/static/api/actix-web/0.7.2/actix_web/pred/trait.Predicate.html new file mode 100644 index 0000000..33141bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/pred/trait.Predicate.html @@ -0,0 +1,22 @@ +actix_web::pred::Predicate - Rust

Trait actix_web::pred::Predicate[][src]

pub trait Predicate<S> {
+    fn check(&self, _: &Request, _: &S) -> bool;
+}

Trait defines resource route predicate. +Predicate can modify request object. It is also possible to +to store extra attributes on request by using Extensions container, +Extensions container available via HttpRequest::extensions() method.

+
+

+ Required Methods +

+
+

Check if request matches predicate

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/resource/Resource.t.html b/static/api/actix-web/0.7.2/actix_web/resource/Resource.t.html new file mode 100644 index 0000000..887606b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/resource/Resource.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resource.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/resource/struct.Resource.html b/static/api/actix-web/0.7.2/actix_web/resource/struct.Resource.html new file mode 100644 index 0000000..f9a8cf1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/resource/struct.Resource.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Resource.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/route/Route.t.html b/static/api/actix-web/0.7.2/actix_web/route/Route.t.html new file mode 100644 index 0000000..8edf97f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/route/Route.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Route.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/route/struct.Route.html b/static/api/actix-web/0.7.2/actix_web/route/struct.Route.html new file mode 100644 index 0000000..f28a4b3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/route/struct.Route.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Route.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/ResourceDef.t.html b/static/api/actix-web/0.7.2/actix_web/router/ResourceDef.t.html new file mode 100644 index 0000000..3b37fa0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/ResourceDef.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ResourceDef.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/ResourceInfo.t.html b/static/api/actix-web/0.7.2/actix_web/router/ResourceInfo.t.html new file mode 100644 index 0000000..341e7e5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/ResourceInfo.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ResourceInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/ResourceType.t.html b/static/api/actix-web/0.7.2/actix_web/router/ResourceType.t.html new file mode 100644 index 0000000..8aa4f84 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/ResourceType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResourceType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/Router.t.html b/static/api/actix-web/0.7.2/actix_web/router/Router.t.html new file mode 100644 index 0000000..160b27f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/Router.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Router.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/enum.ResourceType.html b/static/api/actix-web/0.7.2/actix_web/router/enum.ResourceType.html new file mode 100644 index 0000000..cc54719 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/enum.ResourceType.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/enum.ResourceType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceDef.html b/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceDef.html new file mode 100644 index 0000000..5ae3763 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceDef.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.ResourceDef.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceInfo.html b/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceInfo.html new file mode 100644 index 0000000..b02f013 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/struct.ResourceInfo.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.ResourceInfo.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/router/struct.Router.html b/static/api/actix-web/0.7.2/actix_web/router/struct.Router.html new file mode 100644 index 0000000..ebbca90 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/router/struct.Router.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/dev/struct.Router.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/scope/Scope.t.html b/static/api/actix-web/0.7.2/actix_web/scope/Scope.t.html new file mode 100644 index 0000000..e6ad4f5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/scope/Scope.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Scope.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/scope/struct.Scope.html b/static/api/actix-web/0.7.2/actix_web/scope/struct.Scope.html new file mode 100644 index 0000000..9080755 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/scope/struct.Scope.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../actix_web/struct.Scope.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/HttpHandler.t.html b/static/api/actix-web/0.7.2/actix_web/server/HttpHandler.t.html new file mode 100644 index 0000000..2e0e1f6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/HttpHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.HttpHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/HttpHandlerTask.t.html b/static/api/actix-web/0.7.2/actix_web/server/HttpHandlerTask.t.html new file mode 100644 index 0000000..8ce45e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/HttpHandlerTask.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.HttpHandlerTask.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/HttpServer.t.html b/static/api/actix-web/0.7.2/actix_web/server/HttpServer.t.html new file mode 100644 index 0000000..ea322e1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/HttpServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/IntoHttpHandler.t.html b/static/api/actix-web/0.7.2/actix_web/server/IntoHttpHandler.t.html new file mode 100644 index 0000000..e106149 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/IntoHttpHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoHttpHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/KeepAlive.t.html b/static/api/actix-web/0.7.2/actix_web/server/KeepAlive.t.html new file mode 100644 index 0000000..b0116c0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/KeepAlive.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.KeepAlive.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/PauseServer.t.html b/static/api/actix-web/0.7.2/actix_web/server/PauseServer.t.html new file mode 100644 index 0000000..db97c5f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/PauseServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.PauseServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/Request.t.html b/static/api/actix-web/0.7.2/actix_web/server/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/ResumeServer.t.html b/static/api/actix-web/0.7.2/actix_web/server/ResumeServer.t.html new file mode 100644 index 0000000..efe2eca --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/ResumeServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ResumeServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/ServerSettings.t.html b/static/api/actix-web/0.7.2/actix_web/server/ServerSettings.t.html new file mode 100644 index 0000000..41cff1a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/ServerSettings.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ServerSettings.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/StopServer.t.html b/static/api/actix-web/0.7.2/actix_web/server/StopServer.t.html new file mode 100644 index 0000000..756f76e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/StopServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StopServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/enum.KeepAlive.html b/static/api/actix-web/0.7.2/actix_web/server/enum.KeepAlive.html new file mode 100644 index 0000000..d5b62af --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/enum.KeepAlive.html @@ -0,0 +1,29 @@ +actix_web::server::KeepAlive - Rust

Enum actix_web::server::KeepAlive[][src]

pub enum KeepAlive {
+    Timeout(usize),
+    Tcp(usize),
+    Os,
+    Disabled,
+}

Server keep-alive setting

+

+ Variants

+

Keep alive in seconds

+

Use SO_KEEPALIVE socket option, value in seconds

+

Relay on OS to shutdown tcp connection

+

Disabled

+
+

+ Trait Implementations +

+

impl Debug for KeepAlive
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for KeepAlive
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for KeepAlive
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Copy for KeepAlive
[src]

impl From<usize> for KeepAlive
[src]

Performs the conversion.

+

impl From<Option<usize>> for KeepAlive
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for KeepAlive

impl Sync for KeepAlive

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/fn.new.html b/static/api/actix-web/0.7.2/actix_web/server/fn.new.html new file mode 100644 index 0000000..fe839a0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/fn.new.html @@ -0,0 +1,18 @@ +actix_web::server::new - Rust

Function actix_web::server::new[][src]

pub fn new<F, U, H>(factory: F) -> HttpServer<H> where
    F: Fn() -> U + Sync + Send + 'static,
    U: IntoIterator<Item = H> + 'static,
    H: IntoHttpHandler + 'static, 

Create new http server with application factory.

+

This is shortcut for server::HttpServer::new() method.

+ +
+use actix_web::{actix, server, App, HttpResponse};
+
+fn main() {
+    let sys = actix::System::new("example");  // <- create Actix system
+
+    server::new(
+        || App::new()
+            .resource("/", |r| r.f(|_| HttpResponse::Ok())))
+        .bind("127.0.0.1:59090").unwrap()
+        .start();
+
+    sys.run();
+}
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/index.html b/static/api/actix-web/0.7.2/actix_web/server/index.html new file mode 100644 index 0000000..4afb063 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/index.html @@ -0,0 +1,94 @@ +actix_web::server - Rust

Module actix_web::server[][src]

Http server

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + +
HttpServer +

An HTTP Server

+ +
PauseServer +

Pause accepting incoming connections

+ +
Request +

Request's context

+ +
ResumeServer +

Resume accepting incoming connections

+ +
ServerSettings +

Various server settings

+ +
StopServer +

Stop incoming connection processing, stop all workers and exit.

+ +

Enums

+ + + + +
KeepAlive +

Server keep-alive setting

+ +

Traits

+ + + + + + + + + + + + +
HttpHandler +

Low level http request handler

+ +
HttpHandlerTask +

Low level http request handler

+ +
IntoHttpHandler +

Conversion helper trait

+ +

Functions

+ + + + +
new +

Create new http server with application factory.

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/message/Request.t.html b/static/api/actix-web/0.7.2/actix_web/server/message/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/message/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/message/struct.Request.html b/static/api/actix-web/0.7.2/actix_web/server/message/struct.Request.html new file mode 100644 index 0000000..ad77684 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/message/struct.Request.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/new.v.html b/static/api/actix-web/0.7.2/actix_web/server/new.v.html new file mode 100644 index 0000000..c2bfbbf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/new.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.new.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/settings/ServerSettings.t.html b/static/api/actix-web/0.7.2/actix_web/server/settings/ServerSettings.t.html new file mode 100644 index 0000000..41cff1a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/settings/ServerSettings.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ServerSettings.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/settings/struct.ServerSettings.html b/static/api/actix-web/0.7.2/actix_web/server/settings/struct.ServerSettings.html new file mode 100644 index 0000000..259de0d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/settings/struct.ServerSettings.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/server/struct.ServerSettings.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/server/sidebar-items.js new file mode 100644 index 0000000..7c43f76 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["KeepAlive","Server keep-alive setting"]],"fn":[["new","Create new http server with application factory."]],"struct":[["HttpServer","An HTTP Server"],["PauseServer","Pause accepting incoming connections"],["Request","Request's context"],["ResumeServer","Resume accepting incoming connections"],["ServerSettings","Various server settings"],["StopServer","Stop incoming connection processing, stop all workers and exit."]],"trait":[["HttpHandler","Low level http request handler"],["HttpHandlerTask","Low level http request handler"],["IntoHttpHandler","Conversion helper trait"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/srv/HttpServer.t.html b/static/api/actix-web/0.7.2/actix_web/server/srv/HttpServer.t.html new file mode 100644 index 0000000..ea322e1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/srv/HttpServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.HttpServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/srv/struct.HttpServer.html b/static/api/actix-web/0.7.2/actix_web/server/srv/struct.HttpServer.html new file mode 100644 index 0000000..9ae1f11 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/srv/struct.HttpServer.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/server/struct.HttpServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.HttpServer.html b/static/api/actix-web/0.7.2/actix_web/server/struct.HttpServer.html new file mode 100644 index 0000000..9fb0f66 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.HttpServer.html @@ -0,0 +1,121 @@ +actix_web::server::HttpServer - Rust

Struct actix_web::server::HttpServer[][src]

pub struct HttpServer<H> where
    H: IntoHttpHandler + 'static, 
{ /* fields omitted */ }

An HTTP Server

+
+

+ Methods +

+

impl<H> HttpServer<H> where
    H: IntoHttpHandler + 'static, 
[src]

Create new http server with application factory

+

Set number of workers to start.

+

By default http server uses number of available logical cpu as threads +count.

+

Set the maximum number of pending connections.

+

This refers to the number of clients that can be waiting to be served. +Exceeding this number results in the client getting an error when +attempting to connect. It should only affect servers under significant +load.

+

Generally set in the 64-2048 range. Default value is 2048.

+

This method should be called before bind() method call.

+

Set server keep-alive setting.

+

By default keep alive is set to a Os.

+

Set server host name.

+

Host name is used by application router aa a hostname for url +generation. Check [ConnectionInfo](./dev/struct.ConnectionInfo. +html#method.host) documentation for more information.

+

Stop actix system.

+

SystemExit message stops currently running system.

+

Set alternative address for ProcessSignals actor.

+

Disable signal handling

+

Timeout for graceful workers shutdown.

+

After receiving a stop signal, workers have this much time to finish +serving requests. Workers still alive after the timeout are force +dropped.

+

By default shutdown timeout sets to 30 seconds.

+

Disable HTTP/2 support

+

Important traits for Vec<u8>

Get addresses of bound sockets.

+

Important traits for Vec<u8>

Get addresses of bound sockets and the scheme for it.

+

This is useful when the server is bound from different sources +with some sockets listening on http and some listening on https +and the user should be presented with an enumeration of which +socket requires which protocol.

+

Use listener for accepting incoming connection requests

+

HttpServer does not change any configuration for TcpListener, +it needs to be configured before passing it to listen() method.

+

Use listener for accepting incoming tls connection requests

+

HttpServer does not change any configuration for TcpListener, +it needs to be configured before passing it to listen() method.

+

Use listener for accepting incoming tls connection requests

+

This method sets alpn protocols to "h2" and "http/1.1"

+

The socket address to bind

+

To bind multiple addresses this method can be called multiple times.

+

The ssl socket address to bind

+

To bind multiple addresses this method can be called multiple times.

+

Start listening for incoming tls connections.

+

This method sets alpn protocols to "h2" and "http/1.1"

+

impl<H: IntoHttpHandler> HttpServer<H>
[src]

Start listening for incoming connections.

+

This method starts number of http handler workers in separate threads. +For each address this method starts separate thread which does +accept() in a loop.

+

This methods panics if no socket addresses get bound.

+

This method requires to run within properly configured Actix system.

+ +
+extern crate actix_web;
+use actix_web::{actix, server, App, HttpResponse};
+
+fn main() {
+    let sys = actix::System::new("example");  // <- create Actix system
+
+    server::new(|| App::new().resource("/", |r| r.h(|_: &_| HttpResponse::Ok())))
+        .bind("127.0.0.1:0")
+        .expect("Can not bind to 127.0.0.1:0")
+        .start();
+   sys.run();  // <- Run actix system, this method starts all async processes
+}
+

Spawn new thread and start listening for incoming connections.

+

This method spawns new thread and starts new actix system. Other than +that it is similar to start() method. This method blocks.

+

This methods panics if no socket addresses get bound.

+ +
This example is not tested
+use actix_web::*;
+
+fn main() {
+    HttpServer::new(|| App::new().resource("/", |r| r.h(|_| HttpResponse::Ok())))
+        .bind("127.0.0.1:0")
+        .expect("Can not bind to 127.0.0.1:0")
+        .run();
+}
+

impl<H: IntoHttpHandler> HttpServer<H>
[src]

Start listening for incoming connections from a stream.

+

This method uses only one thread for handling incoming connections.

+
+

+ Trait Implementations +

+

impl<H> Actor for HttpServer<H> where
    H: IntoHttpHandler
[src]

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<H> !Send for HttpServer<H>

impl<H> !Sync for HttpServer<H>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.PauseServer.html b/static/api/actix-web/0.7.2/actix_web/server/struct.PauseServer.html new file mode 100644 index 0000000..0a61100 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.PauseServer.html @@ -0,0 +1,18 @@ +actix_web::server::PauseServer - Rust

Struct actix_web::server::PauseServer[][src]

pub struct PauseServer;

Pause accepting incoming connections

+

If socket contains some pending connection, they might be dropped. +All opened connection remains active.

+
+

+ Trait Implementations +

+

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Message for PauseServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for PauseServer

impl Sync for PauseServer

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.Request.html b/static/api/actix-web/0.7.2/actix_web/server/struct.Request.html new file mode 100644 index 0000000..6957a6d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.Request.html @@ -0,0 +1,45 @@ +actix_web::server::Request - Rust

Struct actix_web::server::Request[][src]

pub struct Request { /* fields omitted */ }

Request's context

+
+

+ Methods +

+

impl Request
[src]

Read the Request Uri.

+

Read the Request method.

+

Read the Request Version.

+

The target path of this Request.

+

Returns Request's headers.

+

Returns mutable Request's headers.

+

Peer socket address

+

Peer address is actual socket address, if proxy is used in front of +actix http server, then peer address would be address of this proxy.

+

To get client connection information connection_info() method should +be used.

+

Checks if a connection should be kept alive.

+

Request extensions

+

Mutable reference to a the request's extensions

+

Check if request requires connection upgrade

+

Get ConnectionInfo for the correct request.

+

Server settings

+
+

+ Trait Implementations +

+

impl HttpMessage for Request
[src]

+

Type of message payload stream

+

Read the message headers.

+

Message payload stream

+

Read the request content type. If request does not contain Content-Type header, empty str get returned. Read more

+

Get content type encoding Read more

+

Convert the request content type to a known mime type.

+

Check if request has chunked transfer encoding

+

Load http message body. Read more

+

Parse application/x-www-form-urlencoded encoded request's body. Return UrlEncoded future. Form can be deserialized to any type that implements Deserialize trait from serde. Read more

+

Parse application/json encoded body. Return JsonBody<T> future. It resolves to a T value. Read more

+

Return stream to http payload processes as multipart. Read more

+

Return stream of lines.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Request

impl !Sync for Request

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.ResumeServer.html b/static/api/actix-web/0.7.2/actix_web/server/struct.ResumeServer.html new file mode 100644 index 0000000..a2a5e26 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.ResumeServer.html @@ -0,0 +1,16 @@ +actix_web::server::ResumeServer - Rust

Struct actix_web::server::ResumeServer[][src]

pub struct ResumeServer;

Resume accepting incoming connections

+
+

+ Trait Implementations +

+

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Message for ResumeServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResumeServer

impl Sync for ResumeServer

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.ServerSettings.html b/static/api/actix-web/0.7.2/actix_web/server/struct.ServerSettings.html new file mode 100644 index 0000000..93d71d1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.ServerSettings.html @@ -0,0 +1,22 @@ +actix_web::server::ServerSettings - Rust

Struct actix_web::server::ServerSettings[][src]

pub struct ServerSettings { /* fields omitted */ }

Various server settings

+
+

+ Methods +

+

impl ServerSettings
[src]

Returns the socket address of the local half of this TCP connection

+

Returns true if connection is secure(https)

+

Returns host header value

+

Returns default CpuPool for server

+
+

+ Trait Implementations +

+

impl Clone for ServerSettings
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Default for ServerSettings
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ServerSettings

impl !Sync for ServerSettings

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/struct.StopServer.html b/static/api/actix-web/0.7.2/actix_web/server/struct.StopServer.html new file mode 100644 index 0000000..5535016 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/struct.StopServer.html @@ -0,0 +1,25 @@ +actix_web::server::StopServer - Rust

Struct actix_web::server::StopServer[][src]

pub struct StopServer {
+    pub graceful: bool,
+}

Stop incoming connection processing, stop all workers and exit.

+

If server starts with spawn() method, then spawned thread get terminated.

+

+ Fields

+ +

Whether to try and shut down gracefully

+
+

+ Trait Implementations +

+

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Message for StopServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for StopServer

impl Sync for StopServer

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandler.html b/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandler.html new file mode 100644 index 0000000..3957d1b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandler.html @@ -0,0 +1,29 @@ +actix_web::server::HttpHandler - Rust

Trait actix_web::server::HttpHandler[][src]

pub trait HttpHandler: 'static {
+    type Task: HttpHandlerTask;
+    fn handle(&self, req: Request) -> Result<Self::Task, Request>;
+}

Low level http request handler

+
+

+ Associated Types +

+
+

Request handling task

+
+

+ Required Methods +

+
+

Handle request

+
+

+ Implementations on Foreign Types +

+

impl HttpHandler for Box<HttpHandler<Task = Box<HttpHandlerTask>>>
[src]

+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandlerTask.html b/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandlerTask.html new file mode 100644 index 0000000..b588e63 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/trait.HttpHandlerTask.html @@ -0,0 +1,31 @@ +actix_web::server::HttpHandlerTask - Rust

Trait actix_web::server::HttpHandlerTask[][src]

pub trait HttpHandlerTask {
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error>;
+
+    fn poll_completed(&mut self) -> Poll<(), Error> { ... }
+
fn disconnected(&mut self) { ... } +}

Low level http request handler

+
+

+ Required Methods +

+
+

Poll task when io object is available

+
+

+ Provided Methods +

+
+

Poll task, this method is used before or after io object is available

+

Connection is disconnected

+
+

+ Implementations on Foreign Types +

+

impl HttpHandlerTask for Box<HttpHandlerTask>
[src]

+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/server/trait.IntoHttpHandler.html b/static/api/actix-web/0.7.2/actix_web/server/trait.IntoHttpHandler.html new file mode 100644 index 0000000..10544d7 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/server/trait.IntoHttpHandler.html @@ -0,0 +1,28 @@ +actix_web::server::IntoHttpHandler - Rust

Trait actix_web::server::IntoHttpHandler[][src]

pub trait IntoHttpHandler {
+    type Handler: HttpHandler;
+    fn into_handler(self) -> Self::Handler;
+}

Conversion helper trait

+
+

+ Associated Types +

+
+

The associated type which is result of conversion.

+
+

+ Required Methods +

+
+

Convert into HttpHandler object.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/sidebar-items.js new file mode 100644 index 0000000..baaaf26 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Binary","Represents various types of binary body. `Content-Length` header is set to length of the body."],["Body","Represents various types of http message body."],["Either","Combines two different responder types into a single type"]],"macro":[["header",""]],"mod":[["actix","Re-exports actix's prelude"],["client","Http client api"],["dev","The `actix-web` prelude for library developers"],["error","Error and Result module"],["fs","Static files support"],["http","Various HTTP related types"],["middleware","Middlewares"],["multipart","Multipart requests support"],["pred","Route match predicates"],["server","Http server"],["test","Various helpers for Actix applications to use during testing."],["ws","`WebSocket` support for Actix"]],"struct":[["App","Structure that follows the builder pattern for building application instances."],["Extensions","A type map of request extensions."],["Form","Extract typed information from the request's body."],["HttpContext","Execution context for http actors"],["HttpRequest","An HTTP Request"],["HttpResponse","An HTTP Response"],["Json","Json helper"],["Path","Extract typed information from the request's path."],["Query","Extract typed information from from the request's query."],["Request","Request's context"],["Scope","Resources scope"],["State","Access an application state"]],"trait":[["AsyncResponder","Convenience trait that converts `Future` object to a `Boxed` future"],["FromRequest","Trait implemented by types that can be extracted from request."],["HttpMessage","Trait that implements general purpose operations on http messages"],["Responder","Trait implemented by types that generate responses for clients."]],"type":[["FutureResponse","Convenience type alias"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.App.html b/static/api/actix-web/0.7.2/actix_web/struct.App.html new file mode 100644 index 0000000..a19d646 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.App.html @@ -0,0 +1,228 @@ +actix_web::App - Rust

Struct actix_web::App[][src]

pub struct App<S = ()> { /* fields omitted */ }

Structure that follows the builder pattern for building application +instances.

+
+

+ Methods +

+

impl App<()>
[src]

Create application with empty state. Application can +be configured with a builder-like pattern.

+

impl<S> App<S> where
    S: 'static, 
[src]

Create application with specified state. Application can be +configured with a builder-like pattern.

+

State is shared with all resources within same application and +could be accessed with HttpRequest::state() method.

+

Note: http server accepts an application factory rather than +an application instance. Http server constructs an application +instance for each thread, thus application state must be constructed +multiple times. If you want to share state between different +threads, a shared object should be used, e.g. Arc. Application +state does not need to be Send and Sync.

+

Important traits for &'a mut R

Get reference to the application state

+

Set application prefix.

+

Only requests that match the application's prefix get +processed by this application.

+

The application prefix always contains a leading slash (/). +If the supplied prefix does not contain leading slash, it is +inserted.

+

Prefix should consist of valid path segments. i.e for an +application with the prefix /app any request with the paths +/app, /app/ or /app/test would match, but the path +/application would not.

+

In the following example only requests with an /app/ path +prefix get handled. Requests with path /app/test/ would be +handled, while requests with the paths /application or +/other/... would return NOT FOUND. It is also possible to +handle /app path, to do this you can register resource for +empty string ""

+ +
+use actix_web::{http, App, HttpResponse};
+
+fn main() {
+    let app = App::new()
+        .prefix("/app")
+        .resource("", |r| r.f(|_| HttpResponse::Ok()))  // <- handle `/app` path
+        .resource("/", |r| r.f(|_| HttpResponse::Ok())) // <- handle `/app/` path
+        .resource("/test", |r| {
+            r.get().f(|_| HttpResponse::Ok());
+            r.head().f(|_| HttpResponse::MethodNotAllowed());
+        })
+        .finish();
+}
+

Add match predicate to application.

+ +
+App::new()
+    .filter(pred::Host("www.rust-lang.org"))
+    .resource("/path", |r| r.f(|_| HttpResponse::Ok()))
+

Configure route for a specific path.

+

This is a simplified version of the App::resource() method. +Handler functions need to accept one request extractor +argument.

+

This method could be called multiple times, in that case +multiple routes would be registered for same resource path.

+ +
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn main() {
+    let app = App::new()
+        .route("/test", http::Method::GET, |_: HttpRequest| {
+            HttpResponse::Ok()
+        })
+        .route("/test", http::Method::POST, |_: HttpRequest| {
+            HttpResponse::MethodNotAllowed()
+        });
+}
+

Configure scope for common root path.

+

Scopes collect multiple paths under a common path prefix. +Scope path can contain variable path segments as resources.

+ +
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn main() {
+    let app = App::new().scope("/{project_id}", |scope| {
+        scope
+            .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+            .resource("/path2", |r| r.f(|_| HttpResponse::Ok()))
+            .resource("/path3", |r| r.f(|_| HttpResponse::MethodNotAllowed()))
+    });
+}
+

In the above example, three routes get added:

+
    +
  • /{project_id}/path1
  • +
  • /{project_id}/path2
  • +
  • /{project_id}/path3
  • +
+

Configure resource for a specific path.

+

Resources may have variable path segments. For example, a +resource with the path /a/{name}/c would match all incoming +requests with paths such as /a/b/c, /a/1/c, or /a/etc/c.

+

A variable segment is specified in the form {identifier}, +where the identifier can be used later in a request handler to +access the matched value for that segment. This is done by +looking up the identifier in the Params object returned by +HttpRequest.match_info() method.

+

By default, each segment matches the regular expression [^{}/]+.

+

You can also specify a custom regex in the form {identifier:regex}:

+

For instance, to route GET-requests on any route matching +/users/{userid}/{friend} and store userid and friend in +the exposed Params object:

+ +
+use actix_web::{http, App, HttpResponse};
+
+fn main() {
+    let app = App::new().resource("/users/{userid}/{friend}", |r| {
+        r.get().f(|_| HttpResponse::Ok());
+        r.head().f(|_| HttpResponse::MethodNotAllowed());
+    });
+}
+

Default resource to be used if no matching route could be found.

+

Set default content encoding. ContentEncoding::Auto is set by default.

+

Register an external resource.

+

External resources are useful for URL generation purposes only +and are never considered for matching at request time. Calls to +HttpRequest::url_for() will work as expected.

+ +
+use actix_web::{App, HttpRequest, HttpResponse, Result};
+
+fn index(req: &HttpRequest) -> Result<HttpResponse> {
+    let url = req.url_for("youtube", &["oHg5SJYRHA0"])?;
+    assert_eq!(url.as_str(), "https://youtube.com/watch/oHg5SJYRHA0");
+    Ok(HttpResponse::Ok().into())
+}
+
+fn main() {
+    let app = App::new()
+        .resource("/index.html", |r| r.get().f(index))
+        .external_resource("youtube", "https://youtube.com/watch/{video_id}")
+        .finish();
+}
+

Configure handler for specific path prefix.

+

A path prefix consists of valid path segments, i.e for the +prefix /app any request with the paths /app, /app/ or +/app/test would match, but the path /application would +not.

+

Path tail is available as tail parameter in request's match_dict.

+ +
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn main() {
+    let app = App::new().handler("/app", |req: &HttpRequest| match *req.method() {
+        http::Method::GET => HttpResponse::Ok(),
+        http::Method::POST => HttpResponse::MethodNotAllowed(),
+        _ => HttpResponse::NotFound(),
+    });
+}
+

Register a middleware.

+

Run external configuration as part of the application building +process

+

This function is useful for moving parts of configuration to a +different module or event library. For example we can move +some of the resources' configuration to different module.

+ +
+use actix_web::{fs, middleware, App, HttpResponse};
+
+// this function could be located in different module
+fn config(app: App) -> App {
+    app.resource("/test", |r| {
+        r.get().f(|_| HttpResponse::Ok());
+        r.head().f(|_| HttpResponse::MethodNotAllowed());
+    })
+}
+
+fn main() {
+    let app = App::new()
+        .middleware(middleware::Logger::default())
+        .configure(config)  // <- register resources
+        .handler("/static", fs::StaticFiles::new(".").unwrap());
+}
+

Finish application configuration and create HttpHandler object.

+

Important traits for Box<R>

Convenience method for creating Box<HttpHandler> instances.

+

This method is useful if you need to register multiple +application instances with different state.

+ +
+use actix_web::{server, App, HttpResponse};
+
+struct State1;
+
+struct State2;
+
+fn main() {
+    server::new(|| {
+        vec![
+            App::with_state(State1)
+                .prefix("/app1")
+                .resource("/", |r| r.f(|r| HttpResponse::Ok()))
+                .boxed(),
+            App::with_state(State2)
+                .prefix("/app2")
+                .resource("/", |r| r.f(|r| HttpResponse::Ok()))
+                .boxed(),
+        ]
+    }).bind("127.0.0.1:8080")
+        .unwrap()
+        .run()
+}
+
+

+ Trait Implementations +

+

impl Default for App<()>
[src]

Returns the "default value" for a type. Read more

+

impl<S: 'static> IntoHttpHandler for App<S>
[src]

+

The associated type which is result of conversion.

+

Convert into HttpHandler object.

+

impl<'a, S: 'static> IntoHttpHandler for &'a mut App<S>
[src]

+

The associated type which is result of conversion.

+

Convert into HttpHandler object.

+
+

+ Auto Trait Implementations +

+
+

impl<S = ()> !Send for App<S>

impl<S = ()> !Sync for App<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Extensions.html b/static/api/actix-web/0.7.2/actix_web/struct.Extensions.html new file mode 100644 index 0000000..1d93169 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Extensions.html @@ -0,0 +1,24 @@ +actix_web::Extensions - Rust

Struct actix_web::Extensions[][src]

pub struct Extensions { /* fields omitted */ }

A type map of request extensions.

+
+

+ Methods +

+

impl Extensions
[src]

Insert a type into this Extensions.

+

If a extension of this type already existed, it will +be returned.

+

Get a reference to a type previously inserted on this Extensions.

+

Get a mutable reference to a type previously inserted on this Extensions.

+

Remove a type from this Extensions.

+

If a extension of this type existed, it will be returned.

+

Clear the Extensions of all inserted extensions.

+
+

+ Trait Implementations +

+

impl Debug for Extensions
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Extensions

impl !Sync for Extensions

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Form.html b/static/api/actix-web/0.7.2/actix_web/struct.Form.html new file mode 100644 index 0000000..f03ecfe --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Form.html @@ -0,0 +1,58 @@ +actix_web::Form - Rust

Struct actix_web::Form[][src]

pub struct Form<T>(pub T);

Extract typed information from the request's body.

+

To extract typed information from request's body, the type T must +implement the Deserialize trait from serde.

+

FormConfig allows to configure extraction +process.

+

Example

+
+#[macro_use] extern crate serde_derive;
+use actix_web::{App, Form, Result};
+
+#[derive(Deserialize)]
+struct FormData {
+    username: String,
+}
+
+/// extract form data using serde
+/// this handler get called only if content type is *x-www-form-urlencoded*
+/// and content of the request could be deserialized to a `FormData` struct
+fn index(form: Form<FormData>) -> Result<String> {
+    Ok(format!("Welcome {}!", form.username))
+}
+
+

+ Methods +

+

impl<T> Form<T>
[src]

Deconstruct to an inner value

+
+

+ Trait Implementations +

+

impl<T: PartialEq> PartialEq for Form<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Form<T>
[src]

impl<T: PartialOrd> PartialOrd for Form<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Form<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> Deref for Form<T>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Form<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Form<T> where
    T: DeserializeOwned + 'static,
    S: 'static, 
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+

impl<T: Debug> Debug for Form<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Form<T>
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for Form<T> where
    T: Send

impl<T> Sync for Form<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.HttpContext.html b/static/api/actix-web/0.7.2/actix_web/struct.HttpContext.html new file mode 100644 index 0000000..f1974ab --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.HttpContext.html @@ -0,0 +1,40 @@ +actix_web::HttpContext - Rust

Struct actix_web::HttpContext[][src]

pub struct HttpContext<A, S = ()> where
    A: Actor<Context = HttpContext<A, S>>, 
{ /* fields omitted */ }

Execution context for http actors

+
+

+ Methods +

+

impl<A, S: 'static> HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Create a new HTTP Context from a request and an actor

+

Create a new HTTP Context

+

impl<A, S> HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Important traits for &'a mut R

Shared application state

+

Incoming request

+

Write payload

+

Indicate end of streaming payload. Also this method calls Self::close.

+

Returns drain future

+

Check if connection still open

+

Handle of the running future

+

SpawnHandle is the handle returned by AsyncContext::spawn() method.

+
+

+ Trait Implementations +

+

impl<A, S> ActorContext for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Immediately stop processing incoming messages and switch to a stopping state Read more

+

Terminate actor execution

+

Actor execution state

+

impl<A, S> AsyncContext<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

+

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

+

Cancel future. handle is a value returned by spawn method.

+

Return Address of the context

+

Check if context is paused (waiting for future completion or stopping)

+

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

+

This method is similar to add_stream but it skips stream errors. Read more

+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

+

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

+

Spawns job to execute closure with specified interval

+

impl<A, S> AsyncContextParts<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
    A: Actor<Context = HttpContext<A, S>> + Handler<M>,
    M: Message + Send + 'static,
    M::Result: Send
[src]

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A, S = ()> !Send for HttpContext<A, S>

impl<A, S = ()> !Sync for HttpContext<A, S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.HttpRequest.html b/static/api/actix-web/0.7.2/actix_web/struct.HttpRequest.html new file mode 100644 index 0000000..62a2ac6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.HttpRequest.html @@ -0,0 +1,118 @@ +actix_web::HttpRequest - Rust

Struct actix_web::HttpRequest[][src]

pub struct HttpRequest<S = ()> { /* fields omitted */ }

An HTTP Request

+
+

+ Methods +

+

impl<S> HttpRequest<S>
[src]

Important traits for &'a mut R

Shared application state

+

Server request

+

Request extensions

+

Mutable reference to a the request's extensions

+

Create http response

+

Create http response builder

+

Read the Request Uri.

+

Read the Request method.

+

Read the Request Version.

+

The target path of this Request.

+

Get ConnectionInfo for the correct request.

+

Generate url for named resource

+ +
+fn index(req: HttpRequest) -> HttpResponse {
+    let url = req.url_for("foo", &["1", "2", "3"]); // <- generate url for "foo" resource
+    HttpResponse::Ok().into()
+}
+
+fn main() {
+    let app = App::new()
+        .resource("/test/{one}/{two}/{three}", |r| {
+             r.name("foo");  // <- set resource name, then it could be used in `url_for`
+             r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+        })
+        .finish();
+}
+

Generate url for named resource

+

This method is similar to HttpRequest::url_for() but it can be used +for urls that do not contain variable parts.

+

This method returns reference to current RouteInfo object.

+

Peer socket address

+

Peer address is actual socket address, if proxy is used in front of +actix http server, then peer address would be address of this proxy.

+

To get client connection information connection_info() method should +be used.

+

url query parameters.

+

The query string in the URL.

+

E.g., id=10

+

Load request cookies.

+

Return request cookie.

+

Get a reference to the Params object.

+

Params is a container for url parameters. +A variable segment is specified in the form {identifier}, +where the identifier can be used later in a request handler to +access the matched value for that segment.

+

Set read buffer capacity

+

Default buffer capacity is 32Kb.

+
+

+ Methods from Deref<Target = Request> +

+

Read the Request Uri.

+

Read the Request method.

+

Read the Request Version.

+

The target path of this Request.

+

Returns Request's headers.

+

Peer socket address

+

Peer address is actual socket address, if proxy is used in front of +actix http server, then peer address would be address of this proxy.

+

To get client connection information connection_info() method should +be used.

+

Checks if a connection should be kept alive.

+

Request extensions

+

Mutable reference to a the request's extensions

+

Check if request requires connection upgrade

+

Get ConnectionInfo for the correct request.

+

Server settings

+
+

+ Trait Implementations +

+

impl<S> HttpMessage for HttpRequest<S>
[src]

+

Type of message payload stream

+

Read the message headers.

+

Message payload stream

+

Read the request content type. If request does not contain Content-Type header, empty str get returned. Read more

+

Get content type encoding Read more

+

Convert the request content type to a known mime type.

+

Check if request has chunked transfer encoding

+

Load http message body. Read more

+

Parse application/x-www-form-urlencoded encoded request's body. Return UrlEncoded future. Form can be deserialized to any type that implements Deserialize trait from serde. Read more

+

Parse application/json encoded body. Return JsonBody<T> future. It resolves to a T value. Read more

+

Return stream to http payload processes as multipart. Read more

+

Return stream of lines.

+

impl<S> Deref for HttpRequest<S>
[src]

+

The resulting type after dereferencing.

+

Dereferences the value.

+

impl<S> Drop for HttpRequest<S>
[src]

Executes the destructor for this type. Read more

+

impl<S> Clone for HttpRequest<S>
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<S> FromRequest<S> for HttpRequest<S>
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+

impl<S> Debug for HttpRequest<S>
[src]

Formats the value using the given formatter. Read more

+

impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder
[src]

Performs the conversion.

+

impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder
[src]

Create ClientRequestBuilder from HttpRequest

+

It is useful for proxy requests. This implementation +copies all request headers and the method.

+

Performs the conversion.

+

impl<S> RequestIdentity for HttpRequest<S>
[src]

Return the claimed identity of the user associated request or None if no identity can be found associated with the request. Read more

+

Remember identity.

+

This method is used to 'forget' the current identity on subsequent requests. Read more

+

impl<S> RequestSession for HttpRequest<S>
[src]

Get the session from the request

+
+

+ Auto Trait Implementations +

+
+

impl<S = ()> !Send for HttpRequest<S>

impl<S = ()> !Sync for HttpRequest<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.HttpResponse.html b/static/api/actix-web/0.7.2/actix_web/struct.HttpResponse.html new file mode 100644 index 0000000..bab7c1c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.HttpResponse.html @@ -0,0 +1,62 @@ +actix_web::HttpResponse - Rust

Struct actix_web::HttpResponse[][src]

pub struct HttpResponse(_, _);

An HTTP Response

+
+

+ Methods +

+

impl HttpResponse
[src]

impl HttpResponse
[src]

Create http response builder with specific status.

+

Create http response builder

+

Constructs a response

+

Constructs a response with body

+

Constructs an error response

+

Convert HttpResponse to a HttpResponseBuilder

+

The source error for this response

+

Get the HTTP version of this response

+

Get the headers from the response

+

Get a mutable reference to the headers

+

Get an iterator for the cookies set by this response

+

Add a cookie to this response

+

Remove all cookies with the given name from this response. Returns +the number of cookies removed.

+

Get the response status code

+

Set the StatusCode for this response

+

Get custom reason for the response

+

Important traits for &'a mut R

Set the custom reason for the response

+

Important traits for &'a mut R

Set connection type

+

Connection upgrade status

+

Keep-alive status for this connection

+

is chunked encoding enabled

+

Content encoding

+

Important traits for &'a mut R

Set content encoding

+

Get body os this response

+

Set a body

+

Set a body and return previous body value

+

Size of response in bytes, excluding HTTP headers

+

Set write buffer capacity

+

Set write buffer capacity

+
+

+ Trait Implementations +

+

impl Responder for HttpResponse
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+

impl Debug for HttpResponse
[src]

Formats the value using the given formatter. Read more

+

impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse
[src]

Helper converters

+

Performs the conversion.

+

impl From<HttpResponseBuilder> for HttpResponse
[src]

Performs the conversion.

+

impl From<&'static str> for HttpResponse
[src]

Performs the conversion.

+

impl From<&'static [u8]> for HttpResponse
[src]

Performs the conversion.

+

impl From<String> for HttpResponse
[src]

Performs the conversion.

+

impl<'a> From<&'a String> for HttpResponse
[src]

Performs the conversion.

+

impl From<Bytes> for HttpResponse
[src]

Performs the conversion.

+

impl From<BytesMut> for HttpResponse
[src]

Performs the conversion.

+

impl From<Error> for HttpResponse
[src]

Convert Error to a HttpResponse instance

+

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for HttpResponse

impl !Sync for HttpResponse

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Json.html b/static/api/actix-web/0.7.2/actix_web/struct.Json.html new file mode 100644 index 0000000..ae831ad --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Json.html @@ -0,0 +1,76 @@ +actix_web::Json - Rust

Struct actix_web::Json[][src]

pub struct Json<T>(pub T);

Json helper

+

Json can be used for two different purpose. First is for json response +generation and second is for extracting typed information from request's +payload.

+

To extract typed information from request's body, the type T must +implement the Deserialize trait from serde.

+

JsonConfig allows to configure extraction +process.

+

Example

+
+#[macro_use] extern crate serde_derive;
+use actix_web::{App, Json, Result, http};
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// deserialize `Info` from request's body
+fn index(info: Json<Info>) -> Result<String> {
+    Ok(format!("Welcome {}!", info.username))
+}
+
+fn main() {
+    let app = App::new().resource(
+       "/index.html",
+       |r| r.method(http::Method::POST).with(index));  // <- use `with` extractor
+}
+

The Json type allows you to respond with well-formed JSON data: simply +return a value of type Json where T is the type of a structure +to serialize into JSON. The type T must implement the Serialize +trait from serde.

+ +
+#[derive(Serialize)]
+struct MyObj {
+    name: String,
+}
+
+fn index(req: HttpRequest) -> Result<Json<MyObj>> {
+    Ok(Json(MyObj {
+        name: req.match_info().query("name")?,
+    }))
+}
+
+

+ Methods +

+

impl<T> Json<T>
[src]

Deconstruct to an inner value

+
+

+ Trait Implementations +

+

impl<T> Deref for Json<T>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Json<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T> Debug for Json<T> where
    T: Debug
[src]

Formats the value using the given formatter. Read more

+

impl<T> Display for Json<T> where
    T: Display
[src]

Formats the value using the given formatter. Read more

+

impl<T: Serialize> Responder for Json<T>
[src]

+

The associated item which can be returned.

+

+

The associated error which can be returned.

+

Convert itself to AsyncResult or Error.

+

impl<T, S> FromRequest<S> for Json<T> where
    T: DeserializeOwned + 'static,
    S: 'static, 
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for Json<T> where
    T: Send

impl<T> Sync for Json<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Path.html b/static/api/actix-web/0.7.2/actix_web/struct.Path.html new file mode 100644 index 0000000..fda2b5d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Path.html @@ -0,0 +1,79 @@ +actix_web::Path - Rust

Struct actix_web::Path[][src]

pub struct Path<T> { /* fields omitted */ }

Extract typed information from the request's path.

+

Example

+
+use actix_web::{http, App, Path, Result};
+
+/// extract path info from "/{username}/{count}/index.html" url
+/// {username} - deserializes to a String
+/// {count} -  - deserializes to a u32
+fn index(info: Path<(String, u32)>) -> Result<String> {
+    Ok(format!("Welcome {}! {}", info.0, info.1))
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/{count}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with(index),
+    ); // <- use `with` extractor
+}
+

It is possible to extract path information to a specific type that +implements Deserialize trait from serde.

+ +
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Path, Result};
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(info: Path<Info>) -> Result<String> {
+    Ok(format!("Welcome {}!", info.username))
+}
+
+fn main() {
+    let app = App::new().resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with(index),
+    ); // <- use `with` extractor
+}
+
+

+ Methods +

+

impl<T> Path<T>
[src]

Deconstruct to an inner value

+
+

+ Trait Implementations +

+

impl<T: PartialEq> PartialEq for Path<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Path<T>
[src]

impl<T: PartialOrd> PartialOrd for Path<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Path<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> AsRef<T> for Path<T>
[src]

Important traits for &'a mut R

Performs the conversion.

+

impl<T> Deref for Path<T>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Path<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Path<T> where
    T: DeserializeOwned
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+

impl<T: Debug> Debug for Path<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Path<T>
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for Path<T> where
    T: Send

impl<T> Sync for Path<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Query.html b/static/api/actix-web/0.7.2/actix_web/struct.Query.html new file mode 100644 index 0000000..78192c4 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Query.html @@ -0,0 +1,68 @@ +actix_web::Query - Rust

Struct actix_web::Query[][src]

pub struct Query<T>(_);

Extract typed information from from the request's query.

+

Example

+
+#[macro_use] extern crate serde_derive;
+use actix_web::{App, Query, http};
+
+
+#[derive(Debug, Deserialize)]
+pub enum ResponseType {
+   Token,
+   Code
+}
+
+#[derive(Deserialize)]
+pub struct AuthRequest {
+   id: u64,
+   response_type: ResponseType,
+}
+
+// use `with` extractor for query info
+// this handler get called only if request's query contains `username` field
+// The correct request for this handler would be `/index.html?id=64&response_type=Code"`
+fn index(info: Query<AuthRequest>) -> String {
+    format!("Authorization request for client with id={} and type={:?}!", info.id, info.response_type)
+}
+
+fn main() {
+    let app = App::new().resource(
+       "/index.html",
+       |r| r.method(http::Method::GET).with(index)); // <- use `with` extractor
+}
+
+

+ Methods +

+

impl<T> Query<T>
[src]

Deconstruct to a inner value

+
+

+ Trait Implementations +

+

impl<T: PartialEq> PartialEq for Query<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Query<T>
[src]

impl<T: PartialOrd> PartialOrd for Query<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Query<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> Deref for Query<T>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Query<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Query<T> where
    T: DeserializeOwned
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+

impl<T: Debug> Debug for Query<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Query<T>
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T> Send for Query<T> where
    T: Send

impl<T> Sync for Query<T> where
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Request.html b/static/api/actix-web/0.7.2/actix_web/struct.Request.html new file mode 100644 index 0000000..48d1970 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Request.html @@ -0,0 +1,45 @@ +actix_web::Request - Rust

Struct actix_web::Request[][src]

pub struct Request { /* fields omitted */ }

Request's context

+
+

+ Methods +

+

impl Request
[src]

Read the Request Uri.

+

Read the Request method.

+

Read the Request Version.

+

The target path of this Request.

+

Returns Request's headers.

+

Returns mutable Request's headers.

+

Peer socket address

+

Peer address is actual socket address, if proxy is used in front of +actix http server, then peer address would be address of this proxy.

+

To get client connection information connection_info() method should +be used.

+

Checks if a connection should be kept alive.

+

Request extensions

+

Mutable reference to a the request's extensions

+

Check if request requires connection upgrade

+

Get ConnectionInfo for the correct request.

+

Server settings

+
+

+ Trait Implementations +

+

impl HttpMessage for Request
[src]

+

Type of message payload stream

+

Read the message headers.

+

Message payload stream

+

Read the request content type. If request does not contain Content-Type header, empty str get returned. Read more

+

Get content type encoding Read more

+

Convert the request content type to a known mime type.

+

Check if request has chunked transfer encoding

+

Load http message body. Read more

+

Parse application/x-www-form-urlencoded encoded request's body. Return UrlEncoded future. Form can be deserialized to any type that implements Deserialize trait from serde. Read more

+

Parse application/json encoded body. Return JsonBody<T> future. It resolves to a T value. Read more

+

Return stream to http payload processes as multipart. Read more

+

Return stream of lines.

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Request

impl !Sync for Request

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.Scope.html b/static/api/actix-web/0.7.2/actix_web/struct.Scope.html new file mode 100644 index 0000000..a2b3365 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.Scope.html @@ -0,0 +1,139 @@ +actix_web::Scope - Rust

Struct actix_web::Scope[][src]

pub struct Scope<S> { /* fields omitted */ }

Resources scope

+

Scope is a set of resources with common root path. +Scopes collect multiple paths under a common path prefix. +Scope path can contain variable path segments as resources. +Scope prefix is always complete path segment, i.e /app would +be converted to a /app/ and it would not match /app path.

+

You can get variable path segments from HttpRequest::match_info(). +Path extractor also is able to extract scope level variable segments.

+ +
+use actix_web::{http, App, HttpRequest, HttpResponse};
+
+fn main() {
+    let app = App::new().scope("/{project_id}/", |scope| {
+        scope
+            .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+            .resource("/path2", |r| r.f(|_| HttpResponse::Ok()))
+            .resource("/path3", |r| r.f(|_| HttpResponse::MethodNotAllowed()))
+    });
+}
+

In the above example three routes get registered:

+
    +
  • /{project_id}/path1 - reponds to all http method
  • +
  • /{project_id}/path2 - GET requests
  • +
  • /{project_id}/path3 - HEAD requests
  • +
+
+

+ Methods +

+

impl<S: 'static> Scope<S>
[src]

Create a new scope

+

Add match predicate to scope.

+ +
+use actix_web::{http, pred, App, HttpRequest, HttpResponse, Path};
+
+fn index(data: Path<(String, String)>) -> &'static str {
+    "Welcome!"
+}
+
+fn main() {
+    let app = App::new().scope("/app", |scope| {
+        scope
+            .filter(pred::Header("content-type", "text/plain"))
+            .route("/test1", http::Method::GET, index)
+            .route("/test2", http::Method::POST, |_: HttpRequest| {
+                HttpResponse::MethodNotAllowed()
+            })
+    });
+}
+

Create nested scope with new state.

+ +
+use actix_web::{App, HttpRequest};
+
+struct AppState;
+
+fn index(req: &HttpRequest<AppState>) -> &'static str {
+    "Welcome!"
+}
+
+fn main() {
+    let app = App::new().scope("/app", |scope| {
+        scope.with_state("/state2", AppState, |scope| {
+            scope.resource("/test1", |r| r.f(index))
+        })
+    });
+}
+

Create nested scope.

+ +
+use actix_web::{App, HttpRequest};
+
+struct AppState;
+
+fn index(req: &HttpRequest<AppState>) -> &'static str {
+    "Welcome!"
+}
+
+fn main() {
+    let app = App::with_state(AppState).scope("/app", |scope| {
+        scope.nested("/v1", |scope| scope.resource("/test1", |r| r.f(index)))
+    });
+}
+

Configure route for a specific path.

+

This is a simplified version of the Scope::resource() method. +Handler functions need to accept one request extractor +argument.

+

This method could be called multiple times, in that case +multiple routes would be registered for same resource path.

+ +
+use actix_web::{http, App, HttpRequest, HttpResponse, Path};
+
+fn index(data: Path<(String, String)>) -> &'static str {
+    "Welcome!"
+}
+
+fn main() {
+    let app = App::new().scope("/app", |scope| {
+        scope.route("/test1", http::Method::GET, index).route(
+            "/test2",
+            http::Method::POST,
+            |_: HttpRequest| HttpResponse::MethodNotAllowed(),
+        )
+    });
+}
+

Configure resource for a specific path.

+

This method is similar to an App::resource() method. +Resources may have variable path segments. Resource path uses scope +path as a path prefix.

+ +
+use actix_web::*;
+
+fn main() {
+    let app = App::new().scope("/api", |scope| {
+        scope.resource("/users/{userid}/{friend}", |r| {
+            r.get().f(|_| HttpResponse::Ok());
+            r.head().f(|_| HttpResponse::MethodNotAllowed());
+            r.route()
+                .filter(pred::Any(pred::Get()).or(pred::Put()))
+                .filter(pred::Header("Content-Type", "text/plain"))
+                .f(|_| HttpResponse::Ok())
+        })
+    });
+}
+

Default resource to be used if no matching route could be found.

+

Register a scope middleware

+

This is similar to App's middlewares, but +middlewares get invoked on scope level.

+

Note Middleware::finish() fires right after response get +prepared. It does not wait until body get sent to the peer.

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for Scope<S>

impl<S> !Sync for Scope<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/struct.State.html b/static/api/actix-web/0.7.2/actix_web/struct.State.html new file mode 100644 index 0000000..a472219 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/struct.State.html @@ -0,0 +1,48 @@ +actix_web::State - Rust

Struct actix_web::State[][src]

pub struct State<S>(_);

Access an application state

+

S - application state type

+

Example

+
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Path, State};
+
+/// Application state
+struct MyApp {
+    msg: &'static str,
+}
+
+#[derive(Deserialize)]
+struct Info {
+    username: String,
+}
+
+/// extract path info using serde
+fn index(data: (State<MyApp>, Path<Info>)) -> String {
+    let (state, path) = data;
+    format!("{} {}!", state.msg, path.username)
+}
+
+fn main() {
+    let app = App::with_state(MyApp { msg: "Welcome" }).resource(
+        "/{username}/index.html", // <- define path parameters
+        |r| r.method(http::Method::GET).with(index),
+    ); // <- use `with` extractor
+}
+
+

+ Trait Implementations +

+

impl<S> Deref for State<S>
[src]

+

The resulting type after dereferencing.

+

Important traits for &'a mut R

Dereferences the value.

+

impl<S> FromRequest<S> for State<S>
[src]

+

Configuration for conversion process

+

+

Future that resolves to a Self

+

Convert request to a Self

+

Convert request to a Self Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for State<S>

impl<S> !Sync for State<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/TestApp.t.html b/static/api/actix-web/0.7.2/actix_web/test/TestApp.t.html new file mode 100644 index 0000000..ef6ae48 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/TestApp.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TestApp.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/TestRequest.t.html b/static/api/actix-web/0.7.2/actix_web/test/TestRequest.t.html new file mode 100644 index 0000000..f90b769 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/TestRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TestRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/TestServer.t.html b/static/api/actix-web/0.7.2/actix_web/test/TestServer.t.html new file mode 100644 index 0000000..159b431 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/TestServer.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TestServer.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/TestServerBuilder.t.html b/static/api/actix-web/0.7.2/actix_web/test/TestServerBuilder.t.html new file mode 100644 index 0000000..621ad7e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/TestServerBuilder.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TestServerBuilder.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/index.html b/static/api/actix-web/0.7.2/actix_web/test/index.html new file mode 100644 index 0000000..d2ec29d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/index.html @@ -0,0 +1,35 @@ +actix_web::test - Rust

Module actix_web::test[][src]

Various helpers for Actix applications to use during testing.

+

Structs

+ + + + + + + + + + + + + + + + +
TestApp +

Test application helper for testing request handlers.

+ +
TestRequest +

Test HttpRequest builder

+ +
TestServer +

The TestServer type.

+ +
TestServerBuilder +

An TestServer builder

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/test/sidebar-items.js new file mode 100644 index 0000000..7598e93 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["TestApp","Test application helper for testing request handlers."],["TestRequest","Test `HttpRequest` builder"],["TestServer","The `TestServer` type."],["TestServerBuilder","An `TestServer` builder"]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/struct.TestApp.html b/static/api/actix-web/0.7.2/actix_web/test/struct.TestApp.html new file mode 100644 index 0000000..7d411cf --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/struct.TestApp.html @@ -0,0 +1,22 @@ +actix_web::test::TestApp - Rust

Struct actix_web::test::TestApp[][src]

pub struct TestApp<S = ()> { /* fields omitted */ }

Test application helper for testing request handlers.

+
+

+ Methods +

+

impl<S: 'static> TestApp<S>
[src]

Register handler for "/"

+

Register middleware

+

Register resource. This method is similar +to App::resource() method.

+
+

+ Trait Implementations +

+

impl<S: 'static> IntoHttpHandler for TestApp<S>
[src]

+

The associated type which is result of conversion.

+

Convert into HttpHandler object.

+
+

+ Auto Trait Implementations +

+
+

impl<S = ()> !Send for TestApp<S>

impl<S = ()> !Sync for TestApp<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/struct.TestRequest.html b/static/api/actix-web/0.7.2/actix_web/test/struct.TestRequest.html new file mode 100644 index 0000000..8f70059 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/struct.TestRequest.html @@ -0,0 +1,57 @@ +actix_web::test::TestRequest - Rust

Struct actix_web::test::TestRequest[][src]

pub struct TestRequest<S> { /* fields omitted */ }

Test HttpRequest builder

+ +
+use actix_web::test::TestRequest;
+
+fn index(req: &HttpRequest) -> HttpResponse {
+    if let Some(hdr) = req.headers().get(header::CONTENT_TYPE) {
+        HttpResponse::Ok().into()
+    } else {
+        HttpResponse::BadRequest().into()
+    }
+}
+
+fn main() {
+    let resp = TestRequest::with_header("content-type", "text/plain")
+        .run(&index)
+        .unwrap();
+    assert_eq!(resp.status(), StatusCode::OK);
+
+    let resp = TestRequest::default().run(&index).unwrap();
+    assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+}
+
+

+ Methods +

+

impl TestRequest<()>
[src]

Create TestRequest and set request uri

+

Create TestRequest and set header

+

Create TestRequest and set header

+

impl<S: 'static> TestRequest<S>
[src]

Start HttpRequest build process with application state

+

Set HTTP version of this request

+

Set HTTP method of this request

+

Set HTTP Uri of this request

+

Set a header

+

Set a header

+

Set request path pattern parameter

+

Set request payload

+

Set request's prefix

+

Complete request creation and generate HttpRequest instance

+

Complete request creation and generate server Request instance

+

This method generates HttpRequest instance and runs handler +with generated request.

+

This method panics is handler returns actor or async result.

+

This method generates HttpRequest instance and runs handler +with generated request.

+

This method panics is handler returns actor.

+
+

+ Trait Implementations +

+

impl Default for TestRequest<()>
[src]

Returns the "default value" for a type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> !Send for TestRequest<S>

impl<S> !Sync for TestRequest<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/struct.TestServer.html b/static/api/actix-web/0.7.2/actix_web/test/struct.TestServer.html new file mode 100644 index 0000000..df615a2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/struct.TestServer.html @@ -0,0 +1,45 @@ +actix_web::test::TestServer - Rust

Struct actix_web::test::TestServer[][src]

pub struct TestServer { /* fields omitted */ }

The TestServer type.

+

TestServer is very simple test server that simplify process of writing +integration tests cases for actix web applications.

+

Examples

+
+use actix_web::test::TestServer;
+
+let mut srv = TestServer::new(|app| app.handler(my_handler));
+
+let req = srv.get().finish().unwrap();
+let response = srv.execute(req.send()).unwrap();
+assert!(response.status().is_success());
+
+

+ Methods +

+

impl TestServer
[src]

Start new test server

+

This method accepts configuration method. You can add +middlewares or set handlers for test application.

+

Create test server builder

+

Create test server builder with specific state factory

+

This method can be used for constructing application state. +Also it can be used for external dependency initialization, +like creating sync actors for diesel integration.

+

Start new test server with application factory

+

Get firat available unused address

+

Construct test server url

+

Construct test server url

+

Execute future on current core

+

Connect to websocket server

+

Create GET request

+

Create POST request

+

Create HEAD request

+

Connect to test http server

+
+

+ Trait Implementations +

+

impl Drop for TestServer
[src]

Executes the destructor for this type. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for TestServer

impl !Sync for TestServer

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/test/struct.TestServerBuilder.html b/static/api/actix-web/0.7.2/actix_web/test/struct.TestServerBuilder.html new file mode 100644 index 0000000..9f123a5 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/test/struct.TestServerBuilder.html @@ -0,0 +1,16 @@ +actix_web::test::TestServerBuilder - Rust

Struct actix_web::test::TestServerBuilder[][src]

pub struct TestServerBuilder<S> { /* fields omitted */ }

An TestServer builder

+

This type can be used to construct an instance of TestServer through a +builder-like pattern.

+
+

+ Methods +

+

impl<S: 'static> TestServerBuilder<S>
[src]

Create a new test server

+

Create ssl server

+

Configure test application and run test server

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for TestServerBuilder<S>

impl<S> Sync for TestServerBuilder<S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/trait.AsyncResponder.html b/static/api/actix-web/0.7.2/actix_web/trait.AsyncResponder.html new file mode 100644 index 0000000..f6950e1 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/trait.AsyncResponder.html @@ -0,0 +1,40 @@ +actix_web::AsyncResponder - Rust

Trait actix_web::AsyncResponder[][src]

pub trait AsyncResponder<I, E>: Sized {
+    fn responder(self) -> Box<Future<Item = I, Error = E>>;
+}

Convenience trait that converts Future object to a Boxed future

+

For example loading json from request's body is async operation.

+ +
+use actix_web::{
+    App, AsyncResponder, Error, HttpMessage, HttpRequest, HttpResponse,
+};
+use futures::future::Future;
+
+#[derive(Deserialize, Debug)]
+struct MyObj {
+    name: String,
+}
+
+fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    req.json()                   // <- get JsonBody future
+       .from_err()
+       .and_then(|val: MyObj| {  // <- deserialized value
+           Ok(HttpResponse::Ok().into())
+       })
+    // Construct boxed future by using `AsyncResponder::responder()` method
+    .responder()
+}
+
+

+ Required Methods +

+
+
Important traits for Box<R>

Convert to a boxed future

+
+

+ Implementors +

+
    +
  • impl<F, I, E> AsyncResponder<I, E> for F where
        F: Future<Item = I, Error = E> + 'static,
        I: Responder + 'static,
        E: Into<Error> + 'static, 
  • +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/trait.FromRequest.html b/static/api/actix-web/0.7.2/actix_web/trait.FromRequest.html new file mode 100644 index 0000000..5a5f3c9 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/trait.FromRequest.html @@ -0,0 +1,202 @@ +actix_web::FromRequest - Rust

Trait actix_web::FromRequest[][src]

pub trait FromRequest<S>: Sized {
+    type Config: Default;
+    type Result: Into<AsyncResult<Self>>;
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result;
+
+    fn extract(req: &HttpRequest<S>) -> Self::Result { ... }
+}

Trait implemented by types that can be extracted from request.

+

Types that implement this trait can be used with Route::with() method.

+
+

+ Associated Types +

+
+

Configuration for conversion process

+

Future that resolves to a Self

+
+

+ Required Methods +

+
+

Convert request to a Self

+
+

+ Provided Methods +

+
+

Convert request to a Self

+

This method uses default extractor configuration

+
+

+ Implementations on Foreign Types +

+

impl<S: 'static> FromRequest<S> for Bytes
[src]

Request payload extractor.

+

Loads request's payload and construct Bytes instance.

+

PayloadConfig allows to configure +extraction process.

+

Example

+
+extern crate bytes;
+use actix_web::{http, App, Result};
+
+/// extract text data from request
+fn index(body: bytes::Bytes) -> Result<String> {
+    Ok(format!("Body {:?}!", body))
+}
+
+fn main() {
+    let app = App::new()
+        .resource("/index.html", |r| r.method(http::Method::GET).with(index));
+}
+

+

+

impl<S: 'static> FromRequest<S> for String
[src]

Extract text information from the request's body.

+

Text extractor automatically decode body according to the request's charset.

+

PayloadConfig allows to configure +extraction process.

+

Example

+
+use actix_web::{http, App, Result};
+
+/// extract text data from request
+fn index(body: String) -> Result<String> {
+    Ok(format!("Body {}!", body))
+}
+
+fn main() {
+    let app = App::new().resource("/index.html", |r| {
+        r.method(http::Method::GET)
+               .with_config(index, |cfg| { // <- register handler with extractor params
+                  cfg.limit(4096);  // <- limit size of the payload
+                })
+    });
+}
+

+

+

impl<T: 'static, S: 'static> FromRequest<S> for Option<T> where
    T: FromRequest<S>, 
[src]

Optionally extract a field from the request

+

If the FromRequest for T fails, return None rather than returning an error response

+

Example

+
+extern crate rand;
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+use actix_web::error::ErrorBadRequest;
+
+#[derive(Debug, Deserialize)]
+struct Thing { name: String }
+
+impl<S> FromRequest<S> for Thing {
+    type Config = ();
+    type Result = Result<Thing, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+        if rand::random() {
+            Ok(Thing { name: "thingy".into() })
+        } else {
+            Err(ErrorBadRequest("no luck"))
+        }
+
+    }
+}
+
+/// extract text data from request
+fn index(supplied_thing: Option<Thing>) -> Result<String> {
+    match supplied_thing {
+        // Puns not intended
+        Some(thing) => Ok(format!("Got something: {:?}", thing)),
+        None => Ok(format!("No thing!"))
+    }
+}
+
+fn main() {
+    let app = App::new().resource("/users/:first", |r| {
+        r.method(http::Method::POST).with(index)
+    });
+}
+

+

+

impl<T: 'static, S: 'static> FromRequest<S> for Result<T, Error> where
    T: FromRequest<S>, 
[src]

Optionally extract a field from the request or extract the Error if unsuccessful

+

If the FromRequest for T fails, inject Err into handler rather than returning an error response

+

Example

+
+extern crate rand;
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+use actix_web::error::ErrorBadRequest;
+
+#[derive(Debug, Deserialize)]
+struct Thing { name: String }
+
+impl<S> FromRequest<S> for Thing {
+    type Config = ();
+    type Result = Result<Thing, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+        if rand::random() {
+            Ok(Thing { name: "thingy".into() })
+        } else {
+            Err(ErrorBadRequest("no luck"))
+        }
+
+    }
+}
+
+/// extract text data from request
+fn index(supplied_thing: Result<Thing>) -> Result<String> {
+    match supplied_thing {
+        Ok(thing) => Ok(format!("Got thing: {:?}", thing)),
+        Err(e) => Ok(format!("Error extracting thing: {}", e))
+    }
+}
+
+fn main() {
+    let app = App::new().resource("/users/:first", |r| {
+        r.method(http::Method::POST).with(index)
+    });
+}
+

+

+

impl<S, A: FromRequest<S> + 'static> FromRequest<S> for (A,) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static> FromRequest<S> for (A, B) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static> FromRequest<S> for (A, B, C) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static, I: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H, I) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/trait.HttpMessage.html b/static/api/actix-web/0.7.2/actix_web/trait.HttpMessage.html new file mode 100644 index 0000000..88a6f10 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/trait.HttpMessage.html @@ -0,0 +1,141 @@ +actix_web::HttpMessage - Rust

Trait actix_web::HttpMessage[][src]

pub trait HttpMessage: Sized {
+    type Stream: Stream<Item = Bytes, Error = PayloadError> + Sized;
+    fn headers(&self) -> &HeaderMap;
+
fn payload(&self) -> Self::Stream; + + fn content_type(&self) -> &str { ... } +
fn encoding(&self) -> Result<EncodingRef, ContentTypeError> { ... } +
fn mime_type(&self) -> Result<Option<Mime>, ContentTypeError> { ... } +
fn chunked(&self) -> Result<bool, ParseError> { ... } +
fn body(&self) -> MessageBody<Self> { ... } +
fn urlencoded<T: DeserializeOwned>(&self) -> UrlEncoded<Self, T> { ... } +
fn json<T: DeserializeOwned>(&self) -> JsonBody<Self, T> { ... } +
fn multipart(&self) -> Multipart<Self::Stream> { ... } +
fn readlines(&self) -> Readlines<Self> { ... } +}

Trait that implements general purpose operations on http messages

+
+

+ Associated Types +

+
+

Type of message payload stream

+
+

+ Required Methods +

+
+

Read the message headers.

+

Message payload stream

+
+

+ Provided Methods +

+
+

Read the request content type. If request does not contain +Content-Type header, empty str get returned.

+

Get content type encoding

+

UTF-8 is used by default, If request charset is not set.

+

Convert the request content type to a known mime type.

+

Check if request has chunked transfer encoding

+

Load http message body.

+

By default only 256Kb payload reads to a memory, then +PayloadError::Overflow get returned. Use MessageBody::limit() +method to change upper limit.

+

Server example

+
+use actix_web::{
+    AsyncResponder, FutureResponse, HttpMessage, HttpRequest, HttpResponse,
+};
+use bytes::Bytes;
+use futures::future::Future;
+
+fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
+    req.body()                     // <- get Body future
+       .limit(1024)                // <- change max size of the body to a 1kb
+       .from_err()
+       .and_then(|bytes: Bytes| {  // <- complete body
+           println!("==== BODY ==== {:?}", bytes);
+           Ok(HttpResponse::Ok().into())
+       }).responder()
+}
+

Parse application/x-www-form-urlencoded encoded request's body. +Return UrlEncoded future. Form can be deserialized to any type that +implements Deserialize trait from serde.

+

Returns error:

+
    +
  • content type is not application/x-www-form-urlencoded
  • +
  • content-length is greater than 256k
  • +
+

Server example

+
+use actix_web::{FutureResponse, HttpMessage, HttpRequest, HttpResponse};
+
+fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
+    Box::new(
+        req.urlencoded::<HashMap<String, String>>()  // <- get UrlEncoded future
+           .from_err()
+           .and_then(|params| {  // <- url encoded parameters
+               println!("==== BODY ==== {:?}", params);
+               Ok(HttpResponse::Ok().into())
+          }),
+    )
+}
+

Parse application/json encoded body. +Return JsonBody<T> future. It resolves to a T value.

+

Returns error:

+
    +
  • content type is not application/json
  • +
  • content length is greater than 256k
  • +
+

Server example

+
+use actix_web::*;
+use futures::future::{ok, Future};
+
+#[derive(Deserialize, Debug)]
+struct MyObj {
+    name: String,
+}
+
+fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    req.json()                   // <- get JsonBody future
+       .from_err()
+       .and_then(|val: MyObj| {  // <- deserialized value
+           println!("==== BODY ==== {:?}", val);
+           Ok(HttpResponse::Ok().into())
+       }).responder()
+}
+

Return stream to http payload processes as multipart.

+

Content-type: multipart/form-data;

+

Server example

+
+fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    req.multipart().from_err()       // <- get multipart stream for current request
+       .and_then(|item| match item { // <- iterate over multipart items
+           multipart::MultipartItem::Field(field) => {
+               // Field in turn is stream of *Bytes* object
+               Either::A(field.from_err()
+                         .map(|c| println!("-- CHUNK: \n{:?}", str::from_utf8(&c)))
+                         .finish())
+            },
+            multipart::MultipartItem::Nested(mp) => {
+                // Or item could be nested Multipart stream
+                Either::B(ok(()))
+            }
+        })
+        .finish()  // <- Stream::finish() combinator from actix
+        .map(|_| HttpResponse::Ok().into())
+        .responder()
+}
+

Return stream of lines.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/trait.Responder.html b/static/api/actix-web/0.7.2/actix_web/trait.Responder.html new file mode 100644 index 0000000..55f6358 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/trait.Responder.html @@ -0,0 +1,57 @@ +actix_web::Responder - Rust

Trait actix_web::Responder[][src]

pub trait Responder {
+    type Item: Into<AsyncResult<HttpResponse>>;
+    type Error: Into<Error>;
+    fn respond_to<S: 'static>(
        self,
        req: &HttpRequest<S>
    ) -> Result<Self::Item, Self::Error>; +}

Trait implemented by types that generate responses for clients.

+

Types that implement this trait can be used as the return type of a handler.

+
+

+ Associated Types +

+
+

The associated item which can be returned.

+

The associated error which can be returned.

+
+

+ Required Methods +

+
+

Convert itself to AsyncResult or Error.

+
+

+ Implementations on Foreign Types +

+

impl<T> Responder for Option<T> where
    T: Responder
[src]

+

+

impl<T: Responder, E: Into<Error>> Responder for Result<T, E>
[src]

+

+

impl<I, E> Responder for Box<Future<Item = I, Error = E>> where
    I: Responder + 'static,
    E: Into<Error> + 'static, 
[src]

+

+

impl Responder for &'static str
[src]

+

+

impl Responder for &'static [u8]
[src]

+

+

impl Responder for String
[src]

+

+

impl<'a> Responder for &'a String
[src]

+

+

impl Responder for Bytes
[src]

+

+

impl Responder for BytesMut
[src]

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/type.FutureResponse.html b/static/api/actix-web/0.7.2/actix_web/type.FutureResponse.html new file mode 100644 index 0000000..cf709c3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/type.FutureResponse.html @@ -0,0 +1,2 @@ +actix_web::FutureResponse - Rust

Type Definition actix_web::FutureResponse[][src]

type FutureResponse<I, E = Error> = Box<Future<Item = I, Error = E>>;

Convenience type alias

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/Client.t.html b/static/api/actix-web/0.7.2/actix_web/ws/Client.t.html new file mode 100644 index 0000000..74dc13e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/Client.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Client.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/ClientError.t.html b/static/api/actix-web/0.7.2/actix_web/ws/ClientError.t.html new file mode 100644 index 0000000..d8dfaa3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/ClientError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ClientError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/ClientHandshake.t.html b/static/api/actix-web/0.7.2/actix_web/ws/ClientHandshake.t.html new file mode 100644 index 0000000..8412b13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/ClientHandshake.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientHandshake.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/ClientReader.t.html b/static/api/actix-web/0.7.2/actix_web/ws/ClientReader.t.html new file mode 100644 index 0000000..9c2a9c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/ClientReader.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientReader.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/ClientWriter.t.html b/static/api/actix-web/0.7.2/actix_web/ws/ClientWriter.t.html new file mode 100644 index 0000000..a199640 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/ClientWriter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientWriter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/CloseCode.t.html b/static/api/actix-web/0.7.2/actix_web/ws/CloseCode.t.html new file mode 100644 index 0000000..1ae4704 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/CloseCode.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CloseCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/CloseReason.t.html b/static/api/actix-web/0.7.2/actix_web/ws/CloseReason.t.html new file mode 100644 index 0000000..29c8b34 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/CloseReason.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CloseReason.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/Frame.t.html b/static/api/actix-web/0.7.2/actix_web/ws/Frame.t.html new file mode 100644 index 0000000..7d6e43c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/Frame.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Frame.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/FramedMessage.t.html b/static/api/actix-web/0.7.2/actix_web/ws/FramedMessage.t.html new file mode 100644 index 0000000..03cf9be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/FramedMessage.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FramedMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/HandshakeError.t.html b/static/api/actix-web/0.7.2/actix_web/ws/HandshakeError.t.html new file mode 100644 index 0000000..9f2846c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/HandshakeError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.HandshakeError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/Message.t.html b/static/api/actix-web/0.7.2/actix_web/ws/Message.t.html new file mode 100644 index 0000000..659333b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/Message.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Message.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/OpCode.t.html b/static/api/actix-web/0.7.2/actix_web/ws/OpCode.t.html new file mode 100644 index 0000000..7993d01 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/OpCode.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.OpCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/ProtocolError.t.html b/static/api/actix-web/0.7.2/actix_web/ws/ProtocolError.t.html new file mode 100644 index 0000000..3ff77e3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/ProtocolError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ProtocolError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/WebsocketContext.t.html b/static/api/actix-web/0.7.2/actix_web/ws/WebsocketContext.t.html new file mode 100644 index 0000000..19c9abd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/WebsocketContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.WebsocketContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/WsStream.t.html b/static/api/actix-web/0.7.2/actix_web/ws/WsStream.t.html new file mode 100644 index 0000000..75777bb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/WsStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.WsStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/WsWriter.t.html b/static/api/actix-web/0.7.2/actix_web/ws/WsWriter.t.html new file mode 100644 index 0000000..419ab5a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/WsWriter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WsWriter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/Client.t.html b/static/api/actix-web/0.7.2/actix_web/ws/client/Client.t.html new file mode 100644 index 0000000..74dc13e --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/Client.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Client.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/ClientError.t.html b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientError.t.html new file mode 100644 index 0000000..d8dfaa3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ClientError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/ClientHandshake.t.html b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientHandshake.t.html new file mode 100644 index 0000000..8412b13 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientHandshake.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientHandshake.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/ClientReader.t.html b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientReader.t.html new file mode 100644 index 0000000..9c2a9c2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientReader.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientReader.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/ClientWriter.t.html b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientWriter.t.html new file mode 100644 index 0000000..a199640 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/ClientWriter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ClientWriter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/enum.ClientError.html b/static/api/actix-web/0.7.2/actix_web/ws/client/enum.ClientError.html new file mode 100644 index 0000000..69579ce --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/enum.ClientError.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/enum.ClientError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/struct.Client.html b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.Client.html new file mode 100644 index 0000000..729b0bd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.Client.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.Client.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientHandshake.html b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientHandshake.html new file mode 100644 index 0000000..fe0e884 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientHandshake.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.ClientHandshake.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientReader.html b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientReader.html new file mode 100644 index 0000000..d444361 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientReader.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.ClientReader.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientWriter.html b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientWriter.html new file mode 100644 index 0000000..e47b0f6 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/client/struct.ClientWriter.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.ClientWriter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/context/WebsocketContext.t.html b/static/api/actix-web/0.7.2/actix_web/ws/context/WebsocketContext.t.html new file mode 100644 index 0000000..19c9abd --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/context/WebsocketContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.WebsocketContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/context/struct.WebsocketContext.html b/static/api/actix-web/0.7.2/actix_web/ws/context/struct.WebsocketContext.html new file mode 100644 index 0000000..032e879 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/context/struct.WebsocketContext.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.WebsocketContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.ClientError.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.ClientError.html new file mode 100644 index 0000000..d8c3353 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.ClientError.html @@ -0,0 +1,55 @@ +actix_web::ws::ClientError - Rust

Enum actix_web::ws::ClientError[][src]

pub enum ClientError {
+    InvalidUrl,
+    InvalidResponseStatus(StatusCode),
+    InvalidUpgradeHeader,
+    InvalidConnectionHeader(HeaderValue),
+    MissingConnectionHeader,
+    MissingWebSocketAcceptHeader,
+    InvalidChallengeResponse(StringHeaderValue),
+    Http(Error),
+    Url(UrlParseError),
+    ResponseParseError(HttpResponseParserError),
+    SendRequest(SendRequestError),
+    Protocol(ProtocolError),
+    Io(Error),
+    Disconnected,
+}

Websocket client error

+

+ Variants

+

Invalid url

+

Invalid response status

+

Invalid upgrade header

+

Invalid connection header

+

Missing CONNECTION header

+

Missing SEC-WEBSOCKET-ACCEPT header

+

Invalid challenge response

+

Http parsing error

+

Url parsing error

+

Response parsing error

+

Send request error

+

Protocol error

+

IO Error

+

"Disconnected"

+
+

+ Trait Implementations +

+

impl Fail for ClientError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ClientError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for ClientError
[src]

Formats the value using the given formatter. Read more

+

impl From<Error> for ClientError
[src]

Performs the conversion.

+

impl From<UrlParseError> for ClientError
[src]

Performs the conversion.

+

impl From<SendRequestError> for ClientError
[src]

Performs the conversion.

+

impl From<ProtocolError> for ClientError
[src]

Performs the conversion.

+

impl From<Error> for ClientError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ClientError

impl Sync for ClientError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.CloseCode.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.CloseCode.html new file mode 100644 index 0000000..18c83c8 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.CloseCode.html @@ -0,0 +1,79 @@ +actix_web::ws::CloseCode - Rust

Enum actix_web::ws::CloseCode[][src]

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.

+

+ Variants

+

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 [RFC3629] +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.

+
+

+ Trait Implementations +

+

impl Debug for CloseCode
[src]

Formats the value using the given formatter. Read more

+

impl Eq for CloseCode
[src]

impl PartialEq for CloseCode
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for CloseCode
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Copy for CloseCode
[src]

impl Into<u16> for CloseCode
[src]

Performs the conversion.

+

impl From<u16> for CloseCode
[src]

Performs the conversion.

+

impl From<CloseCode> for CloseReason
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for CloseCode

impl Sync for CloseCode

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.HandshakeError.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.HandshakeError.html new file mode 100644 index 0000000..98a3d32 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.HandshakeError.html @@ -0,0 +1,38 @@ +actix_web::ws::HandshakeError - Rust

Enum actix_web::ws::HandshakeError[][src]

pub enum HandshakeError {
+    GetMethodRequired,
+    NoWebsocketUpgrade,
+    NoConnectionUpgrade,
+    NoVersionHeader,
+    UnsupportedVersion,
+    BadWebsocketKey,
+}

Websocket handshake errors

+

+ Variants

+

Only get method is allowed

+

Upgrade header if not set to websocket

+

Connection header is not set to upgrade

+

Websocket version header is not set

+

Unsupported websocket version

+

Websocket key is not set or wrong

+
+

+ Trait Implementations +

+

impl Fail for HandshakeError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for HandshakeError
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for HandshakeError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Debug for HandshakeError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for HandshakeError
[src]

Create response for error Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.Message.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.Message.html new file mode 100644 index 0000000..531412d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.Message.html @@ -0,0 +1,29 @@ +actix_web::ws::Message - Rust

Enum actix_web::ws::Message[][src]

pub enum Message {
+    Text(String),
+    Binary(Binary),
+    Ping(String),
+    Pong(String),
+    Close(Option<CloseReason>),
+}

WebSocket Message

+

+ Variants

+

Text message

+

Binary message

+

Ping message

+

Pong message

+

Close message with optional reason

+
+

+ Trait Implementations +

+

impl Message for Message
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Debug for Message
[src]

Formats the value using the given formatter. Read more

+

impl PartialEq for Message
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+
+

+ Auto Trait Implementations +

+
+

impl Send for Message

impl Sync for Message

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.OpCode.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.OpCode.html new file mode 100644 index 0000000..8c5a2f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.OpCode.html @@ -0,0 +1,37 @@ +actix_web::ws::OpCode - Rust

Enum actix_web::ws::OpCode[][src]

pub enum OpCode {
+    Continue,
+    Text,
+    Binary,
+    Close,
+    Ping,
+    Pong,
+    Bad,
+}

Operation codes as part of rfc6455.

+

+ Variants

+

Indicates a continuation frame of a fragmented message.

+

Indicates a text data frame.

+

Indicates a binary data frame.

+

Indicates a close control frame.

+

Indicates a ping control frame.

+

Indicates a pong control frame.

+

Indicates an invalid opcode was received.

+
+

+ Trait Implementations +

+

impl Debug for OpCode
[src]

Formats the value using the given formatter. Read more

+

impl Eq for OpCode
[src]

impl PartialEq for OpCode
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for OpCode
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Copy for OpCode
[src]

impl Display for OpCode
[src]

Formats the value using the given formatter. Read more

+

impl Into<u8> for OpCode
[src]

Performs the conversion.

+

impl From<u8> for OpCode
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for OpCode

impl Sync for OpCode

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/enum.ProtocolError.html b/static/api/actix-web/0.7.2/actix_web/ws/enum.ProtocolError.html new file mode 100644 index 0000000..562b62a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/enum.ProtocolError.html @@ -0,0 +1,43 @@ +actix_web::ws::ProtocolError - Rust

Enum actix_web::ws::ProtocolError[][src]

pub enum ProtocolError {
+    UnmaskedFrame,
+    MaskedFrame,
+    InvalidOpcode(u8),
+    InvalidLength(usize),
+    BadOpCode,
+    Overflow,
+    NoContinuation,
+    BadEncoding,
+    Payload(PayloadError),
+}

Websocket protocol errors

+

+ Variants

+

Received an unmasked frame from client

+

Received a masked frame from server

+

Encountered invalid opcode

+

Invalid control frame length

+

Bad web socket op code

+

A payload reached size limit.

+

Continuation is not supported

+

Bad utf-8 encoding

+

Payload error

+
+

+ Trait Implementations +

+

impl From<ProtocolError> for ClientError
[src]

Performs the conversion.

+

impl Fail for ProtocolError
[src]

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl Display for ProtocolError
[src]

Formats the value using the given formatter. Read more

+

impl Debug for ProtocolError
[src]

Formats the value using the given formatter. Read more

+

impl ResponseError for ProtocolError
[src]

Create response for error Read more

+

impl From<PayloadError> for ProtocolError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ProtocolError

impl Sync for ProtocolError

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/fn.handshake.html b/static/api/actix-web/0.7.2/actix_web/ws/fn.handshake.html new file mode 100644 index 0000000..e9501eb --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/fn.handshake.html @@ -0,0 +1,4 @@ +actix_web::ws::handshake - Rust

Function actix_web::ws::handshake[][src]

pub fn handshake<S>(
    req: &HttpRequest<S>
) -> Result<HttpResponseBuilder, HandshakeError>

Prepare WebSocket handshake response.

+

This function returns handshake HttpResponse, ready to send to peer. +It does not perform any IO.

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/fn.start.html b/static/api/actix-web/0.7.2/actix_web/ws/fn.start.html new file mode 100644 index 0000000..24c6153 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/fn.start.html @@ -0,0 +1,2 @@ +actix_web::ws::start - Rust

Function actix_web::ws::start[][src]

pub fn start<A, S>(
    req: &HttpRequest<S>,
    actor: A
) -> Result<HttpResponse, Error> where
    A: Actor<Context = WebsocketContext<A, S>> + StreamHandler<Message, ProtocolError>,
    S: 'static, 

Do websocket handshake and start actor

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/frame/Frame.t.html b/static/api/actix-web/0.7.2/actix_web/ws/frame/Frame.t.html new file mode 100644 index 0000000..7d6e43c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/frame/Frame.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Frame.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/frame/FramedMessage.t.html b/static/api/actix-web/0.7.2/actix_web/ws/frame/FramedMessage.t.html new file mode 100644 index 0000000..03cf9be --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/frame/FramedMessage.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FramedMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.Frame.html b/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.Frame.html new file mode 100644 index 0000000..3d7882a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.Frame.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.Frame.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.FramedMessage.html b/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.FramedMessage.html new file mode 100644 index 0000000..9831eac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/frame/struct.FramedMessage.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.FramedMessage.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/handshake.v.html b/static/api/actix-web/0.7.2/actix_web/ws/handshake.v.html new file mode 100644 index 0000000..3109935 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/handshake.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.handshake.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/index.html b/static/api/actix-web/0.7.2/actix_web/ws/index.html new file mode 100644 index 0000000..9b519ac --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/index.html @@ -0,0 +1,180 @@ +actix_web::ws - Rust

Module actix_web::ws[][src]

WebSocket support for Actix

+

To setup a WebSocket, first do web socket handshake then on success +convert Payload into a WsStream stream and then use WsWriter to +communicate with the peer.

+

Example

+
+use actix_web::{ws, HttpRequest, HttpResponse};
+
+// do websocket handshake and start actor
+fn ws_index(req: &HttpRequest) -> Result<HttpResponse> {
+    ws::start(req, Ws)
+}
+
+struct Ws;
+
+impl Actor for Ws {
+    type Context = ws::WebsocketContext<Self>;
+}
+
+// Handler for ws::Message messages
+impl StreamHandler<ws::Message, ws::ProtocolError> for Ws {
+    fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) {
+        match msg {
+            ws::Message::Ping(msg) => ctx.pong(&msg),
+            ws::Message::Text(text) => ctx.text(text),
+            ws::Message::Binary(bin) => ctx.binary(bin),
+            _ => (),
+        }
+    }
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Client +

WebSocket client

+ +
ClientHandshake +

Future that implementes client websocket handshake process.

+ +
ClientReader +

Websocket reader client

+ +
ClientWriter +

Websocket writer client

+ +
CloseReason +

Reason for closing the connection

+ +
Frame +

A struct representing a WebSocket frame.

+ +
FramedMessage +

WebSocket message with framing.

+ +
WebsocketContext +

Execution context for WebSockets actors

+ +
WsStream +

Maps Payload stream into stream of ws::Message items

+ +

Enums

+ + + + + + + + + + + + + + + + + + + + + + + + +
ClientError +

Websocket client error

+ +
CloseCode +

Status code used to indicate why an endpoint is closing the WebSocket +connection.

+ +
HandshakeError +

Websocket handshake errors

+ +
Message +

WebSocket Message

+ +
OpCode +

Operation codes as part of rfc6455.

+ +
ProtocolError +

Websocket protocol errors

+ +

Traits

+ + + + +
WsWriter +

Common writing methods for a websocket.

+ +

Functions

+ + + + + + + + +
handshake +

Prepare WebSocket handshake response.

+ +
start +

Do websocket handshake and start actor

+ +
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseCode.t.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseCode.t.html new file mode 100644 index 0000000..1ae4704 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseCode.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.CloseCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseReason.t.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseReason.t.html new file mode 100644 index 0000000..29c8b34 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/CloseReason.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.CloseReason.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/OpCode.t.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/OpCode.t.html new file mode 100644 index 0000000..7993d01 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/OpCode.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.OpCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.CloseCode.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.CloseCode.html new file mode 100644 index 0000000..fe3de9a --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.CloseCode.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/enum.CloseCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.OpCode.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.OpCode.html new file mode 100644 index 0000000..aa4d86d --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/enum.OpCode.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/enum.OpCode.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/proto/struct.CloseReason.html b/static/api/actix-web/0.7.2/actix_web/ws/proto/struct.CloseReason.html new file mode 100644 index 0000000..d2328f0 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/proto/struct.CloseReason.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../../actix_web/ws/struct.CloseReason.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/sidebar-items.js b/static/api/actix-web/0.7.2/actix_web/ws/sidebar-items.js new file mode 100644 index 0000000..629944b --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ClientError","Websocket client error"],["CloseCode","Status code used to indicate why an endpoint is closing the `WebSocket` connection."],["HandshakeError","Websocket handshake errors"],["Message","`WebSocket` Message"],["OpCode","Operation codes as part of rfc6455."],["ProtocolError","Websocket protocol errors"]],"fn":[["handshake","Prepare `WebSocket` handshake response."],["start","Do websocket handshake and start actor"]],"struct":[["Client","`WebSocket` client"],["ClientHandshake","Future that implementes client websocket handshake process."],["ClientReader","Websocket reader client"],["ClientWriter","Websocket writer client"],["CloseReason","Reason for closing the connection"],["Frame","A struct representing a `WebSocket` frame."],["FramedMessage","`WebSocket` message with framing."],["WebsocketContext","Execution context for `WebSockets` actors"],["WsStream","Maps `Payload` stream into stream of `ws::Message` items"]],"trait":[["WsWriter","Common writing methods for a websocket."]]}); \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/start.v.html b/static/api/actix-web/0.7.2/actix_web/ws/start.v.html new file mode 100644 index 0000000..8e29734 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/start.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.start.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.Client.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.Client.html new file mode 100644 index 0000000..3f2f73f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.Client.html @@ -0,0 +1,28 @@ +actix_web::ws::Client - Rust

Struct actix_web::ws::Client[][src]

pub struct Client { /* fields omitted */ }

WebSocket client

+

Example of WebSocket client usage is available in +websocket example

+
+

+ Methods +

+

impl Client
[src]

Create new websocket connection

+

Create new websocket connection with custom ClientConnector

+

Set supported websocket protocols

+

Set cookie for handshake request

+

Set request Origin

+

Set max frame size

+

By default max size is set to 64kb

+

Set write buffer capacity

+

Default buffer capacity is 32kb

+

Disable payload masking. By default ws client masks frame payload.

+

Set request header

+

Set websocket handshake timeout

+

Handshake timeout is a total time for successful handshake. +Default value is 5 seconds.

+

Connect to websocket server and do ws handshake

+
+

+ Auto Trait Implementations +

+
+

impl !Send for Client

impl !Sync for Client

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientHandshake.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientHandshake.html new file mode 100644 index 0000000..b04cc44 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientHandshake.html @@ -0,0 +1,49 @@ +actix_web::ws::ClientHandshake - Rust

Struct actix_web::ws::ClientHandshake[][src]

pub struct ClientHandshake { /* fields omitted */ }

Future that implementes client websocket handshake process.

+

It resolves to a pair of ClientReader and ClientWriter that +can be used for reading and writing websocket frames.

+
+

+ Methods +

+

impl ClientHandshake
[src]

Set handshake timeout

+

Handshake timeout is a total time before handshake should be completed. +Default value is 5 seconds.

+

Set connection timeout

+

Connection timeout includes resolving hostname and actual connection to +the host. +Default value is 1 second.

+
+

+ Trait Implementations +

+

impl Future for ClientHandshake
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientReader.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientReader.html new file mode 100644 index 0000000..f91b02c --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientReader.html @@ -0,0 +1,54 @@ +actix_web::ws::ClientReader - Rust

Struct actix_web::ws::ClientReader[][src]

pub struct ClientReader { /* fields omitted */ }

Websocket reader client

+
+

+ Trait Implementations +

+

impl Debug for ClientReader
[src]

Formats the value using the given formatter. Read more

+

impl Stream for ClientReader
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ClientReader

impl !Sync for ClientReader

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientWriter.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientWriter.html new file mode 100644 index 0000000..8ee052f --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.ClientWriter.html @@ -0,0 +1,25 @@ +actix_web::ws::ClientWriter - Rust

Struct actix_web::ws::ClientWriter[][src]

pub struct ClientWriter { /* fields omitted */ }

Websocket writer client

+
+

+ Methods +

+

impl ClientWriter
[src]

Send text frame

+

Send binary frame

+

Send ping frame

+

Send pong frame

+

Send close frame

+
+

+ Trait Implementations +

+

impl WsWriter for ClientWriter
[src]

Send text frame

+

Send binary frame

+

Send ping frame

+

Send pong frame

+

Send close frame

+
+

+ Auto Trait Implementations +

+
+

impl !Send for ClientWriter

impl !Sync for ClientWriter

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.CloseReason.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.CloseReason.html new file mode 100644 index 0000000..8b6e8fc --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.CloseReason.html @@ -0,0 +1,32 @@ +actix_web::ws::CloseReason - Rust

Struct actix_web::ws::CloseReason[][src]

pub struct CloseReason {
+    pub code: CloseCode,
+    pub description: Option<String>,
+}

Reason for closing the connection

+

+ Fields

+ +

Exit code

+
+ +

Optional description of the exit code

+
+

+ Trait Implementations +

+

impl Debug for CloseReason
[src]

Formats the value using the given formatter. Read more

+

impl Eq for CloseReason
[src]

impl PartialEq for CloseReason
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for CloseReason
[src]

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl From<CloseCode> for CloseReason
[src]

Performs the conversion.

+

impl<T: Into<String>> From<(CloseCode, T)> for CloseReason
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for CloseReason

impl Sync for CloseReason

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.Frame.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.Frame.html new file mode 100644 index 0000000..c7b1c23 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.Frame.html @@ -0,0 +1,23 @@ +actix_web::ws::Frame - Rust

Struct actix_web::ws::Frame[][src]

pub struct Frame { /* fields omitted */ }

A struct representing a WebSocket frame.

+
+

+ Methods +

+

impl Frame
[src]

Destruct frame

+

Create a new Close control frame.

+

Parse the input stream into a frame.

+

Parse the payload of a close frame.

+

Generate binary representation

+
+

+ Trait Implementations +

+

impl Debug for Frame
[src]

Formats the value using the given formatter. Read more

+

impl Default for Frame
[src]

Returns the "default value" for a type. Read more

+

impl Display for Frame
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Frame

impl Sync for Frame

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.FramedMessage.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.FramedMessage.html new file mode 100644 index 0000000..a1c14ed --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.FramedMessage.html @@ -0,0 +1,12 @@ +actix_web::ws::FramedMessage - Rust

Struct actix_web::ws::FramedMessage[][src]

pub struct FramedMessage(_);

WebSocket message with framing.

+
+

+ Trait Implementations +

+

impl Debug for FramedMessage
[src]

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for FramedMessage

impl Sync for FramedMessage

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.WebsocketContext.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.WebsocketContext.html new file mode 100644 index 0000000..e9fc936 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.WebsocketContext.html @@ -0,0 +1,53 @@ +actix_web::ws::WebsocketContext - Rust

Struct actix_web::ws::WebsocketContext[][src]

pub struct WebsocketContext<A, S = ()> where
    A: Actor<Context = WebsocketContext<A, S>>, 
{ /* fields omitted */ }

Execution context for WebSockets actors

+
+

+ Methods +

+

impl<A, S: 'static> WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Create a new Websocket context from a request and an actor

+

Create a new Websocket context

+

impl<A, S> WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Write payload

+

This is a low-level function that accepts framed messages that should +be created using Frame::message(). If you want to send text or binary +data you should prefer the text() or binary() convenience functions +that handle the framing for you.

+

Important traits for &'a mut R

Shared application state

+

Incoming request

+

Returns drain future

+

Send text frame

+

Send binary frame

+

Send ping frame

+

Send pong frame

+

Send close frame

+

Check if connection still open

+

Handle of the running future

+

SpawnHandle is the handle returned by AsyncContext::spawn() method.

+
+

+ Trait Implementations +

+

impl<A, S> ActorContext for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Immediately stop processing incoming messages and switch to a stopping state Read more

+

Terminate actor execution

+

Actor execution state

+

impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

+

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

+

Cancel future. handle is a value returned by spawn method.

+

Return Address of the context

+

Check if context is paused (waiting for future completion or stopping)

+

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

+

This method is similar to add_stream but it skips stream errors. Read more

+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

+

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

+

Spawns job to execute closure with specified interval

+

impl<A, S> WsWriter for WebsocketContext<A, S> where
    A: Actor<Context = Self>,
    S: 'static, 
[src]

Send text frame

+

Send binary frame

+

Send ping frame

+

Send pong frame

+

Send close frame

+

impl<A, S> AsyncContextParts<A> for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
[src]

impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
    A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
    M: ActixMessage + Send + 'static,
    M::Result: Send
[src]

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A, S = ()> !Send for WebsocketContext<A, S>

impl<A, S = ()> !Sync for WebsocketContext<A, S>

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/struct.WsStream.html b/static/api/actix-web/0.7.2/actix_web/ws/struct.WsStream.html new file mode 100644 index 0000000..1c0baa2 --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/struct.WsStream.html @@ -0,0 +1,60 @@ +actix_web::ws::WsStream - Rust

Struct actix_web::ws::WsStream[][src]

pub struct WsStream<S> { /* fields omitted */ }

Maps Payload stream into stream of ws::Message items

+
+

+ Methods +

+

impl<S> WsStream<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create new websocket frames stream

+

Set max frame size

+

By default max size is set to 64kb

+
+

+ Trait Implementations +

+

impl<S> Stream for WsStream<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

+

Converts this stream into a Future. Read more

+

Converts a stream of type T to a stream of type U. Read more

+

Converts a stream of error type T to a stream of error type U. Read more

+

Filters the values produced by this stream according to the provided predicate. Read more

+

Filters the values produced by this stream while simultaneously mapping them to a different type. Read more

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Chain on a computation for when an error happens, passing the erroneous result to the provided closure f. Read more

+

Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Deprecated since 0.1.14

: please use Stream::concat2 instead

+

Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Flattens a stream of streams into just one continuous stream. Read more

+

Skip elements on this stream while the predicate provided resolves to true. Read more

+

Take elements from this stream while the predicate provided resolves to true. Read more

+

Runs this stream to completion, executing the provided closure for each element on the stream. Read more

+

Map this stream's error to any error implementing From for this stream's Error, returning a new stream. Read more

+

Creates a new stream of at most amt items of the underlying stream. Read more

+

Creates a new stream which skips amt items of the underlying stream. Read more

+

Fuse a stream such that poll will never again be called once it has finished. Read more

+

Important traits for &'a mut R

Borrows a stream, rather than consuming it. Read more

+

Catches unwinding panics while polling the stream. Read more

+

An adaptor for creating a buffered list of pending futures. Read more

+

An adaptor for creating a buffered list of pending futures (unordered). Read more

+

Deprecated

: functionality provided by select now

+

An adapter for merging the output of two streams. Read more

+

An adapter for zipping two streams together. Read more

+

Adapter for chaining two stream. Read more

+

Creates a new stream which exposes a peek method. Read more

+

An adaptor for chunking up items of the stream inside a vector. Read more

+

Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more

+

A future that completes after the given stream has been fully processed into the sink, including flushing. Read more

+

Splits this Stream + Sink object into separate Stream and Sink objects. Read more

+

Do something with each item of this stream, afterwards passing it on. Read more

+

Do something with the error of this stream, afterwards passing it on. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for WsStream<S> where
    S: Send

impl<S> Sync for WsStream<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/actix_web/ws/trait.WsWriter.html b/static/api/actix-web/0.7.2/actix_web/ws/trait.WsWriter.html new file mode 100644 index 0000000..cc1b4db --- /dev/null +++ b/static/api/actix-web/0.7.2/actix_web/ws/trait.WsWriter.html @@ -0,0 +1,27 @@ +actix_web::ws::WsWriter - Rust

Trait actix_web::ws::WsWriter[][src]

pub trait WsWriter {
+    fn send_text<T: Into<Binary>>(&mut self, text: T);
+
fn send_binary<B: Into<Binary>>(&mut self, data: B); +
fn send_ping(&mut self, message: &str); +
fn send_pong(&mut self, message: &str); +
fn send_close(&mut self, reason: Option<CloseReason>); +}

Common writing methods for a websocket.

+
+

+ Required Methods +

+
+

Send a text

+

Send a binary

+

Send a ping message

+

Send a pong message

+

Close the connection

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/aliases.js b/static/api/actix-web/0.7.2/aliases.js new file mode 100644 index 0000000..a135492 --- /dev/null +++ b/static/api/actix-web/0.7.2/aliases.js @@ -0,0 +1,4 @@ +var ALIASES = {}; +ALIASES['actix_web'] = {}; +ALIASES['actix_web'] = {}; +ALIASES['actix_web'] = {}; diff --git a/static/api/actix-web/0.7.2/brush.svg b/static/api/actix-web/0.7.2/brush.svg new file mode 100644 index 0000000..072264a --- /dev/null +++ b/static/api/actix-web/0.7.2/brush.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/dark.css b/static/api/actix-web/0.7.2/dark.css new file mode 100644 index 0000000..7d4a819 --- /dev/null +++ b/static/api/actix-web/0.7.2/dark.css @@ -0,0 +1,12 @@ +/*! + * Copyright 2015 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ +body{background-color:#353535;color:#ddd;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock p>code,.docblock-short p>code{background-color:#2A2A2A;}pre{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table{border-color:#ddd;}.docblock table td{border-top-color:#ddd;border-bottom-color:#ddd;}.docblock table th{border-top-color:#ddd;border-bottom-color:#ddd;}:target{background:#494a3d;}:target>.in-band{background:#494a3d;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.content .highlighted{color:#eee !important;background-color:#616161;}.content .highlighted a,.content .highlighted span{color:#eee !important;}.content .highlighted.trait{background-color:#013191;}.content .highlighted.mod,.content .highlighted.externcrate{background-color:#afc6e4;}.content .highlighted.mod{background-color:#803a1b;}.content .highlighted.externcrate{background-color:#396bac;}.content .highlighted.enum{background-color:#5b4e68;}.content .highlighted.struct{background-color:#194e9f;}.content .highlighted.union{background-color:#b7bd49;}.content .highlighted.fn,.content .highlighted.method,.content .highlighted.tymethod{background-color:#4950ed;}.content .highlighted.type{background-color:#38902c;}.content .highlighted.foreigntype{background-color:#b200d6;}.content .highlighted.macro{background-color:#217d1c;}.content .highlighted.constant,.content .highlighted.static{background-color:#0063cc;}.content .highlighted.primitive{background-color:#00708a;}.content .highlighted.keyword{background-color:#884719;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav{border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}.docblock a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.stability a{color:#D2991D;}a.test-arrow{color:#dedede;}.collapse-toggle{color:#999;}.search-input{color:#111;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;background-color:#f0f0f0;}.search-input:focus{border-color:#008dfd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#404040;}.stab.deprecated{background:#F3DFFF;border-color:#7F0087;color:#404040;}.stab.portability{background:#C4ECFF;border-color:#7BA5DB;color:#404040;}.module-item .stab{color:#ddd;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);color:black;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label{color:#999;}:target>code{background-color:#494a3d;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.6);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.6);}.information>.compile_fail:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:rgba(255,142,0,1);}.search-failed>a{color:#0089ff;}.tooltip .tooltiptext{background-color:black;color:#fff;}.tooltip .tooltiptext::after{border-color:transparent black transparent transparent;}.important-traits .tooltip .tooltiptext{background-color:white;color:black;border-color:black;}#titles>div{border-bottom-color:#ccc;}#titles>div.selected{border-bottom-color:#0078ee;}#titles>div:hover{border-bottom-color:#0089ff;}#titles>div>div.count{color:#888;}.modal{background-color:rgba(0,0,0,0.3);}.modal-content{background-color:#272727;border-color:#999;}.modal-content>.close{background-color:#272727;border-color:#999;}.modal-content>.close:hover{background-color:#ff1f1f;color:white;}.modal-content>.whiter{background-color:#272727;}.modal-content>.close:hover+.whiter{background-color:#ff1f1f;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu{border-color:#e0e0e0;background:#f0f0f0;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus{border-color:#ffb900;}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results td span.alias{color:#fff;}.search-results td span.grey{color:#ccc;} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/fut/trait.IntoActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorContext.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorContext.js new file mode 100644 index 0000000..db359c1 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> ActorContext for HttpContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> ActorContext for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorFuture.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorFuture.js new file mode 100644 index 0000000..46a978e --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A: Actor> ActorFuture for Drain<A>",synthetic:false,types:["actix_web::context::Drain"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorStream.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ActorStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContext.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContext.js new file mode 100644 index 0000000..52c3f4c --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> AsyncContext<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContextParts.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContextParts.js new file mode 100644 index 0000000..b6dd1c6 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.AsyncContextParts.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> AsyncContextParts<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> AsyncContextParts<A> for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Handler.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Handler.js new file mode 100644 index 0000000..5fb3ab7 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Handler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Handler<Pause> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Resume> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Connect> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Message.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Message.js new file mode 100644 index 0000000..76755f7 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.Message.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Message for ClientConnectorStats",synthetic:false,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Message for Resume",synthetic:false,types:["actix_web::client::connector::Resume"]},{text:"impl Message for Connect",synthetic:false,types:["actix_web::client::connector::Connect"]},{text:"impl Message for Pause",synthetic:false,types:["actix_web::client::connector::Pause"]},{text:"impl Message for PauseServer",synthetic:false,types:["actix_web::server::PauseServer"]},{text:"impl Message for ResumeServer",synthetic:false,types:["actix_web::server::ResumeServer"]},{text:"impl Message for StopServer",synthetic:false,types:["actix_web::server::StopServer"]},{text:"impl Message for Message",synthetic:false,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.MessageResponse.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.MessageResponse.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.MessageResponse.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ResponseChannel.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ResponseChannel.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ResponseChannel.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js new file mode 100644 index 0000000..3734551 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
    A: Actor<Context = HttpContext<A, S>> + Handler<M>,
    M: Message + Send + 'static,
    M::Result: Send
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
    A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
    M: ActixMessage + Send + 'static,
    M::Result: Send
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.WrapStream.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.WrapStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/dev/trait.WrapStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Actor.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Actor.js new file mode 100644 index 0000000..5c1cda5 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Actor.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Actor for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl<H> Actor for HttpServer<H> where
    H: IntoHttpHandler
",synthetic:false,types:["actix_web::server::srv::HttpServer"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorContext.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorContext.js new file mode 100644 index 0000000..5bb5dbc --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> ActorContext for HttpContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> ActorContext for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorFuture.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorFuture.js new file mode 100644 index 0000000..f4cc37b --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A: Actor> ActorFuture for Drain<A>",synthetic:false,types:["actix_web::context::Drain"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorStream.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ActorStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.AsyncContext.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.AsyncContext.js new file mode 100644 index 0000000..de2245f --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.AsyncContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> AsyncContext<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
    A: Actor<Context = Self>, 
",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ContextFutureSpawner.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ContextFutureSpawner.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.ContextFutureSpawner.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Handler.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Handler.js new file mode 100644 index 0000000..48fa42d --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Handler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Handler<Pause> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Resume> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Connect> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Message.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Message.js new file mode 100644 index 0000000..5c9a978 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Message.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Message for ClientConnectorStats",synthetic:false,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Message for Resume",synthetic:false,types:["actix_web::client::connector::Resume"]},{text:"impl Message for Connect",synthetic:false,types:["actix_web::client::connector::Connect"]},{text:"impl Message for Pause",synthetic:false,types:["actix_web::client::connector::Pause"]},{text:"impl Message for PauseServer",synthetic:false,types:["actix_web::server::PauseServer"]},{text:"impl Message for ResumeServer",synthetic:false,types:["actix_web::server::ResumeServer"]},{text:"impl Message for StopServer",synthetic:false,types:["actix_web::server::StopServer"]},{text:"impl Message for Message",synthetic:false,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Supervised.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Supervised.js new file mode 100644 index 0000000..f4a45e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.Supervised.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Supervised for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.SystemService.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.SystemService.js new file mode 100644 index 0000000..5a1fe40 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.SystemService.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl SystemService for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapFuture.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapFuture.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapStream.js b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/actix/actix/trait.WrapStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.FromParam.js b/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.FromParam.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.FromParam.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.Handler.js b/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.Handler.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/dev/trait.Handler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/error/trait.ResponseError.js b/static/api/actix-web/0.7.2/implementors/actix_web/error/trait.ResponseError.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/error/trait.ResponseError.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/fs/trait.StaticFileConfig.js b/static/api/actix-web/0.7.2/implementors/actix_web/fs/trait.StaticFileConfig.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/fs/trait.StaticFileConfig.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.AsHeaderName.js b/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.AsHeaderName.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.AsHeaderName.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.IntoHeaderName.js b/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.IntoHeaderName.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/http/header/trait.IntoHeaderName.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.IdentityPolicy.js b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.IdentityPolicy.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.IdentityPolicy.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.RequestIdentity.js b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.RequestIdentity.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/identity/trait.RequestIdentity.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/middleware/session/trait.RequestSession.js b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/session/trait.RequestSession.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/session/trait.RequestSession.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/middleware/trait.Middleware.js b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/trait.Middleware.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/middleware/trait.Middleware.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/pred/trait.Predicate.js b/static/api/actix-web/0.7.2/implementors/actix_web/pred/trait.Predicate.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/pred/trait.Predicate.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandler.js b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandler.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandlerTask.js b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandlerTask.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.HttpHandlerTask.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.IntoHttpHandler.js b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.IntoHttpHandler.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/server/trait.IntoHttpHandler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/trait.AsyncResponder.js b/static/api/actix-web/0.7.2/implementors/actix_web/trait.AsyncResponder.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/trait.AsyncResponder.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/trait.FromRequest.js b/static/api/actix-web/0.7.2/implementors/actix_web/trait.FromRequest.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/trait.FromRequest.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/trait.HttpMessage.js b/static/api/actix-web/0.7.2/implementors/actix_web/trait.HttpMessage.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/trait.HttpMessage.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/trait.Responder.js b/static/api/actix-web/0.7.2/implementors/actix_web/trait.Responder.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/trait.Responder.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/actix_web/ws/trait.WsWriter.js b/static/api/actix-web/0.7.2/implementors/actix_web/ws/trait.WsWriter.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/actix_web/ws/trait.WsWriter.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/clone/trait.Clone.js b/static/api/actix-web/0.7.2/implementors/core/clone/trait.Clone.js new file mode 100644 index 0000000..2bec20a --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/clone/trait.Clone.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Clone for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl Clone for DispositionType",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl Clone for DispositionParam",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl Clone for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl Clone for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl Clone for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl Clone for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl<S> Clone for HttpRequest<S>",synthetic:false,types:["actix_web::httprequest::HttpRequest"]},{text:"impl Clone for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl Clone for ConnectionInfo",synthetic:false,types:["actix_web::info::ConnectionInfo"]},{text:"impl Clone for Params",synthetic:false,types:["actix_web::param::Params"]},{text:"impl Clone for Payload",synthetic:false,types:["actix_web::payload::Payload"]},{text:"impl Clone for ResourceInfo",synthetic:false,types:["actix_web::router::ResourceInfo"]},{text:"impl Clone for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl Clone for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl<T: Clone> Clone for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Clone for Cors",synthetic:false,types:["actix_web::middleware::cors::Cors"]},{text:"impl Clone for ServerSettings",synthetic:false,types:["actix_web::server::settings::ServerSettings"]},{text:"impl Clone for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl Clone for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Clone for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Clone for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Eq.js b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Eq.js new file mode 100644 index 0000000..00b5d63 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Eq.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: Eq> Eq for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Eq> Eq for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Eq> Eq for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl Eq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl<T: Eq> Eq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Eq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Eq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Eq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Ord.js b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Ord.js new file mode 100644 index 0000000..ab5f18e --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.Ord.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: Ord> Ord for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Ord> Ord for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Ord> Ord for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialEq.js b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialEq.js new file mode 100644 index 0000000..63d921e --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialEq.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl PartialEq for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl PartialEq for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl<T: PartialEq> PartialEq for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: PartialEq> PartialEq for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: PartialEq> PartialEq for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl PartialEq for DispositionType",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl PartialEq for DispositionParam",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl PartialEq for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl PartialEq for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl PartialEq for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl PartialEq for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl PartialEq for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl PartialEq for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl PartialEq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl PartialEq for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl PartialEq for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl PartialEq for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl PartialEq for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl PartialEq for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T: PartialEq> PartialEq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl PartialEq for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl PartialEq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl PartialEq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl PartialEq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl PartialEq for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},{text:"impl PartialEq for Message",synthetic:false,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialOrd.js b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialOrd.js new file mode 100644 index 0000000..64f981a --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/cmp/trait.PartialOrd.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: PartialOrd> PartialOrd for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: PartialOrd> PartialOrd for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: PartialOrd> PartialOrd for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/convert/trait.AsRef.js b/static/api/actix-web/0.7.2/implementors/core/convert/trait.AsRef.js new file mode 100644 index 0000000..3459bcd --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/convert/trait.AsRef.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl AsRef<[u8]> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<T> AsRef<T> for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/convert/trait.From.js b/static/api/actix-web/0.7.2/implementors/core/convert/trait.From.js new file mode 100644 index 0000000..276e794 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/convert/trait.From.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T> From<T> for Body where
    T: Into<Binary>, 
",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<Box<ActorHttpContext>> for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<&'static str> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<&'static [u8]> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Vec<u8>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<BytesMut> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<T> From<T> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<AsyncResult<T>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<T, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<Box<Future<Item = T, Error = Error>>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T> From<Box<Future<Item = T, Error = Error>>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<'a> From<&'a str> for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<HttpResponseBuilder> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static str> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static [u8]> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<Bytes> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<BytesMut> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a ClientResponse> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl From<ResolverError> for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl From<Error> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl From<ClientConnectorError> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder",synthetic:false,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl From<Error> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T: ResponseError> From<T> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<Error> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<IoError> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<InvalidUri> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Utf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<FromUtf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<IoError> for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl From<ParseError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl From<PayloadError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<JsonError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<PayloadError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<ContentTypeError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<UrlParseError> for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl From<usize> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Option<usize>> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<UrlParseError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<SendRequestError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<ProtocolError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl From<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl From<CloseCode> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl<T: Into<String>> From<(CloseCode, T)> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl From<PayloadError> for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/convert/trait.Into.js b/static/api/actix-web/0.7.2/implementors/core/convert/trait.Into.js new file mode 100644 index 0000000..983fc87 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/convert/trait.Into.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Into<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl Into<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Into<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/default/trait.Default.js b/static/api/actix-web/0.7.2/implementors/core/default/trait.Default.js new file mode 100644 index 0000000..6c75be3 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/default/trait.Default.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Default for App<()>",synthetic:false,types:["actix_web::application::App"]},{text:"impl<S> Default for FormConfig<S>",synthetic:false,types:["actix_web::extractor::FormConfig"]},{text:"impl Default for PayloadConfig",synthetic:false,types:["actix_web::extractor::PayloadConfig"]},{text:"impl Default for NormalizePath",synthetic:false,types:["actix_web::helpers::NormalizePath"]},{text:"impl Default for ConnectionInfo",synthetic:false,types:["actix_web::info::ConnectionInfo"]},{text:"impl<S> Default for JsonConfig<S>",synthetic:false,types:["actix_web::json::JsonConfig"]},{text:"impl<S: 'static> Default for Route<S>",synthetic:false,types:["actix_web::route::Route"]},{text:"impl<S: 'static> Default for Router<S>",synthetic:false,types:["actix_web::router::Router"]},{text:"impl Default for ClientConnectorStats",synthetic:false,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Default for Pause",synthetic:false,types:["actix_web::client::connector::Pause"]},{text:"impl Default for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Default for ClientRequest",synthetic:false,types:["actix_web::client::request::ClientRequest"]},{text:"impl Default for DefaultConfig",synthetic:false,types:["actix_web::fs::DefaultConfig"]},{text:"impl Default for Logger",synthetic:false,types:["actix_web::middleware::logger::Logger"]},{text:"impl<T> Default for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Default for Cors",synthetic:false,types:["actix_web::middleware::cors::Cors"]},{text:"impl Default for CsrfFilter",synthetic:false,types:["actix_web::middleware::csrf::CsrfFilter"]},{text:"impl Default for DefaultHeaders",synthetic:false,types:["actix_web::middleware::defaultheaders::DefaultHeaders"]},{text:"impl<S> Default for ErrorHandlers<S>",synthetic:false,types:["actix_web::middleware::errhandlers::ErrorHandlers"]},{text:"impl Default for ServerSettings",synthetic:false,types:["actix_web::server::settings::ServerSettings"]},{text:"impl Default for TestRequest<()>",synthetic:false,types:["actix_web::test::TestRequest"]},{text:"impl Default for Frame",synthetic:false,types:["actix_web::ws::frame::Frame"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Debug.js b/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Debug.js new file mode 100644 index 0000000..5ec13e4 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Debug.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Debug for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl Debug for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl Debug for Extensions",synthetic:false,types:["actix_web::extensions::Extensions"]},{text:"impl<T: Debug> Debug for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Debug> Debug for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Debug> Debug for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl<A: Debug, B: Debug> Debug for Either<A, B>",synthetic:false,types:["actix_web::handler::Either"]},{text:"impl Debug for DispositionType",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl Debug for DispositionParam",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl Debug for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl Debug for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl Debug for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl Debug for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl<S> Debug for HttpRequest<S>",synthetic:false,types:["actix_web::httprequest::HttpRequest"]},{text:"impl Debug for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl Debug for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T> Debug for Json<T> where
    T: Debug
",synthetic:false,types:["actix_web::json::Json"]},{text:"impl Debug for Params",synthetic:false,types:["actix_web::param::Params"]},{text:"impl Debug for Payload",synthetic:false,types:["actix_web::payload::Payload"]},{text:"impl Debug for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl Debug for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl Debug for Connect",synthetic:false,types:["actix_web::client::connector::Connect"]},{text:"impl Debug for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl Debug for Connection",synthetic:false,types:["actix_web::client::connector::Connection"]},{text:"impl Debug for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl Debug for ClientRequest",synthetic:false,types:["actix_web::client::request::ClientRequest"]},{text:"impl Debug for ClientRequestBuilder",synthetic:false,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl Debug for ClientResponse",synthetic:false,types:["actix_web::client::response::ClientResponse"]},{text:"impl Debug for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl Debug for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl Debug for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl Debug for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl Debug for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl Debug for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl Debug for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl Debug for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl Debug for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl Debug for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl Debug for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T> Debug for InternalError<T> where
    T: Send + Sync + Debug + 'static, 
",synthetic:false,types:["actix_web::error::InternalError"]},{text:"impl<C: Debug> Debug for NamedFile<C>",synthetic:false,types:["actix_web::fs::NamedFile"]},{text:"impl Debug for Directory",synthetic:false,types:["actix_web::fs::Directory"]},{text:"impl Debug for CorsError",synthetic:false,types:["actix_web::middleware::cors::CorsError"]},{text:"impl<T: Debug> Debug for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Debug for CsrfError",synthetic:false,types:["actix_web::middleware::csrf::CsrfError"]},{text:"impl Debug for CookieSessionError",synthetic:false,types:["actix_web::middleware::session::CookieSessionError"]},{text:"impl<S> Debug for Field<S>",synthetic:false,types:["actix_web::multipart::Field"]},{text:"impl Debug for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl Debug for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl Debug for ClientReader",synthetic:false,types:["actix_web::ws::client::ClientReader"]},{text:"impl Debug for Frame",synthetic:false,types:["actix_web::ws::frame::Frame"]},{text:"impl Debug for FramedMessage",synthetic:false,types:["actix_web::ws::frame::FramedMessage"]},{text:"impl Debug for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Debug for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Debug for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl Debug for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},{text:"impl Debug for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},{text:"impl Debug for Message",synthetic:false,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Display.js b/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Display.js new file mode 100644 index 0000000..4d1234f --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/fmt/trait.Display.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: Display> Display for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Display> Display for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Display> Display for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl Display for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl Display for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl Display for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl<T> Display for Json<T> where
    T: Display
",synthetic:false,types:["actix_web::json::Json"]},{text:"impl Display for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl Display for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl Display for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl Display for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl Display for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl Display for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl Display for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl Display for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl Display for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl Display for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl Display for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl Display for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl Display for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T> Display for InternalError<T> where
    T: Send + Sync + Display + 'static, 
",synthetic:false,types:["actix_web::error::InternalError"]},{text:"impl Display for CorsError",synthetic:false,types:["actix_web::middleware::cors::CorsError"]},{text:"impl Display for CsrfError",synthetic:false,types:["actix_web::middleware::csrf::CsrfError"]},{text:"impl Display for CookieSessionError",synthetic:false,types:["actix_web::middleware::session::CookieSessionError"]},{text:"impl Display for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl Display for Frame",synthetic:false,types:["actix_web::ws::frame::Frame"]},{text:"impl Display for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Display for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},{text:"impl Display for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/hash/trait.Hash.js b/static/api/actix-web/0.7.2/implementors/core/hash/trait.Hash.js new file mode 100644 index 0000000..406fce3 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/hash/trait.Hash.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Hash for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/marker/trait.Copy.js b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Copy.js new file mode 100644 index 0000000..19a3266 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Copy.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Copy for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl Copy for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl Copy for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl Copy for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl Copy for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Copy for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/marker/trait.Send.js b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Send.js new file mode 100644 index 0000000..7c2499e --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Send.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<S = ()> !Send for App<S>",synthetic:true,types:["actix_web::application::App"]},{text:"impl<A, S = ()> !Send for HttpContext<A, S>",synthetic:true,types:["actix_web::context::HttpContext"]},{text:"impl !Send for Extensions",synthetic:true,types:["actix_web::extensions::Extensions"]},{text:"impl<T> Send for Form<T> where
    T: Send
",synthetic:true,types:["actix_web::extractor::Form"]},{text:"impl<T> Send for Path<T> where
    T: Send
",synthetic:true,types:["actix_web::extractor::Path"]},{text:"impl<T> Send for Query<T> where
    T: Send
",synthetic:true,types:["actix_web::extractor::Query"]},{text:"impl<S> !Send for State<S>",synthetic:true,types:["actix_web::handler::State"]},{text:"impl<S = ()> !Send for HttpRequest<S>",synthetic:true,types:["actix_web::httprequest::HttpRequest"]},{text:"impl !Send for HttpResponse",synthetic:true,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T> Send for Json<T> where
    T: Send
",synthetic:true,types:["actix_web::json::Json"]},{text:"impl<S> !Send for Scope<S>",synthetic:true,types:["actix_web::scope::Scope"]},{text:"impl !Send for Request",synthetic:true,types:["actix_web::server::message::Request"]},{text:"impl Send for Binary",synthetic:true,types:["actix_web::body::Binary"]},{text:"impl !Send for Body",synthetic:true,types:["actix_web::body::Body"]},{text:"impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send
",synthetic:true,types:["actix_web::handler::Either"]},{text:"impl<A> Send for Drain<A> where
    A: Send
",synthetic:true,types:["actix_web::context::Drain"]},{text:"impl<S> !Send for FormConfig<S>",synthetic:true,types:["actix_web::extractor::FormConfig"]},{text:"impl Send for PayloadConfig",synthetic:true,types:["actix_web::extractor::PayloadConfig"]},{text:"impl<I, E = Error> !Send for AsyncResult<I, E>",synthetic:true,types:["actix_web::handler::AsyncResult"]},{text:"impl Send for ExtendedValue",synthetic:true,types:["actix_web::header::ExtendedValue"]},{text:"impl Send for ContentEncoding",synthetic:true,types:["actix_web::header::ContentEncoding"]},{text:"impl Send for ContentDisposition",synthetic:true,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl Send for DispositionType",synthetic:true,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl Send for DispositionParam",synthetic:true,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl Send for Charset",synthetic:true,types:["actix_web::header::shared::charset::Charset"]},{text:"impl Send for NormalizePath",synthetic:true,types:["actix_web::helpers::NormalizePath"]},{text:"impl<T> !Send for MessageBody<T>",synthetic:true,types:["actix_web::httpmessage::MessageBody"]},{text:"impl<T, U> !Send for UrlEncoded<T, U>",synthetic:true,types:["actix_web::httpmessage::UrlEncoded"]},{text:"impl !Send for HttpResponseBuilder",synthetic:true,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl Send for ConnectionType",synthetic:true,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl Send for ConnectionInfo",synthetic:true,types:["actix_web::info::ConnectionInfo"]},{text:"impl<S> !Send for JsonConfig<S>",synthetic:true,types:["actix_web::json::JsonConfig"]},{text:"impl<T, U> !Send for JsonBody<T, U>",synthetic:true,types:["actix_web::json::JsonBody"]},{text:"impl !Send for Params",synthetic:true,types:["actix_web::param::Params"]},{text:"impl !Send for Payload",synthetic:true,types:["actix_web::payload::Payload"]},{text:"impl<S> Send for PayloadBuffer<S> where
    S: Send
",synthetic:true,types:["actix_web::payload::PayloadBuffer"]},{text:"impl<S = ()> !Send for Resource<S>",synthetic:true,types:["actix_web::resource::Resource"]},{text:"impl<S> !Send for Route<S>",synthetic:true,types:["actix_web::route::Route"]},{text:"impl<S> !Send for Router<S>",synthetic:true,types:["actix_web::router::Router"]},{text:"impl !Send for ResourceInfo",synthetic:true,types:["actix_web::router::ResourceInfo"]},{text:"impl !Send for ResourceDef",synthetic:true,types:["actix_web::router::ResourceDef"]},{text:"impl Send for ResourceType",synthetic:true,types:["actix_web::router::ResourceType"]},{text:"impl Send for ClientConnector",synthetic:true,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Send for ClientConnectorStats",synthetic:true,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Send for Connect",synthetic:true,types:["actix_web::client::connector::Connect"]},{text:"impl Send for Connection",synthetic:true,types:["actix_web::client::connector::Connection"]},{text:"impl Send for Pause",synthetic:true,types:["actix_web::client::connector::Pause"]},{text:"impl Send for Resume",synthetic:true,types:["actix_web::client::connector::Resume"]},{text:"impl !Send for SendRequest",synthetic:true,types:["actix_web::client::pipeline::SendRequest"]},{text:"impl !Send for ClientRequest",synthetic:true,types:["actix_web::client::request::ClientRequest"]},{text:"impl !Send for ClientRequestBuilder",synthetic:true,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl !Send for ClientResponse",synthetic:true,types:["actix_web::client::response::ClientResponse"]},{text:"impl Send for ClientConnectorError",synthetic:true,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl Send for SendRequestError",synthetic:true,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl Send for Error",synthetic:true,types:["actix_web::error::Error"]},{text:"impl<T> Send for InternalError<T> where
    T: Send
",synthetic:true,types:["actix_web::error::InternalError"]},{text:"impl Send for ParseError",synthetic:true,types:["actix_web::error::ParseError"]},{text:"impl Send for PayloadError",synthetic:true,types:["actix_web::error::PayloadError"]},{text:"impl Send for MultipartError",synthetic:true,types:["actix_web::error::MultipartError"]},{text:"impl Send for ExpectError",synthetic:true,types:["actix_web::error::ExpectError"]},{text:"impl Send for ContentTypeError",synthetic:true,types:["actix_web::error::ContentTypeError"]},{text:"impl Send for UrlencodedError",synthetic:true,types:["actix_web::error::UrlencodedError"]},{text:"impl Send for JsonPayloadError",synthetic:true,types:["actix_web::error::JsonPayloadError"]},{text:"impl Send for ReadlinesError",synthetic:true,types:["actix_web::error::ReadlinesError"]},{text:"impl Send for UriSegmentError",synthetic:true,types:["actix_web::error::UriSegmentError"]},{text:"impl Send for UrlGenerationError",synthetic:true,types:["actix_web::error::UrlGenerationError"]},{text:"impl Send for StaticFileError",synthetic:true,types:["actix_web::error::StaticFileError"]},{text:"impl Send for DefaultConfig",synthetic:true,types:["actix_web::fs::DefaultConfig"]},{text:"impl<C> Send for NamedFile<C> where
    C: Send
",synthetic:true,types:["actix_web::fs::NamedFile"]},{text:"impl Send for ChunkedReadFile",synthetic:true,types:["actix_web::fs::ChunkedReadFile"]},{text:"impl Send for Directory",synthetic:true,types:["actix_web::fs::Directory"]},{text:"impl<S, C = DefaultConfig> !Send for StaticFiles<S, C>",synthetic:true,types:["actix_web::fs::StaticFiles"]},{text:"impl Send for DefaultHeaders",synthetic:true,types:["actix_web::middleware::defaultheaders::DefaultHeaders"]},{text:"impl<S> !Send for ErrorHandlers<S>",synthetic:true,types:["actix_web::middleware::errhandlers::ErrorHandlers"]},{text:"impl Send for Logger",synthetic:true,types:["actix_web::middleware::logger::Logger"]},{text:"impl !Send for Started",synthetic:true,types:["actix_web::middleware::Started"]},{text:"impl !Send for Response",synthetic:true,types:["actix_web::middleware::Response"]},{text:"impl !Send for Finished",synthetic:true,types:["actix_web::middleware::Finished"]},{text:"impl !Send for Cors",synthetic:true,types:["actix_web::middleware::cors::Cors"]},{text:"impl<S = ()> !Send for CorsBuilder<S>",synthetic:true,types:["actix_web::middleware::cors::CorsBuilder"]},{text:"impl Send for CorsError",synthetic:true,types:["actix_web::middleware::cors::CorsError"]},{text:"impl<T> Send for AllOrSome<T> where
    T: Send
",synthetic:true,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Send for CsrfFilter",synthetic:true,types:["actix_web::middleware::csrf::CsrfFilter"]},{text:"impl Send for CsrfError",synthetic:true,types:["actix_web::middleware::csrf::CsrfError"]},{text:"impl<T> Send for IdentityService<T> where
    T: Send
",synthetic:true,types:["actix_web::middleware::identity::IdentityService"]},{text:"impl !Send for CookieIdentityPolicy",synthetic:true,types:["actix_web::middleware::identity::CookieIdentityPolicy"]},{text:"impl !Send for Session",synthetic:true,types:["actix_web::middleware::session::Session"]},{text:"impl<T, S> Send for SessionStorage<T, S> where
    S: Send,
    T: Send
",synthetic:true,types:["actix_web::middleware::session::SessionStorage"]},{text:"impl !Send for CookieSession",synthetic:true,types:["actix_web::middleware::session::CookieSession"]},{text:"impl !Send for CookieSessionBackend",synthetic:true,types:["actix_web::middleware::session::CookieSessionBackend"]},{text:"impl Send for CookieSessionError",synthetic:true,types:["actix_web::middleware::session::CookieSessionError"]},{text:"impl<S> !Send for Multipart<S>",synthetic:true,types:["actix_web::multipart::Multipart"]},{text:"impl<S> !Send for Field<S>",synthetic:true,types:["actix_web::multipart::Field"]},{text:"impl<S> !Send for MultipartItem<S>",synthetic:true,types:["actix_web::multipart::MultipartItem"]},{text:"impl<S> !Send for AnyPredicate<S>",synthetic:true,types:["actix_web::pred::AnyPredicate"]},{text:"impl<S> !Send for AllPredicate<S>",synthetic:true,types:["actix_web::pred::AllPredicate"]},{text:"impl !Send for ServerSettings",synthetic:true,types:["actix_web::server::settings::ServerSettings"]},{text:"impl<H> !Send for HttpServer<H>",synthetic:true,types:["actix_web::server::srv::HttpServer"]},{text:"impl Send for PauseServer",synthetic:true,types:["actix_web::server::PauseServer"]},{text:"impl Send for ResumeServer",synthetic:true,types:["actix_web::server::ResumeServer"]},{text:"impl Send for StopServer",synthetic:true,types:["actix_web::server::StopServer"]},{text:"impl Send for KeepAlive",synthetic:true,types:["actix_web::server::KeepAlive"]},{text:"impl !Send for TestServer",synthetic:true,types:["actix_web::test::TestServer"]},{text:"impl<S> Send for TestServerBuilder<S>",synthetic:true,types:["actix_web::test::TestServerBuilder"]},{text:"impl<S = ()> !Send for TestApp<S>",synthetic:true,types:["actix_web::test::TestApp"]},{text:"impl<S> !Send for TestRequest<S>",synthetic:true,types:["actix_web::test::TestRequest"]},{text:"impl !Send for Client",synthetic:true,types:["actix_web::ws::client::Client"]},{text:"impl !Send for ClientHandshake",synthetic:true,types:["actix_web::ws::client::ClientHandshake"]},{text:"impl !Send for ClientReader",synthetic:true,types:["actix_web::ws::client::ClientReader"]},{text:"impl !Send for ClientWriter",synthetic:true,types:["actix_web::ws::client::ClientWriter"]},{text:"impl<A, S = ()> !Send for WebsocketContext<A, S>",synthetic:true,types:["actix_web::ws::context::WebsocketContext"]},{text:"impl Send for Frame",synthetic:true,types:["actix_web::ws::frame::Frame"]},{text:"impl Send for FramedMessage",synthetic:true,types:["actix_web::ws::frame::FramedMessage"]},{text:"impl Send for CloseReason",synthetic:true,types:["actix_web::ws::proto::CloseReason"]},{text:"impl<S> Send for WsStream<S> where
    S: Send
",synthetic:true,types:["actix_web::ws::WsStream"]},{text:"impl Send for ClientError",synthetic:true,types:["actix_web::ws::client::ClientError"]},{text:"impl Send for CloseCode",synthetic:true,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Send for OpCode",synthetic:true,types:["actix_web::ws::proto::OpCode"]},{text:"impl Send for ProtocolError",synthetic:true,types:["actix_web::ws::ProtocolError"]},{text:"impl Send for HandshakeError",synthetic:true,types:["actix_web::ws::HandshakeError"]},{text:"impl Send for Message",synthetic:true,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/marker/trait.Sync.js b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Sync.js new file mode 100644 index 0000000..a2ca38a --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/marker/trait.Sync.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<S = ()> !Sync for App<S>",synthetic:true,types:["actix_web::application::App"]},{text:"impl<A, S = ()> !Sync for HttpContext<A, S>",synthetic:true,types:["actix_web::context::HttpContext"]},{text:"impl !Sync for Extensions",synthetic:true,types:["actix_web::extensions::Extensions"]},{text:"impl<T> Sync for Form<T> where
    T: Sync
",synthetic:true,types:["actix_web::extractor::Form"]},{text:"impl<T> Sync for Path<T> where
    T: Sync
",synthetic:true,types:["actix_web::extractor::Path"]},{text:"impl<T> Sync for Query<T> where
    T: Sync
",synthetic:true,types:["actix_web::extractor::Query"]},{text:"impl<S> !Sync for State<S>",synthetic:true,types:["actix_web::handler::State"]},{text:"impl<S = ()> !Sync for HttpRequest<S>",synthetic:true,types:["actix_web::httprequest::HttpRequest"]},{text:"impl !Sync for HttpResponse",synthetic:true,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T> Sync for Json<T> where
    T: Sync
",synthetic:true,types:["actix_web::json::Json"]},{text:"impl<S> !Sync for Scope<S>",synthetic:true,types:["actix_web::scope::Scope"]},{text:"impl !Sync for Request",synthetic:true,types:["actix_web::server::message::Request"]},{text:"impl Sync for Binary",synthetic:true,types:["actix_web::body::Binary"]},{text:"impl !Sync for Body",synthetic:true,types:["actix_web::body::Body"]},{text:"impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync
",synthetic:true,types:["actix_web::handler::Either"]},{text:"impl<A> Sync for Drain<A> where
    A: Sync
",synthetic:true,types:["actix_web::context::Drain"]},{text:"impl<S> !Sync for FormConfig<S>",synthetic:true,types:["actix_web::extractor::FormConfig"]},{text:"impl Sync for PayloadConfig",synthetic:true,types:["actix_web::extractor::PayloadConfig"]},{text:"impl<I, E = Error> !Sync for AsyncResult<I, E>",synthetic:true,types:["actix_web::handler::AsyncResult"]},{text:"impl Sync for ExtendedValue",synthetic:true,types:["actix_web::header::ExtendedValue"]},{text:"impl Sync for ContentEncoding",synthetic:true,types:["actix_web::header::ContentEncoding"]},{text:"impl Sync for ContentDisposition",synthetic:true,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl Sync for DispositionType",synthetic:true,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl Sync for DispositionParam",synthetic:true,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl Sync for Charset",synthetic:true,types:["actix_web::header::shared::charset::Charset"]},{text:"impl Sync for NormalizePath",synthetic:true,types:["actix_web::helpers::NormalizePath"]},{text:"impl<T> !Sync for MessageBody<T>",synthetic:true,types:["actix_web::httpmessage::MessageBody"]},{text:"impl<T, U> !Sync for UrlEncoded<T, U>",synthetic:true,types:["actix_web::httpmessage::UrlEncoded"]},{text:"impl !Sync for HttpResponseBuilder",synthetic:true,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl Sync for ConnectionType",synthetic:true,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl Sync for ConnectionInfo",synthetic:true,types:["actix_web::info::ConnectionInfo"]},{text:"impl<S> !Sync for JsonConfig<S>",synthetic:true,types:["actix_web::json::JsonConfig"]},{text:"impl<T, U> !Sync for JsonBody<T, U>",synthetic:true,types:["actix_web::json::JsonBody"]},{text:"impl !Sync for Params",synthetic:true,types:["actix_web::param::Params"]},{text:"impl !Sync for Payload",synthetic:true,types:["actix_web::payload::Payload"]},{text:"impl<S> Sync for PayloadBuffer<S> where
    S: Sync
",synthetic:true,types:["actix_web::payload::PayloadBuffer"]},{text:"impl<S = ()> !Sync for Resource<S>",synthetic:true,types:["actix_web::resource::Resource"]},{text:"impl<S> !Sync for Route<S>",synthetic:true,types:["actix_web::route::Route"]},{text:"impl<S> !Sync for Router<S>",synthetic:true,types:["actix_web::router::Router"]},{text:"impl !Sync for ResourceInfo",synthetic:true,types:["actix_web::router::ResourceInfo"]},{text:"impl !Sync for ResourceDef",synthetic:true,types:["actix_web::router::ResourceDef"]},{text:"impl Sync for ResourceType",synthetic:true,types:["actix_web::router::ResourceType"]},{text:"impl !Sync for ClientConnector",synthetic:true,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Sync for ClientConnectorStats",synthetic:true,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Sync for Connect",synthetic:true,types:["actix_web::client::connector::Connect"]},{text:"impl !Sync for Connection",synthetic:true,types:["actix_web::client::connector::Connection"]},{text:"impl Sync for Pause",synthetic:true,types:["actix_web::client::connector::Pause"]},{text:"impl Sync for Resume",synthetic:true,types:["actix_web::client::connector::Resume"]},{text:"impl !Sync for SendRequest",synthetic:true,types:["actix_web::client::pipeline::SendRequest"]},{text:"impl !Sync for ClientRequest",synthetic:true,types:["actix_web::client::request::ClientRequest"]},{text:"impl !Sync for ClientRequestBuilder",synthetic:true,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl !Sync for ClientResponse",synthetic:true,types:["actix_web::client::response::ClientResponse"]},{text:"impl Sync for ClientConnectorError",synthetic:true,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl Sync for SendRequestError",synthetic:true,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl Sync for Error",synthetic:true,types:["actix_web::error::Error"]},{text:"impl<T> Sync for InternalError<T> where
    T: Sync
",synthetic:true,types:["actix_web::error::InternalError"]},{text:"impl Sync for ParseError",synthetic:true,types:["actix_web::error::ParseError"]},{text:"impl Sync for PayloadError",synthetic:true,types:["actix_web::error::PayloadError"]},{text:"impl Sync for MultipartError",synthetic:true,types:["actix_web::error::MultipartError"]},{text:"impl Sync for ExpectError",synthetic:true,types:["actix_web::error::ExpectError"]},{text:"impl Sync for ContentTypeError",synthetic:true,types:["actix_web::error::ContentTypeError"]},{text:"impl Sync for UrlencodedError",synthetic:true,types:["actix_web::error::UrlencodedError"]},{text:"impl Sync for JsonPayloadError",synthetic:true,types:["actix_web::error::JsonPayloadError"]},{text:"impl Sync for ReadlinesError",synthetic:true,types:["actix_web::error::ReadlinesError"]},{text:"impl Sync for UriSegmentError",synthetic:true,types:["actix_web::error::UriSegmentError"]},{text:"impl Sync for UrlGenerationError",synthetic:true,types:["actix_web::error::UrlGenerationError"]},{text:"impl Sync for StaticFileError",synthetic:true,types:["actix_web::error::StaticFileError"]},{text:"impl Sync for DefaultConfig",synthetic:true,types:["actix_web::fs::DefaultConfig"]},{text:"impl<C> Sync for NamedFile<C> where
    C: Sync
",synthetic:true,types:["actix_web::fs::NamedFile"]},{text:"impl Sync for ChunkedReadFile",synthetic:true,types:["actix_web::fs::ChunkedReadFile"]},{text:"impl Sync for Directory",synthetic:true,types:["actix_web::fs::Directory"]},{text:"impl<S, C = DefaultConfig> !Sync for StaticFiles<S, C>",synthetic:true,types:["actix_web::fs::StaticFiles"]},{text:"impl Sync for DefaultHeaders",synthetic:true,types:["actix_web::middleware::defaultheaders::DefaultHeaders"]},{text:"impl<S> !Sync for ErrorHandlers<S>",synthetic:true,types:["actix_web::middleware::errhandlers::ErrorHandlers"]},{text:"impl Sync for Logger",synthetic:true,types:["actix_web::middleware::logger::Logger"]},{text:"impl !Sync for Started",synthetic:true,types:["actix_web::middleware::Started"]},{text:"impl !Sync for Response",synthetic:true,types:["actix_web::middleware::Response"]},{text:"impl !Sync for Finished",synthetic:true,types:["actix_web::middleware::Finished"]},{text:"impl !Sync for Cors",synthetic:true,types:["actix_web::middleware::cors::Cors"]},{text:"impl<S = ()> !Sync for CorsBuilder<S>",synthetic:true,types:["actix_web::middleware::cors::CorsBuilder"]},{text:"impl Sync for CorsError",synthetic:true,types:["actix_web::middleware::cors::CorsError"]},{text:"impl<T> Sync for AllOrSome<T> where
    T: Sync
",synthetic:true,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Sync for CsrfFilter",synthetic:true,types:["actix_web::middleware::csrf::CsrfFilter"]},{text:"impl Sync for CsrfError",synthetic:true,types:["actix_web::middleware::csrf::CsrfError"]},{text:"impl<T> Sync for IdentityService<T> where
    T: Sync
",synthetic:true,types:["actix_web::middleware::identity::IdentityService"]},{text:"impl !Sync for CookieIdentityPolicy",synthetic:true,types:["actix_web::middleware::identity::CookieIdentityPolicy"]},{text:"impl !Sync for Session",synthetic:true,types:["actix_web::middleware::session::Session"]},{text:"impl<T, S> Sync for SessionStorage<T, S> where
    S: Sync,
    T: Sync
",synthetic:true,types:["actix_web::middleware::session::SessionStorage"]},{text:"impl !Sync for CookieSession",synthetic:true,types:["actix_web::middleware::session::CookieSession"]},{text:"impl !Sync for CookieSessionBackend",synthetic:true,types:["actix_web::middleware::session::CookieSessionBackend"]},{text:"impl Sync for CookieSessionError",synthetic:true,types:["actix_web::middleware::session::CookieSessionError"]},{text:"impl<S> !Sync for Multipart<S>",synthetic:true,types:["actix_web::multipart::Multipart"]},{text:"impl<S> !Sync for Field<S>",synthetic:true,types:["actix_web::multipart::Field"]},{text:"impl<S> !Sync for MultipartItem<S>",synthetic:true,types:["actix_web::multipart::MultipartItem"]},{text:"impl<S> !Sync for AnyPredicate<S>",synthetic:true,types:["actix_web::pred::AnyPredicate"]},{text:"impl<S> !Sync for AllPredicate<S>",synthetic:true,types:["actix_web::pred::AllPredicate"]},{text:"impl !Sync for ServerSettings",synthetic:true,types:["actix_web::server::settings::ServerSettings"]},{text:"impl<H> !Sync for HttpServer<H>",synthetic:true,types:["actix_web::server::srv::HttpServer"]},{text:"impl Sync for PauseServer",synthetic:true,types:["actix_web::server::PauseServer"]},{text:"impl Sync for ResumeServer",synthetic:true,types:["actix_web::server::ResumeServer"]},{text:"impl Sync for StopServer",synthetic:true,types:["actix_web::server::StopServer"]},{text:"impl Sync for KeepAlive",synthetic:true,types:["actix_web::server::KeepAlive"]},{text:"impl !Sync for TestServer",synthetic:true,types:["actix_web::test::TestServer"]},{text:"impl<S> Sync for TestServerBuilder<S>",synthetic:true,types:["actix_web::test::TestServerBuilder"]},{text:"impl<S = ()> !Sync for TestApp<S>",synthetic:true,types:["actix_web::test::TestApp"]},{text:"impl<S> !Sync for TestRequest<S>",synthetic:true,types:["actix_web::test::TestRequest"]},{text:"impl !Sync for Client",synthetic:true,types:["actix_web::ws::client::Client"]},{text:"impl !Sync for ClientHandshake",synthetic:true,types:["actix_web::ws::client::ClientHandshake"]},{text:"impl !Sync for ClientReader",synthetic:true,types:["actix_web::ws::client::ClientReader"]},{text:"impl !Sync for ClientWriter",synthetic:true,types:["actix_web::ws::client::ClientWriter"]},{text:"impl<A, S = ()> !Sync for WebsocketContext<A, S>",synthetic:true,types:["actix_web::ws::context::WebsocketContext"]},{text:"impl Sync for Frame",synthetic:true,types:["actix_web::ws::frame::Frame"]},{text:"impl Sync for FramedMessage",synthetic:true,types:["actix_web::ws::frame::FramedMessage"]},{text:"impl Sync for CloseReason",synthetic:true,types:["actix_web::ws::proto::CloseReason"]},{text:"impl<S> Sync for WsStream<S> where
    S: Sync
",synthetic:true,types:["actix_web::ws::WsStream"]},{text:"impl Sync for ClientError",synthetic:true,types:["actix_web::ws::client::ClientError"]},{text:"impl Sync for CloseCode",synthetic:true,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Sync for OpCode",synthetic:true,types:["actix_web::ws::proto::OpCode"]},{text:"impl Sync for ProtocolError",synthetic:true,types:["actix_web::ws::ProtocolError"]},{text:"impl Sync for HandshakeError",synthetic:true,types:["actix_web::ws::HandshakeError"]},{text:"impl Sync for Message",synthetic:true,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.Deref.js b/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.Deref.js new file mode 100644 index 0000000..ae8a178 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.Deref.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T> Deref for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T> Deref for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T> Deref for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl<S> Deref for State<S>",synthetic:false,types:["actix_web::handler::State"]},{text:"impl<S> Deref for HttpRequest<S>",synthetic:false,types:["actix_web::httprequest::HttpRequest"]},{text:"impl<T> Deref for Json<T>",synthetic:false,types:["actix_web::json::Json"]},{text:"impl<C> Deref for NamedFile<C>",synthetic:false,types:["actix_web::fs::NamedFile"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.DerefMut.js b/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.DerefMut.js new file mode 100644 index 0000000..15bddf5 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/ops/deref/trait.DerefMut.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T> DerefMut for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T> DerefMut for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T> DerefMut for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl<T> DerefMut for Json<T>",synthetic:false,types:["actix_web::json::Json"]},{text:"impl<C> DerefMut for NamedFile<C>",synthetic:false,types:["actix_web::fs::NamedFile"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/ops/drop/trait.Drop.js b/static/api/actix-web/0.7.2/implementors/core/ops/drop/trait.Drop.js new file mode 100644 index 0000000..1bf6d1e --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/ops/drop/trait.Drop.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<S> Drop for HttpRequest<S>",synthetic:false,types:["actix_web::httprequest::HttpRequest"]},{text:"impl Drop for TestServer",synthetic:false,types:["actix_web::test::TestServer"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/ops/index/trait.Index.js b/static/api/actix-web/0.7.2/implementors/core/ops/index/trait.Index.js new file mode 100644 index 0000000..318bf60 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/ops/index/trait.Index.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<'a> Index<&'a str> for Params",synthetic:false,types:["actix_web::param::Params"]},{text:"impl Index<usize> for Params",synthetic:false,types:["actix_web::param::Params"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/core/str/trait.FromStr.js b/static/api/actix-web/0.7.2/implementors/core/str/trait.FromStr.js new file mode 100644 index 0000000..375aa67 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/core/str/trait.FromStr.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl FromStr for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/failure/trait.Fail.js b/static/api/actix-web/0.7.2/implementors/failure/trait.Fail.js new file mode 100644 index 0000000..eef4c51 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/failure/trait.Fail.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Fail for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl Fail for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl Fail for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl Fail for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl Fail for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl Fail for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl Fail for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl Fail for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl Fail for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl Fail for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl Fail for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl Fail for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T> Fail for InternalError<T> where
    T: Send + Sync + Debug + Display + 'static, 
",synthetic:false,types:["actix_web::error::InternalError"]},{text:"impl Fail for CorsError",synthetic:false,types:["actix_web::middleware::cors::CorsError"]},{text:"impl Fail for CsrfError",synthetic:false,types:["actix_web::middleware::csrf::CsrfError"]},{text:"impl Fail for CookieSessionError",synthetic:false,types:["actix_web::middleware::session::CookieSessionError"]},{text:"impl Fail for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl Fail for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},{text:"impl Fail for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/futures/future/trait.Future.js b/static/api/actix-web/0.7.2/implementors/futures/future/trait.Future.js new file mode 100644 index 0000000..1c1d5c7 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/futures/future/trait.Future.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, B, I, E> Future for Either<A, B> where
    A: Future<Item = I, Error = E>,
    B: Future<Item = I, Error = E>, 
",synthetic:false,types:["actix_web::handler::Either"]},{text:"impl<I, E> Future for AsyncResult<I, E>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T> Future for MessageBody<T> where
    T: HttpMessage + 'static, 
",synthetic:false,types:["actix_web::httpmessage::MessageBody"]},{text:"impl<T, U> Future for UrlEncoded<T, U> where
    T: HttpMessage + 'static,
    U: DeserializeOwned + 'static, 
",synthetic:false,types:["actix_web::httpmessage::UrlEncoded"]},{text:"impl<T: HttpMessage + 'static, U: DeserializeOwned + 'static> Future for JsonBody<T, U>",synthetic:false,types:["actix_web::json::JsonBody"]},{text:"impl Future for SendRequest",synthetic:false,types:["actix_web::client::pipeline::SendRequest"]},{text:"impl Future for ClientHandshake",synthetic:false,types:["actix_web::ws::client::ClientHandshake"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/futures/stream/trait.Stream.js b/static/api/actix-web/0.7.2/implementors/futures/stream/trait.Stream.js new file mode 100644 index 0000000..f2e7b5d --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/futures/stream/trait.Stream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Stream for Payload",synthetic:false,types:["actix_web::payload::Payload"]},{text:"impl Stream for Box<Pipeline>",synthetic:false,types:["alloc::boxed::Box"]},{text:"impl Stream for ChunkedReadFile",synthetic:false,types:["actix_web::fs::ChunkedReadFile"]},{text:"impl<S> Stream for Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
",synthetic:false,types:["actix_web::multipart::Multipart"]},{text:"impl<S> Stream for Field<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
",synthetic:false,types:["actix_web::multipart::Field"]},{text:"impl Stream for ClientReader",synthetic:false,types:["actix_web::ws::client::ClientReader"]},{text:"impl<S> Stream for WsStream<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
",synthetic:false,types:["actix_web::ws::WsStream"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/std/io/trait.Read.js b/static/api/actix-web/0.7.2/implementors/std/io/trait.Read.js new file mode 100644 index 0000000..a007fc6 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/std/io/trait.Read.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Read for Connection",synthetic:false,types:["actix_web::client::connector::Connection"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/std/io/trait.Write.js b/static/api/actix-web/0.7.2/implementors/std/io/trait.Write.js new file mode 100644 index 0000000..8fc5444 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/std/io/trait.Write.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Write for Connection",synthetic:false,types:["actix_web::client::connector::Connection"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/tokio_io/async_read/trait.AsyncRead.js b/static/api/actix-web/0.7.2/implementors/tokio_io/async_read/trait.AsyncRead.js new file mode 100644 index 0000000..7a8b5e8 --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/tokio_io/async_read/trait.AsyncRead.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl AsyncRead for Connection",synthetic:false,types:["actix_web::client::connector::Connection"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/implementors/tokio_io/async_write/trait.AsyncWrite.js b/static/api/actix-web/0.7.2/implementors/tokio_io/async_write/trait.AsyncWrite.js new file mode 100644 index 0000000..b1f398d --- /dev/null +++ b/static/api/actix-web/0.7.2/implementors/tokio_io/async_write/trait.AsyncWrite.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl AsyncWrite for Connection",synthetic:false,types:["actix_web::client::connector::Connection"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/0.7.2/light.css b/static/api/actix-web/0.7.2/light.css new file mode 100644 index 0000000..cfbea82 --- /dev/null +++ b/static/api/actix-web/0.7.2/light.css @@ -0,0 +1,12 @@ +/*! + * Copyright 2015 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ +body{background-color:white;color:black;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){color:black;}h1.fqn{border-bottom-color:#D5D5D5;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock p>code,.docblock-short p>code{background-color:#F5F5F5;}pre{background-color:#F5F5F5;}.sidebar{background-color:#F1F1F1;}.sidebar .current{background-color:#fff;}.source .sidebar{background-color:#fff;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#f6fdb0 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table{border-color:#ddd;}.docblock table td{border-top-color:#ddd;border-bottom-color:#ddd;}.docblock table th{border-top-color:#ddd;border-bottom-color:#ddd;}:target{background:#FDFFD3;}:target>.in-band{background:#FDFFD3;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.content .highlighted{color:#000 !important;background-color:#ccc;}.content .highlighted a,.content .highlighted span{color:#000 !important;}.content .highlighted.trait{background-color:#c7b6ff;}.content .highlighted.mod,.content .highlighted.externcrate{background-color:#afc6e4;}.content .highlighted.enum{background-color:#b4d1b9;}.content .highlighted.struct{background-color:#e7b1a0;}.content .highlighted.union{background-color:#b7bd49;}.content .highlighted.fn,.content .highlighted.method,.content .highlighted.tymethod{background-color:#c6afb3;}.content .highlighted.type{background-color:#ffc891;}.content .highlighted.foreigntype{background-color:#f5c4ff;}.content .highlighted.macro{background-color:#8ce488;}.content .highlighted.constant,.content .highlighted.static{background-color:#c3e0ff;}.content .highlighted.primitive{background-color:#9aecff;}.content .highlighted.keyword{background-color:#f99650;}.content span.enum,.content a.enum,.block a.current.enum{color:#508157;}.content span.struct,.content a.struct,.block a.current.struct{color:#ad448e;}.content span.type,.content a.type,.block a.current.type{color:#ba5d00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#cd00e2;}.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#767b27;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#546e8a;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2c8093;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#4d76ae;}.content span.trait,.content a.trait,.block a.current.trait{color:#7c5af3;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#9a6e31;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}nav{border-bottom-color:#e0e0e0;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#000;}.docblock a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.stability a{color:#3873AD;}a.test-arrow{color:#f5f5f5;}.collapse-toggle{color:#999;}.search-input{color:#555;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;background-color:white;}.search-input:focus{border-color:#66afe9;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#F3DFFF;border-color:#7F0087;}.stab.portability{background:#C4ECFF;border-color:#7BA5DB;}.module-item .stab{color:#000;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label{color:#999;}:target>code{background:#FDFFD3;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.4);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.3);}.information>.compile_fail:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.3);}.information>.ignore:hover{color:rgba(255,142,0,1);}.search-failed>a{color:#0089ff;}.tooltip .tooltiptext{background-color:black;color:#fff;}.tooltip .tooltiptext::after{border-color:transparent black transparent transparent;}.important-traits .tooltip .tooltiptext{background-color:white;color:black;border-color:black;}#titles>div{border-bottom-color:#ccc;}#titles>div.selected{border-bottom-color:#0078ee;}#titles>div:hover{border-bottom-color:#0089ff;}#titles>div>div.count{color:#888;}.modal{background-color:rgba(0,0,0,0.3);}.modal-content{background-color:#eee;border-color:#999;}.modal-content>.close{background-color:#eee;border-color:#999;}.modal-content>.close:hover{background-color:#ff1f1f;color:white;}.modal-content>.whiter{background-color:#eee;}.modal-content>.close:hover+.whiter{background-color:#ff1f1f;}@media (max-width:700px){.sidebar-menu{background-color:#F1F1F1;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F1F1F1;border-right-color:#000;}#sidebar-filler{background-color:#F1F1F1;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus{border-color:#717171;}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.search-results td span.alias{color:#000;}.search-results td span.grey{color:#999;} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/main.js b/static/api/actix-web/0.7.2/main.js new file mode 100644 index 0000000..628afea --- /dev/null +++ b/static/api/actix-web/0.7.2/main.js @@ -0,0 +1,11 @@ +/*! + * Copyright 2014 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */(function(){"use strict";var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword"];var search_input=document.getElementsByClassName('search-input')[0];var currentTab=0;var themesWidth=null;if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position;};}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1;};}function getPageId(){var id=document.location.href.split('#')[1];if(id){return id.split('?')[0].split('&')[0];}return null;}function hasClass(elem,className){if(elem&&className&&elem.className){var elemClass=elem.className;var start=elemClass.indexOf(className);if(start===-1){return false;}else if(elemClass.length===className.length){return true;}else{if(start>0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0){elem.className+=' '+className;}else{elem.className=className;}}}function removeClass(elem,className){if(elem&&className&&elem.className){elem.className=(" "+elem.className+" ").replace(" "+className+" "," ").trim();}}function isHidden(elem){return(elem.offsetParent===null)}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];if(sidebar){addClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div);}}var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display="none";}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];removeClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(filler){filler.remove();}document.getElementsByTagName("body")[0].style.marginTop='';var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display=null;}}var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");onEach(document.getElementsByClassName('js-only'),function(e){removeClass(e,'js-only');});function getQueryStringParams(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1]);});return params;}function browserSupportsHistoryApi(){return document.location.protocol!="file:"&&window.history&&typeof window.history.pushState==="function";}function highlightSourceLines(ev){hideSidebar();var search=document.getElementById("search");var i,from,to,match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(match){from=parseInt(match[1],10);to=Math.min(50000,parseInt(match[2]||match[1],10));from=Math.min(from,to);var elem=document.getElementById(from);if(!elem){return;}if(ev===null){var x=document.getElementById(from);if(x){x.scrollIntoView();}}onEach(document.getElementsByClassName('line-numbers'),function(e){onEach(e.getElementsByTagName('span'),function(i_e){removeClass(i_e,'line-highlighted');});});for(i=from;i<=to;++i){addClass(document.getElementById(i),'line-highlighted');}}else if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");var hash=ev.newURL.slice(ev.newURL.indexOf('#')+1);if(browserSupportsHistoryApi()){history.replaceState(hash,"","?search=#"+hash);}var elem=document.getElementById(hash);if(elem){elem.scrollIntoView();}}}highlightSourceLines(null);window.onhashchange=highlightSourceLines;function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined")return ev.key;var c=ev.charCode||ev.keyCode;if(c==27)return"Escape";return String.fromCharCode(c);}function displayHelp(display,ev){if(display===true){if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur");}}else if(!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur");}}function handleEscape(ev,help){hideModal();var search=document.getElementById("search");if(!hasClass(help,"hidden")){displayHelp(false,ev);}else if(!hasClass(search,"hidden")){ev.preventDefault();addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");}defocusSearchBar();}function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return;}var help=document.getElementById("help");if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;case"s":case"S":displayHelp(false,ev);hideModal();ev.preventDefault();focusSearchBar();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":if(ev.shiftKey){hideModal();displayHelp(true,ev);}break;}}}document.onkeypress=handleShortcut;document.onkeydown=handleShortcut;document.onclick=function(ev){if(hasClass(ev.target,'collapse-toggle')){collapseDocs(ev.target,"toggle");}else if(hasClass(ev.target.parentNode,'collapse-toggle')){collapseDocs(ev.target.parentNode,"toggle");}else if(ev.target.tagName==='SPAN'&&hasClass(ev.target.parentNode,'line-numbers')){var prev_id=0;var set_fragment=function(name){if(browserSupportsHistoryApi()){history.replaceState(null,null,'#'+name);window.hashchange();}else{location.replace('#'+name);}};var cur_id=parseInt(ev.target.id,10);if(ev.shiftKey&&prev_id){if(prev_id>cur_id){var tmp=prev_id;prev_id=cur_id;cur_id=tmp;}set_fragment(prev_id+'-'+cur_id);}else{prev_id=cur_id;set_fragment(cur_id);}}else if(!hasClass(document.getElementById("help"),"hidden")){addClass(document.getElementById("help"),"hidden");removeClass(document.body,"blur");}};var x=document.getElementsByClassName('version-selector');if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped='',len=rootPath.match(/\.\.\//g).length+1;for(i=0;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;if(isType!==true||obj.type){var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+='|'+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break;}}}}return out;}function sortResults(results,isType){var ar=[];for(var entry in results){if(results.hasOwnProperty(entry)){ar.push(results[entry]);}}results=ar;var nresults=results.length;for(var i=0;ib?+1:-1);}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b;}a=aaa.index;b=bbb.index;if(a!==b){return a-b;}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1;}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1;}a=(aaa.item.desc==='');b=(bbb.item.desc==='');if(a!==b){return a-b;}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b;}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1);}return 0;});for(var i=0;i'));return{name:val.substring(0,val.indexOf('<')),generics:values.split(/\s*,\s*/),};}return{name:val,generics:[],};}function checkGenerics(obj,val){var lev_distance=MAX_LEV_DISTANCE+1;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=obj[GENERICS_DATA].slice(0);var total=0;var done=0;for(var y=0;yGENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=obj[GENERICS_DATA].slice(0);var allFound=true;var x;for(var y=0;allFound===true&&yGENERICS_DATA&&obj[GENERICS_DATA].length!==0){var tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev;}}else{return 0;}}if(literalSearch===true){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){for(var x=0;x0){for(var i=0;iOUTPUT_DATA){var tmp=checkType(obj.type[OUTPUT_DATA],val,literalSearch);if(literalSearch===true&&tmp===true){return true;}lev_distance=Math.min(tmp,lev_distance);if(lev_distance===0){return 0;}}return literalSearch===true?false:lev_distance;}function checkPath(startsWith,lastElem,ty){if(startsWith.length===0){return 0;}var ret_lev=MAX_LEV_DISTANCE+1;var path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase());}if(startsWith.length>path.length){return MAX_LEV_DISTANCE+1;}for(var i=0;ipath.length){break;}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break;}lev_total+=lev;}if(aborted===false){ret_lev=Math.min(ret_lev,Math.round(lev_total/startsWith.length));}}return ret_lev;}function typePassesFilter(filter,type){if(filter<0)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return(name=="associatedconstant");case"fn":return(name=="method"||name=="tymethod");case"type":return(name=="primitive"||name=="keyword");}return false;}function generateId(ty){if(ty.parent&&ty.parent.name){return itemTypes[ty.ty]+ty.path+ty.parent.name+ty.name;}return itemTypes[ty.ty]+ty.path+ty.name;}var nSearchWords=searchWords.length;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(var i=0;i")>-1){var trimmer=function(s){return s.trim();};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(var i=0;iOUTPUT_DATA?type[OUTPUT_DATA].name:"";var returned=checkReturned(ty,output,true);if(output.name==="*"||returned===true){var in_args=false;var module=false;if(input==="*"){module=true;}else{var allFound=true;for(var it=0;allFound===true&&it1?paths.length-1:1);for(j=0;j1){var lev=checkPath(startsWith,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue;}else if(lev>0){lev_add=1;}}var returned=MAX_LEV_DISTANCE+1;var in_args=MAX_LEV_DISTANCE+1;var index=-1;var lev=MAX_LEV_DISTANCE+1;var fullId=generateId(ty);if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||searchWords[j].replace(/_/g,"").indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=searchWords[j].replace(/_/g,"").indexOf(val);}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){lev=MAX_LEV_DISTANCE+1;}else{lev+=1;}}if((in_args=findArg(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){in_args=MAX_LEV_DISTANCE+1;}}if((returned=checkReturned(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){returned=MAX_LEV_DISTANCE+1;}}lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].startsWith(val)){if(val.length<6){lev-=1;}else{lev=0;}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,};}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args);}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,};}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned);}if(index!==-1||lev<=MAX_LEV_DISTANCE){if(index!==-1&&paths.length<2){lev=0;}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,};}results[fullId].lev=Math.min(results[fullId].lev,lev);}}}var ret={'in_args':sortResults(results_in_args,true),'returned':sortResults(results_returned,true),'others':sortResults(results),};if(ALIASES&&ALIASES[window.currentCrate]&&ALIASES[window.currentCrate][query.raw]){var aliases=ALIASES[window.currentCrate][query.raw];for(var i=0;iMAX_RESULTS){ret['others'].pop();}}}return ret;}function validateResult(name,path,keys,parent){for(var i=0;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false;}}return true;}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,'constant');query=query.substring(matches[0].length);}return{raw:raw,query:query,type:type,id:query+type};}function initSearchNav(){var hoverTimeout;var click_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}var dst=e.target.getElementsByTagName('a');if(dst.length<1){return;}dst=dst[0];if(window.location.pathname===dst.pathname){addClass(document.getElementById('search'),'hidden');removeClass(document.getElementById('main'),'hidden');document.location.href=dst.href;}};var mouseover_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}clearTimeout(hoverTimeout);hoverTimeout=setTimeout(function(){onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){removeClass(i_e,'highlighted');});});addClass(el,'highlighted');},20);};onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){i_e.onclick=click_func;i_e.onmouseover=mouseover_func;});});search_input.onkeydown=function(e){var actives=[[],[],[]];var current=0;onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('highlighted'),function(e){actives[current].push(e);});current+=1;});if(e.which===38){if(!actives[currentTab].length||!actives[currentTab][0].previousElementSibling){return;}addClass(actives[currentTab][0].previousElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}else if(e.which===40){if(!actives[currentTab].length){var results=document.getElementsByClassName('search-results');if(results.length>0){var res=results[currentTab].getElementsByClassName('result');if(res.length>0){addClass(res[0],'highlighted');}}}else if(actives[currentTab][0].nextElementSibling){addClass(actives[currentTab][0].nextElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}}else if(e.which===13){if(actives[currentTab].length){document.location.href=actives[currentTab][0].getElementsByTagName('a')[0].href;}}else if(e.which===9){if(e.shiftKey){printTab(currentTab>0?currentTab-1:2);}else{printTab(currentTab>1?0:currentTab+1);}e.preventDefault();}else if(e.which===16){}else if(e.which===27){removeClass(actives[currentTab][0],'highlighted');search_input.value='';defocusSearchBar();}else if(actives[currentTab].length>0){removeClass(actives[currentTab][0],'highlighted');}};}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;if(type==='mod'){displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+name+'/index.html';}else if(type==="primitive"||type==="keyword"){displayPath="";href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}else if(type==="externcrate"){displayPath="";href=rootPath+name+'/index.html';}else if(item.parent!==undefined){var myparent=item.parent;var anchor='#'+type+'.'+name;var parentType=itemTypes[myparent.ty];if(parentType==="primitive"){displayPath=myparent.name+'::';}else{displayPath=item.path+'::'+myparent.name+'::';}href=rootPath+item.path.replace(/::/g,'/')+'/'+parentType+'.'+myparent.name+'.html'+anchor;}else{displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}return[displayPath,href];}function escape(content){var h1=document.createElement('h1');h1.textContent=content;return h1.innerHTML;}function pathSplitter(path){var tmp=''+path.replace(/::/g,'::');if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6);}return tmp;}function addTab(array,query,display){var extraStyle='';if(display===false){extraStyle=' style="display: none;"';}var output='';var duplicates={};var length=0;if(array.length>0){output='';array.forEach(function(item){var name,type;name=item.name;type=itemTypes[item.ty];if(item.is_alias!==true){if(duplicates[item.fullPath]){return;}duplicates[item.fullPath]=true;}length+=1;output+='';});output+='
'+''+(item.is_alias===true?(''+item.alias+'  - see '):'')+item.displayPath+''+name+''+''+''+escape(item.desc)+' 
';}else{output='
No results :(
'+'Try on DuckDuckGo?
';}return[output,length];}function makeTabHeader(tabNb,text,nbElems){if(currentTab===tabNb){return'
'+text+'
('+nbElems+')
';}return'
'+text+'
('+nbElems+')
';}function showResults(results){if(results['others'].length===1&&getCurrentValue('rustdoc-go-to-only-result')==="true"){var elem=document.createElement('a');elem.href=results['others'][0].href;elem.style.display='none';document.body.appendChild(elem);elem.click();}var query=getQuery(search_input.value);currentResults=query.id;var ret_others=addTab(results['others'],query);var ret_in_args=addTab(results['in_args'],query,false);var ret_returned=addTab(results['returned'],query,false);var output='

Results for '+escape(query.query)+(query.type?' (type: '+escape(query.type)+')':'')+'

'+'
'+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+'
'+ret_others[0]+ret_in_args[0]+ret_returned[0]+'
';addClass(document.getElementById('main'),'hidden');var search=document.getElementById('search');removeClass(search,'hidden');search.innerHTML=output;var tds=search.getElementsByTagName('td');var td_width=0;if(tds.length>0){td_width=tds[0].offsetWidth;}var width=search.offsetWidth-40-td_width;onEach(search.getElementsByClassName('desc'),function(e){e.style.width=width+'px';});initSearchNav();var elems=document.getElementById('titles').childNodes;elems[0].onclick=function(){printTab(0);};elems[1].onclick=function(){printTab(1);};elems[2].onclick=function(){printTab(2);};printTab(currentTab);}function execSearch(query,searchWords){var queries=query.raw.split(",");var results={'in_args':[],'returned':[],'others':[],};for(var i=0;i1){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev;}}return start;}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1;}}}return ret;}return{'in_args':mergeArrays(results['in_args']),'returned':mergeArrays(results['returned']),'others':mergeArrays(results['others']),};}else{return{'in_args':results['in_args'][0],'returned':results['returned'][0],'others':results['others'][0],};}}function search(e){var params=getQueryStringParams();var query=getQuery(search_input.value.trim());if(e){e.preventDefault();}if(query.query.length===0||query.id===currentResults){if(query.query.length>0){putBackSearch(search_input);}return;}document.title="Results for "+query.query+" - Rust";if(browserSupportsHistoryApi()){if(!history.state&&!params.search){history.pushState(query,"","?search="+encodeURIComponent(query.raw));}else{history.replaceState(query,"","?search="+encodeURIComponent(query.raw));}}showResults(execSearch(query,index));}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];for(var crate in rawSearchIndex){if(!rawSearchIndex.hasOwnProperty(crate)){continue;}searchWords.push(crate);searchIndex.push({crate:crate,ty:1,name:crate,path:"",desc:rawSearchIndex[crate].doc,type:null,});var items=rawSearchIndex[crate].items;var paths=rawSearchIndex[crate].paths;var len=paths.length;for(var i=0;i"+labelForToggleButton(false)+"
]";var func=function(e){var next=e.nextElementSibling;if(hasClass(e,'impl')&&next&&hasClass(next,'docblock')){next=next.nextElementSibling;}if(!next){return;}if((checkIfThereAreMethods(next.childNodes)||hasClass(e,'method'))&&(hasClass(next,'docblock')||hasClass(e,'impl')||(hasClass(next,'stability')&&hasClass(next.nextElementSibling,'docblock')))){insertAfter(toggle.cloneNode(true),e.childNodes[e.childNodes.length-1]);}};onEach(document.getElementsByClassName('method'),func);onEach(document.getElementsByClassName('impl'),func);onEach(document.getElementsByClassName('impl-items'),function(e){onEach(e.getElementsByClassName('associatedconstant'),func);});function createToggle(otherMessage,fontSize,extraClass){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';if(!otherMessage){span.innerHTML=' Expand description';}else{span.innerHTML=otherMessage;}if(fontSize){span.style.fontSize=fontSize;}var mainToggle=toggle.cloneNode(true);mainToggle.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper';if(extraClass){wrapper.className+=' '+extraClass;}wrapper.appendChild(mainToggle);return wrapper;}onEach(document.getElementsByClassName('docblock'),function(e){if(hasClass(e,'autohide')){var wrap=e.previousElementSibling;if(wrap&&hasClass(wrap,'toggle-wrapper')){var toggle=wrap.childNodes[0];var extra=false;if(e.childNodes[0].tagName==='H3'){extra=true;}e.style.display='none';addClass(wrap,'collapsed');onEach(toggle.getElementsByClassName('inner'),function(e){e.innerHTML=labelForToggleButton(true);});onEach(toggle.getElementsByClassName('toggle-label'),function(e){e.style.display='inline-block';if(extra===true){i_e.innerHTML=" Show "+e.childNodes[0].innerHTML;}});}}if(e.parentNode.id==="main"){var otherMessage;var fontSize;var extraClass;if(hasClass(e,"type-decl")){fontSize="20px";otherMessage=' Show declaration';}else if(hasClass(e,"non-exhaustive")){otherMessage=' This ';if(hasClass(e,"non-exhaustive-struct")){otherMessage+='struct';}else if(hasClass(e,"non-exhaustive-enum")){otherMessage+='enum';}else if(hasClass(e,"non-exhaustive-type")){otherMessage+='type';}otherMessage+=' is marked as non-exhaustive';}else if(hasClass(e.childNodes[0],"impl-items")){extraClass="marg-left";}e.parentNode.insertBefore(createToggle(otherMessage,fontSize,extraClass),e);if(otherMessage&&getCurrentValue('rustdoc-item-declarations')!=="false"){collapseDocs(e.previousSibling.childNodes[0],"toggle");}}});function createToggleWrapper(tog){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';span.innerHTML=' Expand attributes';tog.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper toggle-attributes';wrapper.appendChild(tog);return wrapper;}function printTab(nb){if(nb===0||nb===1||nb===2){currentTab=nb;}var nb_copy=nb;onEach(document.getElementById('titles').childNodes,function(elem){if(nb_copy===0){addClass(elem,'selected');}else{removeClass(elem,'selected');}nb_copy-=1;});onEach(document.getElementById('results').childNodes,function(elem){if(nb===0){elem.style.display='';}else{elem.style.display='none';}nb-=1;});}onEach(document.getElementById('main').getElementsByClassName('attributes'),function(i_e){i_e.parentNode.insertBefore(createToggleWrapper(toggle.cloneNode(true)),i_e);if(getCurrentValue("rustdoc-item-attributes")!=="false"){collapseDocs(i_e.previousSibling.childNodes[0],"toggle");}});onEach(document.getElementsByClassName('rust-example-rendered'),function(e){if(hasClass(e,'compile_fail')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#f00';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}else if(hasClass(e,'ignore')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#ff9200';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}});function showModal(content){var modal=document.createElement('div');modal.id="important";addClass(modal,'modal');modal.innerHTML='';document.getElementsByTagName('body')[0].appendChild(modal);document.getElementById('modal-close').onclick=hideModal;modal.onclick=hideModal;}function hideModal(){var modal=document.getElementById("important");if(modal){modal.parentNode.removeChild(modal);}}onEach(document.getElementsByClassName('important-traits'),function(e){e.onclick=function(){showModal(e.lastElementChild.innerHTML);};});function putBackSearch(search_input){if(search_input.value!==""){addClass(document.getElementById("main"),"hidden");removeClass(document.getElementById("search"),"hidden");if(browserSupportsHistoryApi()){history.replaceState(search_input.value,"","?search="+encodeURIComponent(search_input.value));}}}if(search_input){search_input.onfocus=function(){putBackSearch(this);};}var params=getQueryStringParams();if(params&¶ms.search){addClass(document.getElementById("main"),"hidden");var search=document.getElementById("search");removeClass(search,"hidden");search.innerHTML='

Loading search results...

';}var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName('sidebar')[0];if(hasClass(sidebar,"mobile")===true){hideSidebar();}else{showSidebar();}};}window.onresize=function(){hideSidebar();};autoCollapse(getPageId(),getCurrentValue("rustdoc-collapse")==="true");}());function focusSearchBar(){document.getElementsByClassName('search-input')[0].focus();}function defocusSearchBar(){document.getElementsByClassName('search-input')[0].blur();} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/normalize.css b/static/api/actix-web/0.7.2/normalize.css new file mode 100644 index 0000000..45b6cb2 --- /dev/null +++ b/static/api/actix-web/0.7.2/normalize.css @@ -0,0 +1,2 @@ +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/rustdoc.css b/static/api/actix-web/0.7.2/rustdoc.css new file mode 100644 index 0000000..d86b9fc --- /dev/null +++ b/static/api/actix-web/0.7.2/rustdoc.css @@ -0,0 +1,12 @@ +/*! + * Copyright 2013 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ +@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff")format('woff');}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:400;src:local('Source Serif Pro'),url("SourceSerifPro-Regular.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:italic;font-weight:400;src:url("Heuristica-Italic.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:700;src:local('Source Serif Pro Bold'),url("SourceSerifPro-Bold.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.woff")format('woff');}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}body{font:16px/1.4 "Source Serif Pro",Georgia,Times,"Times New Roman",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod):not(.important),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{border-bottom:1px dashed;margin-top:0;position:relative;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){border-bottom:1px solid;}h3.impl,h3.method,h4.method,h3.type,h4.type,h4.associatedconstant{font-weight:600;margin-top:10px;margin-bottom:10px;position:relative;}h3.impl,h3.method,h3.type{padding-left:15px;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.content table :not(code)>a,.collapse-toggle,ul.item-list>li>.out-of-band{font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:0;}p{margin:0 0 .6em 0;}summary{outline:none;}code,pre{font-family:"Source Code Pro",Menlo,Monaco,Consolas,"DejaVu Sans Mono",Inconsolata,monospace;white-space:pre-wrap;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.2em;}.docblock pre code,.docblock-short pre code,.docblock code.spotlight{padding:0;}.docblock code.spotlight :last-child{padding-bottom:0.6em;}pre{padding:14px;}.source .content pre{padding:20px;}img{max-width:100%;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;min-width:70em;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;height:100vh;overflow:auto;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.js-only,.hidden{display:none !important;}.sidebar img{margin:20px auto;display:block;margin-top:10px;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-child{font-weight:500;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{margin-top:0;margin-bottom:8px;text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}#search{margin-left:230px;position:relative;}#results{position:absolute;right:0;left:0;overflow:auto;}#results>table{width:100%;table-layout:fixed;}.content pre.line-numbers{float:left;border:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short p{display:inline;}.docblock-short.nowrap{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock-short code{white-space:nowrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}#main>.docblock h1{font-size:1.3em;}#main>.docblock h2{font-size:1.15em;}#main>.docblock h3,#main>.docblock h4,#main>.docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{font-size:23px;margin:0px;padding:0px;text-align:right;display:inline-block;font-weight:normal;position:absolute;right:0;}h3.impl>.out-of-band{font-size:21px;}h4.method>.out-of-band{font-size:19px;}ul.item-list>li>.out-of-band{font-size:19px;}h4>code,h3>code,.invisible>code{max-width:calc(100% - 41px);display:block;}.in-band,code{z-index:5;}.invisible{width:100%;display:inline-block;}.content .in-band{margin:0px;padding:0px;}.in-band>code{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:100%;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .item-list li{margin-bottom:1em;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content .method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.important-traits){margin-left:40px;margin-bottom:15px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .stability{margin-bottom:.6em;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items>h4{border-bottom:0;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.toggle-wrapper.marg-left>.collapse-toggle{left:-24px;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .stability code{font-size:90%;}nav{border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-7px;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-20px;}.small-section-header>.anchor:not(.field){left:-28px;}.anchor:before{content:'\2002\00a7\2002';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.stability a{text-decoration:underline;}.block a.current.crate{font-weight:500;}.search-container{position:relative;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{width:calc(100% - 34px);-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;}.search-input:focus{border-radius:2px;border:0;outline:0;box-shadow:0 0 8px #078dd8;}.search-results .desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results a{display:block;}.content .search-results td:first-child{padding-right:0;width:75%;}.content .search-results td:first-child a{padding-right:10px;}.content .search-results td:first-child a span{float:left;}tr.result span.primitive::after{content:' (primitive type)';font-style:italic;}tr.result span.keyword::after{content:' (keyword)';font-style:italic;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:20px;padding-left:17px;}.stab{display:table;border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;}.stab p{display:inline;}.stab summary{display:list-item;}.stab .microscope{font-size:1.5em;}.module-item .stab{display:inline;border-width:0;padding:0;margin:0;background:inherit !important;}.module-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;position:absolute;right:0;top:0;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.collapse-toggle{font-weight:300;position:absolute;left:-23px;top:0;}h3>.collapse-toggle,h4>.collapse-toggle{font-size:0.8em;top:5px;}.toggle-wrapper>.collapse-toggle{left:-24px;margin-top:0px;}.toggle-wrapper{position:relative;margin-top:0;}.toggle-wrapper.collapsed{height:25px;transition:height .2s;margin-bottom:.6em;}.collapse-toggle>.inner{display:inline-block;width:1.2ch;text-align:center;}.ghost{display:none;}.ghost+.since{position:initial;display:table-cell;}.since+.srclink{display:table-cell;padding-left:10px;}.item-spacer{width:100%;height:12px;}span.since{position:initial;font-size:20px;margin-right:5px;}.toggle-wrapper>.collapse-toggle{left:0;}.variant+.toggle-wrapper+.docblock>p{margin-top:5px;}.sub-variant,.sub-variant>h3{margin-top:0 !important;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.enum>.toggle-wrapper+.docblock,.struct>.toggle-wrapper+.docblock{margin-left:30px;margin-bottom:20px;margin-top:5px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}.enum>.collapsed,.struct>.collapsed{margin-bottom:25px;}#main>.variant,#main>.structfield{display:block;}.attributes{display:block;margin-top:0px !important;margin-right:0px;margin-bottom:0px !important;margin-left:30px;}.toggle-attributes.collapsed{margin-bottom:0;}.impl-items>.toggle-attributes{margin-left:20px;}.impl-items .attributes{font-weight:500;}:target>code{opacity:1;}@media (max-width:700px){body{padding-top:0px;}.sidebar{height:45px;min-height:40px;width:calc(100%+30px);margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:1;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar img{width:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.sidebar-elems{position:fixed;z-index:1;left:0;top:45px;bottom:0;overflow-y:auto;border-right:1px solid;display:none;}.sidebar>.block.version{border-bottom:none;margin-top:12px;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main{margin-top:45px;padding:0;}.content .in-band{width:100%;}.content h4>.out-of-band{position:inherit;}.toggle-wrapper>.collapse-toggle{left:0px;}.toggle-wrapper{height:1.5em;}#search{margin-left:0;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{display:flex;}.anchor{display:none !important;}}@media print{nav.sub,.content .out-of-band,.collapse-toggle{display:none;}}.information{position:absolute;left:-20px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip .tooltiptext{width:120px;display:none;text-align:center;padding:5px 3px;border-radius:6px;margin-left:5px;top:-5px;left:105%;z-index:1;}.tooltip:hover .tooltiptext{display:inline;}.tooltip .tooltiptext::after{content:" ";position:absolute;top:50%;left:11px;margin-top:-5px;border-width:5px;border-style:solid;}.important-traits .tooltip .tooltiptext{border:1px solid;}pre.rust{position:relative;tab-width:4;-moz-tab-width:4;}.search-failed{text-align:center;margin-top:20px;}#titles{height:35px;}#titles>div{float:left;width:33.3%;text-align:center;border-bottom:1px solid;font-size:18px;cursor:pointer;}#titles>div.selected{border-bottom:3px solid;}#titles>div:hover{border-bottom:3px solid;}#titles>div>div.count{display:inline-block;font-size:16px;}.important-traits{cursor:pointer;z-index:2;}h4>.important-traits{position:absolute;left:-44px;top:2px;}@media (max-width:700px){h4>.important-traits{position:absolute;left:-22px;top:24px;}#titles>div>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.show-it{display:block;width:246px;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}.collapse-toggle{left:-20px;}.impl>.collapse-toggle{left:-10px;}}@media (max-width:416px){#titles{height:73px;}#titles>div{height:73px;}}.modal{position:fixed;width:100vw;height:100vh;z-index:10000;top:0;left:0;}.modal-content{display:block;max-width:60%;min-width:200px;padding:8px;top:40%;position:absolute;left:50%;transform:translate(-50%,-40%);border:1px solid;border-radius:4px;border-top-right-radius:0;}.modal-content>.docblock{margin:0;}h3.important{margin:0;margin-bottom:13px;font-size:19px;}.modal-content>.docblock>code.content{margin:0;padding:0;font-size:20px;}.modal-content>.close{position:absolute;font-weight:900;right:-25px;top:-1px;font-size:18px;width:25px;padding-right:2px;border-top-right-radius:5px;border-bottom-right-radius:5px;text-align:center;border:1px solid;border-right:0;cursor:pointer;}.modal-content>.whiter{height:25px;position:absolute;width:3px;right:-2px;top:0px;}#main>div.important-traits{position:absolute;left:-24px;margin-top:16px;}.content>.methods>div.important-traits{position:absolute;left:-42px;margin-top:2px;}kbd{display:inline-block;padding:3px 5px;font:15px "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu{position:absolute;right:0;top:10px;outline:none;}#theme-picker,#settings-menu{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}@media (max-width:700px){.theme-picker{left:10px;top:54px;z-index:1;}}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}.non-exhaustive{margin-bottom:1em;} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/search-index.js b/static/api/actix-web/0.7.2/search-index.js new file mode 100644 index 0000000..2ed8a9f --- /dev/null +++ b/static/api/actix-web/0.7.2/search-index.js @@ -0,0 +1,3 @@ +var N = null;var searchIndex = {}; +searchIndex["actix_web"]={"doc":"Actix web is a small, pragmatic, and extremely fast web framework for Rust.","items":[[3,"App","actix_web","Structure that follows the builder pattern for building application instances.",N,N],[3,"HttpContext","","Execution context for http actors",N,N],[3,"Extensions","","A type map of request extensions.",N,N],[3,"Form","","Extract typed information from the request's body.",N,N],[12,"0","","",0,N],[3,"Path","","Extract typed information from the request's path.",N,N],[3,"Query","","Extract typed information from from the request's query.",N,N],[3,"State","","Access an application state",N,N],[3,"HttpRequest","","An HTTP Request",N,N],[3,"HttpResponse","","An HTTP Response",N,N],[3,"Json","","Json helper",N,N],[12,"0","","",1,N],[3,"Scope","","Resources scope",N,N],[3,"Request","","Request's context",N,N],[4,"Binary","","Represents various types of binary body. `Content-Length` header is set to length of the body.",N,N],[13,"Bytes","","Bytes body",2,N],[13,"Slice","","Static slice",2,N],[13,"SharedVec","","Shared vec body",2,N],[4,"Body","","Represents various types of http message body.",N,N],[13,"Empty","","Empty response. `Content-Length` header is set to `0`",3,N],[13,"Binary","","Specific response body.",3,N],[13,"Streaming","","Unspecified streaming response. Developer is responsible for setting right `Content-Length` or `Transfer-Encoding` headers.",3,N],[13,"Actor","","Special body type for actor response.",3,N],[4,"Either","","Combines two different responder types into a single type",N,N],[13,"A","","First branch of the type",4,N],[13,"B","","Second branch of the type",4,N],[11,"new","","Create application with empty state. Application can be configured with a builder-like pattern.",5,[[],["app"]]],[11,"default","","",5,[[],["self"]]],[11,"with_state","","Create application with specified state. Application can be configured with a builder-like pattern.",5,[[["s"]],["app"]]],[11,"state","","Get reference to the application state",5,[[["self"]],["s"]]],[11,"prefix","","Set application prefix.",5,[[["self"],["p"]],["app"]]],[11,"filter","","Add match predicate to application.",5,[[["self"],["t"]],["app"]]],[11,"route","","Configure route for a specific path.",5,[[["self"],["str"],["method"],["f"]],["app"]]],[11,"scope","","Configure scope for common root path.",5,[[["self"],["str"],["f"]],["app"]]],[11,"resource","","Configure resource for a specific path.",5,[[["self"],["str"],["f"]],["app"]]],[11,"default_resource","","Default resource to be used if no matching route could be found.",5,[[["self"],["f"]],["app"]]],[11,"default_encoding","","Set default content encoding. `ContentEncoding::Auto` is set by default.",5,[[["self"],["contentencoding"]],["app"]]],[11,"external_resource","","Register an external resource.",5,[[["self"],["t"],["u"]],["app"]]],[11,"handler","","Configure handler for specific path prefix.",5,[[["self"],["str"],["h"]],["app"]]],[11,"middleware","","Register a middleware.",5,[[["self"],["m"]],["app"]]],[11,"configure","","Run external configuration as part of the application building process",5,[[["self"],["f"]],["app"]]],[11,"finish","","Finish application configuration and create `HttpHandler` object.",5,[[["self"]],["httpapplication"]]],[11,"boxed","","Convenience method for creating `Box` instances.",5,[[["self"]],["box",["httphandler"]]]],[11,"into_handler","","",5,[[["self"]],["httpapplication"]]],[11,"fmt","","",2,[[["self"],["formatter"]],["result"]]],[11,"eq","","",2,[[["self"],["binary"]],["bool"]]],[11,"ne","","",2,[[["self"],["binary"]],["bool"]]],[11,"is_streaming","","Does this body streaming.",3,[[["self"]],["bool"]]],[11,"is_binary","","Is this binary body.",3,[[["self"]],["bool"]]],[11,"is_empty","","Is this binary empy.",3,[[["self"]],["bool"]]],[11,"from_slice","","Create body from slice (copy)",3,N],[11,"eq","","",3,[[["self"],["body"]],["bool"]]],[11,"fmt","","",3,[[["self"],["formatter"]],["result"]]],[11,"from","","",3,[[["t"]],["body"]]],[11,"from","","",3,[[["box",["actorhttpcontext"]]],["body"]]],[11,"is_empty","","Returns `true` if body is empty",2,[[["self"]],["bool"]]],[11,"len","","Length of body in bytes",2,[[["self"]],["usize"]]],[11,"from_slice","","Create binary body from slice",2,N],[11,"take","","Convert Binary to a Bytes instance",2,[[["self"]],["bytes"]]],[11,"clone","","",2,[[["self"]],["binary"]]],[11,"into","","",2,[[["self"]],["bytes"]]],[11,"from","","",2,[[["str"]],["binary"]]],[11,"from","","",2,N],[11,"from","","",2,[[["vec",["u8"]]],["binary"]]],[11,"from","","",2,[[["string"]],["binary"]]],[11,"from","","",2,[[["string"]],["binary"]]],[11,"from","","",2,[[["bytes"]],["binary"]]],[11,"from","","",2,[[["bytesmut"]],["binary"]]],[11,"from","","",2,[[["arc",["string"]]],["binary"]]],[11,"from","","",2,[[["arc"]],["binary"]]],[11,"from","","",2,[[["arc",["vec"]]],["binary"]]],[11,"from","","",2,[[["arc"]],["binary"]]],[11,"as_ref","","",2,N],[11,"respond_to","","",2,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"stop","","",6,[[["self"]]]],[11,"terminate","","",6,[[["self"]]]],[11,"state","","",6,[[["self"]],["actorstate"]]],[11,"spawn","","",6,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",6,[[["self"],["f"]]]],[11,"cancel_future","","",6,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",6,[[["self"]],["addr"]]],[11,"create","","Create a new HTTP Context from a request and an actor",6,[[["httprequest"],["a"]],["body"]]],[11,"with_factory","","Create a new HTTP Context",6,[[["httprequest"],["f"]],["body"]]],[11,"state","","Shared application state",6,[[["self"]],["s"]]],[11,"request","","Incoming request",6,[[["self"]],["httprequest"]]],[11,"write","","Write payload",6,[[["self"],["b"]]]],[11,"write_eof","","Indicate end of streaming payload. Also this method calls `Self::close`.",6,[[["self"]]]],[11,"drain","","Returns drain future",6,[[["self"]],["drain"]]],[11,"connected","","Check if connection still open",6,[[["self"]],["bool"]]],[11,"handle","","Handle of the running future",6,[[["self"]],["spawnhandle"]]],[11,"parts","","",6,[[["self"]],["contextparts"]]],[11,"pack","","",6,[[["m"],["option",["sender"]]],["envelope"]]],[11,"insert","","Insert a type into this `Extensions`.",7,[[["self"],["t"]]]],[11,"get","","Get a reference to a type previously inserted on this `Extensions`.",7,[[["self"]],["option"]]],[11,"get_mut","","Get a mutable reference to a type previously inserted on this `Extensions`.",7,[[["self"]],["option"]]],[11,"remove","","Remove a type from this `Extensions`.",7,[[["self"]],["option"]]],[11,"clear","","Clear the `Extensions` of all inserted extensions.",7,[[["self"]]]],[11,"fmt","","",7,[[["self"],["formatter"]],["result"]]],[11,"eq","","",8,[[["self"],["path"]],["bool"]]],[11,"ne","","",8,[[["self"],["path"]],["bool"]]],[11,"partial_cmp","","",8,[[["self"],["path"]],["option",["ordering"]]]],[11,"lt","","",8,[[["self"],["path"]],["bool"]]],[11,"le","","",8,[[["self"],["path"]],["bool"]]],[11,"gt","","",8,[[["self"],["path"]],["bool"]]],[11,"ge","","",8,[[["self"],["path"]],["bool"]]],[11,"cmp","","",8,[[["self"],["path"]],["ordering"]]],[11,"as_ref","","",8,[[["self"]],["t"]]],[11,"deref","","",8,[[["self"]],["t"]]],[11,"deref_mut","","",8,[[["self"]],["t"]]],[11,"into_inner","","Deconstruct to an inner value",8,[[["self"]],["t"]]],[11,"from_request","","",8,N],[11,"fmt","","",8,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",8,[[["self"],["formatter"]],["result"]]],[11,"eq","","",9,[[["self"],["query"]],["bool"]]],[11,"ne","","",9,[[["self"],["query"]],["bool"]]],[11,"partial_cmp","","",9,[[["self"],["query"]],["option",["ordering"]]]],[11,"lt","","",9,[[["self"],["query"]],["bool"]]],[11,"le","","",9,[[["self"],["query"]],["bool"]]],[11,"gt","","",9,[[["self"],["query"]],["bool"]]],[11,"ge","","",9,[[["self"],["query"]],["bool"]]],[11,"cmp","","",9,[[["self"],["query"]],["ordering"]]],[11,"deref","","",9,[[["self"]],["t"]]],[11,"deref_mut","","",9,[[["self"]],["t"]]],[11,"into_inner","","Deconstruct to a inner value",9,[[["self"]],["t"]]],[11,"from_request","","",9,N],[11,"fmt","","",9,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",9,[[["self"],["formatter"]],["result"]]],[11,"eq","","",0,[[["self"],["form"]],["bool"]]],[11,"ne","","",0,[[["self"],["form"]],["bool"]]],[11,"partial_cmp","","",0,[[["self"],["form"]],["option",["ordering"]]]],[11,"lt","","",0,[[["self"],["form"]],["bool"]]],[11,"le","","",0,[[["self"],["form"]],["bool"]]],[11,"gt","","",0,[[["self"],["form"]],["bool"]]],[11,"ge","","",0,[[["self"],["form"]],["bool"]]],[11,"cmp","","",0,[[["self"],["form"]],["ordering"]]],[11,"into_inner","","Deconstruct to an inner value",0,[[["self"]],["t"]]],[11,"deref","","",0,[[["self"]],["t"]]],[11,"deref_mut","","",0,[[["self"]],["t"]]],[11,"from_request","","",0,N],[11,"fmt","","",0,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",0,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",4,[[["self"],["formatter"]],["result"]]],[11,"respond_to","","",4,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"poll","","",4,[[["self"]],["poll"]]],[11,"respond_to","","",10,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"deref","","",11,[[["self"]],["s"]]],[11,"from_request","","",11,N],[11,"Ok","","",10,[[],["httpresponsebuilder"]]],[11,"Created","","",10,[[],["httpresponsebuilder"]]],[11,"Accepted","","",10,[[],["httpresponsebuilder"]]],[11,"NonAuthoritativeInformation","","",10,[[],["httpresponsebuilder"]]],[11,"NoContent","","",10,[[],["httpresponsebuilder"]]],[11,"ResetContent","","",10,[[],["httpresponsebuilder"]]],[11,"PartialContent","","",10,[[],["httpresponsebuilder"]]],[11,"MultiStatus","","",10,[[],["httpresponsebuilder"]]],[11,"AlreadyReported","","",10,[[],["httpresponsebuilder"]]],[11,"MultipleChoices","","",10,[[],["httpresponsebuilder"]]],[11,"MovedPermanenty","","",10,[[],["httpresponsebuilder"]]],[11,"MovedPermanently","","",10,[[],["httpresponsebuilder"]]],[11,"Found","","",10,[[],["httpresponsebuilder"]]],[11,"SeeOther","","",10,[[],["httpresponsebuilder"]]],[11,"NotModified","","",10,[[],["httpresponsebuilder"]]],[11,"UseProxy","","",10,[[],["httpresponsebuilder"]]],[11,"TemporaryRedirect","","",10,[[],["httpresponsebuilder"]]],[11,"PermanentRedirect","","",10,[[],["httpresponsebuilder"]]],[11,"BadRequest","","",10,[[],["httpresponsebuilder"]]],[11,"NotFound","","",10,[[],["httpresponsebuilder"]]],[11,"Unauthorized","","",10,[[],["httpresponsebuilder"]]],[11,"PaymentRequired","","",10,[[],["httpresponsebuilder"]]],[11,"Forbidden","","",10,[[],["httpresponsebuilder"]]],[11,"MethodNotAllowed","","",10,[[],["httpresponsebuilder"]]],[11,"NotAcceptable","","",10,[[],["httpresponsebuilder"]]],[11,"ProxyAuthenticationRequired","","",10,[[],["httpresponsebuilder"]]],[11,"RequestTimeout","","",10,[[],["httpresponsebuilder"]]],[11,"Conflict","","",10,[[],["httpresponsebuilder"]]],[11,"Gone","","",10,[[],["httpresponsebuilder"]]],[11,"LengthRequired","","",10,[[],["httpresponsebuilder"]]],[11,"PreconditionFailed","","",10,[[],["httpresponsebuilder"]]],[11,"PayloadTooLarge","","",10,[[],["httpresponsebuilder"]]],[11,"UriTooLong","","",10,[[],["httpresponsebuilder"]]],[11,"UnsupportedMediaType","","",10,[[],["httpresponsebuilder"]]],[11,"RangeNotSatisfiable","","",10,[[],["httpresponsebuilder"]]],[11,"ExpectationFailed","","",10,[[],["httpresponsebuilder"]]],[11,"InternalServerError","","",10,[[],["httpresponsebuilder"]]],[11,"NotImplemented","","",10,[[],["httpresponsebuilder"]]],[11,"BadGateway","","",10,[[],["httpresponsebuilder"]]],[11,"ServiceUnavailable","","",10,[[],["httpresponsebuilder"]]],[11,"GatewayTimeout","","",10,[[],["httpresponsebuilder"]]],[11,"VersionNotSupported","","",10,[[],["httpresponsebuilder"]]],[11,"VariantAlsoNegotiates","","",10,[[],["httpresponsebuilder"]]],[11,"InsufficientStorage","","",10,[[],["httpresponsebuilder"]]],[11,"LoopDetected","","",10,[[],["httpresponsebuilder"]]],[11,"headers","","",12,[[["self"]],["headermap"]]],[11,"payload","","",12,[[["self"]],["payload"]]],[11,"deref","","",12,[[["self"]],["request"]]],[11,"state","","Shared application state",12,[[["self"]],["s"]]],[11,"request","","Server request",12,[[["self"]],["request"]]],[11,"extensions","","Request extensions",12,[[["self"]],["ref",["extensions"]]]],[11,"extensions_mut","","Mutable reference to a the request's extensions",12,[[["self"]],["refmut",["extensions"]]]],[11,"response","","Create http response",12,[[["self"],["statuscode"],["body"]],["httpresponse"]]],[11,"build_response","","Create http response builder",12,[[["self"],["statuscode"]],["httpresponsebuilder"]]],[11,"uri","","Read the Request Uri.",12,[[["self"]],["uri"]]],[11,"method","","Read the Request method.",12,[[["self"]],["method"]]],[11,"version","","Read the Request Version.",12,[[["self"]],["version"]]],[11,"path","","The target path of this Request.",12,[[["self"]],["str"]]],[11,"connection_info","","Get ConnectionInfo for the correct request.",12,[[["self"]],["ref",["connectioninfo"]]]],[11,"url_for","","Generate url for named resource",12,[[["self"],["str"],["u"]],["result",["url","urlgenerationerror"]]]],[11,"url_for_static","","Generate url for named resource",12,[[["self"],["str"]],["result",["url","urlgenerationerror"]]]],[11,"resource","","This method returns reference to current `RouteInfo` object.",12,[[["self"]],["resourceinfo"]]],[11,"peer_addr","","Peer socket address",12,[[["self"]],["option",["socketaddr"]]]],[11,"query","","url query parameters.",12,[[["self"]],["ref",["hashmap"]]]],[11,"query_string","","The query string in the URL.",12,[[["self"]],["str"]]],[11,"cookies","","Load request cookies.",12,[[["self"]],["result",["ref","cookieparseerror"]]]],[11,"cookie","","Return request cookie.",12,[[["self"],["str"]],["option",["cookie"]]]],[11,"match_info","","Get a reference to the Params object.",12,[[["self"]],["params"]]],[11,"set_read_buffer_capacity","","Set read buffer capacity",12,[[["self"],["usize"]]]],[11,"drop","","",12,[[["self"]]]],[11,"clone","","",12,[[["self"]],["httprequest"]]],[11,"from_request","","",12,N],[11,"fmt","","",12,[[["self"],["formatter"]],["result"]]],[11,"build","","Create http response builder with specific status.",10,[[["statuscode"]],["httpresponsebuilder"]]],[11,"build_from","","Create http response builder",10,[[["t"]],["httpresponsebuilder"]]],[11,"new","","Constructs a response",10,[[["statuscode"]],["httpresponse"]]],[11,"with_body","","Constructs a response with body",10,[[["statuscode"],["b"]],["httpresponse"]]],[11,"from_error","","Constructs an error response",10,[[["error"]],["httpresponse"]]],[11,"into_builder","","Convert `HttpResponse` to a `HttpResponseBuilder`",10,[[["self"]],["httpresponsebuilder"]]],[11,"error","","The source `error` for this response",10,[[["self"]],["option",["error"]]]],[11,"version","","Get the HTTP version of this response",10,[[["self"]],["option",["version"]]]],[11,"headers","","Get the headers from the response",10,[[["self"]],["headermap"]]],[11,"headers_mut","","Get a mutable reference to the headers",10,[[["self"]],["headermap"]]],[11,"cookies","","Get an iterator for the cookies set by this response",10,[[["self"]],["cookieiter"]]],[11,"add_cookie","","Add a cookie to this response",10,[[["self"],["cookie"]],["result",["httperror"]]]],[11,"del_cookie","","Remove all cookies with the given name from this response. Returns the number of cookies removed.",10,[[["self"],["str"]],["usize"]]],[11,"status","","Get the response status code",10,[[["self"]],["statuscode"]]],[11,"status_mut","","Set the `StatusCode` for this response",10,[[["self"]],["statuscode"]]],[11,"reason","","Get custom reason for the response",10,[[["self"]],["str"]]],[11,"set_reason","","Set the custom reason for the response",10,[[["self"],["str"]],["self"]]],[11,"set_connection_type","","Set connection type",10,[[["self"],["connectiontype"]],["self"]]],[11,"upgrade","","Connection upgrade status",10,[[["self"]],["bool"]]],[11,"keep_alive","","Keep-alive status for this connection",10,[[["self"]],["option",["bool"]]]],[11,"chunked","","is chunked encoding enabled",10,[[["self"]],["option",["bool"]]]],[11,"content_encoding","","Content encoding",10,[[["self"]],["option",["contentencoding"]]]],[11,"set_content_encoding","","Set content encoding",10,[[["self"],["contentencoding"]],["self"]]],[11,"body","","Get body os this response",10,[[["self"]],["body"]]],[11,"set_body","","Set a body",10,[[["self"],["b"]]]],[11,"replace_body","","Set a body and return previous body value",10,[[["self"],["b"]],["body"]]],[11,"response_size","","Size of response in bytes, excluding HTTP headers",10,[[["self"]],["u64"]]],[11,"write_buffer_capacity","","Set write buffer capacity",10,[[["self"]],["usize"]]],[11,"set_write_buffer_capacity","","Set write buffer capacity",10,[[["self"],["usize"]]]],[11,"fmt","","",10,[[["self"],["formatter"]],["result"]]],[11,"from","","",10,[[["result"]],["self"]]],[11,"from","","",10,[[["httpresponsebuilder"]],["self"]]],[11,"from","","",10,[[["str"]],["self"]]],[11,"from","","",10,N],[11,"from","","",10,[[["string"]],["self"]]],[11,"from","","",10,[[["string"]],["self"]]],[11,"from","","",10,[[["bytes"]],["self"]]],[11,"from","","",10,[[["bytesmut"]],["self"]]],[11,"into_inner","","Deconstruct to an inner value",1,[[["self"]],["t"]]],[11,"deref","","",1,[[["self"]],["t"]]],[11,"deref_mut","","",1,[[["self"]],["t"]]],[11,"fmt","","",1,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",1,[[["self"],["formatter"]],["result"]]],[11,"respond_to","","",1,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"from_request","","",1,N],[11,"new","","Create a new scope",13,[[["str"]],["scope"]]],[11,"filter","","Add match predicate to scope.",13,[[["self"],["t"]],["self"]]],[11,"with_state","","Create nested scope with new state.",13,[[["self"],["str"],["t"],["f"]],["scope"]]],[11,"nested","","Create nested scope.",13,[[["self"],["str"],["f"]],["scope"]]],[11,"route","","Configure route for a specific path.",13,[[["self"],["str"],["method"],["f"]],["scope"]]],[11,"resource","","Configure resource for a specific path.",13,[[["self"],["str"],["f"]],["scope"]]],[11,"default_resource","","Default resource to be used if no matching route could be found.",13,[[["self"],["f"]],["scope"]]],[11,"middleware","","Register a scope middleware",13,[[["self"],["m"]],["scope"]]],[0,"client","","Http client api",N,N],[3,"ClientConnector","actix_web::client","`ClientConnector` type is responsible for transport layer of a client connection.",N,N],[3,"ClientConnectorStats","","Client connector usage stats",N,N],[12,"waits","","Number of waited-on connections",14,N],[12,"wait_queue","","Size of the wait queue",14,N],[12,"reused","","Number of reused connections",14,N],[12,"opened","","Number of opened connections",14,N],[12,"closed","","Number of closed connections",14,N],[12,"errors","","Number of connections with errors",14,N],[12,"timeouts","","Number of connection timeouts",14,N],[3,"Connect","","`Connect` type represents a message that can be sent to `ClientConnector` with a connection request.",N,N],[3,"Connection","","HTTP client connection",N,N],[3,"Pause","","Pause connection process for `ClientConnector`",N,N],[3,"Resume","","Resume connection process for `ClientConnector`",N,N],[3,"SendRequest","","`SendRequest` is a `Future` which represents an asynchronous request sending process.",N,N],[3,"ClientRequest","","An HTTP Client Request",N,N],[3,"ClientRequestBuilder","","An HTTP Client request builder",N,N],[3,"ClientResponse","","An HTTP Client response",N,N],[4,"ClientConnectorError","","A set of errors that can occur while connecting to an HTTP host",N,N],[13,"InvalidUrl","","Invalid URL",15,N],[13,"SslIsNotSupported","","SSL feature is not enabled",15,N],[13,"SslError","","SSL error",15,N],[13,"Resolver","","Resolver error",15,N],[13,"Timeout","","Connection took too long",15,N],[13,"Disconnected","","Connector has been disconnected",15,N],[13,"IoError","","Connection IO error",15,N],[4,"SendRequestError","","A set of errors that can occur during request sending and response reading",N,N],[13,"Timeout","","Response took too long",16,N],[13,"Connector","","Failed to connect to host",16,N],[13,"ParseError","","Error parsing response",16,N],[13,"Io","","Error reading response payload",16,N],[5,"get","","Create request builder for `GET` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"head","","Create request builder for `HEAD` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"post","","Create request builder for `POST` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"put","","Create request builder for `PUT` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"delete","","Create request builder for `DELETE` requests",N,[[["u"]],["clientrequestbuilder"]]],[11,"default","","",14,[[],["clientconnectorstats"]]],[11,"fmt","","",17,[[["self"],["formatter"]],["result"]]],[11,"new","","Create `Connect` message for specified `Uri`",17,[[["u"]],["result",["connect","httperror"]]]],[11,"conn_timeout","","Connection timeout, i.e. max time to connect to remote host. Set to 1 second by default.",17,[[["self"],["duration"]],["self"]]],[11,"wait_timeout","","If connection pool limits are enabled, wait time indicates max time to wait for a connection to become available. Set to 5 seconds by default.",17,[[["self"],["duration"]],["self"]]],[11,"new","","Create message with pause duration parameter",18,[[["duration"]],["pause"]]],[11,"default","","",18,[[],["pause"]]],[11,"cause","","",15,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",15,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",15,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",15,[[["self"],["formatter"]],["result"]]],[11,"from","","",15,[[["resolvererror"]],["clientconnectorerror"]]],[11,"started","","",19,N],[11,"default","","",19,[[],["clientconnector"]]],[11,"with_connector","","Create `ClientConnector` actor with custom `SslConnector` instance.",19,[[["sslconnector"]],["clientconnector"]]],[11,"limit","","Set total number of simultaneous connections.",19,[[["self"],["usize"]],["self"]]],[11,"limit_per_host","","Set total number of simultaneous connections to the same endpoint.",19,[[["self"],["usize"]],["self"]]],[11,"conn_keep_alive","","Set keep-alive period for opened connection.",19,[[["self"],["duration"]],["self"]]],[11,"conn_lifetime","","Set max lifetime period for connection.",19,[[["self"],["duration"]],["self"]]],[11,"stats","","Subscribe for connector stats. Only one subscriber is supported.",19,[[["self"],["recipient",["clientconnectorstats"]]],["self"]]],[11,"resolver","","Use custom resolver actor",19,[[["self"],["addr",["resolver"]]],["self"]]],[11,"handle","","",19,N],[11,"handle","","",19,N],[11,"handle","","",19,N],[11,"fmt","","",20,[[["self"],["formatter"]],["result"]]],[11,"stream","","Raw IO stream",20,[[["self"]],["iostream"]]],[11,"from_stream","","Create a new connection from an IO Stream",20,[[["t"]],["connection"]]],[11,"close","","Close connection",20,[[["self"]]]],[11,"release","","Release this connection to the connection pool",20,[[["self"]]]],[11,"read","","",20,N],[11,"write","","",20,N],[11,"flush","","",20,[[["self"]],["result"]]],[11,"shutdown","","",20,[[["self"]],["poll",["error"]]]],[11,"cause","","",16,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",16,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",16,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",16,[[["self"],["formatter"]],["result"]]],[11,"from","","",16,[[["error"]],["sendrequesterror"]]],[11,"from","","",16,[[["clientconnectorerror"]],["sendrequesterror"]]],[11,"timeout","","Set request timeout",21,[[["self"],["duration"]],["self"]]],[11,"conn_timeout","","Set connection timeout",21,[[["self"],["duration"]],["self"]]],[11,"wait_timeout","","Set wait timeout",21,[[["self"],["duration"]],["self"]]],[11,"poll","","",21,[[["self"]],["poll"]]],[11,"default","","",22,[[],["clientrequest"]]],[11,"get","","Create request builder for `GET` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"head","","Create request builder for `HEAD` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"post","","Create request builder for `POST` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"put","","Create request builder for `PUT` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"delete","","Create request builder for `DELETE` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"build","","Create client request builder",22,[[],["clientrequestbuilder"]]],[11,"build_from","","Create client request builder",22,[[["t"]],["clientrequestbuilder"]]],[11,"uri","","Get the request URI",22,[[["self"]],["uri"]]],[11,"set_uri","","Set client request URI",22,[[["self"],["uri"]]]],[11,"method","","Get the request method",22,[[["self"]],["method"]]],[11,"set_method","","Set HTTP `Method` for the request",22,[[["self"],["method"]]]],[11,"version","","Get HTTP version for the request",22,[[["self"]],["version"]]],[11,"set_version","","Set http `Version` for the request",22,[[["self"],["version"]]]],[11,"headers","","Get the headers from the request",22,[[["self"]],["headermap"]]],[11,"headers_mut","","Get a mutable reference to the headers",22,[[["self"]],["headermap"]]],[11,"chunked","","is chunked encoding enabled",22,[[["self"]],["bool"]]],[11,"upgrade","","is upgrade request",22,[[["self"]],["bool"]]],[11,"content_encoding","","Content encoding",22,[[["self"]],["contentencoding"]]],[11,"response_decompress","","Decompress response payload",22,[[["self"]],["bool"]]],[11,"write_buffer_capacity","","Requested write buffer capacity",22,[[["self"]],["usize"]]],[11,"body","","Get body of this response",22,[[["self"]],["body"]]],[11,"set_body","","Set a body",22,[[["self"],["b"]]]],[11,"send","","Send request",22,[[["self"]],["sendrequest"]]],[11,"fmt","","",22,[[["self"],["formatter"]],["result"]]],[11,"uri","","Set HTTP URI of request.",23,[[["self"],["u"]],["self"]]],[11,"method","","Set HTTP method of this request.",23,[[["self"],["method"]],["self"]]],[11,"get_method","","Set HTTP method of this request.",23,[[["self"]],["method"]]],[11,"version","","Set HTTP version of this request.",23,[[["self"],["version"]],["self"]]],[11,"header","","Append a header.",23,[[["self"],["k"],["v"]],["self"]]],[11,"set_header","","Set a header.",23,[[["self"],["k"],["v"]],["self"]]],[11,"set_header_if_none","","Set a header only if it is not yet set.",23,[[["self"],["k"],["v"]],["self"]]],[11,"content_encoding","","Set content encoding.",23,[[["self"],["contentencoding"]],["self"]]],[11,"chunked","","Enables automatic chunked transfer encoding",23,[[["self"]],["self"]]],[11,"upgrade","","Enable connection upgrade",23,[[["self"]],["self"]]],[11,"content_type","","Set request's content type",23,[[["self"],["v"]],["self"]]],[11,"content_length","","Set content length",23,[[["self"],["u64"]],["self"]]],[11,"cookie","","Set a cookie",23,[[["self"],["cookie"]],["self"]]],[11,"no_default_headers","","Do not add default request headers. By default `Accept-Encoding` and `User-Agent` headers are set.",23,[[["self"]],["self"]]],[11,"disable_decompress","","Disable automatic decompress response body",23,[[["self"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",23,[[["self"],["usize"]],["self"]]],[11,"timeout","","Set request timeout",23,[[["self"],["duration"]],["self"]]],[11,"with_connector","","Send request using custom connector",23,[[["self"],["addr",["clientconnector"]]],["self"]]],[11,"with_connection","","Send request using existing `Connection`",23,[[["self"],["connection"]],["self"]]],[11,"if_true","","This method calls provided closure with builder reference if value is `true`.",23,[[["self"],["bool"],["f"]],["self"]]],[11,"if_some","","This method calls provided closure with builder reference if value is `Some`.",23,[[["self"],["option"],["f"]],["self"]]],[11,"body","","Set a body and generate `ClientRequest`.",23,[[["self"],["b"]],["result",["clientrequest","error"]]]],[11,"json","","Set a JSON body and generate `ClientRequest`",23,[[["self"],["t"]],["result",["clientrequest","error"]]]],[11,"form","","Set a urlencoded body and generate `ClientRequest`",23,[[["self"],["t"]],["result",["clientrequest","error"]]]],[11,"streaming","","Set a streaming body and generate `ClientRequest`.",23,[[["self"],["s"]],["result",["clientrequest","error"]]]],[11,"finish","","Set an empty body and generate `ClientRequest`",23,[[["self"]],["result",["clientrequest","error"]]]],[11,"take","","This method construct new `ClientRequestBuilder`",23,[[["self"]],["clientrequestbuilder"]]],[11,"fmt","","",23,[[["self"],["formatter"]],["result"]]],[11,"from","","",23,[[["httprequest"]],["clientrequestbuilder"]]],[11,"headers","","Get the headers from the response.",24,[[["self"]],["headermap"]]],[11,"payload","","",24,[[["self"]],["box",["pipeline"]]]],[11,"version","","Get the HTTP version of this response.",24,[[["self"]],["version"]]],[11,"status","","Get the status from the server.",24,[[["self"]],["statuscode"]]],[11,"cookies","","Load response cookies.",24,[[["self"]],["result",["vec","cookieparseerror"]]]],[11,"cookie","","Return request cookie.",24,[[["self"],["str"]],["option",["cookie"]]]],[11,"fmt","","",24,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",16,[[["self"]],["httpresponse"]]],[0,"error","actix_web","Error and Result module",N,N],[4,"UrlParseError","actix_web::error","Errors that can occur during parsing.",N,N],[13,"EmptyHost","","",25,N],[13,"IdnaError","","",25,N],[13,"InvalidPort","","",25,N],[13,"InvalidIpv4Address","","",25,N],[13,"InvalidIpv6Address","","",25,N],[13,"InvalidDomainCharacter","","",25,N],[13,"RelativeUrlWithoutBase","","",25,N],[13,"RelativeUrlWithCannotBeABaseBase","","",25,N],[13,"SetHostOnCannotBeABaseUrl","","",25,N],[13,"Overflow","","",25,N],[4,"CookieParseError","","Enum corresponding to a parsing error.",N,N],[13,"MissingPair","","The cookie did not contain a name/value pair.",26,N],[13,"EmptyName","","The cookie's name was empty.",26,N],[13,"Utf8Error","","Decoding the cookie's name or value resulted in invalid UTF-8.",26,N],[3,"Error","","General purpose actix web error.",N,N],[3,"InternalError","","Helper type that can wrap any error and generate custom response.",N,N],[4,"ParseError","","A set of errors that can occur during parsing HTTP streams",N,N],[13,"Method","","An invalid `Method`, such as `GE.T`.",27,N],[13,"Uri","","An invalid `Uri`, such as `exam ple.domain`.",27,N],[13,"Version","","An invalid `HttpVersion`, such as `HTP/1.1`",27,N],[13,"Header","","An invalid `Header`.",27,N],[13,"TooLarge","","A message head is too large to be reasonable.",27,N],[13,"Incomplete","","A message reached EOF, but is not complete.",27,N],[13,"Status","","An invalid `Status`, such as `1337 ELITE`.",27,N],[13,"Timeout","","A timeout occurred waiting for an IO event.",27,N],[13,"Io","","An `io::Error` that occurred while trying to read or write to a network stream.",27,N],[13,"Utf8","","Parsing a field as string failed",27,N],[4,"PayloadError","","A set of errors that can occur during payload parsing",N,N],[13,"Incomplete","","A payload reached EOF, but is not complete.",28,N],[13,"EncodingCorrupted","","Content encoding stream corruption",28,N],[13,"Overflow","","A payload reached size limit.",28,N],[13,"UnknownLength","","A payload length is unknown.",28,N],[13,"Io","","Io error",28,N],[13,"Http2","","Http2 error",28,N],[4,"MultipartError","","A set of errors that can occur during parsing multipart streams",N,N],[13,"NoContentType","","Content-Type header is not found",29,N],[13,"ParseContentType","","Can not parse Content-Type header",29,N],[13,"Boundary","","Multipart boundary is not found",29,N],[13,"Incomplete","","Multipart stream is incomplete",29,N],[13,"Parse","","Error during field parsing",29,N],[13,"Payload","","Payload error",29,N],[4,"ExpectError","","Error during handling `Expect` header",N,N],[13,"Encoding","","Expect header value can not be converted to utf8",30,N],[13,"UnknownExpect","","Unknown expect value",30,N],[4,"ContentTypeError","","A set of error that can occure during parsing content type",N,N],[13,"ParseError","","Can not parse content type",31,N],[13,"UnknownEncoding","","Unknown content encoding",31,N],[4,"UrlencodedError","","A set of errors that can occur during parsing urlencoded payloads",N,N],[13,"Chunked","","Can not decode chunked transfer encoding",32,N],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",32,N],[13,"UnknownLength","","Payload size is now known",32,N],[13,"ContentType","","Content type error",32,N],[13,"Parse","","Parse error",32,N],[13,"Payload","","Payload error",32,N],[4,"JsonPayloadError","","A set of errors that can occur during parsing json payloads",N,N],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",33,N],[13,"ContentType","","Content type error",33,N],[13,"Deserialize","","Deserialize error",33,N],[13,"Payload","","Payload error",33,N],[4,"ReadlinesError","","Error type returned when reading body as lines.",N,N],[13,"EncodingError","","Error when decoding a line.",34,N],[13,"PayloadError","","Payload error.",34,N],[13,"LimitOverflow","","Line limit exceeded.",34,N],[13,"ContentTypeError","","ContentType error.",34,N],[4,"UriSegmentError","","Errors which can occur when attempting to interpret a segment string as a valid path segment.",N,N],[13,"BadStart","","The segment started with the wrapped invalid character.",35,N],[13,"BadChar","","The segment contained the wrapped invalid character.",35,N],[13,"BadEnd","","The segment ended with the wrapped invalid character.",35,N],[4,"UrlGenerationError","","Errors which can occur when attempting to generate resource uri.",N,N],[13,"ResourceNotFound","","Resource not found",36,N],[13,"NotEnoughElements","","Not all path pattern covered",36,N],[13,"ParseError","","URL parse error",36,N],[4,"StaticFileError","","Errors which can occur when serving static files.",N,N],[13,"IsNotDirectory","","Path is not a directory",37,N],[13,"IsDirectory","","Cannot render directory",37,N],[5,"ErrorBadRequest","","Helper function that creates wrapper of any error and generate BAD REQUEST response.",N,[[["t"]],["error"]]],[5,"ErrorUnauthorized","","Helper function that creates wrapper of any error and generate UNAUTHORIZED response.",N,[[["t"]],["error"]]],[5,"ErrorForbidden","","Helper function that creates wrapper of any error and generate FORBIDDEN response.",N,[[["t"]],["error"]]],[5,"ErrorNotFound","","Helper function that creates wrapper of any error and generate NOT FOUND response.",N,[[["t"]],["error"]]],[5,"ErrorMethodNotAllowed","","Helper function that creates wrapper of any error and generate METHOD NOT ALLOWED response.",N,[[["t"]],["error"]]],[5,"ErrorRequestTimeout","","Helper function that creates wrapper of any error and generate REQUEST TIMEOUT response.",N,[[["t"]],["error"]]],[5,"ErrorConflict","","Helper function that creates wrapper of any error and generate CONFLICT response.",N,[[["t"]],["error"]]],[5,"ErrorGone","","Helper function that creates wrapper of any error and generate GONE response.",N,[[["t"]],["error"]]],[5,"ErrorPreconditionFailed","","Helper function that creates wrapper of any error and generate PRECONDITION FAILED response.",N,[[["t"]],["error"]]],[5,"ErrorExpectationFailed","","Helper function that creates wrapper of any error and generate EXPECTATION FAILED response.",N,[[["t"]],["error"]]],[5,"ErrorInternalServerError","","Helper function that creates wrapper of any error and generate INTERNAL SERVER ERROR response.",N,[[["t"]],["error"]]],[5,"ErrorNotImplemented","","Helper function that creates wrapper of any error and generate NOT IMPLEMENTED response.",N,[[["t"]],["error"]]],[5,"ErrorBadGateway","","Helper function that creates wrapper of any error and generate BAD GATEWAY response.",N,[[["t"]],["error"]]],[5,"ErrorServiceUnavailable","","Helper function that creates wrapper of any error and generate SERVICE UNAVAILABLE response.",N,[[["t"]],["error"]]],[5,"ErrorGatewayTimeout","","Helper function that creates wrapper of any error and generate GATEWAY TIMEOUT response.",N,[[["t"]],["error"]]],[6,"Result","","A specialized `Result` for actix web operations",N,N],[8,"ResponseError","","Error that can be converted to `HttpResponse`",N,N],[11,"error_response","","Create response for error",38,[[["self"]],["httpresponse"]]],[11,"cause","","Deprecated way to reference the underlying response error.",39,[[["self"]],["responseerror"]]],[11,"as_fail","","Returns a reference to the underlying cause of this `Error` as `Fail`",39,[[["self"]],["fail"]]],[11,"as_response_error","","Returns the reference to the underlying `ResponseError`.",39,[[["self"]],["responseerror"]]],[11,"backtrace","","Returns a reference to the Backtrace carried by this error, if it carries one.",39,[[["self"]],["backtrace"]]],[11,"downcast_ref","","Attempts to downcast this `Error` to a particular `Fail` type by reference.",39,[[["self"]],["option"]]],[11,"fmt","","",39,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",39,[[["self"],["formatter"]],["result"]]],[11,"from","actix_web","",10,[[["error"]],["self"]]],[11,"from","actix_web::error","",39,[[["t"]],["error"]]],[11,"from","","",39,[[["error"]],["error"]]],[11,"cause","","",27,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",27,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",27,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",27,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",27,[[["self"]],["httpresponse"]]],[11,"from","","",27,[[["ioerror"]],["parseerror"]]],[11,"from","","",27,[[["invaliduri"]],["parseerror"]]],[11,"from","","",27,[[["utf8error"]],["parseerror"]]],[11,"from","","",27,[[["fromutf8error"]],["parseerror"]]],[11,"from","","",27,[[["error"]],["parseerror"]]],[11,"cause","","",28,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",28,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",28,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",28,[[["self"],["formatter"]],["result"]]],[11,"from","","",28,[[["ioerror"]],["payloaderror"]]],[11,"error_response","","",28,[[["self"]],["httpresponse"]]],[11,"error_response","","",26,[[["self"]],["httpresponse"]]],[11,"cause","","",29,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",29,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",29,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",29,[[["self"],["formatter"]],["result"]]],[11,"from","","",29,[[["parseerror"]],["multiparterror"]]],[11,"from","","",29,[[["payloaderror"]],["multiparterror"]]],[11,"error_response","","",29,[[["self"]],["httpresponse"]]],[11,"cause","","",30,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",30,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",30,[[["self"],["formatter"]],["result"]]],[11,"eq","","",30,[[["self"],["expecterror"]],["bool"]]],[11,"fmt","","",30,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",30,[[["self"]],["httpresponse"]]],[11,"cause","","",31,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",31,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",31,[[["self"],["formatter"]],["result"]]],[11,"eq","","",31,[[["self"],["contenttypeerror"]],["bool"]]],[11,"fmt","","",31,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",31,[[["self"]],["httpresponse"]]],[11,"cause","","",32,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",32,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",32,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",32,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",32,[[["self"]],["httpresponse"]]],[11,"from","","",32,[[["payloaderror"]],["urlencodederror"]]],[11,"cause","","",33,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",33,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",33,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",33,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",33,[[["self"]],["httpresponse"]]],[11,"from","","",33,[[["payloaderror"]],["jsonpayloaderror"]]],[11,"from","","",33,[[["jsonerror"]],["jsonpayloaderror"]]],[11,"from","","",34,[[["payloaderror"]],["self"]]],[11,"from","","",34,[[["contenttypeerror"]],["self"]]],[11,"cause","","",35,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",35,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",35,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",35,[[["self"],["formatter"]],["result"]]],[11,"eq","","",35,[[["self"],["urisegmenterror"]],["bool"]]],[11,"ne","","",35,[[["self"],["urisegmenterror"]],["bool"]]],[11,"error_response","","",35,[[["self"]],["httpresponse"]]],[11,"cause","","",36,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",36,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",36,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",36,[[["self"],["formatter"]],["result"]]],[11,"eq","","",36,[[["self"],["urlgenerationerror"]],["bool"]]],[11,"ne","","",36,[[["self"],["urlgenerationerror"]],["bool"]]],[11,"from","","",36,[[["urlparseerror"]],["self"]]],[11,"cause","","",37,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",37,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",37,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",37,[[["self"],["formatter"]],["result"]]],[11,"eq","","",37,[[["self"],["staticfileerror"]],["bool"]]],[11,"error_response","","",37,[[["self"]],["httpresponse"]]],[11,"new","","Create `InternalError` instance",40,[[["t"],["statuscode"]],["self"]]],[11,"from_response","","Create `InternalError` with predefined `HttpResponse`.",40,[[["t"],["httpresponse"]],["self"]]],[11,"backtrace","","",40,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",40,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",40,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",40,[[["self"]],["httpresponse"]]],[11,"respond_to","","",40,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[0,"fs","actix_web","Static files support",N,N],[3,"DefaultConfig","actix_web::fs","Default content disposition as described in StaticFileConfig",N,N],[3,"NamedFile","","A file with an associated name.",N,N],[3,"ChunkedReadFile","","A helper created from a `std::fs::File` which reads the file chunk-by-chunk on a `CpuPool`.",N,N],[3,"Directory","","A directory; responds with the generated directory listing.",N,N],[12,"base","","Base directory",41,N],[12,"path","","Path of subdirectory to generate listing for",41,N],[3,"StaticFiles","","Static files handling",N,N],[5,"file_extension_to_mime","","Return the MIME type associated with a filename extension (case-insensitive). If `ext` is empty or no associated type for the extension was found, returns the type `application/octet-stream`.",N,[[["str"]],["mime"]]],[8,"StaticFileConfig","","Describes `StaticFiles` configiration",N,N],[11,"content_disposition_map","","Describes mapping for mime type to content disposition header",42,[[["name"]],["dispositiontype"]]],[11,"is_use_etag","","Describes whether Actix should attempt to calculate `ETag`",42,[[],["bool"]]],[11,"is_use_last_modifier","","Describes whether Actix should use last modified date of file.",42,[[],["bool"]]],[11,"is_method_allowed","","Describes allowed methods to access static resources.",42,[[["method"]],["bool"]]],[11,"default","","",43,[[],["defaultconfig"]]],[11,"fmt","","",44,[[["self"],["formatter"]],["result"]]],[11,"open","","Attempts to open a file in read-only mode.",44,[[["p"]],["result",["namedfile"]]]],[11,"open_with_config","","Attempts to open a file in read-only mode using provided configiration.",44,[[["p"],["c"]],["result",["namedfile"]]]],[11,"file","","Returns reference to the underlying `File` object.",44,[[["self"]],["file"]]],[11,"path","","Retrieve the path of this file.",44,[[["self"]],["path"]]],[11,"set_cpu_pool","","Set `CpuPool` to use",44,[[["self"],["cpupool"]],["self"]]],[11,"set_status_code","","Set response Status Code",44,[[["self"],["statuscode"]],["self"]]],[11,"set_content_type","","Set the MIME Content-Type for serving this file. By default the Content-Type is inferred from the filename extension.",44,[[["self"],["mime"]],["self"]]],[11,"set_content_disposition","","Set the Content-Disposition for serving this file. This allows changing the inline/attachment disposition as well as the filename sent to the peer. By default the disposition is `inline` for text, image, and video content types, and `attachment` otherwise, and the filename is taken from the path provided in the `open` method after converting it to UTF-8 using to_string_lossy.",44,[[["self"],["contentdisposition"]],["self"]]],[11,"set_content_encoding","","Set content encoding for serving this file",44,[[["self"],["contentencoding"]],["self"]]],[11,"deref","","",44,[[["self"]],["file"]]],[11,"deref_mut","","",44,[[["self"]],["file"]]],[11,"respond_to","","",44,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"poll","","",45,[[["self"]],["poll",["option","error"]]]],[11,"fmt","","",41,[[["self"],["formatter"]],["result"]]],[11,"new","","Create a new directory",41,[[["pathbuf"],["pathbuf"]],["directory"]]],[11,"is_visible","","Is this entry visible from this directory?",41,[[["self"],["result"]],["bool"]]],[11,"new","","Create new `StaticFiles` instance for specified base directory.",46,[[["t"]],["result",["staticfiles","error"]]]],[11,"with_pool","","Create new `StaticFiles` instance for specified base directory and `CpuPool`.",46,[[["t"],["cpupool"]],["result",["staticfiles","error"]]]],[11,"with_config","","Create new `StaticFiles` instance for specified base directory.",46,[[["t"],["c"]],["result",["staticfiles","error"]]]],[11,"with_config_pool","","Create new `StaticFiles` instance for specified base directory with config and `CpuPool`.",46,[[["t"],["cpupool"],["c"]],["result",["staticfiles","error"]]]],[11,"show_files_listing","","Show files listing for directories.",46,[[["self"]],["self"]]],[11,"files_listing_renderer","","Set custom directory renderer",46,[[["self"],["f"]],["self"]]],[11,"index_file","","Set index file",46,[[["self"],["t"]],["staticfiles"]]],[11,"default_handler","","Sets default handler which is used when no matched file could be found.",46,[[["self"],["h"]],["staticfiles"]]],[11,"handle","","",46,N],[0,"middleware","actix_web","Middlewares",N,N],[3,"DefaultHeaders","actix_web::middleware","`Middleware` for setting default response headers.",N,N],[3,"ErrorHandlers","","`Middleware` for allowing custom handlers for responses.",N,N],[3,"Logger","","`Middleware` for logging request and response info to the terminal.",N,N],[4,"Started","","Middleware start result",N,N],[13,"Done","","Middleware is completed, continue to next middleware",47,N],[13,"Response","","New http response got generated. If middleware generates response handler execution halts.",47,N],[13,"Future","","Execution completed, runs future to completion.",47,N],[4,"Response","","Middleware execution result",N,N],[13,"Done","","New http response got generated",48,N],[13,"Future","","Result is a future that resolves to a new http response",48,N],[4,"Finished","","Middleware finish result",N,N],[13,"Done","","Execution completed",49,N],[13,"Future","","Execution completed, but run future to completion",49,N],[11,"new","","Create `Logger` middleware with the specified `format`.",50,[[["str"]],["logger"]]],[11,"exclude","","Ignore and do not log access info for specified path.",50,[[["self"],["t"]],["self"]]],[11,"default","","Create `Logger` middleware with format:",50,[[],["logger"]]],[11,"start","","",50,[[["self"],["httprequest"]],["result",["started"]]]],[11,"finish","","",50,[[["self"],["httprequest"],["httpresponse"]],["finished"]]],[0,"cors","","Cross-origin resource sharing (CORS) for Actix applications",N,N],[3,"Cors","actix_web::middleware::cors","`Middleware` for Cross-origin resource sharing support",N,N],[3,"CorsBuilder","","Structure that follows the builder pattern for building `Cors` middleware structs.",N,N],[4,"CorsError","","A set of errors that can occur during processing CORS",N,N],[13,"MissingOrigin","","The HTTP request header `Origin` is required but was not provided",51,N],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",51,N],[13,"MissingRequestMethod","","The request header `Access-Control-Request-Method` is required but is missing",51,N],[13,"BadRequestMethod","","The request header `Access-Control-Request-Method` has an invalid value",51,N],[13,"BadRequestHeaders","","The request header `Access-Control-Request-Headers` has an invalid value",51,N],[13,"MissingRequestHeaders","","The request header `Access-Control-Request-Headers` is required but is missing.",51,N],[13,"OriginNotAllowed","","Origin is not allowed to make this request",51,N],[13,"MethodNotAllowed","","Requested method is not allowed",51,N],[13,"HeadersNotAllowed","","One or more headers requested are not allowed",51,N],[4,"AllOrSome","","An enum signifying that some of type T is allowed, or `All` (everything is allowed).",N,N],[13,"All","","Everything is allowed. Usually equivalent to the \"*\" value.",52,N],[13,"Some","","Only some of `T` is allowed",52,N],[11,"fmt","","",51,[[["self"],["formatter"]],["result"]]],[11,"cause","","",51,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",51,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",51,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",51,[[["self"]],["httpresponse"]]],[11,"clone","","",52,[[["self"]],["allorsome"]]],[11,"fmt","","",52,[[["self"],["formatter"]],["result"]]],[11,"eq","","",52,[[["self"],["allorsome"]],["bool"]]],[11,"ne","","",52,[[["self"],["allorsome"]],["bool"]]],[11,"default","","",52,[[],["self"]]],[11,"is_all","","Returns whether this is an `All` variant",52,[[["self"]],["bool"]]],[11,"is_some","","Returns whether this is a `Some` variant",52,[[["self"]],["bool"]]],[11,"as_ref","","Returns &T",52,[[["self"]],["option"]]],[11,"clone","","",53,[[["self"]],["cors"]]],[11,"default","","",53,[[],["cors"]]],[11,"build","","Build a new CORS middleware instance",53,[[],["corsbuilder"]]],[11,"for_app","","Create CorsBuilder for a specified application.",53,[[["app"]],["corsbuilder"]]],[11,"register","","This method register cors middleware with resource and adds route for OPTIONS preflight requests.",53,[[["self"],["resource"]]]],[11,"start","","",53,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",53,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"allowed_origin","","Add an origin that are allowed to make requests. Will be verified against the `Origin` request header.",54,[[["self"],["str"]],["corsbuilder"]]],[11,"allowed_methods","","Set a list of methods which the allowed origins are allowed to access for requests.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"allowed_header","","Set an allowed header",54,[[["self"],["h"]],["corsbuilder"]]],[11,"allowed_headers","","Set a list of header field names which can be used when this resource is accessed by allowed origins.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"expose_headers","","Set a list of headers which are safe to expose to the API of a CORS API specification. This corresponds to the `Access-Control-Expose-Headers` response header.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"max_age","","Set a maximum time for which this CORS request maybe cached. This value is set as the `Access-Control-Max-Age` header.",54,[[["self"],["usize"]],["corsbuilder"]]],[11,"send_wildcard","","Set a wildcard origins",54,[[["self"]],["corsbuilder"]]],[11,"supports_credentials","","Allows users to make authenticated requests",54,[[["self"]],["corsbuilder"]]],[11,"disable_vary_header","","Disable `Vary` header support.",54,[[["self"]],["corsbuilder"]]],[11,"disable_preflight","","Disable preflight request support.",54,[[["self"]],["corsbuilder"]]],[11,"resource","","Configure resource for a specific path.",54,[[["self"],["str"],["f"]],["corsbuilder"]]],[11,"finish","","Finishes building and returns the built `Cors` instance.",54,[[["self"]],["cors"]]],[11,"register","","Finishes building Cors middleware and register middleware for application",54,[[["self"]],["app"]]],[0,"csrf","actix_web::middleware","A filter for cross-site request forgery (CSRF).",N,N],[3,"CsrfFilter","actix_web::middleware::csrf","A middleware that filters cross-site requests.",N,N],[4,"CsrfError","","Potential cross-site request forgery detected.",N,N],[13,"MissingOrigin","","The HTTP request header `Origin` was required but not provided.",55,N],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",55,N],[13,"CsrDenied","","The cross-site request was denied.",55,N],[11,"fmt","","",55,[[["self"],["formatter"]],["result"]]],[11,"cause","","",55,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",55,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",55,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",55,[[["self"]],["httpresponse"]]],[11,"default","","",56,[[],["csrffilter"]]],[11,"new","","Start building a `CsrfFilter`.",56,[[],["csrffilter"]]],[11,"allowed_origin","","Add an origin that is allowed to make requests. Will be verified against the `Origin` request header.",56,[[["self"],["t"]],["csrffilter"]]],[11,"allow_xhr","","Allow all requests with an `X-Requested-With` header.",56,[[["self"]],["csrffilter"]]],[11,"allow_missing_origin","","Allow requests if the expected `Origin` header is missing (and there is no `Referer` to fall back on).",56,[[["self"]],["csrffilter"]]],[11,"allow_upgrade","","Allow cross-site upgrade requests (for example to open a WebSocket).",56,[[["self"]],["csrffilter"]]],[11,"start","","",56,[[["self"],["httprequest"]],["result",["started"]]]],[11,"default","actix_web::middleware","",57,[[],["self"]]],[11,"new","","Construct `DefaultHeaders` middleware.",57,[[],["defaultheaders"]]],[11,"header","","Set a header.",57,[[["self"],["k"],["v"]],["self"]]],[11,"content_type","","Set CONTENT-TYPE header if response does not contain this header.",57,[[["self"]],["self"]]],[11,"response","","",57,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"default","","",58,[[],["self"]]],[11,"new","","Construct new `ErrorHandlers` instance",58,[[],["self"]]],[11,"handler","","Register error handler for specified status code",58,[[["self"],["statuscode"],["f"]],["self"]]],[11,"response","","",58,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[0,"identity","","Request identity service for Actix applications.",N,N],[3,"IdentityService","actix_web::middleware::identity","Request identity middleware",N,N],[3,"CookieIdentityPolicy","","Use cookies for request identity storage.",N,N],[8,"RequestIdentity","","The helper trait to obtain your identity from a request.",N,N],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",59,[[["self"]],["option",["string"]]]],[10,"remember","","Remember identity.",59,[[["self"],["string"]]]],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",59,[[["self"]]]],[8,"Identity","","An identity",N,N],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",60,[[["self"]],["option",["str"]]]],[10,"remember","","Remember identity.",60,[[["self"],["string"]]]],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",60,[[["self"]]]],[10,"write","","Write session to storage backend.",60,[[["self"],["httpresponse"]],["result",["response"]]]],[8,"IdentityPolicy","","Identity policy definition.",N,N],[16,"Identity","","The associated identity",61,N],[16,"Future","","The return type of the middleware",61,N],[10,"from_request","","Parse the session from request and load data from a service identity.",61,N],[11,"identity","actix_web","",12,[[["self"]],["option",["string"]]]],[11,"remember","","",12,[[["self"],["string"]]]],[11,"forget","","",12,[[["self"]]]],[11,"new","actix_web::middleware::identity","Create new identity service with specified backend.",62,[[["t"]],["self"]]],[11,"start","","",62,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",62,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"new","","Construct new `CookieIdentityPolicy` instance.",63,N],[11,"path","","Sets the `path` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"name","","Sets the `name` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"domain","","Sets the `domain` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"secure","","Sets the `secure` field in the session cookie being built.",63,[[["self"],["bool"]],["cookieidentitypolicy"]]],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",63,[[["self"],["duration"]],["cookieidentitypolicy"]]],[11,"from_request","","",63,N],[0,"session","actix_web::middleware","User sessions.",N,N],[3,"Session","actix_web::middleware::session","The high-level interface you use to modify session data.",N,N],[3,"SessionStorage","","Session storage middleware",N,N],[3,"CookieSession","","Session that uses signed cookies as session storage",N,N],[3,"CookieSessionBackend","","Use cookies for session storage.",N,N],[4,"CookieSessionError","","Errors that can occur during handling cookie session",N,N],[13,"Overflow","","Size of the serialized session is greater than 4000 bytes.",64,N],[13,"Serialize","","Fail to serialize session.",64,N],[8,"RequestSession","","The helper trait to obtain your session data from a request.",N,N],[10,"session","","Get the session from the request",65,[[["self"]],["session"]]],[11,"session","actix_web","",12,[[["self"]],["session"]]],[11,"get","actix_web::middleware::session","Get a `value` from the session.",66,[[["self"],["str"]],["result",["option"]]]],[11,"set","","Set a `value` from the session.",66,[[["self"],["str"],["t"]],["result"]]],[11,"remove","","Remove value from the session.",66,[[["self"],["str"]]]],[11,"clear","","Clear the session.",66,[[["self"]]]],[11,"from_request","","",66,N],[11,"new","","Create session storage",67,[[["t"]],["sessionstorage"]]],[11,"start","","",67,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",67,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"cause","","",64,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",64,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",64,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",64,[[["self"],["formatter"]],["result"]]],[11,"signed","","Construct new signed `CookieSessionBackend` instance.",68,N],[11,"private","","Construct new private `CookieSessionBackend` instance.",68,N],[11,"path","","Sets the `path` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"name","","Sets the `name` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"domain","","Sets the `domain` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"secure","","Sets the `secure` field in the session cookie being built.",68,[[["self"],["bool"]],["cookiesessionbackend"]]],[11,"http_only","","Sets the `http_only` field in the session cookie being built.",68,[[["self"],["bool"]],["cookiesessionbackend"]]],[11,"same_site","","Sets the `same_site` field in the session cookie being built.",68,[[["self"],["samesite"]],["cookiesessionbackend"]]],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",68,[[["self"],["duration"]],["cookiesessionbackend"]]],[8,"Middleware","actix_web::middleware","Middleware definition",N,N],[11,"start","","Method is called when request is ready. It may return future, which should resolve before next middleware get called.",69,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","Method is called when handler returns response, but before sending http message to peer.",69,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"finish","","Method is called after body stream get sent to peer.",69,[[["self"],["httprequest"],["httpresponse"]],["finished"]]],[0,"multipart","actix_web","Multipart requests support",N,N],[3,"Multipart","actix_web::multipart","The server-side implementation of `multipart/form-data` requests.",N,N],[3,"Field","","A single field in a multipart stream",N,N],[4,"MultipartItem","","",N,N],[13,"Field","","Multipart field",70,N],[13,"Nested","","Nested multipart stream",70,N],[11,"boundary","","Extract boundary info from headers.",71,[[["headermap"]],["result",["string","multiparterror"]]]],[11,"new","","Create multipart instance for boundary.",71,[[["result",["string","multiparterror"]],["s"]],["multipart"]]],[11,"poll","","",71,[[["self"]],["poll",["option"]]]],[11,"headers","","Get a map of headers",72,[[["self"]],["headermap"]]],[11,"content_type","","Get the content type of the field",72,[[["self"]],["mime"]]],[11,"content_disposition","","Get the content disposition of the field, if it exists",72,[[["self"]],["option",["contentdisposition"]]]],[11,"poll","","",72,[[["self"]],["poll",["option"]]]],[11,"fmt","","",72,[[["self"],["formatter"]],["result"]]],[0,"pred","actix_web","Route match predicates",N,N],[3,"AnyPredicate","actix_web::pred","Matches if any of supplied predicate matches.",N,N],[3,"AllPredicate","","Matches if all of supplied predicate matches.",N,N],[5,"Any","","Return predicate that matches if any of supplied predicate matches.",N,[[["p"]],["anypredicate"]]],[5,"All","","Return predicate that matches if all of supplied predicate matches.",N,[[["p"]],["allpredicate"]]],[5,"Not","","Return predicate that matches if supplied predicate does not match.",N,[[["p"]],["notpredicate"]]],[5,"Get","","Predicate to match GET http method",N,[[],["methodpredicate"]]],[5,"Post","","Predicate to match POST http method",N,[[],["methodpredicate"]]],[5,"Put","","Predicate to match PUT http method",N,[[],["methodpredicate"]]],[5,"Delete","","Predicate to match DELETE http method",N,[[],["methodpredicate"]]],[5,"Head","","Predicate to match HEAD http method",N,[[],["methodpredicate"]]],[5,"Options","","Predicate to match OPTIONS http method",N,[[],["methodpredicate"]]],[5,"Connect","","Predicate to match CONNECT http method",N,[[],["methodpredicate"]]],[5,"Patch","","Predicate to match PATCH http method",N,[[],["methodpredicate"]]],[5,"Trace","","Predicate to match TRACE http method",N,[[],["methodpredicate"]]],[5,"Method","","Predicate to match specified http method",N,[[["method"]],["methodpredicate"]]],[5,"Header","","Return predicate that matches if request contains specified header and value.",N,[[["str"],["str"]],["headerpredicate"]]],[5,"Host","","Return predicate that matches if request contains specified Host name.",N,[[["h"]],["hostpredicate"]]],[8,"Predicate","","Trait defines resource route predicate. Predicate can modify request object. It is also possible to to store extra attributes on request by using `Extensions` container, Extensions container available via `HttpRequest::extensions()` method.",N,N],[10,"check","","Check if request matches predicate",73,[[["self"],["request"],["s"]],["bool"]]],[11,"or","","Add new predicate to list of predicates to check",74,[[["self"],["p"]],["self"]]],[11,"check","","",74,[[["self"],["request"],["s"]],["bool"]]],[11,"and","","Add new predicate to list of predicates to check",75,[[["self"],["p"]],["self"]]],[11,"check","","",75,[[["self"],["request"],["s"]],["bool"]]],[0,"server","actix_web","Http server",N,N],[3,"Request","actix_web::server","Request's context",N,N],[3,"ServerSettings","","Various server settings",N,N],[3,"HttpServer","","An HTTP Server",N,N],[3,"PauseServer","","Pause accepting incoming connections",N,N],[3,"ResumeServer","","Resume accepting incoming connections",N,N],[3,"StopServer","","Stop incoming connection processing, stop all workers and exit.",N,N],[12,"graceful","","Whether to try and shut down gracefully",76,N],[4,"KeepAlive","","Server keep-alive setting",N,N],[13,"Timeout","","Keep alive in seconds",77,N],[13,"Tcp","","Use `SO_KEEPALIVE` socket option, value in seconds",77,N],[13,"Os","","Relay on OS to shutdown tcp connection",77,N],[13,"Disabled","","Disabled",77,N],[5,"new","","Create new http server with application factory.",N,[[["f"]],["httpserver"]]],[11,"headers","actix_web","",78,[[["self"]],["headermap"]]],[11,"payload","","",78,[[["self"]],["payload"]]],[11,"uri","","Read the Request Uri.",78,[[["self"]],["uri"]]],[11,"method","","Read the Request method.",78,[[["self"]],["method"]]],[11,"version","","Read the Request Version.",78,[[["self"]],["version"]]],[11,"path","","The target path of this Request.",78,[[["self"]],["str"]]],[11,"headers","","Returns Request's headers.",78,[[["self"]],["headermap"]]],[11,"headers_mut","","Returns mutable Request's headers.",78,[[["self"]],["headermap"]]],[11,"peer_addr","","Peer socket address",78,[[["self"]],["option",["socketaddr"]]]],[11,"keep_alive","","Checks if a connection should be kept alive.",78,[[["self"]],["bool"]]],[11,"extensions","","Request extensions",78,[[["self"]],["ref",["extensions"]]]],[11,"extensions_mut","","Mutable reference to a the request's extensions",78,[[["self"]],["refmut",["extensions"]]]],[11,"upgrade","","Check if request requires connection upgrade",78,[[["self"]],["bool"]]],[11,"connection_info","","Get ConnectionInfo for the correct request.",78,[[["self"]],["ref",["connectioninfo"]]]],[11,"server_settings","","Server settings",78,[[["self"]],["serversettings"]]],[11,"clone","actix_web::server","",79,[[["self"]],["self"]]],[11,"default","","",79,[[],["self"]]],[11,"local_addr","","Returns the socket address of the local half of this TCP connection",79,[[["self"]],["option",["socketaddr"]]]],[11,"secure","","Returns true if connection is secure(https)",79,[[["self"]],["bool"]]],[11,"host","","Returns host header value",79,[[["self"]],["str"]]],[11,"cpu_pool","","Returns default `CpuPool` for server",79,[[["self"]],["cpupool"]]],[11,"new","","Create new http server with application factory",80,[[["f"]],["self"]]],[11,"workers","","Set number of workers to start.",80,[[["self"],["usize"]],["self"]]],[11,"backlog","","Set the maximum number of pending connections.",80,[[["self"],["i32"]],["self"]]],[11,"keep_alive","","Set server keep-alive setting.",80,[[["self"],["t"]],["self"]]],[11,"server_hostname","","Set server host name.",80,[[["self"],["string"]],["self"]]],[11,"system_exit","","Stop actix system.",80,[[["self"]],["self"]]],[11,"signals","","Set alternative address for `ProcessSignals` actor.",80,[[["self"],["addr",["processsignals"]]],["self"]]],[11,"disable_signals","","Disable signal handling",80,[[["self"]],["self"]]],[11,"shutdown_timeout","","Timeout for graceful workers shutdown.",80,[[["self"],["u16"]],["self"]]],[11,"no_http2","","Disable `HTTP/2` support",80,[[["self"]],["self"]]],[11,"addrs","","Get addresses of bound sockets.",80,[[["self"]],["vec",["socketaddr"]]]],[11,"addrs_with_scheme","","Get addresses of bound sockets and the scheme for it.",80,[[["self"]],["vec"]]],[11,"listen","","Use listener for accepting incoming connection requests",80,[[["self"],["tcplistener"]],["self"]]],[11,"listen_tls","","Use listener for accepting incoming tls connection requests",80,[[["self"],["tcplistener"],["tlsacceptor"]],["self"]]],[11,"listen_ssl","","Use listener for accepting incoming tls connection requests",80,[[["self"],["tcplistener"],["sslacceptorbuilder"]],["result"]]],[11,"bind","","The socket address to bind",80,[[["self"],["s"]],["result"]]],[11,"bind_tls","","The ssl socket address to bind",80,[[["self"],["s"],["tlsacceptor"]],["result"]]],[11,"bind_ssl","","Start listening for incoming tls connections.",80,[[["self"],["s"],["sslacceptorbuilder"]],["result"]]],[11,"start","","Start listening for incoming connections.",80,[[["self"]],["addr"]]],[11,"run","","Spawn new thread and start listening for incoming connections.",80,[[["self"]]]],[11,"start_incoming","","Start listening for incoming connections from a stream.",80,[[["self"],["s"],["bool"]],["addr"]]],[11,"handle","","",80,[[["self"],["signal"],["context"]]]],[11,"handle","","",80,[[["self"],["pauseserver"],["context"]]]],[11,"handle","","",80,[[["self"],["resumeserver"],["context"]]]],[11,"handle","","",80,N],[8,"HttpHandler","","Low level http request handler",N,N],[16,"Task","","Request handling task",81,N],[10,"handle","","Handle request",81,[[["self"],["request"]],["result",["request"]]]],[8,"HttpHandlerTask","","Low level http request handler",N,N],[11,"poll_completed","","Poll task, this method is used before or after io object is available",82,[[["self"]],["poll",["error"]]]],[10,"poll_io","","Poll task when io object is available",82,[[["self"],["writer"]],["poll",["bool","error"]]]],[11,"disconnected","","Connection is disconnected",82,[[["self"]]]],[8,"IntoHttpHandler","","Conversion helper trait",N,N],[16,"Handler","","The associated type which is result of conversion.",83,N],[10,"into_handler","","Convert into `HttpHandler` object.",83,N],[11,"fmt","","",77,[[["self"],["formatter"]],["result"]]],[11,"eq","","",77,[[["self"],["keepalive"]],["bool"]]],[11,"ne","","",77,[[["self"],["keepalive"]],["bool"]]],[11,"clone","","",77,[[["self"]],["keepalive"]]],[11,"from","","",77,[[["usize"]],["self"]]],[11,"from","","",77,[[["option",["usize"]]],["self"]]],[0,"test","actix_web","Various helpers for Actix applications to use during testing.",N,N],[3,"TestServer","actix_web::test","The `TestServer` type.",N,N],[3,"TestServerBuilder","","An `TestServer` builder",N,N],[3,"TestApp","","Test application helper for testing request handlers.",N,N],[3,"TestRequest","","Test `HttpRequest` builder",N,N],[11,"new","","Start new test server",84,[[["f"]],["self"]]],[11,"build","","Create test server builder",84,[[],["testserverbuilder"]]],[11,"build_with_state","","Create test server builder with specific state factory",84,[[["f"]],["testserverbuilder"]]],[11,"with_factory","","Start new test server with application factory",84,[[["f"]],["self"]]],[11,"unused_addr","","Get firat available unused address",84,[[],["socketaddr"]]],[11,"addr","","Construct test server url",84,[[["self"]],["socketaddr"]]],[11,"url","","Construct test server url",84,[[["self"],["str"]],["string"]]],[11,"execute","","Execute future on current core",84,[[["self"],["f"]],["result"]]],[11,"ws","","Connect to websocket server",84,[[["self"]],["result",["clienterror"]]]],[11,"get","","Create `GET` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"post","","Create `POST` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"head","","Create `HEAD` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"client","","Connect to test http server",84,[[["self"],["method"],["str"]],["clientrequestbuilder"]]],[11,"drop","","",84,[[["self"]]]],[11,"new","","Create a new test server",85,[[["f"]],["testserverbuilder"]]],[11,"ssl","","Create ssl server",85,[[["self"],["sslacceptorbuilder"]],["self"]]],[11,"start","","Configure test application and run test server",85,[[["self"],["f"]],["testserver"]]],[11,"handler","","Register handler for \"/\"",86,[[["self"],["f"]]]],[11,"middleware","","Register middleware",86,[[["self"],["t"]],["testapp"]]],[11,"resource","","Register resource. This method is similar to `App::resource()` method.",86,[[["self"],["str"],["f"]],["testapp"]]],[11,"into_handler","","",86,[[["self"]],["httpapplication"]]],[11,"default","","",87,[[],["testrequest"]]],[11,"with_uri","","Create TestRequest and set request uri",87,[[["str"]],["testrequest"]]],[11,"with_hdr","","Create TestRequest and set header",87,[[["h"]],["testrequest"]]],[11,"with_header","","Create TestRequest and set header",87,[[["k"],["v"]],["testrequest"]]],[11,"with_state","","Start HttpRequest build process with application state",87,[[["s"]],["testrequest"]]],[11,"version","","Set HTTP version of this request",87,[[["self"],["version"]],["self"]]],[11,"method","","Set HTTP method of this request",87,[[["self"],["method"]],["self"]]],[11,"uri","","Set HTTP Uri of this request",87,[[["self"],["str"]],["self"]]],[11,"set","","Set a header",87,[[["self"],["h"]],["self"]]],[11,"header","","Set a header",87,[[["self"],["k"],["v"]],["self"]]],[11,"param","","Set request path pattern parameter",87,[[["self"],["str"],["str"]],["self"]]],[11,"set_payload","","Set request payload",87,[[["self"],["b"]],["self"]]],[11,"prefix","","Set request's prefix",87,[[["self"],["u16"]],["self"]]],[11,"finish","","Complete request creation and generate `HttpRequest` instance",87,[[["self"]],["httprequest"]]],[11,"request","","Complete request creation and generate server `Request` instance",87,[[["self"]],["request"]]],[11,"run","","This method generates `HttpRequest` instance and runs handler with generated request.",87,[[["self"],["h"]],["result",["httpresponse","error"]]]],[11,"run_async","","This method generates `HttpRequest` instance and runs handler with generated request.",87,[[["self"],["h"]],["result",["httpresponse"]]]],[0,"ws","actix_web","`WebSocket` support for Actix",N,N],[3,"Client","actix_web::ws","`WebSocket` client",N,N],[3,"ClientHandshake","","Future that implementes client websocket handshake process.",N,N],[3,"ClientReader","","Websocket reader client",N,N],[3,"ClientWriter","","Websocket writer client",N,N],[3,"WebsocketContext","","Execution context for `WebSockets` actors",N,N],[3,"Frame","","A struct representing a `WebSocket` frame.",N,N],[3,"FramedMessage","","`WebSocket` message with framing.",N,N],[3,"CloseReason","","Reason for closing the connection",N,N],[12,"code","","Exit code",88,N],[12,"description","","Optional description of the exit code",88,N],[3,"WsStream","","Maps `Payload` stream into stream of `ws::Message` items",N,N],[4,"ClientError","","Websocket client error",N,N],[13,"InvalidUrl","","Invalid url",89,N],[13,"InvalidResponseStatus","","Invalid response status",89,N],[13,"InvalidUpgradeHeader","","Invalid upgrade header",89,N],[13,"InvalidConnectionHeader","","Invalid connection header",89,N],[13,"MissingConnectionHeader","","Missing CONNECTION header",89,N],[13,"MissingWebSocketAcceptHeader","","Missing SEC-WEBSOCKET-ACCEPT header",89,N],[13,"InvalidChallengeResponse","","Invalid challenge response",89,N],[13,"Http","","Http parsing error",89,N],[13,"Url","","Url parsing error",89,N],[13,"ResponseParseError","","Response parsing error",89,N],[13,"SendRequest","","Send request error",89,N],[13,"Protocol","","Protocol error",89,N],[13,"Io","","IO Error",89,N],[13,"Disconnected","","\"Disconnected\"",89,N],[4,"CloseCode","","Status code used to indicate why an endpoint is closing the `WebSocket` connection.",N,N],[13,"Normal","","Indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled.",90,N],[13,"Away","","Indicates that an endpoint is \"going away\", such as a server going down or a browser having navigated away from a page.",90,N],[13,"Protocol","","Indicates that an endpoint is terminating the connection due to a protocol error.",90,N],[13,"Unsupported","","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).",90,N],[13,"Abnormal","","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.",90,N],[13,"Invalid","","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 [RFC3629] data within a text message).",90,N],[13,"Policy","","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.",90,N],[13,"Size","","Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process.",90,N],[13,"Extension","","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.",90,N],[13,"Error","","Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.",90,N],[13,"Restart","","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.",90,N],[13,"Again","","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.",90,N],[4,"OpCode","","Operation codes as part of rfc6455.",N,N],[13,"Continue","","Indicates a continuation frame of a fragmented message.",91,N],[13,"Text","","Indicates a text data frame.",91,N],[13,"Binary","","Indicates a binary data frame.",91,N],[13,"Close","","Indicates a close control frame.",91,N],[13,"Ping","","Indicates a ping control frame.",91,N],[13,"Pong","","Indicates a pong control frame.",91,N],[13,"Bad","","Indicates an invalid opcode was received.",91,N],[4,"ProtocolError","","Websocket protocol errors",N,N],[13,"UnmaskedFrame","","Received an unmasked frame from client",92,N],[13,"MaskedFrame","","Received a masked frame from server",92,N],[13,"InvalidOpcode","","Encountered invalid opcode",92,N],[13,"InvalidLength","","Invalid control frame length",92,N],[13,"BadOpCode","","Bad web socket op code",92,N],[13,"Overflow","","A payload reached size limit.",92,N],[13,"NoContinuation","","Continuation is not supported",92,N],[13,"BadEncoding","","Bad utf-8 encoding",92,N],[13,"Payload","","Payload error",92,N],[4,"HandshakeError","","Websocket handshake errors",N,N],[13,"GetMethodRequired","","Only get method is allowed",93,N],[13,"NoWebsocketUpgrade","","Upgrade header if not set to websocket",93,N],[13,"NoConnectionUpgrade","","Connection header is not set to upgrade",93,N],[13,"NoVersionHeader","","Websocket version header is not set",93,N],[13,"UnsupportedVersion","","Unsupported websocket version",93,N],[13,"BadWebsocketKey","","Websocket key is not set or wrong",93,N],[4,"Message","","`WebSocket` Message",N,N],[13,"Text","","Text message",94,N],[13,"Binary","","Binary message",94,N],[13,"Ping","","Ping message",94,N],[13,"Pong","","Pong message",94,N],[13,"Close","","Close message with optional reason",94,N],[5,"start","","Do websocket handshake and start actor",N,[[["httprequest"],["a"]],["result",["httpresponse","error"]]]],[5,"handshake","","Prepare `WebSocket` handshake response.",N,[[["httprequest"]],["result",["httpresponsebuilder","handshakeerror"]]]],[11,"cause","","",89,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",89,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",89,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",89,[[["self"],["formatter"]],["result"]]],[11,"from","","",89,[[["error"]],["clienterror"]]],[11,"from","","",89,[[["urlparseerror"]],["clienterror"]]],[11,"from","","",89,[[["sendrequesterror"]],["clienterror"]]],[11,"from","","",89,[[["protocolerror"]],["clienterror"]]],[11,"from","","",89,[[["error"]],["clienterror"]]],[11,"new","","Create new websocket connection",95,[[["s"]],["client"]]],[11,"with_connector","","Create new websocket connection with custom `ClientConnector`",95,[[["s"],["addr",["clientconnector"]]],["client"]]],[11,"protocols","","Set supported websocket protocols",95,[[["self"],["u"]],["self"]]],[11,"cookie","","Set cookie for handshake request",95,[[["self"],["cookie"]],["self"]]],[11,"origin","","Set request Origin",95,[[["self"],["v"]],["self"]]],[11,"max_frame_size","","Set max frame size",95,[[["self"],["usize"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",95,[[["self"],["usize"]],["self"]]],[11,"no_masking","","Disable payload masking. By default ws client masks frame payload.",95,[[["self"]],["self"]]],[11,"header","","Set request header",95,[[["self"],["k"],["v"]],["self"]]],[11,"timeout","","Set websocket handshake timeout",95,[[["self"],["duration"]],["self"]]],[11,"connect","","Connect to websocket server and do ws handshake",95,[[["self"]],["clienthandshake"]]],[11,"timeout","","Set handshake timeout",96,[[["self"],["duration"]],["self"]]],[11,"conn_timeout","","Set connection timeout",96,[[["self"],["duration"]],["self"]]],[11,"poll","","",96,[[["self"]],["poll"]]],[11,"fmt","","",97,[[["self"],["formatter"]],["result"]]],[11,"poll","","",97,[[["self"]],["poll",["option"]]]],[11,"text","","Send text frame",98,[[["self"],["t"]]]],[11,"binary","","Send binary frame",98,[[["self"],["b"]]]],[11,"ping","","Send ping frame",98,[[["self"],["str"]]]],[11,"pong","","Send pong frame",98,[[["self"],["str"]]]],[11,"close","","Send close frame",98,[[["self"],["option",["closereason"]]]]],[11,"send_text","","Send text frame",98,[[["self"],["t"]]]],[11,"send_binary","","Send binary frame",98,[[["self"],["b"]]]],[11,"send_ping","","Send ping frame",98,[[["self"],["str"]]]],[11,"send_pong","","Send pong frame",98,[[["self"],["str"]]]],[11,"send_close","","Send close frame",98,[[["self"],["option",["closereason"]]]]],[11,"stop","","",99,[[["self"]]]],[11,"terminate","","",99,[[["self"]]]],[11,"state","","",99,[[["self"]],["actorstate"]]],[11,"spawn","","",99,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",99,[[["self"],["f"]]]],[11,"cancel_future","","",99,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",99,[[["self"]],["addr"]]],[11,"create","","Create a new Websocket context from a request and an actor",99,[[["httprequest"],["a"],["wsstream"]],["body"]]],[11,"with_factory","","Create a new Websocket context",99,[[["httprequest"],["f"]],["body"]]],[11,"write_raw","","Write payload",99,[[["self"],["framedmessage"]]]],[11,"state","","Shared application state",99,[[["self"]],["s"]]],[11,"request","","Incoming request",99,[[["self"]],["httprequest"]]],[11,"drain","","Returns drain future",99,[[["self"]],["drain"]]],[11,"text","","Send text frame",99,[[["self"],["t"]]]],[11,"binary","","Send binary frame",99,[[["self"],["b"]]]],[11,"ping","","Send ping frame",99,[[["self"],["str"]]]],[11,"pong","","Send pong frame",99,[[["self"],["str"]]]],[11,"close","","Send close frame",99,[[["self"],["option",["closereason"]]]]],[11,"connected","","Check if connection still open",99,[[["self"]],["bool"]]],[11,"handle","","Handle of the running future",99,[[["self"]],["spawnhandle"]]],[11,"send_text","","Send text frame",99,[[["self"],["t"]]]],[11,"send_binary","","Send binary frame",99,[[["self"],["b"]]]],[11,"send_ping","","Send ping frame",99,[[["self"],["str"]]]],[11,"send_pong","","Send pong frame",99,[[["self"],["str"]]]],[11,"send_close","","Send close frame",99,[[["self"],["option",["closereason"]]]]],[11,"parts","","",99,[[["self"]],["contextparts"]]],[11,"pack","","",99,[[["m"],["option",["sender"]]],["envelope"]]],[11,"fmt","","",100,[[["self"],["formatter"]],["result"]]],[11,"unpack","","Destruct frame",100,N],[11,"close","","Create a new Close control frame.",100,[[["option",["closereason"]],["bool"]],["framedmessage"]]],[11,"parse","","Parse the input stream into a frame.",100,[[["payloadbuffer"],["bool"],["usize"]],["poll",["option","protocolerror"]]]],[11,"parse_close_payload","","Parse the payload of a close frame.",100,[[["binary"]],["option",["closereason"]]]],[11,"message","","Generate binary representation",100,[[["b"],["opcode"],["bool"],["bool"]],["framedmessage"]]],[11,"default","","",100,[[],["frame"]]],[11,"fmt","","",100,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",101,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",91,[[["self"],["formatter"]],["result"]]],[11,"eq","","",91,[[["self"],["opcode"]],["bool"]]],[11,"clone","","",91,[[["self"]],["opcode"]]],[11,"fmt","","",91,[[["self"],["formatter"]],["result"]]],[11,"into","","",91,[[["self"]],["u8"]]],[11,"from","","",91,[[["u8"]],["opcode"]]],[11,"fmt","","",90,[[["self"],["formatter"]],["result"]]],[11,"eq","","",90,[[["self"],["closecode"]],["bool"]]],[11,"ne","","",90,[[["self"],["closecode"]],["bool"]]],[11,"clone","","",90,[[["self"]],["closecode"]]],[11,"into","","",90,[[["self"]],["u16"]]],[11,"from","","",90,[[["u16"]],["closecode"]]],[11,"fmt","","",88,[[["self"],["formatter"]],["result"]]],[11,"eq","","",88,[[["self"],["closereason"]],["bool"]]],[11,"ne","","",88,[[["self"],["closereason"]],["bool"]]],[11,"clone","","",88,[[["self"]],["closereason"]]],[11,"from","","",88,[[["closecode"]],["self"]]],[11,"from","","",88,N],[8,"WsWriter","","Common writing methods for a websocket.",N,N],[10,"send_text","","Send a text",102,[[["self"],["t"]]]],[10,"send_binary","","Send a binary",102,[[["self"],["b"]]]],[10,"send_ping","","Send a ping message",102,[[["self"],["str"]]]],[10,"send_pong","","Send a pong message",102,[[["self"],["str"]]]],[10,"send_close","","Close the connection",102,[[["self"],["option",["closereason"]]]]],[11,"cause","","",92,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",92,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",92,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",92,[[["self"],["formatter"]],["result"]]],[11,"from","","",92,[[["payloaderror"]],["protocolerror"]]],[11,"cause","","",93,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",93,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",93,[[["self"],["formatter"]],["result"]]],[11,"eq","","",93,[[["self"],["handshakeerror"]],["bool"]]],[11,"fmt","","",93,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",93,[[["self"]],["httpresponse"]]],[11,"fmt","","",94,[[["self"],["formatter"]],["result"]]],[11,"eq","","",94,[[["self"],["message"]],["bool"]]],[11,"ne","","",94,[[["self"],["message"]],["bool"]]],[11,"new","","Create new websocket frames stream",103,[[["s"]],["wsstream"]]],[11,"max_size","","Set max frame size",103,[[["self"],["usize"]],["self"]]],[11,"poll","","",103,[[["self"]],["poll",["option"]]]],[0,"actix","actix_web","Re-exports actix's prelude",N,N],[0,"resolver","actix_web::actix","DNS resolver and connector utility actor",N,N],[6,"Connector","actix_web::actix::resolver","",N,N],[6,"ConnectorError","","",N,N],[3,"Resolve","","",N,N],[3,"Connect","","",N,N],[3,"ConnectAddr","","",N,N],[12,"0","","",104,N],[4,"ResolverError","","",N,N],[13,"Resolver","","Failed to resolve the hostname",105,N],[13,"InvalidInput","","Address is invalid",105,N],[13,"Timeout","","Connecting took too long",105,N],[13,"IoError","","Connection io error",105,N],[3,"Resolver","","",N,N],[3,"TcpConnector","","Tcp stream connector",N,N],[0,"signal","actix_web::actix","An actor implementation of Unix signal handling",N,N],[4,"SignalType","actix_web::actix::signal","Different types of process signals",N,N],[13,"Hup","","SIGHUP",106,N],[13,"Int","","SIGINT",106,N],[13,"Term","","SIGTERM",106,N],[13,"Quit","","SIGQUIT",106,N],[13,"Child","","SIGCHILD",106,N],[3,"Signal","","Process signal message",N,N],[12,"0","","",107,N],[3,"ProcessSignals","","An actor implementation of Unix signal handling",N,N],[3,"Subscribe","","Subscribe to process signals.",N,N],[12,"0","","",108,N],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",N,N],[0,"fut","actix_web::actix","Custom `Future` implementation with `Actix` support",N,N],[8,"ActorFuture","actix_web::actix::fut","Trait for types which are a placeholder of a value that may become available at some later point in time.",N,N],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,N],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,N],[16,"Actor","","The actor within which this future runs",109,N],[10,"poll","","",109,N],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,[[["self"],["f"]],["map"]]],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,[[["self"],["f"]],["maperr"]]],[11,"drop_err","","Drop this future's error, returning a new future.",109,[[["self"]],["droperr"]]],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,[[["self"]],["fromerr"]]],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,[[["self"],["f"]],["then"]]],[11,"and_then","","Execute another future after this one has resolved successfully.",109,[[["self"],["f"]],["andthen"]]],[11,"timeout","","Add timeout to futures chain.",109,N],[8,"ActorStream","","A stream of values, not all of which may have been produced yet.",N,N],[16,"Item","","The type of item this stream will yield on success.",110,N],[16,"Error","","The type of error this stream may generate.",110,N],[16,"Actor","","The actor within which this stream runs.",110,N],[10,"poll","","",110,N],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,[[["self"],["f"]],["streammap"]]],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,[[["self"],["f"]],["streammaperr"]]],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,[[["self"],["f"]],["streamthen"]]],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,[[["self"],["f"]],["streamandthen"]]],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,[[["self"],["t"],["f"]],["streamfold"]]],[11,"timeout","","Add timeout to stream.",110,N],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,[[["self"]],["streamfinish"]]],[8,"IntoActorFuture","","Class of types which can be converted into an actor future.",N,N],[16,"Future","","The future that this type can be converted into.",111,N],[16,"Item","","The item that the future may resolve with.",111,N],[16,"Error","","The error that the future may resolve with.",111,N],[16,"Actor","","The actor within which this future runs",111,N],[10,"into_future","","Consumes this object and produces a future.",111,N],[8,"WrapFuture","","Helper trait that allows conversion of normal future into `ActorFuture`",N,N],[16,"Future","","The future that this type can be converted into.",112,N],[16,"Item","","The item that the future may resolve with.",112,N],[16,"Error","","The error that the future may resolve with.",112,N],[10,"into_actor","","Convert normal future to a ActorFuture",112,N],[3,"FutureWrap","","",N,N],[5,"wrap_future","","Converts normal future into `ActorFuture`",N,[[["f"]],["futurewrap"]]],[8,"WrapStream","","Helper trait that allows conversion of normal stream into `ActorStream`",N,N],[16,"Stream","","The stream that this type can be converted into.",113,N],[16,"Item","","The item that the future may resolve with.",113,N],[16,"Error","","The error that the future may resolve with.",113,N],[10,"into_actor","","Convert normal stream to a ActorStream",113,N],[3,"StreamWrap","","",N,N],[5,"wrap_stream","","Converts normal stream into `ActorStream`",N,[[["s"]],["streamwrap"]]],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"DropErr","","",N,N],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",N,N],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",N,[[["result"]],["futureresult"]]],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",N,[[["t"]],["futureresult"]]],[3,"Map","","Future for the `map` combinator, changing the type of a future.",N,N],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",N,N],[13,"A","","First branch of the type",114,N],[13,"B","","Second branch of the type",114,N],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",N,N],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",N,N],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",N,[[["e"]],["futureresult"]]],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",N,N],[3,"FutureResult","","A future representing a value that is immediately ready.",N,N],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",N,N],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",N,N],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",N,N],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",N,N],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",N,N],[0,"msgs","actix_web::actix","Actix system messages",N,N],[3,"StopArbiter","actix_web::actix::msgs","Stop arbiter execution",N,N],[12,"0","","",115,N],[3,"StartActor","","Start actor in arbiter's thread",N,N],[3,"Execute","","Execute function in arbiter's thread",N,N],[0,"actix","actix_web::actix","",N,N],[8,"StreamHandler","actix_web::actix::actix","Stream handler",N,N],[10,"handle","","Method is called for every message received by this Actor",116,N],[11,"started","","Method is called when stream get polled first time.",116,N],[11,"error","","Method is called when stream emits error.",116,N],[11,"finished","","Method is called when stream finishes.",116,N],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",116,N],[3,"MessageResult","","Helper type that implements `MessageResponse` trait",N,N],[12,"0","","",117,N],[4,"ActorState","","Actor execution state",N,N],[13,"Started","","Actor is started.",118,N],[13,"Running","","Actor is running.",118,N],[13,"Stopping","","Actor is stopping.",118,N],[13,"Stopped","","Actor is stopped.",118,N],[8,"Actor","","Actors are objects which encapsulate state and behavior.",N,N],[16,"Context","","Actor execution context type",119,N],[11,"started","","Method is called when actor get polled first time.",119,N],[11,"stopping","","Method is called after an actor is in `Actor::Stopping` state. There could be several reasons for stopping. `Context::stop` get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context.",119,N],[11,"stopped","","Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped.",119,N],[11,"start","","Start new asynchronous actor, returns address of newly created actor.",119,[[["self"]],["addr"]]],[11,"start_default","","Start new asynchronous actor, returns address of newly created actor.",119,[[],["addr"]]],[11,"create","","Use `create` method, if you need `Context` object during actor initialization.",119,[[["f"]],["addr"]]],[8,"ContextFutureSpawner","","Helper trait which can spawn future into actor's context",N,N],[10,"spawn","","spawn future into `Context`",120,N],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",120,N],[3,"Recipient","","`Recipient` type allows to send one specific message to an actor.",N,N],[3,"System","","System is an actor which manages runtime.",N,N],[4,"Running","","",N,N],[13,"Stop","","",121,N],[13,"Continue","","",121,N],[8,"Supervised","","Actors with ability to restart after failure",N,N],[11,"restarting","","Method called when supervisor restarting failed actor",122,N],[8,"Handler","","Message handler",N,N],[16,"Result","","The type of value that this handle will return",123,N],[10,"handle","","Method is called for every message received by this Actor",123,N],[0,"actors","","Helper actors",N,N],[0,"resolver","actix_web::actix::actix::actors","DNS resolver and connector utility actor",N,N],[6,"Connector","actix_web::actix::actix::actors::resolver","",N,N],[6,"ConnectorError","","",N,N],[3,"Resolve","","",N,N],[3,"Connect","","",N,N],[3,"ConnectAddr","","",N,N],[12,"0","","",104,N],[4,"ResolverError","","",N,N],[13,"Resolver","","Failed to resolve the hostname",105,N],[13,"InvalidInput","","Address is invalid",105,N],[13,"Timeout","","Connecting took too long",105,N],[13,"IoError","","Connection io error",105,N],[3,"Resolver","","",N,N],[3,"TcpConnector","","Tcp stream connector",N,N],[0,"signal","actix_web::actix::actix::actors","An actor implementation of Unix signal handling",N,N],[4,"SignalType","actix_web::actix::actix::actors::signal","Different types of process signals",N,N],[13,"Hup","","SIGHUP",106,N],[13,"Int","","SIGINT",106,N],[13,"Term","","SIGTERM",106,N],[13,"Quit","","SIGQUIT",106,N],[13,"Child","","SIGCHILD",106,N],[3,"Signal","","Process signal message",N,N],[12,"0","","",107,N],[3,"ProcessSignals","","An actor implementation of Unix signal handling",N,N],[3,"Subscribe","","Subscribe to process signals.",N,N],[12,"0","","",108,N],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",N,N],[8,"ActorStream","actix_web::actix::actix","A stream of values, not all of which may have been produced yet.",N,N],[16,"Item","","The type of item this stream will yield on success.",110,N],[16,"Error","","The type of error this stream may generate.",110,N],[16,"Actor","","The actor within which this stream runs.",110,N],[10,"poll","","",110,N],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,[[["self"],["f"]],["streammap"]]],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,[[["self"],["f"]],["streammaperr"]]],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,[[["self"],["f"]],["streamthen"]]],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,[[["self"],["f"]],["streamandthen"]]],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,[[["self"],["t"],["f"]],["streamfold"]]],[11,"timeout","","Add timeout to stream.",110,N],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,[[["self"]],["streamfinish"]]],[0,"io","","",N,N],[8,"WriteHandler","actix_web::actix::actix::io","Write handler",N,N],[11,"error","","Method is called when writer emits error.",124,N],[11,"finished","","Method is called when writer finishes.",124,N],[3,"Writer","","Wrapper for `AsyncWrite` types",N,N],[3,"FramedWrite","","Wrapper for `AsyncWrite` and `Encoder` types",N,N],[3,"Condition","actix_web::actix::actix","",N,N],[8,"SystemService","","Trait defines system's service.",N,N],[11,"start_service","","Construct and srtart system service",125,[[["addr"]],["addr"]]],[11,"service_started","","Method is called during service initialization.",125,N],[11,"from_registry","","Get actor's address from system registry",125,[[],["addr"]]],[3,"SpawnHandle","","Spawned future handle. Could be used for cancelling spawned future.",N,N],[3,"RecipientRequest","","`RecipientRequest` is a `Future` which represents asynchronous message sending process.",N,N],[4,"SendError","","",N,N],[13,"Full","","",126,N],[13,"Closed","","",126,N],[6,"ResponseActFuture","","A specialized actor future for async message handler",N,N],[3,"SyncContext","","Sync actor execution context",N,N],[3,"Context","","Actor execution context",N,N],[8,"AsyncContext","","Asynchronous execution context",N,N],[10,"address","","Return `Address` of the context",127,[[["self"]],["addr"]]],[10,"spawn","","Spawn async future into context. Returns handle of the item, could be used for cancelling execution.",127,[[["self"],["f"]],["spawnhandle"]]],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",127,N],[10,"waiting","","Check if context is paused (waiting for future completion or stopping)",127,[[["self"]],["bool"]]],[10,"cancel_future","","Cancel future. handle is a value returned by `spawn` method.",127,[[["self"],["spawnhandle"]],["bool"]]],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",127,[[["self"],["s"]],["spawnhandle"]]],[11,"add_message_stream","","This method is similar to `add_stream` but it skips stream errors.",127,N],[11,"notify","","Send message `msg` to self.",127,N],[11,"notify_later","","Send message `msg` to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called.",127,[[["self"],["m"],["duration"]],["spawnhandle"]]],[11,"run_later","","Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called.",127,[[["self"],["duration"],["f"]],["spawnhandle"]]],[11,"run_interval","","Spawns job to execute closure with specified interval",127,[[["self"],["duration"],["f"]],["spawnhandle"]]],[8,"WrapFuture","","Helper trait that allows conversion of normal future into `ActorFuture`",N,N],[16,"Future","","The future that this type can be converted into.",112,N],[16,"Item","","The item that the future may resolve with.",112,N],[16,"Error","","The error that the future may resolve with.",112,N],[10,"into_actor","","Convert normal future to a ActorFuture",112,N],[3,"ActorResponse","","Helper type for representing different type of message responses",N,N],[8,"ArbiterService","","Trait defines arbiter's service.",N,N],[11,"start_service","","Construct and srtart arbiter service",128,[[],["addr"]]],[11,"service_started","","Method is called during service initialization.",128,N],[11,"from_registry","","Get actor's address from arbiter registry",128,[[],["addr"]]],[3,"Supervisor","","Actor supervisor",N,N],[3,"Request","","`Request` is a `Future` which represents asynchronous message sending process.",N,N],[3,"Response","","Helper type for representing different type of message responses",N,N],[8,"Message","","Message type",N,N],[16,"Result","","The type of value that this message will resolved with if it is successful.",129,N],[6,"ResponseFuture","","A specialized future for async message handler",N,N],[8,"ActorContext","","Actor execution context",N,N],[10,"stop","","Immediately stop processing incoming messages and switch to a `stopping` state",130,N],[10,"terminate","","Terminate actor execution",130,N],[10,"state","","Actor execution state",130,[[["self"]],["actorstate"]]],[3,"SyncArbiter","","Sync arbiter",N,N],[8,"ActorFuture","","Trait for types which are a placeholder of a value that may become available at some later point in time.",N,N],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,N],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,N],[16,"Actor","","The actor within which this future runs",109,N],[10,"poll","","",109,N],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,[[["self"],["f"]],["map"]]],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,[[["self"],["f"]],["maperr"]]],[11,"drop_err","","Drop this future's error, returning a new future.",109,[[["self"]],["droperr"]]],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,[[["self"]],["fromerr"]]],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,[[["self"],["f"]],["then"]]],[11,"and_then","","Execute another future after this one has resolved successfully.",109,[[["self"],["f"]],["andthen"]]],[11,"timeout","","Add timeout to futures chain.",109,N],[4,"MailboxError","","Set of error that can occurred during message delivery process",N,N],[13,"Closed","","",131,N],[13,"Timeout","","",131,N],[3,"Arbiter","","Event loop controller",N,N],[3,"Addr","","Address of the actor",N,N],[0,"msgs","","Actix system messages",N,N],[3,"StopArbiter","actix_web::actix::actix::msgs","Stop arbiter execution",N,N],[12,"0","","",115,N],[3,"StartActor","","Start actor in arbiter's thread",N,N],[3,"Execute","","Execute function in arbiter's thread",N,N],[8,"WrapStream","actix_web::actix::actix","Helper trait that allows conversion of normal stream into `ActorStream`",N,N],[16,"Stream","","The stream that this type can be converted into.",113,N],[16,"Item","","The item that the future may resolve with.",113,N],[16,"Error","","The error that the future may resolve with.",113,N],[10,"into_actor","","Convert normal stream to a ActorStream",113,N],[0,"fut","","Custom `Future` implementation with `Actix` support",N,N],[8,"IntoActorFuture","actix_web::actix::actix::fut","Class of types which can be converted into an actor future.",N,N],[16,"Future","","The future that this type can be converted into.",111,N],[16,"Item","","The item that the future may resolve with.",111,N],[16,"Error","","The error that the future may resolve with.",111,N],[16,"Actor","","The actor within which this future runs",111,N],[10,"into_future","","Consumes this object and produces a future.",111,N],[3,"FutureWrap","","",N,N],[5,"wrap_future","","Converts normal future into `ActorFuture`",N,[[["f"]],["futurewrap"]]],[3,"StreamWrap","","",N,N],[5,"wrap_stream","","Converts normal stream into `ActorStream`",N,[[["s"]],["streamwrap"]]],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"DropErr","","",N,N],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",N,N],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",N,[[["result"]],["futureresult"]]],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",N,[[["t"]],["futureresult"]]],[3,"Map","","Future for the `map` combinator, changing the type of a future.",N,N],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",N,N],[13,"A","","First branch of the type",114,N],[13,"B","","Second branch of the type",114,N],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",N,N],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",N,N],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",N,[[["e"]],["futureresult"]]],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",N,N],[3,"FutureResult","","A future representing a value that is immediately ready.",N,N],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",N,N],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",N,N],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",N,N],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",N,N],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",N,N],[0,"dev","actix_web::actix::actix","The `actix` prelude for library developers",N,N],[8,"AsyncContextParts","actix_web::actix::actix::dev","",N,N],[10,"parts","","",132,[[["self"]],["contextparts"]]],[8,"ResponseChannel","","Trait defines message response channel",N,N],[10,"is_canceled","","",133,[[["self"]],["bool"]]],[10,"send","","",133,N],[8,"ToEnvelope","","Converter trait, packs message to suitable envelope",N,N],[10,"pack","","Pack message into suitable envelope",134,[[["m"],["option",["sender"]]],["envelope"]]],[3,"SystemRegistry","","System wide actors registry",N,N],[8,"MessageResponse","","Trait which defines message response",N,N],[10,"handle","","",135,N],[3,"Envelope","","",N,N],[3,"ContextParts","","",N,N],[3,"Registry","","Actors registry",N,N],[3,"ContextFut","","",N,N],[3,"Mailbox","","",N,N],[5,"run","actix_web::actix","Start the System and execute supplied future.",N,N],[5,"spawn","","Spawns a future on the current arbiter.",N,N],[0,"dev","actix_web","The `actix-web` prelude for library developers",N,N],[3,"Drain","actix_web::dev","Consume a future",N,N],[3,"FormConfig","","Form extractor configuration",N,N],[3,"PayloadConfig","","Payload configuration for request's payload.",N,N],[3,"AsyncResult","","Represents async result",N,N],[3,"MessageBody","","Future that resolves to a complete http message body.",N,N],[3,"UrlEncoded","","Future that resolves to a parsed urlencoded values.",N,N],[3,"HttpResponseBuilder","","An HTTP response builder",N,N],[3,"ConnectionInfo","","`HttpRequest` connection information",N,N],[3,"JsonBody","","Request payload json parser that resolves to a deserialized `T` value.",N,N],[3,"JsonConfig","","Json extractor configuration",N,N],[3,"Params","","Route match information",N,N],[3,"Payload","","Buffered stream of bytes chunks",N,N],[3,"PayloadBuffer","","Payload buffer",N,N],[3,"Resource","","Resource is an entry in route table which corresponds to requested URL.",N,N],[3,"Route","","Resource route definition",N,N],[3,"ResourceDef","","Resource type describes an entry in resources table",N,N],[3,"ResourceInfo","","Information about current resource",N,N],[3,"Router","","Interface for application router.",N,N],[4,"ResourceType","","Resource type",N,N],[13,"Normal","","Normal resource",136,N],[13,"Default","","Resource for application default handler",136,N],[13,"External","","External resource",136,N],[13,"Unset","","Unknown resource type",136,N],[6,"BodyStream","","Type represent streaming body",N,N],[8,"Handler","","Trait defines object that could be registered as route handler",N,N],[16,"Result","","The type of value that handler will return.",137,N],[10,"handle","","Handle request",137,N],[8,"FromParam","","A trait to abstract the idea of creating a new instance of a type from a path parameter.",N,N],[16,"Err","","The associated error which can be returned from parsing.",138,N],[10,"from_param","","Parses a string `s` to return a value of this type.",138,[[["str"]],["result"]]],[0,"http","actix_web","Various HTTP related types",N,N],[3,"Method","actix_web::http","The Request Method (VERB)",N,N],[3,"StatusCode","","An HTTP status code (`status-code` in RFC 7230 et al.).",N,N],[3,"Version","","Represents a version of the HTTP spec.",N,N],[3,"Cookie","","Representation of an HTTP cookie.",N,N],[3,"CookieBuilder","","Structure that follows the builder pattern for building `Cookie` structs.",N,N],[3,"NormalizePath","","Path normalization helper",N,N],[4,"ContentEncoding","","Represents supported types of content encodings",N,N],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,N],[13,"Br","","A format using the Brotli algorithm",139,N],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,N],[13,"Gzip","","Gzip algorithm",139,N],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,N],[4,"ConnectionType","","Represents various types of connection",N,N],[13,"Close","","Close connection after response",140,N],[13,"KeepAlive","","Keep connection alive after response",140,N],[13,"Upgrade","","Connection is upgraded to different type",140,N],[0,"header","","Various http headers",N,N],[17,"AGE","actix_web::http::header","Indicates the time in seconds the object has been in a proxy cache.",N,N],[17,"CONTENT_ENCODING","","Used to compress the media-type.",N,N],[17,"IF_NONE_MATCH","","Makes a request conditional based on the E-Tag.",N,N],[3,"HeaderName","","Represents an HTTP header field name",N,N],[17,"PROXY_AUTHORIZATION","","Contains the credentials to authenticate a user agent to a proxy server.",N,N],[17,"DATE","","Contains the date and time at which the message was originated.",N,N],[17,"ACCEPT_ENCODING","","Advertises which content encoding the client is able to understand.",N,N],[17,"ACCEPT_CHARSET","","Advertises which character set the client is able to understand.",N,N],[3,"Iter","","`HeaderMap` entry iterator.",N,N],[17,"ACCESS_CONTROL_REQUEST_METHOD","","Informs the server know which HTTP method will be used when the actual request is made.",N,N],[3,"OccupiedEntry","","A view into a single occupied location in a `HeaderMap`.",N,N],[17,"CONNECTION","","Controls whether or not the network connection stays open after the current transaction finishes.",N,N],[3,"InvalidHeaderValue","","A possible error when converting a `HeaderValue` from a string or byte slice.",N,N],[17,"ACCESS_CONTROL_ALLOW_ORIGIN","","Indicates whether the response can be shared with resources with the given origin.",N,N],[3,"Drain","","A drain iterator for `HeaderMap`.",N,N],[17,"SEC_WEBSOCKET_PROTOCOL","","The |Sec-WebSocket-Protocol| header field is used in the WebSocket opening handshake. It is sent from the client to the server and back from the server to the client to confirm the subprotocol of the connection. This enables scripts to both select a subprotocol and be sure that the server agreed to serve that subprotocol.",N,N],[3,"HeaderValue","","Represents an HTTP header field value.",N,N],[17,"PRAGMA","","HTTP/1.0 header usually used for backwards compatibility.",N,N],[3,"Values","","`HeaderMap` value iterator.",N,N],[17,"X_DNS_PREFETCH_CONTROL","","Controls DNS prefetching.",N,N],[17,"SEC_WEBSOCKET_ACCEPT","","The |Sec-WebSocket-Accept| header field is used in the WebSocket opening handshake. It is sent from the server to the client to confirm that the server is willing to initiate the WebSocket connection.",N,N],[17,"REFERER","","Contains the address of the previous web page from which a link to the currently requested page was followed.",N,N],[3,"ValueDrain","","An drain iterator of all values associated with a single header name.",N,N],[17,"STRICT_TRANSPORT_SECURITY","","Tells the client to communicate with HTTPS instead of using HTTP.",N,N],[17,"TRANSFER_ENCODING","","Specifies the form of encoding used to safely transfer the entity to the client.",N,N],[17,"SET_COOKIE","","Used to send cookies from the server to the user agent.",N,N],[17,"LOCATION","","Indicates the URL to redirect a page to.",N,N],[17,"AUTHORIZATION","","Contains the credentials to authenticate a user agent with a server.",N,N],[17,"CONTENT_DISPOSITION","","Indicates if the content is expected to be displayed inline.",N,N],[17,"WARNING","","General HTTP header contains information about possible problems with the status of the message.",N,N],[17,"CONTENT_SECURITY_POLICY_REPORT_ONLY","","Allows experimenting with policies by monitoring their effects.",N,N],[17,"ACCESS_CONTROL_ALLOW_HEADERS","","Preflight response indicating permitted HTTP headers.",N,N],[3,"ToStrError","","A possible error when converting a `HeaderValue` to a string representation.",N,N],[17,"CONTENT_SECURITY_POLICY","","Allows controlling resources the user agent is allowed to load for a given page.",N,N],[8,"AsHeaderName","","A marker trait used to identify values that can be used as search keys to a `HeaderMap`.",N,N],[17,"REFRESH","","Informs the web browser that the current page or frame should be refreshed.",N,N],[17,"EXPECT","","Indicates expectations that need to be fulfilled by the server in order to properly handle the request.",N,N],[17,"FROM","","Contains an Internet email address for a human user who controls the requesting user agent.",N,N],[17,"LINK","","Allows the server to point an interested client to another resource containing metadata about the requested resource.",N,N],[17,"ORIGIN","","Indicates where a fetch originates from.",N,N],[17,"LAST_MODIFIED","","Content-Types that are acceptable for the response.",N,N],[17,"CONTENT_LOCATION","","Indicates an alternate location for the returned data.",N,N],[17,"RANGE","","Indicates the part of a document that the server should return.",N,N],[17,"ACCESS_CONTROL_ALLOW_CREDENTIALS","","Preflight response indicating if the response to the request can be exposed to the page.",N,N],[17,"SEC_WEBSOCKET_KEY","","The |Sec-WebSocket-Key| header field is used in the WebSocket opening handshake. It is sent from the client to the server to provide part of the information used by the server to prove that it received a valid WebSocket opening handshake. This helps ensure that the server does not accept connections from non-WebSocket clients (e.g., HTTP clients) that are being abused to send data to unsuspecting WebSocket servers.",N,N],[4,"Entry","","A view into a single location in a `HeaderMap`, which may be vacant or occupied.",N,N],[13,"Occupied","","An occupied entry",141,N],[13,"Vacant","","A vacant entry",141,N],[17,"SERVER","","Contains information about the software used by the origin server to handle the request.",N,N],[17,"FORWARDED","","Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.",N,N],[17,"ACCESS_CONTROL_REQUEST_HEADERS","","Informs the server which HTTP headers will be used when an actual request is made.",N,N],[17,"ALLOW","","Lists the set of methods support by a resource.",N,N],[17,"CONTENT_LANGUAGE","","Used to describe the languages intended for the audience.",N,N],[3,"Keys","","An iterator over `HeaderMap` keys.",N,N],[3,"ValueIter","","An iterator of all values associated with a single header name.",N,N],[17,"UPGRADE_INSECURE_REQUESTS","","Sends a signal to the server expressing the client’s preference for an encrypted and authenticated response.",N,N],[17,"PUBLIC_KEY_PINS","","Associates a specific cryptographic public key with a certain server.",N,N],[17,"ACCESS_CONTROL_EXPOSE_HEADERS","","Indicates which headers can be exposed as part of the response by listing their names.",N,N],[17,"TRAILER","","Allows the sender to include additional fields at the end of chunked messages.",N,N],[17,"SEC_WEBSOCKET_VERSION","","The |Sec-WebSocket-Version| header field is used in the WebSocket opening handshake. It is sent from the client to the server to indicate the protocol version of the connection. This enables servers to correctly interpret the opening handshake and subsequent data being sent from the data, and close the connection if the server cannot interpret that data in a safe manner.",N,N],[17,"IF_MODIFIED_SINCE","","Makes a request conditional based on the modification date.",N,N],[17,"IF_UNMODIFIED_SINCE","","Makes the request conditional based on the last modification date.",N,N],[17,"PROXY_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a proxy.",N,N],[17,"DNT","","Indicates the client's tracking preference.",N,N],[17,"COOKIE","","Contains stored HTTP cookies previously sent by the server with the Set-Cookie header.",N,N],[17,"X_XSS_PROTECTION","","Stop pages from loading when an XSS attack is detected.",N,N],[17,"X_FRAME_OPTIONS","","Indicates whether or not a browser should be allowed to render a page in a frame.",N,N],[17,"ACCEPT","","Advertises which content types the client is able to understand.",N,N],[17,"TE","","Informs the server of transfer encodings willing to be accepted as part of the response.",N,N],[3,"IntoIter","","An owning iterator over the entries of a `HeaderMap`.",N,N],[17,"UPGRADE","","Used as part of the exchange to upgrade the protocol.",N,N],[17,"MAX_FORWARDS","","Indicates the max number of intermediaries the request should be sent through.",N,N],[17,"IF_MATCH","","Makes a request conditional based on the E-Tag.",N,N],[17,"HOST","","Specifies the domain name of the server and (optionally) the TCP port number on which the server is listening.",N,N],[17,"IF_RANGE","","Makes a request conditional based on range.",N,N],[17,"CACHE_CONTROL","","Specifies directives for caching mechanisms in both requests and responses.",N,N],[17,"CONTENT_TYPE","","Used to indicate the media type of the resource.",N,N],[17,"ACCEPT_RANGES","","Marker used by the server to advertise partial request support.",N,N],[17,"ACCESS_CONTROL_ALLOW_METHODS","","Preflight header response indicating permitted access methods.",N,N],[8,"IntoHeaderName","","A marker trait used to identify values that can be used as insert keys to a `HeaderMap`.",N,N],[17,"RETRY_AFTER","","The Retry-After response HTTP header indicates how long the user agent should wait before making a follow-up request. There are two main cases this header is used:",N,N],[17,"CONTENT_RANGE","","Indicates where in a full body message a partial message belongs.",N,N],[17,"ALT_SVC","","Advertises the availability of alternate services to clients.",N,N],[3,"InvalidHeaderNameBytes","","A possible error when converting a `HeaderName` from another type.",N,N],[3,"VacantEntry","","A view into a single empty location in a `HeaderMap`.",N,N],[17,"X_CONTENT_TYPE_OPTIONS","","Marker used by the server to indicate that the MIME types advertised in the `content-type` headers should not be changed and be followed.",N,N],[17,"VIA","","Added by proxies to track routing.",N,N],[17,"WWW_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a resource.",N,N],[17,"REFERRER_POLICY","","Governs which referrer information should be included with requests made.",N,N],[17,"ETAG","","Identifier for a specific version of a resource.",N,N],[3,"ValueIterMut","","A mutable iterator of all values associated with a single header name.",N,N],[3,"InvalidHeaderName","","A possible error when converting a `HeaderName` from another type.",N,N],[3,"InvalidHeaderValueBytes","","A possible error when converting a `HeaderValue` from a string or byte slice.",N,N],[17,"VARY","","Determines how to match future requests with cached responses.",N,N],[17,"USER_AGENT","","Contains a string that allows identifying the requesting client's software.",N,N],[17,"PUBLIC_KEY_PINS_REPORT_ONLY","","Sends reports of pinning violation to the report-uri specified in the header.",N,N],[17,"SEC_WEBSOCKET_EXTENSIONS","","The |Sec-WebSocket-Extensions| header field is used in the WebSocket opening handshake. It is initially sent from the client to the server, and then subsequently sent from the server to the client, to agree on a set of protocol-level extensions to use for the duration of the connection.",N,N],[3,"GetAll","","A view to all values stored in a single entry.",N,N],[17,"CONTENT_LENGTH","","Indicates the size fo the entity-body.",N,N],[17,"ACCEPT_LANGUAGE","","Advertises which languages the client is able to understand.",N,N],[3,"HeaderMap","","A set of HTTP headers",N,N],[17,"EXPIRES","","Contains the date/time after which the response is considered stale.",N,N],[17,"ACCESS_CONTROL_MAX_AGE","","Indicates how long the results of a preflight request can be cached.",N,N],[3,"LanguageTag","","A language tag as described in BCP47.",N,N],[12,"language","","Language subtags are used to indicate the language, ignoring all other aspects such as script, region or spefic invariants.",142,N],[12,"extlangs","","Extended language subtags are used to identify certain specially selected languages that, for various historical and compatibility reasons, are closely identified with or tagged using an existing primary language subtag.",142,N],[12,"script","","Script subtags are used to indicate the script or writing system variations that distinguish the written forms of a language or its dialects.",142,N],[12,"region","","Region subtags are used to indicate linguistic variations associated with or appropriate to a specific country, territory, or region. Typically, a region subtag is used to indicate variations such as regional dialects or usage, or region-specific spelling conventions. It can also be used to indicate that content is expressed in a way that is appropriate for use throughout a region, for instance, Spanish content tailored to be useful throughout Latin America.",142,N],[12,"variants","","Variant subtags are used to indicate additional, well-recognized variations that define a language or its dialects that are not covered by other available subtags.",142,N],[12,"extensions","","Extensions provide a mechanism for extending language tags for use in various applications. They are intended to identify information that is commonly used in association with languages or language tags but that is not part of language identification.",142,N],[12,"privateuse","","Private use subtags are used to indicate distinctions in language that are important in a given context by private agreement.",142,N],[3,"ExtendedValue","","An extended header parameter value (i.e., tagged with a character set and optionally, a language), as defined in RFC 5987.",N,N],[12,"charset","","The character set that is used to encode the `value` to a string.",143,N],[12,"language_tag","","The human language details of the `value`, if available.",143,N],[12,"value","","The parameter value, as expressed in octets.",143,N],[3,"ContentDisposition","","A `Content-Disposition` header, (re)defined in RFC6266.",N,N],[12,"disposition","","The disposition",144,N],[12,"parameters","","Disposition parameters",144,N],[4,"ContentEncoding","","Represents supported types of content encodings",N,N],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,N],[13,"Br","","A format using the Brotli algorithm",139,N],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,N],[13,"Gzip","","Gzip algorithm",139,N],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,N],[4,"DispositionType","","The implied disposition of the content of the HTTP body.",N,N],[13,"Inline","","Inline implies default processing",145,N],[13,"Attachment","","Attachment implies that the recipient should prompt the user to save the response locally, rather than process it normally (as per its media type).",145,N],[13,"Ext","","Extension type. Should be handled by recipients the same way as Attachment",145,N],[4,"DispositionParam","","A parameter to the disposition type.",N,N],[13,"Filename","","A Filename consisting of a Charset, an optional LanguageTag, and finally a sequence of bytes representing the filename",146,N],[13,"Ext","","Extension type consisting of token and value. Recipients should ignore unrecognized parameters.",146,N],[4,"Charset","","A Mime charset.",N,N],[13,"Us_Ascii","","US ASCII",147,N],[13,"Iso_8859_1","","ISO-8859-1",147,N],[13,"Iso_8859_2","","ISO-8859-2",147,N],[13,"Iso_8859_3","","ISO-8859-3",147,N],[13,"Iso_8859_4","","ISO-8859-4",147,N],[13,"Iso_8859_5","","ISO-8859-5",147,N],[13,"Iso_8859_6","","ISO-8859-6",147,N],[13,"Iso_8859_7","","ISO-8859-7",147,N],[13,"Iso_8859_8","","ISO-8859-8",147,N],[13,"Iso_8859_9","","ISO-8859-9",147,N],[13,"Iso_8859_10","","ISO-8859-10",147,N],[13,"Shift_Jis","","Shift_JIS",147,N],[13,"Euc_Jp","","EUC-JP",147,N],[13,"Iso_2022_Kr","","ISO-2022-KR",147,N],[13,"Euc_Kr","","EUC-KR",147,N],[13,"Iso_2022_Jp","","ISO-2022-JP",147,N],[13,"Iso_2022_Jp_2","","ISO-2022-JP-2",147,N],[13,"Iso_8859_6_E","","ISO-8859-6-E",147,N],[13,"Iso_8859_6_I","","ISO-8859-6-I",147,N],[13,"Iso_8859_8_E","","ISO-8859-8-E",147,N],[13,"Iso_8859_8_I","","ISO-8859-8-I",147,N],[13,"Gb2312","","GB2312",147,N],[13,"Big5","","Big5",147,N],[13,"Koi8_R","","KOI8-R",147,N],[13,"Ext","","An arbitrary charset specified as a string",147,N],[5,"parse_extended_value","","Parses extended header parameter values (`ext-value`), as defined in RFC 5987.",N,[[["str"]],["result",["extendedvalue","parseerror"]]]],[5,"http_percent_encode","","Percent encode a sequence of bytes with a character set defined in [https://tools.ietf.org/html/rfc5987#section-3.2][url]",N,N],[6,"FutureResponse","actix_web","Convenience type alias",N,N],[8,"AsyncResponder","","Convenience trait that converts `Future` object to a `Boxed` future",N,N],[10,"responder","","Convert to a boxed future",148,[[["self"]],["box",["future"]]]],[8,"FromRequest","","Trait implemented by types that can be extracted from request.",N,N],[16,"Config","","Configuration for conversion process",149,N],[16,"Result","","Future that resolves to a Self",149,N],[10,"from_request","","Convert request to a Self",149,N],[11,"extract","","Convert request to a Self",149,N],[8,"Responder","","Trait implemented by types that generate responses for clients.",N,N],[16,"Item","","The associated item which can be returned.",150,N],[16,"Error","","The associated error which can be returned.",150,N],[10,"respond_to","","Convert itself to `AsyncResult` or `Error`.",150,[[["self"],["httprequest"]],["result"]]],[8,"HttpMessage","","Trait that implements general purpose operations on http messages",N,N],[16,"Stream","","Type of message payload stream",151,N],[10,"headers","","Read the message headers.",151,[[["self"]],["headermap"]]],[10,"payload","","Message payload stream",151,N],[11,"content_type","","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,[[["self"]],["str"]]],[11,"encoding","","Get content type encoding",151,[[["self"]],["result",["encodingref","contenttypeerror"]]]],[11,"mime_type","","Convert the request content type to a known mime type.",151,[[["self"]],["result",["option","contenttypeerror"]]]],[11,"chunked","","Check if request has chunked transfer encoding",151,[[["self"]],["result",["bool","parseerror"]]]],[11,"body","","Load http message body.",151,[[["self"]],["messagebody"]]],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,[[["self"]],["urlencoded"]]],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,[[["self"]],["jsonbody"]]],[11,"multipart","","Return stream to http payload processes as multipart.",151,[[["self"]],["multipart"]]],[11,"readlines","","Return stream of lines.",151,[[["self"]],["readlines"]]],[14,"header","","",N,N],[11,"new","actix_web::dev","Create a drain from a future",152,[[["receiver"]],["self"]]],[11,"poll","","",152,N],[11,"limit","","Change max size of payload. By default max size is 256Kb",153,[[["self"],["usize"]],["self"]]],[11,"error_handler","","Set custom error handler",153,[[["self"],["f"]],["self"]]],[11,"default","","",153,[[],["self"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",154,[[["self"],["usize"]],["self"]]],[11,"mimetype","","Set required mime-type of the request. By default mime type is not enforced.",154,[[["self"],["mime"]],["self"]]],[11,"default","","",154,[[],["self"]]],[11,"extract","actix_web","Convert request to a Self",149,N],[11,"poll","actix_web::dev","",155,[[["self"]],["poll"]]],[11,"async","","Create async response",155,[[["box",["future"]]],["asyncresult"]]],[11,"ok","","Send response",155,[[["r"]],["asyncresult"]]],[11,"err","","Send error",155,[[["r"]],["asyncresult"]]],[11,"respond_to","","",155,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"from","","",155,[[["t"]],["asyncresult"]]],[11,"from","","",155,[[["result",["asyncresult"]]],["self"]]],[11,"from","","",155,[[["result"]],["self"]]],[11,"from","","",155,[[["result",["box"]]],["self"]]],[11,"from","","",155,[[["box",["future"]]],["asyncresult"]]],[11,"from_bytes","actix_web::http::header","Converts a slice of bytes to an HTTP header name.",156,N],[11,"from_lowercase","","Converts a slice of bytes to an HTTP header name.",156,N],[11,"from_static","","Converts a static string to a HTTP header name.",156,[[["str"]],["headername"]]],[11,"as_str","","Returns a `str` representation of the header.",156,[[["self"]],["str"]]],[11,"fmt","actix_web::http","Formats the cookie `self` as a `Set-Cookie` header value.",157,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",26,[[["self"],["formatter"]],["result",["error"]]]],[11,"from","","",26,[[["utf8error"]],["parseerror"]]],[11,"eq","","",26,[[["self"],["parseerror"]],["bool"]]],[11,"ne","","",26,[[["self"],["parseerror"]],["bool"]]],[11,"eq","actix_web::http","",157,[[["self"],["cookie"]],["bool"]]],[11,"description","actix_web::error","",26,[[["self"]],["str"]]],[11,"clone","actix_web::http","",157,[[["self"]],["cookie"]]],[11,"clone","","",158,[[["self"]],["cookiebuilder"]]],[11,"clone","actix_web::error","",26,[[["self"]],["parseerror"]]],[11,"from_str","actix_web::http","",157,[[["str"]],["result",["cookie","parseerror"]]]],[11,"fmt","","",158,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",26,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",157,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",25,[[["self"],["formatter"]],["result",["error"]]]],[11,"from","","",25,[[["errors"]],["parseerror"]]],[11,"eq","","",25,[[["self"],["parseerror"]],["bool"]]],[11,"description","","",25,[[["self"]],["str"]]],[11,"clone","","",25,[[["self"]],["parseerror"]]],[11,"fmt","","",25,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","actix_web::http","",159,[[],["statuscode"]]],[11,"default","","",160,[[],["method"]]],[11,"default","actix_web::http::header","",161,[[],["headermap"]]],[11,"default","actix_web::http","",162,[[],["version"]]],[11,"eq","actix_web::http::header","",163,[[["self"],["string"]],["bool"]]],[11,"eq","","",156,[[["self"],["headername"]],["bool"]]],[11,"ne","","",156,[[["self"],["headername"]],["bool"]]],[11,"eq","","",156,[[["self"],["headername"]],["bool"]]],[11,"eq","","",163,[[["self"],["headervalue"]],["bool"]]],[11,"eq","actix_web::http","",159,[[["self"],["statuscode"]],["bool"]]],[11,"ne","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"eq","actix_web::http::header","",164,[[["self"],["getall"]],["bool"]]],[11,"eq","","",163,[[["self"],["t"]],["bool"]]],[11,"eq","actix_web::http","",159,[[["self"],["u16"]],["bool"]]],[11,"eq","","",160,[[["self"],["method"]],["bool"]]],[11,"ne","","",160,[[["self"],["method"]],["bool"]]],[11,"eq","actix_web::http::header","",163,N],[11,"eq","","",161,[[["self"],["headermap"]],["bool"]]],[11,"eq","actix_web::http","",160,[[["self"],["str"]],["bool"]]],[11,"eq","","",160,[[["self"],["str"]],["bool"]]],[11,"eq","","",162,[[["self"],["version"]],["bool"]]],[11,"ne","","",162,[[["self"],["version"]],["bool"]]],[11,"eq","actix_web::http::header","Performs a case-insensitive comparison of the string against the header name",156,[[["self"],["str"]],["bool"]]],[11,"eq","","",163,[[["self"],["str"]],["bool"]]],[11,"eq","","Performs a case-insensitive comparison of the string against the header name",156,[[["self"],["str"]],["bool"]]],[11,"eq","actix_web::http","",160,[[["self"],["method"]],["bool"]]],[11,"hash","actix_web::http::header","",163,N],[11,"hash","actix_web::http","",162,N],[11,"hash","","",159,N],[11,"hash","","",160,N],[11,"hash","actix_web::http::header","",156,N],[11,"from_str","actix_web::http","",159,[[["str"]],["result",["statuscode","invalidstatuscode"]]]],[11,"from_str","actix_web::http::header","",163,[[["str"]],["result",["headervalue"]]]],[11,"from_str","actix_web::http","",160,[[["str"]],["result",["method"]]]],[11,"from_str","actix_web::http::header","",156,[[["str"]],["result",["headername","invalidheadername"]]]],[11,"drop","","",165,N],[11,"drop","","",166,N],[11,"drop","","",167,N],[11,"extend","","Extend a `HeaderMap` with the contents of another `HeaderMap`.",161,N],[11,"extend","","",161,N],[11,"index","","Panics Using the index operator will cause a panic if the header you're querying isn't set.",161,[[["self"],["k"]],["t"]]],[11,"cmp","actix_web::http","",162,[[["self"],["version"]],["ordering"]]],[11,"cmp","actix_web::http::header","",163,[[["self"],["headervalue"]],["ordering"]]],[11,"cmp","actix_web::http","",159,[[["self"],["statuscode"]],["ordering"]]],[11,"partial_cmp","","",159,[[["self"],["statuscode"]],["option",["ordering"]]]],[11,"lt","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"le","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"gt","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"ge","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"partial_cmp","actix_web::http::header","",163,N],[11,"partial_cmp","","",163,[[["self"],["str"]],["option",["ordering"]]]],[11,"partial_cmp","actix_web::http","",162,[[["self"],["version"]],["option",["ordering"]]]],[11,"lt","","",162,[[["self"],["version"]],["bool"]]],[11,"le","","",162,[[["self"],["version"]],["bool"]]],[11,"gt","","",162,[[["self"],["version"]],["bool"]]],[11,"ge","","",162,[[["self"],["version"]],["bool"]]],[11,"partial_cmp","actix_web::http::header","",163,[[["self"],["headervalue"]],["option",["ordering"]]]],[11,"partial_cmp","","",163,[[["self"],["t"]],["option",["ordering"]]]],[11,"partial_cmp","","",163,[[["self"],["string"]],["option",["ordering"]]]],[11,"borrow","","",156,[[["self"]],["str"]]],[11,"next","","",168,[[["self"]],["option"]]],[11,"size_hint","","",168,N],[11,"next","","",169,[[["self"]],["option"]]],[11,"size_hint","","",169,N],[11,"next","","",170,[[["self"]],["option"]]],[11,"size_hint","","",170,N],[11,"next","","",165,[[["self"]],["option"]]],[11,"size_hint","","",165,N],[11,"next","","",171,[[["self"]],["option"]]],[11,"next","","",166,[[["self"]],["option"]]],[11,"size_hint","","",166,N],[11,"next","","",172,[[["self"]],["option"]]],[11,"size_hint","","",172,N],[11,"next","","",167,[[["self"]],["option"]]],[11,"size_hint","","",167,N],[11,"fmt","actix_web::http","",160,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",173,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",174,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",159,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",175,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",176,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",177,[[["self"],["formatter"]],["result",["error"]]]],[11,"next_back","","",171,[[["self"]],["option"]]],[11,"next_back","","",168,[[["self"]],["option"]]],[11,"from","","",163,[[["i64"]],["headervalue"]]],[11,"from","","",163,[[["isize"]],["headervalue"]]],[11,"from","","",163,[[["i32"]],["headervalue"]]],[11,"from","","",163,[[["u64"]],["headervalue"]]],[11,"from","","",163,[[["i16"]],["headervalue"]]],[11,"from","","",163,[[["u32"]],["headervalue"]]],[11,"from","","",163,[[["usize"]],["headervalue"]]],[11,"from","","",163,[[["u16"]],["headervalue"]]],[11,"from","","",163,[[["headername"]],["headervalue"]]],[11,"from","","",156,[[["headername"]],["headername"]]],[11,"into_iter","","Creates a consuming iterator, that is, one that moves keys and values out of the map in arbitary order. The map cannot be used after calling this.",161,[[["self"]],["intoiter"]]],[11,"into_iter","","",178,[[["self"]],["valueitermut"]]],[11,"into_iter","","",164,[[["self"]],["valueiter"]]],[11,"as_ref","","",156,N],[11,"as_ref","","",163,N],[11,"as_ref","actix_web::http","",160,[[["self"]],["str"]]],[11,"as_ref","actix_web::http::header","",156,[[["self"]],["str"]]],[11,"description","","",176,[[["self"]],["str"]]],[11,"description","","",177,[[["self"]],["str"]]],[11,"description","","",174,[[["self"]],["str"]]],[11,"description","","",173,[[["self"]],["str"]]],[11,"description","","",175,[[["self"]],["str"]]],[11,"clone","","",156,[[["self"]],["headername"]]],[11,"clone","","",163,[[["self"]],["headervalue"]]],[11,"clone","actix_web::http","",160,[[["self"]],["method"]]],[11,"clone","actix_web::http::header","",161,[[["self"]],["headermap"]]],[11,"clone","actix_web::http","",159,[[["self"]],["statuscode"]]],[11,"clone","","",162,[[["self"]],["version"]]],[11,"try_from","actix_web::http::header","",163,[[["i64"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["i32"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",160,N],[11,"try_from","actix_web::http::header","",163,[[["headervalue"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",159,[[["statuscode"]],["result",["statuscode"]]]],[11,"try_from","actix_web::http::header","",163,N],[11,"try_from","actix_web::http","",160,[[["str"]],["result",["method"]]]],[11,"try_from","","",159,N],[11,"try_from","actix_web::http::header","",163,[[["i16"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["usize"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["u64"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["str"]],["result",["headername"]]]],[11,"try_from","","",163,[[["isize"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["bytes"]],["result",["headername"]]]],[11,"try_from","actix_web::http","",160,[[["method"]],["result",["method"]]]],[11,"try_from","actix_web::http::header","",163,[[["headername"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["headername"]],["result",["headername"]]]],[11,"try_from","","",163,[[["u16"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["u32"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["str"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",159,[[["str"]],["result",["statuscode"]]]],[11,"try_from","","",159,[[["u16"]],["result",["statuscode"]]]],[11,"try_from","actix_web::http::header","",163,[[["bytes"]],["result",["headervalue"]]]],[11,"try_from","","",156,N],[11,"fmt","actix_web::http","",160,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",171,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",179,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",175,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",178,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",165,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",172,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",141,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",161,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",164,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",163,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",170,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",173,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",174,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",168,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",167,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",159,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",169,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",156,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",166,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",162,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",177,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",176,[[["self"],["formatter"]],["result",["error"]]]],[11,"from_iter","","",161,[[["i"]],["headermap"]]],[11,"fmt","","",142,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","","",142,[[],["languagetag"]]],[11,"eq","","",142,[[["self"],["languagetag"]],["bool"]]],[11,"from_str","","",142,[[["str"]],["result",["languagetag","error"]]]],[11,"clone","","",142,[[["self"]],["languagetag"]]],[11,"fmt","","",142,[[["self"],["formatter"]],["result",["error"]]]],[11,"poll","actix_web::actix::actix::fut","",180,N],[11,"poll","","",181,N],[11,"poll","","",182,N],[11,"poll","","",183,N],[11,"poll","","",184,N],[11,"poll","","",185,N],[11,"stop","actix_web::actix::actix","Stop current actor. SyncContext creates and starts new actor.",186,N],[11,"terminate","","Terminate actor execution. SyncContext creates and starts new actor.",186,N],[11,"state","","Actor execution state",186,[[["self"]],["actorstate"]]],[11,"stop","","",187,N],[11,"terminate","","",187,N],[11,"state","","",187,[[["self"]],["actorstate"]]],[11,"poll","actix_web::actix::actix::fut","",188,N],[11,"poll","","",189,N],[11,"poll","","",190,N],[11,"poll","","",191,N],[11,"poll","","",114,N],[11,"poll","","",192,N],[11,"poll","","",193,N],[11,"poll","actix_web::actix::actix::actors::resolver","",194,[[["self"],["resolver"],["context"]],["result",["async"]]]],[11,"poll","actix_web::actix::actix::fut","",195,N],[11,"poll","","",196,N],[11,"poll","","",197,N],[11,"poll","","",198,N],[11,"poll","","",199,N],[11,"eq","actix_web::actix::actix","",200,[[["self"],["addr"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::signal","",106,[[["self"],["signaltype"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::resolver","",104,[[["self"],["connectaddr"]],["bool"]]],[11,"ne","","",104,[[["self"],["connectaddr"]],["bool"]]],[11,"eq","actix_web::actix::actix","",121,[[["self"],["running"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::resolver","",201,[[["self"],["connect"]],["bool"]]],[11,"ne","","",201,[[["self"],["connect"]],["bool"]]],[11,"eq","","",202,[[["self"],["resolve"]],["bool"]]],[11,"ne","","",202,[[["self"],["resolve"]],["bool"]]],[11,"eq","actix_web::actix::actix","",203,[[["self"],["spawnhandle"]],["bool"]]],[11,"ne","","",203,[[["self"],["spawnhandle"]],["bool"]]],[11,"eq","","",204,[[["self"],["recipient"]],["bool"]]],[11,"eq","","",118,[[["self"],["actorstate"]],["bool"]]],[11,"handle","","",205,[[["self"],["execute"],["context"]],["result"]]],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"handle","actix_web::actix::actix","",205,N],[11,"handle","actix_web::actix::actix::actors::signal","",207,N],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"handle","actix_web::actix::actix","",205,[[["self"],["startactor"],["context"]],["addr"]]],[11,"handle","actix_web::actix::actix::actors::signal","",208,N],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"hash","actix_web::actix::actix","",203,N],[11,"hash","","",204,N],[11,"hash","","",200,N],[11,"drop","","",205,N],[11,"from","actix_web::actix::actix::fut","",198,[[["result"]],["futureresult"]]],[11,"parts","actix_web::actix::actix","",187,[[["self"]],["contextparts"]]],[11,"spawn","","",187,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",187,N],[11,"waiting","","",187,[[["self"]],["bool"]]],[11,"cancel_future","","",187,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",187,[[["self"]],["addr"]]],[11,"service_started","actix_web::actix::actix::actors::signal","",208,N],[11,"clone","actix_web::actix::actix","",209,[[["self"]],["system"]]],[11,"clone","","",121,[[["self"]],["running"]]],[11,"clone","actix_web::actix::actix::actors::signal","",106,[[["self"]],["signaltype"]]],[11,"clone","actix_web::actix::actix","",118,[[["self"]],["actorstate"]]],[11,"clone","actix_web::actix::actix::dev","",210,[[["self"]],["registry"]]],[11,"clone","actix_web::actix::actix","",203,[[["self"]],["spawnhandle"]]],[11,"clone","","",200,[[["self"]],["addr"]]],[11,"clone","actix_web::actix::actix::dev","",211,[[["self"]],["systemregistry"]]],[11,"clone","actix_web::actix::actix","",204,[[["self"]],["recipient"]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",105,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",183,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",184,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",189,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",191,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",180,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",182,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::signal","",107,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",195,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",126,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::signal","",106,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",202,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",188,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",118,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",212,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",198,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",201,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",193,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",114,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",192,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",131,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",199,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",104,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",121,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",185,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",203,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",190,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","actix_web::actix::actix::actors::resolver","",206,[[],["resolver"]]],[11,"default","actix_web::actix::actix","",203,[[],["spawnhandle"]]],[11,"default","actix_web::actix::actix::actors::signal","",207,[[],["defaultsignalshandler"]]],[11,"default","actix_web::actix::actix","",213,[[],["condition"]]],[11,"default","actix_web::actix::actix::actors::signal","",208,[[],["processsignals"]]],[11,"default","actix_web::actix::actix::dev","",214,[[],["mailbox"]]],[11,"poll","actix_web::actix::actix","",215,[[["self"]],["result",["async"]]]],[11,"poll","","",216,[[["self"]],["result",["async"]]]],[11,"poll","actix_web::actix::actix::fut","",212,[[["self"]],["result",["async"]]]],[11,"handle","actix_web::actix::actix","",200,N],[11,"handle","","",117,N],[11,"handle","","",217,N],[11,"handle","","",218,N],[11,"fmt","","",126,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",105,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",131,[[["self"],["formatter"]],["result",["error"]]]],[11,"started","actix_web::actix::actix::actors::signal","",207,N],[11,"started","actix_web::actix::actix::actors::resolver","",206,N],[11,"cause","actix_web::actix::actix","",131,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",131,[[["self"]],["option",["backtrace"]]]],[11,"cause","actix_web::actix::actix::actors::resolver","",105,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",105,[[["self"]],["option",["backtrace"]]]],[11,"pack","actix_web::actix::actix","",186,[[["m"],["option",["sender"]]],["envelope"]]],[11,"pack","","",187,[[["m"],["option",["sender"]]],["envelope"]]],[11,"key","actix_web::http::header","Returns a reference to the entry's key.",178,[[["self"]],["headername"]]],[11,"get","","Get a reference to the first value in the entry.",178,[[["self"]],["t"]]],[11,"get_mut","","Get a mutable reference to the first value in the entry.",178,[[["self"]],["t"]]],[11,"into_mut","","Converts the `OccupiedEntry` into a mutable reference to the first value.",178,[[["self"]],["t"]]],[11,"insert","","Sets the value of the entry.",178,[[["self"],["t"]],["t"]]],[11,"insert_mult","","Sets the value of the entry.",178,[[["self"],["t"]],["valuedrain"]]],[11,"append","","Insert the value into the entry.",178,N],[11,"remove","","Remove the entry from the map.",178,[[["self"]],["t"]]],[11,"remove_entry","","Remove the entry from the map.",178,N],[11,"remove_entry_mult","","Remove the entry from the map.",178,N],[11,"iter","","Returns an iterator visiting all values associated with the entry.",178,[[["self"]],["valueiter"]]],[11,"iter_mut","","Returns an iterator mutably visiting all values associated with the entry.",178,[[["self"]],["valueitermut"]]],[11,"from_static","","Convert a static string to a `HeaderValue`.",163,[[["str"]],["headervalue"]]],[11,"from_str","","Attempt to convert a string to a `HeaderValue`.",163,[[["str"]],["result",["headervalue","invalidheadervalue"]]]],[11,"from_name","","Converts a HeaderName into a HeaderValue",163,[[["headername"]],["headervalue"]]],[11,"from_bytes","","Attempt to convert a byte slice to a `HeaderValue`.",163,N],[11,"from_shared","","Attempt to convert a `Bytes` buffer to a `HeaderValue`.",163,[[["bytes"]],["result",["headervalue","invalidheadervaluebytes"]]]],[11,"from_shared_unchecked","","Convert a `Bytes` directly into a `HeaderValue` without validating.",163,[[["bytes"]],["headervalue"]]],[11,"to_str","","Yields a `&str` slice if the `HeaderValue` only contains visible ASCII chars.",163,[[["self"]],["result",["str","tostrerror"]]]],[11,"len","","Returns the length of `self`.",163,[[["self"]],["usize"]]],[11,"is_empty","","Returns true if the `HeaderValue` has a length of zero bytes.",163,[[["self"]],["bool"]]],[11,"as_bytes","","Converts a `HeaderValue` to a byte slice.",163,N],[11,"set_sensitive","","Mark that the header value represents sensitive information.",163,N],[11,"is_sensitive","","Returns `true` if the value represents sensitive data.",163,[[["self"]],["bool"]]],[11,"or_insert","","Ensures a value is in the entry by inserting the default if empty.",141,[[["self"],["t"]],["t"]]],[11,"or_insert_with","","Ensures a value is in the entry by inserting the result of the default function if empty.",141,[[["self"],["f"]],["t"]]],[11,"key","","Returns a reference to the entry's key",141,[[["self"]],["headername"]]],[11,"key","","Returns a reference to the entry's key",179,[[["self"]],["headername"]]],[11,"into_key","","Take ownership of the key",179,[[["self"]],["headername"]]],[11,"insert","","Insert the value into the entry.",179,[[["self"],["t"]],["t"]]],[11,"insert_entry","","Insert the value into the entry.",179,[[["self"],["t"]],["occupiedentry"]]],[11,"iter","","Returns an iterator visiting all values associated with the entry.",164,[[["self"]],["valueiter"]]],[11,"new","","Create an empty `HeaderMap`.",161,[[],["headermap",["headervalue"]]]],[11,"with_capacity","","Create an empty `HeaderMap` with the specified capacity.",161,[[["usize"]],["headermap"]]],[11,"len","","Returns the number of headers stored in the map.",161,[[["self"]],["usize"]]],[11,"keys_len","","Returns the number of keys stored in the map.",161,[[["self"]],["usize"]]],[11,"is_empty","","Returns true if the map contains no elements.",161,[[["self"]],["bool"]]],[11,"clear","","Clears the map, removing all key-value pairs. Keeps the allocated memory for reuse.",161,N],[11,"capacity","","Returns the number of headers the map can hold without reallocating.",161,[[["self"]],["usize"]]],[11,"reserve","","Reserves capacity for at least `additional` more headers to be inserted into the `HeaderMap`.",161,N],[11,"get","","Returns a reference to the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"get_mut","","Returns a mutable reference to the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"get_all","","Returns a view of all values associated with a key.",161,[[["self"],["k"]],["getall"]]],[11,"contains_key","","Returns true if the map contains a value for the specified key.",161,[[["self"],["k"]],["bool"]]],[11,"iter","","An iterator visiting all key-value pairs.",161,[[["self"]],["iter"]]],[11,"iter_mut","","An iterator visiting all key-value pairs, with mutable value references.",161,[[["self"]],["itermut"]]],[11,"keys","","An iterator visiting all keys.",161,[[["self"]],["keys"]]],[11,"values","","An iterator visiting all values.",161,[[["self"]],["values"]]],[11,"values_mut","","An iterator visiting all values mutably.",161,[[["self"]],["valuesmut"]]],[11,"drain","","Clears the map, returning all entries as an iterator.",161,[[["self"]],["drain"]]],[11,"entry","","Gets the given key's corresponding entry in the map for in-place manipulation.",161,[[["self"],["k"]],["result",["entry","invalidheadername"]]]],[11,"insert","","Inserts a key-value pair into the map.",161,[[["self"],["k"],["t"]],["option"]]],[11,"append","","Inserts a key-value pair into the map.",161,[[["self"],["k"],["t"]],["bool"]]],[11,"remove","","Removes a key from the map, returning the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"clone","","",145,[[["self"]],["dispositiontype"]]],[11,"fmt","","",145,[[["self"],["formatter"]],["result"]]],[11,"eq","","",145,[[["self"],["dispositiontype"]],["bool"]]],[11,"ne","","",145,[[["self"],["dispositiontype"]],["bool"]]],[11,"clone","","",146,[[["self"]],["dispositionparam"]]],[11,"fmt","","",146,[[["self"],["formatter"]],["result"]]],[11,"eq","","",146,[[["self"],["dispositionparam"]],["bool"]]],[11,"ne","","",146,[[["self"],["dispositionparam"]],["bool"]]],[11,"clone","","",144,[[["self"]],["contentdisposition"]]],[11,"fmt","","",144,[[["self"],["formatter"]],["result"]]],[11,"eq","","",144,[[["self"],["contentdisposition"]],["bool"]]],[11,"ne","","",144,[[["self"],["contentdisposition"]],["bool"]]],[11,"from_raw","","Parse a raw Content-Disposition header value",144,[[["headervalue"]],["result",["parseerror"]]]],[11,"fmt","","",144,[[["self"],["formatter"]],["result"]]],[11,"matches","","Matches language tags. The first language acts as a language range, the second one is used as a normal language tag. None fields in the language range are ignored. If the language tag has more extlangs than the range these extlangs are ignored. Matches are case-insensitive. `*` in language ranges are represented using `None` values. The language range `*` that matches language tags is created by the default language tag: `let wildcard: LanguageTag = Default::default();.`",142,[[["self"],["languagetag"]],["bool"]]],[11,"is_language_range","","Checks if it is a language range, meaning that there are no extension and privateuse tags.",142,[[["self"]],["bool"]]],[11,"canonicalize","","Returns the canonical version of the language tag.",142,[[["self"]],["languagetag"]]],[11,"clone","","",147,[[["self"]],["charset"]]],[11,"fmt","","",147,[[["self"],["formatter"]],["result"]]],[11,"eq","","",147,[[["self"],["charset"]],["bool"]]],[11,"ne","","",147,[[["self"],["charset"]],["bool"]]],[11,"fmt","","",147,[[["self"],["formatter"]],["result"]]],[11,"from_str","","",147,[[["str"]],["result",["charset"]]]],[11,"clone","actix_web::http","",139,[[["self"]],["contentencoding"]]],[11,"eq","","",139,[[["self"],["contentencoding"]],["bool"]]],[11,"fmt","","",139,[[["self"],["formatter"]],["result"]]],[11,"is_compression","","Is the content compressed?",139,[[["self"]],["bool"]]],[11,"as_str","","Convert content encoding to string",139,[[["self"]],["str"]]],[11,"quality","","default quality value",139,[[["self"]],["f64"]]],[11,"from","","",139,[[["str"]],["contentencoding"]]],[11,"clone","actix_web::http::header","",143,[[["self"]],["extendedvalue"]]],[11,"fmt","","",143,[[["self"],["formatter"]],["result"]]],[11,"eq","","",143,[[["self"],["extendedvalue"]],["bool"]]],[11,"ne","","",143,[[["self"],["extendedvalue"]],["bool"]]],[11,"fmt","","",143,[[["self"],["formatter"]],["result"]]],[11,"default","actix_web::http","Create default `NormalizePath` instance, append is set to true, merge is set to true and redirect is set to `StatusCode::MOVED_PERMANENTLY`",219,[[],["normalizepath"]]],[11,"new","","Create new `NormalizePath` instance",219,[[["bool"],["bool"],["statuscode"]],["normalizepath"]]],[11,"handle","","",219,N],[11,"content_type","actix_web","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,[[["self"]],["str"]]],[11,"encoding","","Get content type encoding",151,[[["self"]],["result",["encodingref","contenttypeerror"]]]],[11,"mime_type","","Convert the request content type to a known mime type.",151,[[["self"]],["result",["option","contenttypeerror"]]]],[11,"chunked","","Check if request has chunked transfer encoding",151,[[["self"]],["result",["bool","parseerror"]]]],[11,"body","","Load http message body.",151,[[["self"]],["messagebody"]]],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,[[["self"]],["urlencoded"]]],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,[[["self"]],["jsonbody"]]],[11,"multipart","","Return stream to http payload processes as multipart.",151,[[["self"]],["multipart"]]],[11,"readlines","","Return stream of lines.",151,[[["self"]],["readlines"]]],[11,"new","actix_web::dev","Create `MessageBody` for request.",220,[[["t"]],["messagebody"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",220,[[["self"],["usize"]],["self"]]],[11,"poll","","",220,[[["self"]],["poll"]]],[11,"new","","Create a new future to URL encode a request",221,[[["t"]],["urlencoded"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",221,[[["self"],["usize"]],["self"]]],[11,"poll","","",221,[[["self"]],["poll"]]],[11,"clone","actix_web::http","",140,[[["self"]],["connectiontype"]]],[11,"eq","","",140,[[["self"],["connectiontype"]],["bool"]]],[11,"fmt","","",140,[[["self"],["formatter"]],["result"]]],[11,"status","actix_web::dev","Set HTTP status code of this response.",222,[[["self"],["statuscode"]],["self"]]],[11,"version","","Set HTTP version of this response.",222,[[["self"],["version"]],["self"]]],[11,"header","","Set a header.",222,[[["self"],["k"],["v"]],["self"]]],[11,"reason","","Set the custom reason for the response.",222,[[["self"],["str"]],["self"]]],[11,"content_encoding","","Set content encoding.",222,[[["self"],["contentencoding"]],["self"]]],[11,"force_close","","Force close connection, even if it is marked as keep-alive",222,[[["self"]],["self"]]],[11,"chunked","","Enables automatic chunked transfer encoding",222,[[["self"]],["self"]]],[11,"no_chunking","","Force disable chunked encoding",222,[[["self"]],["self"]]],[11,"content_type","","Set response content type",222,[[["self"],["v"]],["self"]]],[11,"content_length","","Set content length",222,[[["self"],["u64"]],["self"]]],[11,"cookie","","Set a cookie",222,[[["self"],["cookie"]],["self"]]],[11,"del_cookie","","Remove cookie",222,[[["self"],["cookie"]],["self"]]],[11,"if_true","","This method calls provided closure with builder reference if value is true.",222,[[["self"],["bool"],["f"]],["self"]]],[11,"if_some","","This method calls provided closure with builder reference if value is Some.",222,[[["self"],["option"],["f"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",222,[[["self"],["usize"]],["self"]]],[11,"body","","Set a body and generate `HttpResponse`.",222,[[["self"],["b"]],["httpresponse"]]],[11,"streaming","","Set a streaming body and generate `HttpResponse`.",222,[[["self"],["s"]],["httpresponse"]]],[11,"json","","Set a json body and generate `HttpResponse`",222,[[["self"],["t"]],["httpresponse"]]],[11,"finish","","Set an empty body and generate `HttpResponse`",222,[[["self"]],["httpresponse"]]],[11,"take","","This method construct new `HttpResponseBuilder`",222,[[["self"]],["httpresponsebuilder"]]],[11,"respond_to","","",222,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"from","","",222,[[["clientresponse"]],["httpresponsebuilder"]]],[11,"from","","",222,[[["httprequest"]],["httpresponsebuilder"]]],[11,"clone","","",223,[[["self"]],["connectioninfo"]]],[11,"default","","",223,[[],["connectioninfo"]]],[11,"update","","Create ConnectionInfo instance for a request.",223,[[["self"],["request"]]]],[11,"scheme","","Scheme of the request.",223,[[["self"]],["str"]]],[11,"host","","Hostname of the request.",223,[[["self"]],["str"]]],[11,"remote","","Remote IP of client initiated HTTP request.",223,[[["self"]],["option",["str"]]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",224,[[["self"],["usize"]],["self"]]],[11,"error_handler","","Set custom error handler",224,[[["self"],["f"]],["self"]]],[11,"default","","",224,[[],["self"]]],[11,"new","","Create `JsonBody` for request.",225,[[["t"]],["self"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",225,[[["self"],["usize"]],["self"]]],[11,"poll","","",225,[[["self"]],["poll",["jsonpayloaderror"]]]],[11,"fmt","","",226,[[["self"],["formatter"]],["result"]]],[11,"clone","","",226,[[["self"]],["params"]]],[11,"is_empty","","Check if there are any matched patterns",226,[[["self"]],["bool"]]],[11,"len","","Check number of extracted parameters",226,[[["self"]],["usize"]]],[11,"get","","Get matched parameter by name without type conversion",226,[[["self"],["str"]],["option",["str"]]]],[11,"unprocessed","","Get unprocessed part of path",226,[[["self"]],["str"]]],[11,"query","","Get matched `FromParam` compatible parameter by name.",226,[[["self"],["str"]],["result"]]],[11,"iter","","Return iterator to items in parameter container",226,[[["self"]],["paramsiter"]]],[11,"index","","",226,[[["self"],["str"]],["str"]]],[11,"index","","",226,[[["self"],["usize"]],["str"]]],[11,"fmt","","",227,[[["self"],["formatter"]],["result"]]],[11,"new","","Create payload stream.",227,N],[11,"unread_data","","Put unused data back to payload",227,[[["self"],["bytes"]]]],[11,"set_read_buffer_capacity","","Set read buffer capacity",227,[[["self"],["usize"]]]],[11,"poll","","",227,[[["self"]],["poll",["option","payloaderror"]]]],[11,"clone","","",227,[[["self"]],["payload"]]],[11,"new","","Create new `PayloadBuffer` instance",228,[[["s"]],["self"]]],[11,"get_mut","","Get mutable reference to an inner stream.",228,[[["self"]],["s"]]],[11,"readany","","Read first available chunk of bytes",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"can_read","","Check if buffer contains enough bytes",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"get_chunk","","Return reference to the first chunk of data",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"read_exact","","Read exact number of bytes",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"drop_bytes","","Remove specified amount if bytes from buffer",228,[[["self"],["usize"]]]],[11,"copy","","Copy buffered data",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"read_until","","Read until specified ending",228,N],[11,"readline","","Read bytes until new line delimiter",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"unprocessed","","Put unprocessed data back to the buffer",228,[[["self"],["bytes"]]]],[11,"remaining","","Get remaining data from the buffer",228,[[["self"]],["bytes"]]],[11,"new","","Create new resource with specified resource definition",229,[[["resourcedef"]],["self"]]],[11,"name","","Set resource name",229,[[["self"],["str"]]]],[11,"rdef","","Resource definition",229,[[["self"]],["resourcedef"]]],[11,"route","","Register a new route and return mutable reference to Route object. Route is used for route configuration, i.e. adding predicates, setting up handler.",229,[[["self"]],["route"]]],[11,"get","","Register a new `GET` route.",229,[[["self"]],["route"]]],[11,"post","","Register a new `POST` route.",229,[[["self"]],["route"]]],[11,"put","","Register a new `PUT` route.",229,[[["self"]],["route"]]],[11,"delete","","Register a new `DELETE` route.",229,[[["self"]],["route"]]],[11,"head","","Register a new `HEAD` route.",229,[[["self"]],["route"]]],[11,"method","","Register a new route and add method check to route.",229,[[["self"],["method"]],["route"]]],[11,"h","","Register a new route and add handler object.",229,[[["self"],["h"]]]],[11,"f","","Register a new route and add handler function.",229,[[["self"],["f"]]]],[11,"with","","Register a new route and add handler.",229,[[["self"],["f"]]]],[11,"with_async","","Register a new route and add async handler.",229,[[["self"],["f"]]]],[11,"middleware","","Register a resource middleware",229,[[["self"],["m"]]]],[11,"default","","",230,[[],["route"]]],[11,"filter","","Add match predicate to route.",230,[[["self"],["t"]],["self"]]],[11,"h","","Set handler object. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,[[["self"],["h"]]]],[11,"f","","Set handler function. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,[[["self"],["f"]]]],[11,"a","","Set async handler function.",230,[[["self"],["h"]]]],[11,"with","","Set handler function, use request extractor for parameters.",230,[[["self"],["f"]]]],[11,"with_config","","Set handler function. Same as `.with()` but it allows to configure extractor.",230,[[["self"],["f"],["c"]]]],[11,"with_async","","Set async handler function, use request extractor for parameters. Also this method needs to be used if your handler function returns `impl Future<>`",230,[[["self"],["f"]]]],[11,"with_async_config","","Set async handler function, use request extractor for parameters. This method allows to configure extractor.",230,[[["self"],["f"],["c"]]]],[11,"clone","","",231,[[["self"]],["resourceinfo"]]],[11,"name","","Name os the resource",231,[[["self"]],["str"]]],[11,"rdef","","This method returns reference to matched `ResourceDef` object.",231,[[["self"]],["option",["resourcedef"]]]],[11,"match_info","","Get a reference to the Params object.",231,[[["self"]],["params"]]],[11,"url_for","","Generate url for named resource",231,[[["self"],["request"],["str"],["u"]],["result",["url","urlgenerationerror"]]]],[11,"has_resource","","Check if application contains matching resource.",231,[[["self"],["str"]],["bool"]]],[11,"has_prefixed_resource","","Check if application contains matching resource.",231,[[["self"],["str"]],["bool"]]],[11,"default","","",232,[[],["self"]]],[11,"handle","","Handle request",232,[[["self"],["httprequest"]],["asyncresult",["httpresponse"]]]],[11,"recognize","","Query for matched resource",232,[[["self"],["request"],["s"],["usize"]],["resourceinfo"]]],[11,"fmt","","",136,[[["self"],["formatter"]],["result"]]],[11,"clone","","",136,[[["self"]],["resourcetype"]]],[11,"eq","","",136,[[["self"],["resourcetype"]],["bool"]]],[11,"clone","","",233,[[["self"]],["resourcedef"]]],[11,"fmt","","",233,[[["self"],["formatter"]],["result"]]],[11,"new","","Parse path pattern and create new `Resource` instance.",233,[[["str"]],["self"]]],[11,"prefix","","Parse path pattern and create new `Resource` instance.",233,[[["str"]],["self"]]],[11,"external","","Construct external resource",233,[[["str"]],["self"]]],[11,"with_prefix","","Parse path pattern and create new `Resource` instance with custom prefix",233,[[["str"],["str"],["bool"]],["self"]]],[11,"rtype","","Resource type",233,[[["self"]],["resourcetype"]]],[11,"name","","Resource name",233,[[["self"]],["str"]]],[11,"pattern","","Path pattern of the resource",233,[[["self"]],["str"]]],[11,"is_match","","Is this path a match against this resource?",233,[[["self"],["str"]],["bool"]]],[11,"match_with_params","","Are the given path and parameters a match against this resource?",233,[[["self"],["request"],["usize"]],["option",["params"]]]],[11,"match_prefix_with_params","","Is the given path a prefix match and do the parameters match against this resource?",233,[[["self"],["request"],["usize"]],["option",["params"]]]],[11,"resource_path","","Build resource path.",233,[[["self"],["u"],["str"]],["result",["string","urlgenerationerror"]]]],[11,"eq","","",233,[[["self"],["resourcedef"]],["bool"]]],[11,"hash","","",233,[[["self"],["h"]]]],[11,"as_str","actix_web::error","Returns a description of this error as a string",26,[[["self"]],["str"]]],[11,"error_response","actix_web::http::header","",173,[[["self"]],["httpresponse"]]],[11,"error_response","","",175,[[["self"]],["httpresponse"]]],[11,"host","actix_web::actix::actix::actors::resolver","",202,[[["t"]],["resolve"]]],[11,"host_and_port","","",202,[[["t"],["u16"]],["resolve"]]],[11,"host","","",201,[[["t"]],["connect"]]],[11,"host_and_port","","",201,[[["t"],["u16"]],["connect"]]],[11,"timeout","","Set connect timeout",201,[[["self"],["duration"]],["connect"]]],[11,"new","","",206,[[["resolverconfig"],["resolveropts"]],["resolver"]]],[11,"new","","",194,[[["vecdeque",["socketaddr"]]],["tcpconnector"]]],[11,"with_timeout","","",194,[[["vecdeque",["socketaddr"]],["duration"]],["tcpconnector"]]],[11,"split","actix_web::actix::actix::fut","Splits out the homogeneous type from an either of tuples.",114,N],[11,"new","","",212,[[["s"]],["finish"]]],[11,"new","actix_web::actix::actix::msgs","",234,[[["f"]],["startactor"]]],[11,"new","","",235,[[["f"]],["execute"]]],[11,"exec","","Execute enclosed function",235,[[["self"]],["result"]]],[11,"alive","actix_web::actix::actix","Indicates if actor is alive",118,[[["self"]],["bool"]]],[11,"stopping","","Indicates if actor is stopped of stopping",118,[[["self"]],["bool"]]],[11,"do_send","","Send message",204,[[["self"],["m"]],["result",["senderror"]]]],[11,"try_send","","Try send message",204,[[["self"],["m"]],["result",["senderror"]]]],[11,"send","","Send message and asynchronously wait for response.",204,[[["self"],["m"]],["recipientrequest"]]],[11,"new","","Create new system.",209,[[["t"]],["systemrunner"]]],[11,"current","","Get current running system.",209,[[],["system"]]],[11,"with_current","","Execute function with system reference.",209,[[["f"]],["r"]]],[11,"stop","","Stop the system",209,N],[11,"arbiter","","System arbiter",209,[[["self"]],["addr"]]],[11,"registry","","Get current system registry.",209,[[["self"]],["systemregistry"]]],[11,"run","","This function will start tokio runtime and will finish once the `System::stop()` message get called. Function `f` get called within tokio runtime context.",209,[[["f"]],["i32"]]],[11,"new","actix_web::actix::actix::io","",236,[[["t"],["c"]],["writer"]]],[11,"close","","Gracefully close sink",236,N],[11,"closed","","Check if sink is closed",236,[[["self"]],["bool"]]],[11,"set_buffer_capacity","","Set write buffer capacity",236,N],[11,"write","","Send item to a sink.",236,N],[11,"handle","","`SpawnHandle` for this writer",236,[[["self"]],["spawnhandle"]]],[11,"new","","",237,[[["t"],["u"],["c"]],["framedwrite"]]],[11,"from_buffer","","",237,[[["t"],["u"],["bytesmut"],["c"]],["framedwrite"]]],[11,"close","","Gracefully close sink",237,N],[11,"closed","","Check if sink is closed",237,[[["self"]],["bool"]]],[11,"set_buffer_capacity","","Set write buffer capacity",237,N],[11,"write","","Write item",237,N],[11,"handle","","`SpawnHandle` for this writer",237,[[["self"]],["spawnhandle"]]],[11,"wait","actix_web::actix::actix","",213,[[["self"]],["receiver"]]],[11,"set","","",213,N],[11,"next","","Get next handle",203,[[["self"]],["spawnhandle"]]],[11,"new","","",215,[[["option",["receiver"]],["option"]],["recipientrequest"]]],[11,"timeout","","Set message delivery timeout",215,[[["self"],["duration"]],["recipientrequest"]]],[11,"into_inner","","",126,[[["self"]],["t"]]],[11,"with_receiver","","",187,[[["addressreceiver"]],["context"]]],[11,"run","","",187,[[["self"],["a"]],["addr"]]],[11,"into_future","","",187,[[["self"],["a"]],["contextfut",["context"]]]],[11,"handle","","Handle of the running future",187,[[["self"]],["spawnhandle"]]],[11,"set_mailbox_capacity","","Set mailbox capacity",187,N],[11,"reply","","Create response",217,[[["result"]],["actorresponse"]]],[11,"async","","Create async response",217,[[["t"]],["actorresponse"]]],[11,"start","","Start new supervised actor in current tokio runtime.",238,[[["f"]],["addr"]]],[11,"start_in_arbiter","","Start new supervised actor in arbiter's thread.",238,[[["addr"],["f"]],["addr"]]],[11,"timeout","","Set message delivery timeout",216,[[["self"],["duration"]],["request"]]],[11,"async","","Create async response",218,[[["t"]],["response"]]],[11,"reply","","Create response",218,[[["result"]],["response"]]],[11,"start","","Start new sync arbiter with specified number of worker threads. Returns address of the started actor.",239,[[["usize"],["f"]],["addr"]]],[11,"builder","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",205,[[],["builder"]]],[11,"new","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",205,[[["t"]],["addr",["arbiter"]]]],[11,"name","","Returns current arbiter's name",205,[[],["string"]]],[11,"current","","Returns current arbiter's address",205,[[],["addr",["arbiter"]]]],[11,"registry","","This function returns arbiter's registry,",205,[[],["registry"]]],[11,"spawn","","Executes a future on the current thread.",205,N],[11,"spawn_fn","","Executes a future on the current thread.",205,N],[11,"start","","Start new arbiter and then start actor in created arbiter. Returns `Addr` of created actor.",205,[[["f"]],["addr"]]],[11,"new","","",200,[[["addresssender"]],["addr"]]],[11,"connected","","Indicates if actor is still alive",200,[[["self"]],["bool"]]],[11,"do_send","","Send message unconditionally",200,N],[11,"try_send","","Try send message",200,[[["self"],["m"]],["result",["senderror"]]]],[11,"send","","Send asynchronous message and wait for response.",200,[[["self"],["m"]],["request"]]],[11,"recipient","","Get `Recipient` for specific message type",200,[[["self"]],["recipient"]]],[11,"get","actix_web::actix::actix::dev","Return address of the service. If service actor is not running it get started in the system.",211,[[["self"]],["addr"]]],[11,"set","","Add new actor to the registry by address, panic if actor is already running",211,N],[11,"new","","",240,[[["m"],["option",["sender"]]],["envelope"]]],[11,"with_proxy","","",240,[[["box",["envelopeproxy"]]],["envelope"]]],[11,"new","","Create new ContextParts instance",241,[[["addresssenderproducer"]],["contextparts"]]],[11,"stop","","Initiate stop process for actor execution",241,N],[11,"terminate","","Terminate actor execution",241,N],[11,"state","","Actor execution state",241,[[["self"]],["actorstate"]]],[11,"waiting","","Is context waiting for future completion",241,[[["self"]],["bool"]]],[11,"curr_handle","","Handle of the running future",241,[[["self"]],["spawnhandle"]]],[11,"spawn","","Spawn new future to this context.",241,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","Spawn new future to this context and wait future completion.",241,N],[11,"cancel_future","","Cancel previously scheduled future.",241,[[["self"],["spawnhandle"]],["bool"]]],[11,"capacity","","",241,[[["self"]],["usize"]]],[11,"set_mailbox_capacity","","",241,N],[11,"address","","",241,[[["self"]],["addr"]]],[11,"started","","",241,[[["self"]],["bool"]]],[11,"get","","Query registry for specific actor. Returns address of the actor. If actor is not registered, starts new actor and return address of newly created actor.",210,[[["self"]],["addr"]]],[11,"set","","Add new actor to the registry by address, panic if actor is already running",210,N],[11,"new","","",242,[[["c"],["a"],["mailbox"]],["contextfut"]]],[11,"ctx","","",242,[[["self"]],["c"]]],[11,"address","","",242,[[["self"]],["addr"]]],[11,"alive","","",242,[[["self"]],["bool"]]],[11,"new","","",214,[[["addressreceiver"]],["mailbox"]]],[11,"capacity","","",214,[[["self"]],["usize"]]],[11,"set_capacity","","",214,N],[11,"connected","","",214,[[["self"]],["bool"]]],[11,"address","","",214,[[["self"]],["addr"]]],[11,"sender_producer","","",214,[[["self"]],["addresssenderproducer"]]],[11,"poll","","",214,N],[18,"GET","actix_web::http","GET",160,N],[18,"POST","","POST",160,N],[18,"PUT","","PUT",160,N],[18,"DELETE","","DELETE",160,N],[18,"HEAD","","HEAD",160,N],[18,"OPTIONS","","OPTIONS",160,N],[18,"CONNECT","","CONNECT",160,N],[18,"PATCH","","PATCH",160,N],[18,"TRACE","","TRACE",160,N],[11,"from_bytes","","Converts a slice of bytes to an HTTP method.",160,N],[11,"is_safe","","Whether a method is considered \"safe\", meaning the request is essentially read-only.",160,[[["self"]],["bool"]]],[11,"is_idempotent","","Whether a method is considered \"idempotent\", meaning the request has the same result if executed multiple times.",160,[[["self"]],["bool"]]],[11,"as_str","","Return a &str representation of the HTTP method",160,[[["self"]],["str"]]],[11,"from_u16","","Converts a u16 to a status code.",159,[[["u16"]],["result",["statuscode","invalidstatuscode"]]]],[11,"from_bytes","","Converts a &[u8] to a status code",159,N],[11,"as_u16","","Returns the `u16` corresponding to this `StatusCode`.",159,[[["self"]],["u16"]]],[11,"as_str","","Returns a &str representation of the `StatusCode`",159,[[["self"]],["str"]]],[11,"canonical_reason","","Get the standardised `reason-phrase` for this status code.",159,[[["self"]],["option",["str"]]]],[11,"is_informational","","Check if status is within 100-199.",159,[[["self"]],["bool"]]],[11,"is_success","","Check if status is within 200-299.",159,[[["self"]],["bool"]]],[11,"is_redirection","","Check if status is within 300-399.",159,[[["self"]],["bool"]]],[11,"is_client_error","","Check if status is within 400-499.",159,[[["self"]],["bool"]]],[11,"is_server_error","","Check if status is within 500-599.",159,[[["self"]],["bool"]]],[18,"CONTINUE","","100 Continue [RFC7231, Section 6.2.1]",159,N],[18,"SWITCHING_PROTOCOLS","","101 Switching Protocols [RFC7231, Section 6.2.2]",159,N],[18,"PROCESSING","","102 Processing [RFC2518]",159,N],[18,"OK","","200 OK [RFC7231, Section 6.3.1]",159,N],[18,"CREATED","","201 Created [RFC7231, Section 6.3.2]",159,N],[18,"ACCEPTED","","202 Accepted [RFC7231, Section 6.3.3]",159,N],[18,"NON_AUTHORITATIVE_INFORMATION","","203 Non-Authoritative Information [RFC7231, Section 6.3.4]",159,N],[18,"NO_CONTENT","","204 No Content [RFC7231, Section 6.3.5]",159,N],[18,"RESET_CONTENT","","205 Reset Content [RFC7231, Section 6.3.6]",159,N],[18,"PARTIAL_CONTENT","","206 Partial Content [RFC7233, Section 4.1]",159,N],[18,"MULTI_STATUS","","207 Multi-Status [RFC4918]",159,N],[18,"ALREADY_REPORTED","","208 Already Reported [RFC5842]",159,N],[18,"IM_USED","","226 IM Used [RFC3229]",159,N],[18,"MULTIPLE_CHOICES","","300 Multiple Choices [RFC7231, Section 6.4.1]",159,N],[18,"MOVED_PERMANENTLY","","301 Moved Permanently [RFC7231, Section 6.4.2]",159,N],[18,"FOUND","","302 Found [RFC7231, Section 6.4.3]",159,N],[18,"SEE_OTHER","","303 See Other [RFC7231, Section 6.4.4]",159,N],[18,"NOT_MODIFIED","","304 Not Modified [RFC7232, Section 4.1]",159,N],[18,"USE_PROXY","","305 Use Proxy [RFC7231, Section 6.4.5]",159,N],[18,"TEMPORARY_REDIRECT","","307 Temporary Redirect [RFC7231, Section 6.4.7]",159,N],[18,"PERMANENT_REDIRECT","","308 Permanent Redirect [RFC7238]",159,N],[18,"BAD_REQUEST","","400 Bad Request [RFC7231, Section 6.5.1]",159,N],[18,"UNAUTHORIZED","","401 Unauthorized [RFC7235, Section 3.1]",159,N],[18,"PAYMENT_REQUIRED","","402 Payment Required [RFC7231, Section 6.5.2]",159,N],[18,"FORBIDDEN","","403 Forbidden [RFC7231, Section 6.5.3]",159,N],[18,"NOT_FOUND","","404 Not Found [RFC7231, Section 6.5.4]",159,N],[18,"METHOD_NOT_ALLOWED","","405 Method Not Allowed [RFC7231, Section 6.5.5]",159,N],[18,"NOT_ACCEPTABLE","","406 Not Acceptable [RFC7231, Section 6.5.6]",159,N],[18,"PROXY_AUTHENTICATION_REQUIRED","","407 Proxy Authentication Required [RFC7235, Section 3.2]",159,N],[18,"REQUEST_TIMEOUT","","408 Request Timeout [RFC7231, Section 6.5.7]",159,N],[18,"CONFLICT","","409 Conflict [RFC7231, Section 6.5.8]",159,N],[18,"GONE","","410 Gone [RFC7231, Section 6.5.9]",159,N],[18,"LENGTH_REQUIRED","","411 Length Required [RFC7231, Section 6.5.10]",159,N],[18,"PRECONDITION_FAILED","","412 Precondition Failed [RFC7232, Section 4.2]",159,N],[18,"PAYLOAD_TOO_LARGE","","413 Payload Too Large [RFC7231, Section 6.5.11]",159,N],[18,"URI_TOO_LONG","","414 URI Too Long [RFC7231, Section 6.5.12]",159,N],[18,"UNSUPPORTED_MEDIA_TYPE","","415 Unsupported Media Type [RFC7231, Section 6.5.13]",159,N],[18,"RANGE_NOT_SATISFIABLE","","416 Range Not Satisfiable [RFC7233, Section 4.4]",159,N],[18,"EXPECTATION_FAILED","","417 Expectation Failed [RFC7231, Section 6.5.14]",159,N],[18,"IM_A_TEAPOT","","418 I'm a teapot [curiously not registered by IANA but RFC2324]",159,N],[18,"MISDIRECTED_REQUEST","","421 Misdirected Request RFC7540, Section 9.1.2",159,N],[18,"UNPROCESSABLE_ENTITY","","422 Unprocessable Entity [RFC4918]",159,N],[18,"LOCKED","","423 Locked [RFC4918]",159,N],[18,"FAILED_DEPENDENCY","","424 Failed Dependency [RFC4918]",159,N],[18,"UPGRADE_REQUIRED","","426 Upgrade Required [RFC7231, Section 6.5.15]",159,N],[18,"PRECONDITION_REQUIRED","","428 Precondition Required [RFC6585]",159,N],[18,"TOO_MANY_REQUESTS","","429 Too Many Requests [RFC6585]",159,N],[18,"REQUEST_HEADER_FIELDS_TOO_LARGE","","431 Request Header Fields Too Large [RFC6585]",159,N],[18,"UNAVAILABLE_FOR_LEGAL_REASONS","","451 Unavailable For Legal Reasons [RFC7725]",159,N],[18,"INTERNAL_SERVER_ERROR","","500 Internal Server Error [RFC7231, Section 6.6.1]",159,N],[18,"NOT_IMPLEMENTED","","501 Not Implemented [RFC7231, Section 6.6.2]",159,N],[18,"BAD_GATEWAY","","502 Bad Gateway [RFC7231, Section 6.6.3]",159,N],[18,"SERVICE_UNAVAILABLE","","503 Service Unavailable [RFC7231, Section 6.6.4]",159,N],[18,"GATEWAY_TIMEOUT","","504 Gateway Timeout [RFC7231, Section 6.6.5]",159,N],[18,"HTTP_VERSION_NOT_SUPPORTED","","505 HTTP Version Not Supported [RFC7231, Section 6.6.6]",159,N],[18,"VARIANT_ALSO_NEGOTIATES","","506 Variant Also Negotiates [RFC2295]",159,N],[18,"INSUFFICIENT_STORAGE","","507 Insufficient Storage [RFC4918]",159,N],[18,"LOOP_DETECTED","","508 Loop Detected [RFC5842]",159,N],[18,"NOT_EXTENDED","","510 Not Extended [RFC2774]",159,N],[18,"NETWORK_AUTHENTICATION_REQUIRED","","511 Network Authentication Required [RFC6585]",159,N],[18,"HTTP_09","","`HTTP/0.9`",162,N],[18,"HTTP_10","","`HTTP/1.0`",162,N],[18,"HTTP_11","","`HTTP/1.1`",162,N],[18,"HTTP_2","","`HTTP/2.0`",162,N],[11,"new","","Creates a new `Cookie` with the given name and value.",157,[[["n"],["v"]],["cookie"]]],[11,"named","","Creates a new `Cookie` with the given name and an empty value.",157,[[["n"]],["cookie"]]],[11,"build","","Creates a new `CookieBuilder` instance from the given key and value strings.",157,[[["n"],["v"]],["cookiebuilder"]]],[11,"parse","","Parses a `Cookie` from the given HTTP cookie header value string. Does not perform any percent-decoding.",157,[[["s"]],["result",["cookie","parseerror"]]]],[11,"parse_encoded","","Parses a `Cookie` from the given HTTP cookie header value string where the name and value fields are percent-encoded. Percent-decodes the name/value fields.",157,[[["s"]],["result",["cookie","parseerror"]]]],[11,"encoded","","Wraps `self` in an `EncodedCookie`: a cost-free wrapper around `Cookie` whose `Display` implementation percent-encodes the name and value of the wrapped `Cookie`.",157,[[["self"]],["encodedcookie"]]],[11,"into_owned","","Converts `self` into a `Cookie` with a static lifetime. This method results in at most one allocation.",157,[[["self"]],["cookie"]]],[11,"name","","Returns the name of `self`.",157,[[["self"]],["str"]]],[11,"value","","Returns the value of `self`.",157,[[["self"]],["str"]]],[11,"name_value","","Returns the name and value of `self` as a tuple of `(name, value)`.",157,N],[11,"http_only","","Returns whether this cookie was marked `HttpOnly` or not. Returns `Some(true)` when the cookie was explicitly set (manually or parsed) as `HttpOnly`, `Some(false)` when `http_only` was manually set to `false`, and `None` otherwise.",157,[[["self"]],["option",["bool"]]]],[11,"secure","","Returns whether this cookie was marked `Secure` or not. Returns `Some(true)` when the cookie was explicitly set (manually or parsed) as `Secure`, `Some(false)` when `secure` was manually set to `false`, and `None` otherwise.",157,[[["self"]],["option",["bool"]]]],[11,"same_site","","Returns the `SameSite` attribute of this cookie if one was specified.",157,[[["self"]],["option",["samesite"]]]],[11,"max_age","","Returns the specified max-age of the cookie if one was specified.",157,[[["self"]],["option",["duration"]]]],[11,"path","","Returns the `Path` of the cookie if one was specified.",157,[[["self"]],["option",["str"]]]],[11,"domain","","Returns the `Domain` of the cookie if one was specified.",157,[[["self"]],["option",["str"]]]],[11,"expires","","Returns the `Expires` time of the cookie if one was specified.",157,[[["self"]],["option",["tm"]]]],[11,"set_name","","Sets the name of `self` to `name`.",157,N],[11,"set_value","","Sets the value of `self` to `value`.",157,N],[11,"set_http_only","","Sets the value of `http_only` in `self` to `value`.",157,N],[11,"set_secure","","Sets the value of `secure` in `self` to `value`.",157,N],[11,"set_same_site","","Sets the value of `same_site` in `self` to `value`.",157,N],[11,"set_max_age","","Sets the value of `max_age` in `self` to `value`.",157,N],[11,"set_path","","Sets the `path` of `self` to `path`.",157,N],[11,"set_domain","","Sets the `domain` of `self` to `domain`.",157,N],[11,"set_expires","","Sets the expires field of `self` to `time`.",157,N],[11,"make_permanent","","Makes `self` a \"permanent\" cookie by extending its expiration and max age 20 years into the future.",157,N],[11,"name_raw","","Returns the name of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"value_raw","","Returns the value of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"path_raw","","Returns the `Path` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Path`, or if the `Path` has changed since parsing, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"domain_raw","","Returns the `Domain` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Domain`, or if the `Domain` has changed since parsing, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"new","","Creates a new `CookieBuilder` instance from the given name and value.",158,[[["n"],["v"]],["cookiebuilder"]]],[11,"expires","","Sets the `expires` field in the cookie being built.",158,[[["self"],["tm"]],["cookiebuilder"]]],[11,"max_age","","Sets the `max_age` field in the cookie being built.",158,[[["self"],["duration"]],["cookiebuilder"]]],[11,"domain","","Sets the `domain` field in the cookie being built.",158,[[["self"],["d"]],["cookiebuilder"]]],[11,"path","","Sets the `path` field in the cookie being built.",158,[[["self"],["p"]],["cookiebuilder"]]],[11,"secure","","Sets the `secure` field in the cookie being built.",158,[[["self"],["bool"]],["cookiebuilder"]]],[11,"http_only","","Sets the `http_only` field in the cookie being built.",158,[[["self"],["bool"]],["cookiebuilder"]]],[11,"same_site","","Sets the `same_site` field in the cookie being built.",158,[[["self"],["samesite"]],["cookiebuilder"]]],[11,"permanent","","Makes the cookie being built 'permanent' by extending its expiration and max age 20 years into the future.",158,[[["self"]],["cookiebuilder"]]],[11,"finish","","Finishes building and returns the built `Cookie`.",158,[[["self"]],["cookie"]]]],"paths":[[3,"Form"],[3,"Json"],[4,"Binary"],[4,"Body"],[4,"Either"],[3,"App"],[3,"HttpContext"],[3,"Extensions"],[3,"Path"],[3,"Query"],[3,"HttpResponse"],[3,"State"],[3,"HttpRequest"],[3,"Scope"],[3,"ClientConnectorStats"],[4,"ClientConnectorError"],[4,"SendRequestError"],[3,"Connect"],[3,"Pause"],[3,"ClientConnector"],[3,"Connection"],[3,"SendRequest"],[3,"ClientRequest"],[3,"ClientRequestBuilder"],[3,"ClientResponse"],[4,"UrlParseError"],[4,"CookieParseError"],[4,"ParseError"],[4,"PayloadError"],[4,"MultipartError"],[4,"ExpectError"],[4,"ContentTypeError"],[4,"UrlencodedError"],[4,"JsonPayloadError"],[4,"ReadlinesError"],[4,"UriSegmentError"],[4,"UrlGenerationError"],[4,"StaticFileError"],[8,"ResponseError"],[3,"Error"],[3,"InternalError"],[3,"Directory"],[8,"StaticFileConfig"],[3,"DefaultConfig"],[3,"NamedFile"],[3,"ChunkedReadFile"],[3,"StaticFiles"],[4,"Started"],[4,"Response"],[4,"Finished"],[3,"Logger"],[4,"CorsError"],[4,"AllOrSome"],[3,"Cors"],[3,"CorsBuilder"],[4,"CsrfError"],[3,"CsrfFilter"],[3,"DefaultHeaders"],[3,"ErrorHandlers"],[8,"RequestIdentity"],[8,"Identity"],[8,"IdentityPolicy"],[3,"IdentityService"],[3,"CookieIdentityPolicy"],[4,"CookieSessionError"],[8,"RequestSession"],[3,"Session"],[3,"SessionStorage"],[3,"CookieSessionBackend"],[8,"Middleware"],[4,"MultipartItem"],[3,"Multipart"],[3,"Field"],[8,"Predicate"],[3,"AnyPredicate"],[3,"AllPredicate"],[3,"StopServer"],[4,"KeepAlive"],[3,"Request"],[3,"ServerSettings"],[3,"HttpServer"],[8,"HttpHandler"],[8,"HttpHandlerTask"],[8,"IntoHttpHandler"],[3,"TestServer"],[3,"TestServerBuilder"],[3,"TestApp"],[3,"TestRequest"],[3,"CloseReason"],[4,"ClientError"],[4,"CloseCode"],[4,"OpCode"],[4,"ProtocolError"],[4,"HandshakeError"],[4,"Message"],[3,"Client"],[3,"ClientHandshake"],[3,"ClientReader"],[3,"ClientWriter"],[3,"WebsocketContext"],[3,"Frame"],[3,"FramedMessage"],[8,"WsWriter"],[3,"WsStream"],[3,"ConnectAddr"],[4,"ResolverError"],[4,"SignalType"],[3,"Signal"],[3,"Subscribe"],[8,"ActorFuture"],[8,"ActorStream"],[8,"IntoActorFuture"],[8,"WrapFuture"],[8,"WrapStream"],[4,"Either"],[3,"StopArbiter"],[8,"StreamHandler"],[3,"MessageResult"],[4,"ActorState"],[8,"Actor"],[8,"ContextFutureSpawner"],[4,"Running"],[8,"Supervised"],[8,"Handler"],[8,"WriteHandler"],[8,"SystemService"],[4,"SendError"],[8,"AsyncContext"],[8,"ArbiterService"],[8,"Message"],[8,"ActorContext"],[4,"MailboxError"],[8,"AsyncContextParts"],[8,"ResponseChannel"],[8,"ToEnvelope"],[8,"MessageResponse"],[4,"ResourceType"],[8,"Handler"],[8,"FromParam"],[4,"ContentEncoding"],[4,"ConnectionType"],[4,"Entry"],[3,"LanguageTag"],[3,"ExtendedValue"],[3,"ContentDisposition"],[4,"DispositionType"],[4,"DispositionParam"],[4,"Charset"],[8,"AsyncResponder"],[8,"FromRequest"],[8,"Responder"],[8,"HttpMessage"],[3,"Drain"],[3,"FormConfig"],[3,"PayloadConfig"],[3,"AsyncResult"],[3,"HeaderName"],[3,"Cookie"],[3,"CookieBuilder"],[3,"StatusCode"],[3,"Method"],[3,"HeaderMap"],[3,"Version"],[3,"HeaderValue"],[3,"GetAll"],[3,"ValueDrain"],[3,"Drain"],[3,"IntoIter"],[3,"ValueIter"],[3,"Keys"],[3,"Iter"],[3,"ValueIterMut"],[3,"Values"],[3,"InvalidHeaderValue"],[3,"InvalidHeaderName"],[3,"InvalidHeaderValueBytes"],[3,"InvalidHeaderNameBytes"],[3,"ToStrError"],[3,"OccupiedEntry"],[3,"VacantEntry"],[3,"StreamMapErr"],[3,"StreamWrap"],[3,"StreamThen"],[3,"StreamTimeout"],[3,"StreamMap"],[3,"StreamAndThen"],[3,"SyncContext"],[3,"Context"],[3,"MapErr"],[3,"FromErr"],[3,"StreamFinish"],[3,"Timeout"],[3,"Map"],[3,"StreamFold"],[3,"TcpConnector"],[3,"Then"],[3,"DropErr"],[3,"FutureWrap"],[3,"FutureResult"],[3,"AndThen"],[3,"Addr"],[3,"Connect"],[3,"Resolve"],[3,"SpawnHandle"],[3,"Recipient"],[3,"Arbiter"],[3,"Resolver"],[3,"DefaultSignalsHandler"],[3,"ProcessSignals"],[3,"System"],[3,"Registry"],[3,"SystemRegistry"],[3,"Finish"],[3,"Condition"],[3,"Mailbox"],[3,"RecipientRequest"],[3,"Request"],[3,"ActorResponse"],[3,"Response"],[3,"NormalizePath"],[3,"MessageBody"],[3,"UrlEncoded"],[3,"HttpResponseBuilder"],[3,"ConnectionInfo"],[3,"JsonConfig"],[3,"JsonBody"],[3,"Params"],[3,"Payload"],[3,"PayloadBuffer"],[3,"Resource"],[3,"Route"],[3,"ResourceInfo"],[3,"Router"],[3,"ResourceDef"],[3,"StartActor"],[3,"Execute"],[3,"Writer"],[3,"FramedWrite"],[3,"Supervisor"],[3,"SyncArbiter"],[3,"Envelope"],[3,"ContextParts"],[3,"ContextFut"]]}; +initSearch(searchIndex); diff --git a/static/api/actix-web/0.7.2/settings.css b/static/api/actix-web/0.7.2/settings.css new file mode 100644 index 0000000..11fbf77 --- /dev/null +++ b/static/api/actix-web/0.7.2/settings.css @@ -0,0 +1,12 @@ +/*! + * Copyright 2018 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ +.setting-line{padding:5px;}.setting-line>div{max-width:calc(100% - 74px);display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{display:none;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 1px #2196F3;}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);} \ No newline at end of file diff --git a/static/api/actix-web/0.7.2/settings.html b/static/api/actix-web/0.7.2/settings.html new file mode 100644 index 0000000..32b3d6e --- /dev/null +++ b/static/api/actix-web/0.7.2/settings.html @@ -0,0 +1 @@ +Rustdoc settings

Rustdoc settings

Auto-hide item declarations.
Auto-hide item attributes.
Auto-hide trait implementations documentation
Directly go to item in search if there is only one result
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/settings.js b/static/api/actix-web/0.7.2/settings.js new file mode 100644 index 0000000..ff9ce17 --- /dev/null +++ b/static/api/actix-web/0.7.2/settings.js @@ -0,0 +1,11 @@ +/*! + * Copyright 2018 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */(function(){function changeSetting(settingName,isEnabled){updateLocalStorage('rustdoc-'+settingName,isEnabled);}function getSettingValue(settingName){return getCurrentValue('rustdoc-'+settingName);}function setEvents(){var elems=document.getElementsByClassName("slider");if(!elems||elems.length===0){return;}for(var i=0;iapplication.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+
+use std::rc::Rc;
+
+use handler::{AsyncResult, FromRequest, Handler, Responder, WrapHandler};
+use header::ContentEncoding;
+use http::Method;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::Middleware;
+use pipeline::{Pipeline, PipelineHandler};
+use pred::Predicate;
+use resource::Resource;
+use router::{ResourceDef, Router};
+use scope::Scope;
+use server::{HttpHandler, HttpHandlerTask, IntoHttpHandler, Request};
+
+/// Application
+pub struct HttpApplication<S = ()> {
+    state: Rc<S>,
+    prefix: String,
+    prefix_len: usize,
+    inner: Rc<Inner<S>>,
+    filters: Option<Vec<Box<Predicate<S>>>>,
+    middlewares: Rc<Vec<Box<Middleware<S>>>>,
+}
+
+#[doc(hidden)]
+pub struct Inner<S> {
+    router: Router<S>,
+    encoding: ContentEncoding,
+}
+
+impl<S: 'static> PipelineHandler<S> for Inner<S> {
+    #[inline]
+    fn encoding(&self) -> ContentEncoding {
+        self.encoding
+    }
+
+    fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        self.router.handle(req)
+    }
+}
+
+impl<S: 'static> HttpApplication<S> {
+    #[cfg(test)]
+    pub(crate) fn run(&self, req: Request) -> AsyncResult<HttpResponse> {
+        let info = self
+            .inner
+            .router
+            .recognize(&req, &self.state, self.prefix_len);
+        let req = HttpRequest::new(req, Rc::clone(&self.state), info);
+
+        self.inner.handle(&req)
+    }
+}
+
+impl<S: 'static> HttpHandler for HttpApplication<S> {
+    type Task = Pipeline<S, Inner<S>>;
+
+    fn handle(&self, msg: Request) -> Result<Pipeline<S, Inner<S>>, Request> {
+        let m = {
+            if self.prefix_len == 0 {
+                true
+            } else {
+                let path = msg.path();
+                path.starts_with(&self.prefix)
+                    && (path.len() == self.prefix_len
+                        || path.split_at(self.prefix_len).1.starts_with('/'))
+            }
+        };
+        if m {
+            if let Some(ref filters) = self.filters {
+                for filter in filters {
+                    if !filter.check(&msg, &self.state) {
+                        return Err(msg);
+                    }
+                }
+            }
+
+            let info = self
+                .inner
+                .router
+                .recognize(&msg, &self.state, self.prefix_len);
+
+            let inner = Rc::clone(&self.inner);
+            let req = HttpRequest::new(msg, Rc::clone(&self.state), info);
+            Ok(Pipeline::new(req, Rc::clone(&self.middlewares), inner))
+        } else {
+            Err(msg)
+        }
+    }
+}
+
+struct ApplicationParts<S> {
+    state: S,
+    prefix: String,
+    router: Router<S>,
+    encoding: ContentEncoding,
+    middlewares: Vec<Box<Middleware<S>>>,
+    filters: Vec<Box<Predicate<S>>>,
+}
+
+/// Structure that follows the builder pattern for building application
+/// instances.
+pub struct App<S = ()> {
+    parts: Option<ApplicationParts<S>>,
+}
+
+impl App<()> {
+    /// Create application with empty state. Application can
+    /// be configured with a builder-like pattern.
+    pub fn new() -> App<()> {
+        App::with_state(())
+    }
+}
+
+impl Default for App<()> {
+    fn default() -> Self {
+        App::new()
+    }
+}
+
+impl<S> App<S>
+where
+    S: 'static,
+{
+    /// Create application with specified state. Application can be
+    /// configured with a builder-like pattern.
+    ///
+    /// State is shared with all resources within same application and
+    /// could be accessed with `HttpRequest::state()` method.
+    ///
+    /// **Note**: http server accepts an application factory rather than
+    /// an application instance. Http server constructs an application
+    /// instance for each thread, thus application state must be constructed
+    /// multiple times. If you want to share state between different
+    /// threads, a shared object should be used, e.g. `Arc`. Application
+    /// state does not need to be `Send` and `Sync`.
+    pub fn with_state(state: S) -> App<S> {
+        App {
+            parts: Some(ApplicationParts {
+                state,
+                prefix: "".to_owned(),
+                router: Router::new(),
+                middlewares: Vec::new(),
+                filters: Vec::new(),
+                encoding: ContentEncoding::Auto,
+            }),
+        }
+    }
+
+    /// Get reference to the application state
+    pub fn state(&self) -> &S {
+        let parts = self.parts.as_ref().expect("Use after finish");
+        &parts.state
+    }
+
+    /// Set application prefix.
+    ///
+    /// Only requests that match the application's prefix get
+    /// processed by this application.
+    ///
+    /// The application prefix always contains a leading slash (`/`).
+    /// If the supplied prefix does not contain leading slash, it is
+    /// inserted.
+    ///
+    /// Prefix should consist of valid path segments. i.e for an
+    /// application with the prefix `/app` any request with the paths
+    /// `/app`, `/app/` or `/app/test` would match, but the path
+    /// `/application` would not.
+    ///
+    /// In the following example only requests with an `/app/` path
+    /// prefix get handled. Requests with path `/app/test/` would be
+    /// handled, while requests with the paths `/application` or
+    /// `/other/...` would return `NOT FOUND`. It is also possible to
+    /// handle `/app` path, to do this you can register resource for
+    /// empty string `""`
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .prefix("/app")
+    ///         .resource("", |r| r.f(|_| HttpResponse::Ok()))  // <- handle `/app` path
+    ///         .resource("/", |r| r.f(|_| HttpResponse::Ok())) // <- handle `/app/` path
+    ///         .resource("/test", |r| {
+    ///             r.get().f(|_| HttpResponse::Ok());
+    ///             r.head().f(|_| HttpResponse::MethodNotAllowed());
+    ///         })
+    ///         .finish();
+    /// }
+    /// ```
+    pub fn prefix<P: Into<String>>(mut self, prefix: P) -> App<S> {
+        {
+            let parts = self.parts.as_mut().expect("Use after finish");
+            let mut prefix = prefix.into();
+            if !prefix.starts_with('/') {
+                prefix.insert(0, '/')
+            }
+            parts.prefix = prefix;
+        }
+        self
+    }
+
+    /// Add match predicate to application.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn main() {
+    /// App::new()
+    ///     .filter(pred::Host("www.rust-lang.org"))
+    ///     .resource("/path", |r| r.f(|_| HttpResponse::Ok()))
+    /// #      .finish();
+    /// # }
+    /// ```
+    pub fn filter<T: Predicate<S> + 'static>(mut self, p: T) -> App<S> {
+        {
+            let parts = self.parts.as_mut().expect("Use after finish");
+            parts.filters.push(Box::new(p));
+        }
+        self
+    }
+
+    /// Configure route for a specific path.
+    ///
+    /// This is a simplified version of the `App::resource()` method.
+    /// Handler functions need to accept one request extractor
+    /// argument.
+    ///
+    /// This method could be called multiple times, in that case
+    /// multiple routes would be registered for same resource path.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpRequest, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .route("/test", http::Method::GET, |_: HttpRequest| {
+    ///             HttpResponse::Ok()
+    ///         })
+    ///         .route("/test", http::Method::POST, |_: HttpRequest| {
+    ///             HttpResponse::MethodNotAllowed()
+    ///         });
+    /// }
+    /// ```
+    pub fn route<T, F, R>(mut self, path: &str, method: Method, f: F) -> App<S>
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .router
+            .register_route(path, method, f);
+
+        self
+    }
+
+    /// Configure scope for common root path.
+    ///
+    /// Scopes collect multiple paths under a common path prefix.
+    /// Scope path can contain variable path segments as resources.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpRequest, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new().scope("/{project_id}", |scope| {
+    ///         scope
+    ///             .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+    ///             .resource("/path2", |r| r.f(|_| HttpResponse::Ok()))
+    ///             .resource("/path3", |r| r.f(|_| HttpResponse::MethodNotAllowed()))
+    ///     });
+    /// }
+    /// ```
+    ///
+    /// In the above example, three routes get added:
+    ///  * /{project_id}/path1
+    ///  * /{project_id}/path2
+    ///  * /{project_id}/path3
+    ///
+    pub fn scope<F>(mut self, path: &str, f: F) -> App<S>
+    where
+        F: FnOnce(Scope<S>) -> Scope<S>,
+    {
+        let scope = f(Scope::new(path));
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .router
+            .register_scope(scope);
+        self
+    }
+
+    /// Configure resource for a specific path.
+    ///
+    /// Resources may have variable path segments. For example, a
+    /// resource with the path `/a/{name}/c` would match all incoming
+    /// requests with paths such as `/a/b/c`, `/a/1/c`, or `/a/etc/c`.
+    ///
+    /// A variable segment is specified in the form `{identifier}`,
+    /// where the identifier can be used later in a request handler to
+    /// access the matched value for that segment. This is done by
+    /// looking up the identifier in the `Params` object returned by
+    /// `HttpRequest.match_info()` method.
+    ///
+    /// By default, each segment matches the regular expression `[^{}/]+`.
+    ///
+    /// You can also specify a custom regex in the form `{identifier:regex}`:
+    ///
+    /// For instance, to route `GET`-requests on any route matching
+    /// `/users/{userid}/{friend}` and store `userid` and `friend` in
+    /// the exposed `Params` object:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource("/users/{userid}/{friend}", |r| {
+    ///         r.get().f(|_| HttpResponse::Ok());
+    ///         r.head().f(|_| HttpResponse::MethodNotAllowed());
+    ///     });
+    /// }
+    /// ```
+    pub fn resource<F, R>(mut self, path: &str, f: F) -> App<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        {
+            let parts = self.parts.as_mut().expect("Use after finish");
+
+            // create resource
+            let mut resource = Resource::new(ResourceDef::new(path));
+
+            // configure
+            f(&mut resource);
+
+            parts.router.register_resource(resource);
+        }
+        self
+    }
+
+    /// Configure resource for a specific path.
+    #[doc(hidden)]
+    pub fn register_resource(&mut self, resource: Resource<S>) {
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .router
+            .register_resource(resource);
+    }
+
+    /// Default resource to be used if no matching route could be found.
+    pub fn default_resource<F, R>(mut self, f: F) -> App<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        // create and configure default resource
+        let mut resource = Resource::new(ResourceDef::new(""));
+        f(&mut resource);
+
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .router
+            .register_default_resource(resource.into());
+
+        self
+    }
+
+    /// Set default content encoding. `ContentEncoding::Auto` is set by default.
+    pub fn default_encoding(mut self, encoding: ContentEncoding) -> App<S> {
+        {
+            let parts = self.parts.as_mut().expect("Use after finish");
+            parts.encoding = encoding;
+        }
+        self
+    }
+
+    /// Register an external resource.
+    ///
+    /// External resources are useful for URL generation purposes only
+    /// and are never considered for matching at request time. Calls to
+    /// `HttpRequest::url_for()` will work as expected.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{App, HttpRequest, HttpResponse, Result};
+    ///
+    /// fn index(req: &HttpRequest) -> Result<HttpResponse> {
+    ///     let url = req.url_for("youtube", &["oHg5SJYRHA0"])?;
+    ///     assert_eq!(url.as_str(), "https://youtube.com/watch/oHg5SJYRHA0");
+    ///     Ok(HttpResponse::Ok().into())
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .resource("/index.html", |r| r.get().f(index))
+    ///         .external_resource("youtube", "https://youtube.com/watch/{video_id}")
+    ///         .finish();
+    /// }
+    /// ```
+    pub fn external_resource<T, U>(mut self, name: T, url: U) -> App<S>
+    where
+        T: AsRef<str>,
+        U: AsRef<str>,
+    {
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .router
+            .register_external(name.as_ref(), ResourceDef::external(url.as_ref()));
+        self
+    }
+
+    /// Configure handler for specific path prefix.
+    ///
+    /// A path prefix consists of valid path segments, i.e for the
+    /// prefix `/app` any request with the paths `/app`, `/app/` or
+    /// `/app/test` would match, but the path `/application` would
+    /// not.
+    ///
+    /// Path tail is available as `tail` parameter in request's match_dict.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpRequest, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new().handler("/app", |req: &HttpRequest| match *req.method() {
+    ///         http::Method::GET => HttpResponse::Ok(),
+    ///         http::Method::POST => HttpResponse::MethodNotAllowed(),
+    ///         _ => HttpResponse::NotFound(),
+    ///     });
+    /// }
+    /// ```
+    pub fn handler<H: Handler<S>>(mut self, path: &str, handler: H) -> App<S> {
+        {
+            let mut path = path.trim().trim_right_matches('/').to_owned();
+            if !path.is_empty() && !path.starts_with('/') {
+                path.insert(0, '/')
+            }
+            if path.len() > 1 && path.ends_with('/') {
+                path.pop();
+            }
+            self.parts
+                .as_mut()
+                .expect("Use after finish")
+                .router
+                .register_handler(&path, Box::new(WrapHandler::new(handler)), None);
+        }
+        self
+    }
+
+    /// Register a middleware.
+    pub fn middleware<M: Middleware<S>>(mut self, mw: M) -> App<S> {
+        self.parts
+            .as_mut()
+            .expect("Use after finish")
+            .middlewares
+            .push(Box::new(mw));
+        self
+    }
+
+    /// Run external configuration as part of the application building
+    /// process
+    ///
+    /// This function is useful for moving parts of configuration to a
+    /// different module or event library. For example we can move
+    /// some of the resources' configuration to different module.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{fs, middleware, App, HttpResponse};
+    ///
+    /// // this function could be located in different module
+    /// fn config(app: App) -> App {
+    ///     app.resource("/test", |r| {
+    ///         r.get().f(|_| HttpResponse::Ok());
+    ///         r.head().f(|_| HttpResponse::MethodNotAllowed());
+    ///     })
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .middleware(middleware::Logger::default())
+    ///         .configure(config)  // <- register resources
+    ///         .handler("/static", fs::StaticFiles::new(".").unwrap());
+    /// }
+    /// ```
+    pub fn configure<F>(self, cfg: F) -> App<S>
+    where
+        F: Fn(App<S>) -> App<S>,
+    {
+        cfg(self)
+    }
+
+    /// Finish application configuration and create `HttpHandler` object.
+    pub fn finish(&mut self) -> HttpApplication<S> {
+        let mut parts = self.parts.take().expect("Use after finish");
+        let prefix = parts.prefix.trim().trim_right_matches('/');
+        parts.router.finish();
+
+        let inner = Rc::new(Inner {
+            router: parts.router,
+            encoding: parts.encoding,
+        });
+        let filters = if parts.filters.is_empty() {
+            None
+        } else {
+            Some(parts.filters)
+        };
+
+        HttpApplication {
+            inner,
+            filters,
+            state: Rc::new(parts.state),
+            middlewares: Rc::new(parts.middlewares),
+            prefix: prefix.to_owned(),
+            prefix_len: prefix.len(),
+        }
+    }
+
+    /// Convenience method for creating `Box<HttpHandler>` instances.
+    ///
+    /// This method is useful if you need to register multiple
+    /// application instances with different state.
+    ///
+    /// ```rust
+    /// # use std::thread;
+    /// # extern crate actix_web;
+    /// use actix_web::{server, App, HttpResponse};
+    ///
+    /// struct State1;
+    ///
+    /// struct State2;
+    ///
+    /// fn main() {
+    /// # thread::spawn(|| {
+    ///     server::new(|| {
+    ///         vec![
+    ///             App::with_state(State1)
+    ///                 .prefix("/app1")
+    ///                 .resource("/", |r| r.f(|r| HttpResponse::Ok()))
+    ///                 .boxed(),
+    ///             App::with_state(State2)
+    ///                 .prefix("/app2")
+    ///                 .resource("/", |r| r.f(|r| HttpResponse::Ok()))
+    ///                 .boxed(),
+    ///         ]
+    ///     }).bind("127.0.0.1:8080")
+    ///         .unwrap()
+    ///         .run()
+    /// # });
+    /// }
+    /// ```
+    pub fn boxed(mut self) -> Box<HttpHandler<Task = Box<HttpHandlerTask>>> {
+        Box::new(BoxedApplication { app: self.finish() })
+    }
+}
+
+struct BoxedApplication<S> {
+    app: HttpApplication<S>,
+}
+
+impl<S: 'static> HttpHandler for BoxedApplication<S> {
+    type Task = Box<HttpHandlerTask>;
+
+    fn handle(&self, req: Request) -> Result<Self::Task, Request> {
+        self.app.handle(req).map(|t| {
+            let task: Self::Task = Box::new(t);
+            task
+        })
+    }
+}
+
+impl<S: 'static> IntoHttpHandler for App<S> {
+    type Handler = HttpApplication<S>;
+
+    fn into_handler(mut self) -> HttpApplication<S> {
+        self.finish()
+    }
+}
+
+impl<'a, S: 'static> IntoHttpHandler for &'a mut App<S> {
+    type Handler = HttpApplication<S>;
+
+    fn into_handler(self) -> HttpApplication<S> {
+        self.finish()
+    }
+}
+
+#[doc(hidden)]
+impl<S: 'static> Iterator for App<S> {
+    type Item = HttpApplication<S>;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        if self.parts.is_some() {
+            Some(self.finish())
+        } else {
+            None
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use body::{Binary, Body};
+    use http::StatusCode;
+    use httprequest::HttpRequest;
+    use httpresponse::HttpResponse;
+    use pred;
+    use test::{TestRequest, TestServer};
+
+    #[test]
+    fn test_default_resource() {
+        let app = App::new()
+            .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
+            .finish();
+
+        let req = TestRequest::with_uri("/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let app = App::new()
+            .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
+            .default_resource(|r| r.f(|_| HttpResponse::MethodNotAllowed()))
+            .finish();
+        let req = TestRequest::with_uri("/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::METHOD_NOT_ALLOWED);
+    }
+
+    #[test]
+    fn test_unhandled_prefix() {
+        let app = App::new()
+            .prefix("/test")
+            .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
+            .finish();
+        let ctx = TestRequest::default().request();
+        assert!(app.handle(ctx).is_err());
+    }
+
+    #[test]
+    fn test_state() {
+        let app = App::with_state(10)
+            .resource("/", |r| r.f(|_| HttpResponse::Ok()))
+            .finish();
+        let req = TestRequest::with_state(10).request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_prefix() {
+        let app = App::new()
+            .prefix("/test")
+            .resource("/blah", |r| r.f(|_| HttpResponse::Ok()))
+            .finish();
+        let req = TestRequest::with_uri("/test").request();
+        let resp = app.handle(req);
+        assert!(resp.is_ok());
+
+        let req = TestRequest::with_uri("/test/").request();
+        let resp = app.handle(req);
+        assert!(resp.is_ok());
+
+        let req = TestRequest::with_uri("/test/blah").request();
+        let resp = app.handle(req);
+        assert!(resp.is_ok());
+
+        let req = TestRequest::with_uri("/testing").request();
+        let resp = app.handle(req);
+        assert!(resp.is_err());
+    }
+
+    #[test]
+    fn test_handler() {
+        let app = App::new()
+            .handler("/test", |_: &_| HttpResponse::Ok())
+            .finish();
+
+        let req = TestRequest::with_uri("/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/test/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/test/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/testapp").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_handler2() {
+        let app = App::new()
+            .handler("test", |_: &_| HttpResponse::Ok())
+            .finish();
+
+        let req = TestRequest::with_uri("/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/test/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/test/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/testapp").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_handler_with_prefix() {
+        let app = App::new()
+            .prefix("prefix")
+            .handler("/test", |_: &_| HttpResponse::Ok())
+            .finish();
+
+        let req = TestRequest::with_uri("/prefix/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/prefix/test/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/prefix/test/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/prefix/testapp").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/prefix/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_route() {
+        let app = App::new()
+            .route("/test", Method::GET, |_: HttpRequest| HttpResponse::Ok())
+            .route("/test", Method::POST, |_: HttpRequest| {
+                HttpResponse::Created()
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/test").method(Method::GET).request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/test")
+            .method(Method::POST)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+
+        let req = TestRequest::with_uri("/test")
+            .method(Method::HEAD)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_handler_prefix() {
+        let app = App::new()
+            .prefix("/app")
+            .handler("/test", |_: &_| HttpResponse::Ok())
+            .finish();
+
+        let req = TestRequest::with_uri("/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/test").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/test/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/test/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/testapp").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/blah").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_option_responder() {
+        let app = App::new()
+            .resource("/none", |r| r.f(|_| -> Option<&'static str> { None }))
+            .resource("/some", |r| r.f(|_| Some("some")))
+            .finish();
+
+        let req = TestRequest::with_uri("/none").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/some").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+        assert_eq!(resp.as_msg().body(), &Body::Binary(Binary::Slice(b"some")));
+    }
+
+    #[test]
+    fn test_filter() {
+        let mut srv = TestServer::with_factory(|| {
+            App::new()
+                .filter(pred::Get())
+                .handler("/test", |_: &_| HttpResponse::Ok())
+        });
+
+        let request = srv.get().uri(srv.url("/test")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::OK);
+
+        let request = srv.post().uri(srv.url("/test")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_prefix_root() {
+        let mut srv = TestServer::with_factory(|| {
+            App::new()
+                .prefix("/test")
+                .resource("/", |r| r.f(|_| HttpResponse::Ok()))
+                .resource("", |r| r.f(|_| HttpResponse::Created()))
+        });
+
+        let request = srv.get().uri(srv.url("/test/")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::OK);
+
+        let request = srv.get().uri(srv.url("/test")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::CREATED);
+    }
+
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/body.rs.html b/static/api/actix-web/0.7.2/src/actix_web/body.rs.html new file mode 100644 index 0000000..d7669fa --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/body.rs.html @@ -0,0 +1,707 @@ +body.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+
+use bytes::{Bytes, BytesMut};
+use futures::Stream;
+use std::sync::Arc;
+use std::{fmt, mem};
+
+use context::ActorHttpContext;
+use error::Error;
+use handler::Responder;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+
+/// Type represent streaming body
+pub type BodyStream = Box<Stream<Item = Bytes, Error = Error>>;
+
+/// Represents various types of http message body.
+pub enum Body {
+    /// Empty response. `Content-Length` header is set to `0`
+    Empty,
+    /// Specific response body.
+    Binary(Binary),
+    /// Unspecified streaming response. Developer is responsible for setting
+    /// right `Content-Length` or `Transfer-Encoding` headers.
+    Streaming(BodyStream),
+    /// Special body type for actor response.
+    Actor(Box<ActorHttpContext>),
+}
+
+/// Represents various types of binary body.
+/// `Content-Length` header is set to length of the body.
+#[derive(Debug, PartialEq)]
+pub enum Binary {
+    /// Bytes body
+    Bytes(Bytes),
+    /// Static slice
+    Slice(&'static [u8]),
+    /// Shared string body
+    #[doc(hidden)]
+    SharedString(Arc<String>),
+    /// Shared vec body
+    SharedVec(Arc<Vec<u8>>),
+}
+
+impl Body {
+    /// Does this body streaming.
+    #[inline]
+    pub fn is_streaming(&self) -> bool {
+        match *self {
+            Body::Streaming(_) | Body::Actor(_) => true,
+            _ => false,
+        }
+    }
+
+    /// Is this binary body.
+    #[inline]
+    pub fn is_binary(&self) -> bool {
+        match *self {
+            Body::Binary(_) => true,
+            _ => false,
+        }
+    }
+
+    /// Is this binary empy.
+    #[inline]
+    pub fn is_empty(&self) -> bool {
+        match *self {
+            Body::Empty => true,
+            _ => false,
+        }
+    }
+
+    /// Create body from slice (copy)
+    pub fn from_slice(s: &[u8]) -> Body {
+        Body::Binary(Binary::Bytes(Bytes::from(s)))
+    }
+
+    /// Is this binary body.
+    #[inline]
+    pub(crate) fn binary(self) -> Binary {
+        match self {
+            Body::Binary(b) => b,
+            _ => panic!(),
+        }
+    }
+}
+
+impl PartialEq for Body {
+    fn eq(&self, other: &Body) -> bool {
+        match *self {
+            Body::Empty => match *other {
+                Body::Empty => true,
+                _ => false,
+            },
+            Body::Binary(ref b) => match *other {
+                Body::Binary(ref b2) => b == b2,
+                _ => false,
+            },
+            Body::Streaming(_) | Body::Actor(_) => false,
+        }
+    }
+}
+
+impl fmt::Debug for Body {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            Body::Empty => write!(f, "Body::Empty"),
+            Body::Binary(ref b) => write!(f, "Body::Binary({:?})", b),
+            Body::Streaming(_) => write!(f, "Body::Streaming(_)"),
+            Body::Actor(_) => write!(f, "Body::Actor(_)"),
+        }
+    }
+}
+
+impl<T> From<T> for Body
+where
+    T: Into<Binary>,
+{
+    fn from(b: T) -> Body {
+        Body::Binary(b.into())
+    }
+}
+
+impl From<Box<ActorHttpContext>> for Body {
+    fn from(ctx: Box<ActorHttpContext>) -> Body {
+        Body::Actor(ctx)
+    }
+}
+
+impl Binary {
+    #[inline]
+    /// Returns `true` if body is empty
+    pub fn is_empty(&self) -> bool {
+        self.len() == 0
+    }
+
+    #[inline]
+    /// Length of body in bytes
+    pub fn len(&self) -> usize {
+        match *self {
+            Binary::Bytes(ref bytes) => bytes.len(),
+            Binary::Slice(slice) => slice.len(),
+            Binary::SharedString(ref s) => s.len(),
+            Binary::SharedVec(ref s) => s.len(),
+        }
+    }
+
+    /// Create binary body from slice
+    pub fn from_slice(s: &[u8]) -> Binary {
+        Binary::Bytes(Bytes::from(s))
+    }
+
+    /// Convert Binary to a Bytes instance
+    pub fn take(&mut self) -> Bytes {
+        mem::replace(self, Binary::Slice(b"")).into()
+    }
+}
+
+impl Clone for Binary {
+    fn clone(&self) -> Binary {
+        match *self {
+            Binary::Bytes(ref bytes) => Binary::Bytes(bytes.clone()),
+            Binary::Slice(slice) => Binary::Bytes(Bytes::from(slice)),
+            Binary::SharedString(ref s) => Binary::SharedString(s.clone()),
+            Binary::SharedVec(ref s) => Binary::SharedVec(s.clone()),
+        }
+    }
+}
+
+impl Into<Bytes> for Binary {
+    fn into(self) -> Bytes {
+        match self {
+            Binary::Bytes(bytes) => bytes,
+            Binary::Slice(slice) => Bytes::from(slice),
+            Binary::SharedString(s) => Bytes::from(s.as_str()),
+            Binary::SharedVec(s) => Bytes::from(AsRef::<[u8]>::as_ref(s.as_ref())),
+        }
+    }
+}
+
+impl From<&'static str> for Binary {
+    fn from(s: &'static str) -> Binary {
+        Binary::Slice(s.as_ref())
+    }
+}
+
+impl From<&'static [u8]> for Binary {
+    fn from(s: &'static [u8]) -> Binary {
+        Binary::Slice(s)
+    }
+}
+
+impl From<Vec<u8>> for Binary {
+    fn from(vec: Vec<u8>) -> Binary {
+        Binary::Bytes(Bytes::from(vec))
+    }
+}
+
+impl From<String> for Binary {
+    fn from(s: String) -> Binary {
+        Binary::Bytes(Bytes::from(s))
+    }
+}
+
+impl<'a> From<&'a String> for Binary {
+    fn from(s: &'a String) -> Binary {
+        Binary::Bytes(Bytes::from(AsRef::<[u8]>::as_ref(&s)))
+    }
+}
+
+impl From<Bytes> for Binary {
+    fn from(s: Bytes) -> Binary {
+        Binary::Bytes(s)
+    }
+}
+
+impl From<BytesMut> for Binary {
+    fn from(s: BytesMut) -> Binary {
+        Binary::Bytes(s.freeze())
+    }
+}
+
+impl From<Arc<String>> for Binary {
+    fn from(body: Arc<String>) -> Binary {
+        Binary::SharedString(body)
+    }
+}
+
+impl<'a> From<&'a Arc<String>> for Binary {
+    fn from(body: &'a Arc<String>) -> Binary {
+        Binary::SharedString(Arc::clone(body))
+    }
+}
+
+impl From<Arc<Vec<u8>>> for Binary {
+    fn from(body: Arc<Vec<u8>>) -> Binary {
+        Binary::SharedVec(body)
+    }
+}
+
+impl<'a> From<&'a Arc<Vec<u8>>> for Binary {
+    fn from(body: &'a Arc<Vec<u8>>) -> Binary {
+        Binary::SharedVec(Arc::clone(body))
+    }
+}
+
+impl AsRef<[u8]> for Binary {
+    #[inline]
+    fn as_ref(&self) -> &[u8] {
+        match *self {
+            Binary::Bytes(ref bytes) => bytes.as_ref(),
+            Binary::Slice(slice) => slice,
+            Binary::SharedString(ref s) => s.as_bytes(),
+            Binary::SharedVec(ref s) => s.as_ref().as_ref(),
+        }
+    }
+}
+
+impl Responder for Binary {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(HttpResponse::build_from(req)
+            .content_type("application/octet-stream")
+            .body(self))
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_body_is_streaming() {
+        assert_eq!(Body::Empty.is_streaming(), false);
+        assert_eq!(Body::Binary(Binary::from("")).is_streaming(), false);
+    }
+
+    #[test]
+    fn test_is_empty() {
+        assert_eq!(Binary::from("").is_empty(), true);
+        assert_eq!(Binary::from("test").is_empty(), false);
+    }
+
+    #[test]
+    fn test_static_str() {
+        assert_eq!(Binary::from("test").len(), 4);
+        assert_eq!(Binary::from("test").as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_static_bytes() {
+        assert_eq!(Binary::from(b"test".as_ref()).len(), 4);
+        assert_eq!(Binary::from(b"test".as_ref()).as_ref(), b"test");
+        assert_eq!(Binary::from_slice(b"test".as_ref()).len(), 4);
+        assert_eq!(Binary::from_slice(b"test".as_ref()).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_vec() {
+        assert_eq!(Binary::from(Vec::from("test")).len(), 4);
+        assert_eq!(Binary::from(Vec::from("test")).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_bytes() {
+        assert_eq!(Binary::from(Bytes::from("test")).len(), 4);
+        assert_eq!(Binary::from(Bytes::from("test")).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_arc_string() {
+        let b = Arc::new("test".to_owned());
+        assert_eq!(Binary::from(b.clone()).len(), 4);
+        assert_eq!(Binary::from(b.clone()).as_ref(), b"test");
+        assert_eq!(Binary::from(&b).len(), 4);
+        assert_eq!(Binary::from(&b).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_string() {
+        let b = "test".to_owned();
+        assert_eq!(Binary::from(b.clone()).len(), 4);
+        assert_eq!(Binary::from(b.clone()).as_ref(), b"test");
+        assert_eq!(Binary::from(&b).len(), 4);
+        assert_eq!(Binary::from(&b).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_shared_vec() {
+        let b = Arc::new(Vec::from(&b"test"[..]));
+        assert_eq!(Binary::from(b.clone()).len(), 4);
+        assert_eq!(Binary::from(b.clone()).as_ref(), &b"test"[..]);
+        assert_eq!(Binary::from(&b).len(), 4);
+        assert_eq!(Binary::from(&b).as_ref(), &b"test"[..]);
+    }
+
+    #[test]
+    fn test_bytes_mut() {
+        let b = BytesMut::from("test");
+        assert_eq!(Binary::from(b.clone()).len(), 4);
+        assert_eq!(Binary::from(b).as_ref(), b"test");
+    }
+
+    #[test]
+    fn test_binary_into() {
+        let bytes = Bytes::from_static(b"test");
+        let b: Bytes = Binary::from("test").into();
+        assert_eq!(b, bytes);
+        let b: Bytes = Binary::from(bytes.clone()).into();
+        assert_eq!(b, bytes);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/connector.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/connector.rs.html new file mode 100644 index 0000000..402c991 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/connector.rs.html @@ -0,0 +1,2303 @@ +connector.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+
+use std::collections::{HashMap, VecDeque};
+use std::net::Shutdown;
+use std::time::{Duration, Instant};
+use std::{fmt, io, mem, time};
+
+use actix::resolver::{Connect as ResolveConnect, Resolver, ResolverError};
+use actix::{
+    fut, Actor, ActorFuture, ActorResponse, Addr, AsyncContext, Context,
+    ContextFutureSpawner, Handler, Message, Recipient, StreamHandler, Supervised,
+    SystemService, WrapFuture,
+};
+
+use futures::sync::{mpsc, oneshot};
+use futures::{Async, Future, Poll};
+use http::{Error as HttpError, HttpTryFrom, Uri};
+use tokio_io::{AsyncRead, AsyncWrite};
+use tokio_timer::Delay;
+
+#[cfg(feature = "alpn")]
+use openssl::ssl::{Error as OpensslError, SslConnector, SslMethod};
+#[cfg(feature = "alpn")]
+use tokio_openssl::SslConnectorExt;
+
+#[cfg(all(feature = "tls", not(feature = "alpn")))]
+use native_tls::{Error as TlsError, TlsConnector};
+#[cfg(all(feature = "tls", not(feature = "alpn")))]
+use tokio_tls::TlsConnectorExt;
+
+use server::IoStream;
+use {HAS_OPENSSL, HAS_TLS};
+
+/// Client connector usage stats
+#[derive(Default, Message)]
+pub struct ClientConnectorStats {
+    /// Number of waited-on connections
+    pub waits: usize,
+    /// Size of the wait queue
+    pub wait_queue: usize,
+    /// Number of reused connections
+    pub reused: usize,
+    /// Number of opened connections
+    pub opened: usize,
+    /// Number of closed connections
+    pub closed: usize,
+    /// Number of connections with errors
+    pub errors: usize,
+    /// Number of connection timeouts
+    pub timeouts: usize,
+}
+
+#[derive(Debug)]
+/// `Connect` type represents a message that can be sent to
+/// `ClientConnector` with a connection request.
+pub struct Connect {
+    pub(crate) uri: Uri,
+    pub(crate) wait_timeout: Duration,
+    pub(crate) conn_timeout: Duration,
+}
+
+impl Connect {
+    /// Create `Connect` message for specified `Uri`
+    pub fn new<U>(uri: U) -> Result<Connect, HttpError>
+    where
+        Uri: HttpTryFrom<U>,
+    {
+        Ok(Connect {
+            uri: Uri::try_from(uri).map_err(|e| e.into())?,
+            wait_timeout: Duration::from_secs(5),
+            conn_timeout: Duration::from_secs(1),
+        })
+    }
+
+    /// Connection timeout, i.e. max time to connect to remote host.
+    /// Set to 1 second by default.
+    pub fn conn_timeout(mut self, timeout: Duration) -> Self {
+        self.conn_timeout = timeout;
+        self
+    }
+
+    /// If connection pool limits are enabled, wait time indicates
+    /// max time to wait for a connection to become available.
+    /// Set to 5 seconds by default.
+    pub fn wait_timeout(mut self, timeout: Duration) -> Self {
+        self.wait_timeout = timeout;
+        self
+    }
+}
+
+impl Message for Connect {
+    type Result = Result<Connection, ClientConnectorError>;
+}
+
+/// Pause connection process for `ClientConnector`
+///
+/// All connect requests enter wait state during connector pause.
+pub struct Pause {
+    time: Option<Duration>,
+}
+
+impl Pause {
+    /// Create message with pause duration parameter
+    pub fn new(time: Duration) -> Pause {
+        Pause { time: Some(time) }
+    }
+}
+
+impl Default for Pause {
+    fn default() -> Pause {
+        Pause { time: None }
+    }
+}
+
+impl Message for Pause {
+    type Result = ();
+}
+
+/// Resume connection process for `ClientConnector`
+#[derive(Message)]
+pub struct Resume;
+
+/// A set of errors that can occur while connecting to an HTTP host
+#[derive(Fail, Debug)]
+pub enum ClientConnectorError {
+    /// Invalid URL
+    #[fail(display = "Invalid URL")]
+    InvalidUrl,
+
+    /// SSL feature is not enabled
+    #[fail(display = "SSL is not supported")]
+    SslIsNotSupported,
+
+    /// SSL error
+    #[cfg(feature = "alpn")]
+    #[fail(display = "{}", _0)]
+    SslError(#[cause] OpensslError),
+
+    /// SSL error
+    #[cfg(all(feature = "tls", not(feature = "alpn")))]
+    #[fail(display = "{}", _0)]
+    SslError(#[cause] TlsError),
+
+    /// Resolver error
+    #[fail(display = "{}", _0)]
+    Resolver(#[cause] ResolverError),
+
+    /// Connection took too long
+    #[fail(display = "Timeout while establishing connection")]
+    Timeout,
+
+    /// Connector has been disconnected
+    #[fail(display = "Internal error: connector has been disconnected")]
+    Disconnected,
+
+    /// Connection IO error
+    #[fail(display = "{}", _0)]
+    IoError(#[cause] io::Error),
+}
+
+impl From<ResolverError> for ClientConnectorError {
+    fn from(err: ResolverError) -> ClientConnectorError {
+        match err {
+            ResolverError::Timeout => ClientConnectorError::Timeout,
+            _ => ClientConnectorError::Resolver(err),
+        }
+    }
+}
+
+struct Waiter {
+    tx: oneshot::Sender<Result<Connection, ClientConnectorError>>,
+    wait: Instant,
+    conn_timeout: Duration,
+}
+
+enum Paused {
+    No,
+    Yes,
+    Timeout(Instant, Delay),
+}
+
+impl Paused {
+    fn is_paused(&self) -> bool {
+        match *self {
+            Paused::No => false,
+            _ => true,
+        }
+    }
+}
+
+/// `ClientConnector` type is responsible for transport layer of a
+/// client connection.
+pub struct ClientConnector {
+    #[cfg(all(feature = "alpn"))]
+    connector: SslConnector,
+    #[cfg(all(feature = "tls", not(feature = "alpn")))]
+    connector: TlsConnector,
+
+    stats: ClientConnectorStats,
+    subscriber: Option<Recipient<ClientConnectorStats>>,
+
+    acq_tx: mpsc::UnboundedSender<AcquiredConnOperation>,
+    acq_rx: Option<mpsc::UnboundedReceiver<AcquiredConnOperation>>,
+
+    resolver: Option<Addr<Resolver>>,
+    conn_lifetime: Duration,
+    conn_keep_alive: Duration,
+    limit: usize,
+    limit_per_host: usize,
+    acquired: usize,
+    acquired_per_host: HashMap<Key, usize>,
+    available: HashMap<Key, VecDeque<Conn>>,
+    to_close: Vec<Connection>,
+    waiters: Option<HashMap<Key, VecDeque<Waiter>>>,
+    wait_timeout: Option<(Instant, Delay)>,
+    paused: Paused,
+}
+
+impl Actor for ClientConnector {
+    type Context = Context<ClientConnector>;
+
+    fn started(&mut self, ctx: &mut Self::Context) {
+        if self.resolver.is_none() {
+            self.resolver = Some(Resolver::from_registry())
+        }
+        self.collect_periodic(ctx);
+        ctx.add_stream(self.acq_rx.take().unwrap());
+        ctx.spawn(Maintenance);
+    }
+}
+
+impl Supervised for ClientConnector {}
+
+impl SystemService for ClientConnector {}
+
+impl Default for ClientConnector {
+    fn default() -> ClientConnector {
+        #[cfg(all(feature = "alpn"))]
+        {
+            let builder = SslConnector::builder(SslMethod::tls()).unwrap();
+            ClientConnector::with_connector(builder.build())
+        }
+        #[cfg(all(feature = "tls", not(feature = "alpn")))]
+        {
+            let (tx, rx) = mpsc::unbounded();
+            let builder = TlsConnector::builder().unwrap();
+            ClientConnector {
+                stats: ClientConnectorStats::default(),
+                subscriber: None,
+                acq_tx: tx,
+                acq_rx: Some(rx),
+                resolver: None,
+                connector: builder.build().unwrap(),
+                conn_lifetime: Duration::from_secs(75),
+                conn_keep_alive: Duration::from_secs(15),
+                limit: 100,
+                limit_per_host: 0,
+                acquired: 0,
+                acquired_per_host: HashMap::new(),
+                available: HashMap::new(),
+                to_close: Vec::new(),
+                waiters: Some(HashMap::new()),
+                wait_timeout: None,
+                paused: Paused::No,
+            }
+        }
+
+        #[cfg(not(any(feature = "alpn", feature = "tls")))]
+        {
+            let (tx, rx) = mpsc::unbounded();
+            ClientConnector {
+                stats: ClientConnectorStats::default(),
+                subscriber: None,
+                acq_tx: tx,
+                acq_rx: Some(rx),
+                resolver: None,
+                conn_lifetime: Duration::from_secs(75),
+                conn_keep_alive: Duration::from_secs(15),
+                limit: 100,
+                limit_per_host: 0,
+                acquired: 0,
+                acquired_per_host: HashMap::new(),
+                available: HashMap::new(),
+                to_close: Vec::new(),
+                waiters: Some(HashMap::new()),
+                wait_timeout: None,
+                paused: Paused::No,
+            }
+        }
+    }
+}
+
+impl ClientConnector {
+    #[cfg(feature = "alpn")]
+    /// Create `ClientConnector` actor with custom `SslConnector` instance.
+    ///
+    /// By default `ClientConnector` uses very a simple SSL configuration.
+    /// With `with_connector` method it is possible to use a custom
+    /// `SslConnector` object.
+    ///
+    /// ```rust,ignore
+    /// # #![cfg(feature="alpn")]
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// # use futures::{future, Future};
+    /// # use std::io::Write;
+    /// # use std::process;
+    /// # use actix_web::actix::Actor;
+    /// extern crate openssl;
+    /// use actix_web::{actix, client::ClientConnector, client::Connect};
+    ///
+    /// use openssl::ssl::{SslConnector, SslMethod};
+    ///
+    /// fn main() {
+    ///     actix::run(|| {
+    ///         // Start `ClientConnector` with custom `SslConnector`
+    ///         let ssl_conn = SslConnector::builder(SslMethod::tls()).unwrap().build();
+    ///         let conn = ClientConnector::with_connector(ssl_conn).start();
+    ///
+    ///         conn.send(
+    ///             Connect::new("https://www.rust-lang.org").unwrap()) // <- connect to host
+    ///                 .map_err(|_| ())
+    ///                 .and_then(|res| {
+    ///                     if let Ok(mut stream) = res {
+    ///                         stream.write_all(b"GET / HTTP/1.0\r\n\r\n").unwrap();
+    ///                     }
+    /// #                   actix::System::current().stop();
+    ///                     Ok(())
+    ///                 })
+    ///     );
+    /// }
+    /// ```
+    pub fn with_connector(connector: SslConnector) -> ClientConnector {
+        let (tx, rx) = mpsc::unbounded();
+
+        ClientConnector {
+            connector,
+            stats: ClientConnectorStats::default(),
+            subscriber: None,
+            acq_tx: tx,
+            acq_rx: Some(rx),
+            resolver: None,
+            conn_lifetime: Duration::from_secs(75),
+            conn_keep_alive: Duration::from_secs(15),
+            limit: 100,
+            limit_per_host: 0,
+            acquired: 0,
+            acquired_per_host: HashMap::new(),
+            available: HashMap::new(),
+            to_close: Vec::new(),
+            waiters: Some(HashMap::new()),
+            wait_timeout: None,
+            paused: Paused::No,
+        }
+    }
+
+    /// Set total number of simultaneous connections.
+    ///
+    /// If limit is 0, the connector has no limit.
+    /// The default limit size is 100.
+    pub fn limit(mut self, limit: usize) -> Self {
+        self.limit = limit;
+        self
+    }
+
+    /// Set total number of simultaneous connections to the same endpoint.
+    ///
+    /// Endpoints are the same if they have equal (host, port, ssl) triplets.
+    /// If limit is 0, the connector has no limit. The default limit size is 0.
+    pub fn limit_per_host(mut self, limit: usize) -> Self {
+        self.limit_per_host = limit;
+        self
+    }
+
+    /// Set keep-alive period for opened connection.
+    ///
+    /// Keep-alive period is the period between connection usage. If
+    /// the delay between repeated usages of the same connection
+    /// exceeds this period, the connection is closed.
+    /// Default keep-alive period is 15 seconds.
+    pub fn conn_keep_alive(mut self, dur: Duration) -> Self {
+        self.conn_keep_alive = dur;
+        self
+    }
+
+    /// Set max lifetime period for connection.
+    ///
+    /// Connection lifetime is max lifetime of any opened connection
+    /// until it is closed regardless of keep-alive period.
+    /// Default lifetime period is 75 seconds.
+    pub fn conn_lifetime(mut self, dur: Duration) -> Self {
+        self.conn_lifetime = dur;
+        self
+    }
+
+    /// Subscribe for connector stats. Only one subscriber is supported.
+    pub fn stats(mut self, subs: Recipient<ClientConnectorStats>) -> Self {
+        self.subscriber = Some(subs);
+        self
+    }
+
+    /// Use custom resolver actor
+    pub fn resolver(mut self, addr: Addr<Resolver>) -> Self {
+        self.resolver = Some(addr);
+        self
+    }
+
+    fn acquire(&mut self, key: &Key) -> Acquire {
+        // check limits
+        if self.limit > 0 {
+            if self.acquired >= self.limit {
+                return Acquire::NotAvailable;
+            }
+            if self.limit_per_host > 0 {
+                if let Some(per_host) = self.acquired_per_host.get(key) {
+                    if *per_host >= self.limit_per_host {
+                        return Acquire::NotAvailable;
+                    }
+                }
+            }
+        } else if self.limit_per_host > 0 {
+            if let Some(per_host) = self.acquired_per_host.get(key) {
+                if *per_host >= self.limit_per_host {
+                    return Acquire::NotAvailable;
+                }
+            }
+        }
+
+        self.reserve(key);
+
+        // check if open connection is available
+        // cleanup stale connections at the same time
+        if let Some(ref mut connections) = self.available.get_mut(key) {
+            let now = Instant::now();
+            while let Some(conn) = connections.pop_back() {
+                // check if it still usable
+                if (now - conn.0) > self.conn_keep_alive
+                    || (now - conn.1.ts) > self.conn_lifetime
+                {
+                    self.stats.closed += 1;
+                    self.to_close.push(conn.1);
+                } else {
+                    let mut conn = conn.1;
+                    let mut buf = [0; 2];
+                    match conn.stream().read(&mut buf) {
+                        Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => (),
+                        Ok(n) if n > 0 => {
+                            self.stats.closed += 1;
+                            self.to_close.push(conn);
+                            continue;
+                        }
+                        Ok(_) | Err(_) => continue,
+                    }
+                    return Acquire::Acquired(conn);
+                }
+            }
+        }
+        Acquire::Available
+    }
+
+    fn reserve(&mut self, key: &Key) {
+        self.acquired += 1;
+        let per_host = if let Some(per_host) = self.acquired_per_host.get(key) {
+            *per_host
+        } else {
+            0
+        };
+        self.acquired_per_host.insert(key.clone(), per_host + 1);
+    }
+
+    fn release_key(&mut self, key: &Key) {
+        if self.acquired > 0 {
+            self.acquired -= 1;
+        }
+        let per_host = if let Some(per_host) = self.acquired_per_host.get(key) {
+            *per_host
+        } else {
+            return;
+        };
+        if per_host > 1 {
+            self.acquired_per_host.insert(key.clone(), per_host - 1);
+        } else {
+            self.acquired_per_host.remove(key);
+        }
+    }
+
+    fn collect_periodic(&mut self, ctx: &mut Context<Self>) {
+        // check connections for shutdown
+        let mut idx = 0;
+        while idx < self.to_close.len() {
+            match AsyncWrite::shutdown(&mut self.to_close[idx]) {
+                Ok(Async::NotReady) => idx += 1,
+                _ => {
+                    self.to_close.swap_remove(idx);
+                }
+            }
+        }
+
+        // re-schedule next collect period
+        ctx.run_later(Duration::from_secs(1), |act, ctx| act.collect_periodic(ctx));
+
+        // send stats
+        let mut stats = mem::replace(&mut self.stats, ClientConnectorStats::default());
+        if let Some(ref mut subscr) = self.subscriber {
+            if let Some(ref waiters) = self.waiters {
+                for w in waiters.values() {
+                    stats.wait_queue += w.len();
+                }
+            }
+            let _ = subscr.do_send(stats);
+        }
+    }
+
+    // TODO: waiters should be sorted by deadline. maybe timewheel?
+    fn collect_waiters(&mut self) {
+        let now = Instant::now();
+        let mut next = None;
+
+        for waiters in self.waiters.as_mut().unwrap().values_mut() {
+            let mut idx = 0;
+            while idx < waiters.len() {
+                let wait = waiters[idx].wait;
+                if wait <= now {
+                    self.stats.timeouts += 1;
+                    let waiter = waiters.swap_remove_back(idx).unwrap();
+                    let _ = waiter.tx.send(Err(ClientConnectorError::Timeout));
+                } else {
+                    if let Some(n) = next {
+                        if wait < n {
+                            next = Some(wait);
+                        }
+                    } else {
+                        next = Some(wait);
+                    }
+                    idx += 1;
+                }
+            }
+        }
+
+        if next.is_some() {
+            self.install_wait_timeout(next.unwrap());
+        }
+    }
+
+    fn install_wait_timeout(&mut self, time: Instant) {
+        if let Some(ref mut wait) = self.wait_timeout {
+            if wait.0 < time {
+                return;
+            }
+        }
+
+        let mut timeout = Delay::new(time);
+        let _ = timeout.poll();
+        self.wait_timeout = Some((time, timeout));
+    }
+
+    fn wait_for(
+        &mut self, key: Key, wait: Duration, conn_timeout: Duration,
+    ) -> oneshot::Receiver<Result<Connection, ClientConnectorError>> {
+        // connection is not available, wait
+        let (tx, rx) = oneshot::channel();
+
+        let wait = Instant::now() + wait;
+        self.install_wait_timeout(wait);
+
+        let waiter = Waiter {
+            tx,
+            wait,
+            conn_timeout,
+        };
+        self.waiters
+            .as_mut()
+            .unwrap()
+            .entry(key)
+            .or_insert_with(VecDeque::new)
+            .push_back(waiter);
+        rx
+    }
+
+    fn check_availibility(&mut self, ctx: &mut Context<ClientConnector>) {
+        // check waiters
+        let mut act_waiters = self.waiters.take().unwrap();
+
+        for (key, ref mut waiters) in &mut act_waiters {
+            while let Some(waiter) = waiters.pop_front() {
+                if waiter.tx.is_canceled() {
+                    continue;
+                }
+
+                match self.acquire(key) {
+                    Acquire::Acquired(mut conn) => {
+                        // use existing connection
+                        self.stats.reused += 1;
+                        conn.pool =
+                            Some(AcquiredConn(key.clone(), Some(self.acq_tx.clone())));
+                        let _ = waiter.tx.send(Ok(conn));
+                    }
+                    Acquire::NotAvailable => {
+                        waiters.push_front(waiter);
+                        break;
+                    }
+                    Acquire::Available => {
+                        // create new connection
+                        self.connect_waiter(&key, waiter, ctx);
+                    }
+                }
+            }
+        }
+
+        self.waiters = Some(act_waiters);
+    }
+
+    fn connect_waiter(&mut self, key: &Key, waiter: Waiter, ctx: &mut Context<Self>) {
+        let key = key.clone();
+        let conn = AcquiredConn(key.clone(), Some(self.acq_tx.clone()));
+
+        let key2 = key.clone();
+        fut::WrapFuture::<ClientConnector>::actfuture(
+            self.resolver.as_ref().unwrap().send(
+                ResolveConnect::host_and_port(&conn.0.host, conn.0.port)
+                    .timeout(waiter.conn_timeout),
+            ),
+        ).map_err(move |_, act, _| {
+            act.release_key(&key2);
+            ()
+        })
+            .and_then(move |res, act, _| {
+                #[cfg(feature = "alpn")]
+                match res {
+                    Err(err) => {
+                        let _ = waiter.tx.send(Err(err.into()));
+                        fut::Either::B(fut::err(()))
+                    }
+                    Ok(stream) => {
+                        act.stats.opened += 1;
+                        if conn.0.ssl {
+                            fut::Either::A(
+                                act.connector
+                                    .connect_async(&key.host, stream)
+                                    .into_actor(act)
+                                    .then(move |res, _, _| {
+                                        match res {
+                                            Err(e) => {
+                                                let _ = waiter.tx.send(Err(
+                                                    ClientConnectorError::SslError(e),
+                                                ));
+                                            }
+                                            Ok(stream) => {
+                                                let _ =
+                                                    waiter.tx.send(Ok(Connection::new(
+                                                        conn.0.clone(),
+                                                        Some(conn),
+                                                        Box::new(stream),
+                                                    )));
+                                            }
+                                        }
+                                        fut::ok(())
+                                    }),
+                            )
+                        } else {
+                            let _ = waiter.tx.send(Ok(Connection::new(
+                                conn.0.clone(),
+                                Some(conn),
+                                Box::new(stream),
+                            )));
+                            fut::Either::B(fut::ok(()))
+                        }
+                    }
+                }
+
+                #[cfg(all(feature = "tls", not(feature = "alpn")))]
+                match res {
+                    Err(err) => {
+                        let _ = waiter.tx.send(Err(err.into()));
+                        fut::Either::B(fut::err(()))
+                    }
+                    Ok(stream) => {
+                        act.stats.opened += 1;
+                        if conn.0.ssl {
+                            fut::Either::A(
+                                act.connector
+                                    .connect_async(&conn.0.host, stream)
+                                    .into_actor(act)
+                                    .then(move |res, _, _| {
+                                        match res {
+                                            Err(e) => {
+                                                let _ = waiter.tx.send(Err(
+                                                    ClientConnectorError::SslError(e),
+                                                ));
+                                            }
+                                            Ok(stream) => {
+                                                let _ =
+                                                    waiter.tx.send(Ok(Connection::new(
+                                                        conn.0.clone(),
+                                                        Some(conn),
+                                                        Box::new(stream),
+                                                    )));
+                                            }
+                                        }
+                                        fut::ok(())
+                                    }),
+                            )
+                        } else {
+                            let _ = waiter.tx.send(Ok(Connection::new(
+                                conn.0.clone(),
+                                Some(conn),
+                                Box::new(stream),
+                            )));
+                            fut::Either::B(fut::ok(()))
+                        }
+                    }
+                }
+
+                #[cfg(not(any(feature = "alpn", feature = "tls")))]
+                match res {
+                    Err(err) => {
+                        let _ = waiter.tx.send(Err(err.into()));
+                        fut::err(())
+                    }
+                    Ok(stream) => {
+                        act.stats.opened += 1;
+                        if conn.0.ssl {
+                            let _ = waiter
+                                .tx
+                                .send(Err(ClientConnectorError::SslIsNotSupported));
+                        } else {
+                            let _ = waiter.tx.send(Ok(Connection::new(
+                                conn.0.clone(),
+                                Some(conn),
+                                Box::new(stream),
+                            )));
+                        };
+                        fut::ok(())
+                    }
+                }
+            })
+            .spawn(ctx);
+    }
+}
+
+impl Handler<Pause> for ClientConnector {
+    type Result = ();
+
+    fn handle(&mut self, msg: Pause, _: &mut Self::Context) {
+        if let Some(time) = msg.time {
+            let when = Instant::now() + time;
+            let mut timeout = Delay::new(when);
+            let _ = timeout.poll();
+            self.paused = Paused::Timeout(when, timeout);
+        } else {
+            self.paused = Paused::Yes;
+        }
+    }
+}
+
+impl Handler<Resume> for ClientConnector {
+    type Result = ();
+
+    fn handle(&mut self, _: Resume, _: &mut Self::Context) {
+        self.paused = Paused::No;
+    }
+}
+
+impl Handler<Connect> for ClientConnector {
+    type Result = ActorResponse<ClientConnector, Connection, ClientConnectorError>;
+
+    fn handle(&mut self, msg: Connect, ctx: &mut Self::Context) -> Self::Result {
+        let uri = &msg.uri;
+        let wait_timeout = msg.wait_timeout;
+        let conn_timeout = msg.conn_timeout;
+
+        // host name is required
+        if uri.host().is_none() {
+            return ActorResponse::reply(Err(ClientConnectorError::InvalidUrl));
+        }
+
+        // supported protocols
+        let proto = match uri.scheme_part() {
+            Some(scheme) => match Protocol::from(scheme.as_str()) {
+                Some(proto) => proto,
+                None => {
+                    return ActorResponse::reply(Err(ClientConnectorError::InvalidUrl))
+                }
+            },
+            None => return ActorResponse::reply(Err(ClientConnectorError::InvalidUrl)),
+        };
+
+        // check ssl availability
+        if proto.is_secure() && !HAS_OPENSSL && !HAS_TLS {
+            return ActorResponse::reply(Err(ClientConnectorError::SslIsNotSupported));
+        }
+
+        let host = uri.host().unwrap().to_owned();
+        let port = uri.port().unwrap_or_else(|| proto.port());
+        let key = Key {
+            host,
+            port,
+            ssl: proto.is_secure(),
+        };
+
+        // check pause state
+        if self.paused.is_paused() {
+            let rx = self.wait_for(key.clone(), wait_timeout, conn_timeout);
+            self.stats.waits += 1;
+            return ActorResponse::async(
+                rx.map_err(|_| ClientConnectorError::Disconnected)
+                    .into_actor(self)
+                    .and_then(move |res, act, ctx| match res {
+                        Ok(conn) => fut::ok(conn),
+                        Err(err) => {
+                            match err {
+                                ClientConnectorError::Timeout => (),
+                                _ => {
+                                    act.release_key(&key);
+                                }
+                            }
+                            act.stats.errors += 1;
+                            act.check_availibility(ctx);
+                            fut::err(err)
+                        }
+                    }),
+            );
+        }
+
+        // do not re-use websockets connection
+        if !proto.is_http() {
+            let (tx, rx) = oneshot::channel();
+            let wait = Instant::now() + wait_timeout;
+            let waiter = Waiter {
+                tx,
+                wait,
+                conn_timeout,
+            };
+            self.connect_waiter(&key, waiter, ctx);
+
+            return ActorResponse::async(
+                rx.map_err(|_| ClientConnectorError::Disconnected)
+                    .into_actor(self)
+                    .and_then(move |res, act, ctx| match res {
+                        Ok(conn) => fut::ok(conn),
+                        Err(err) => {
+                            act.stats.errors += 1;
+                            act.release_key(&key);
+                            act.check_availibility(ctx);
+                            fut::err(err)
+                        }
+                    }),
+            );
+        }
+
+        // acquire connection
+        match self.acquire(&key) {
+            Acquire::Acquired(mut conn) => {
+                // use existing connection
+                conn.pool = Some(AcquiredConn(key, Some(self.acq_tx.clone())));
+                self.stats.reused += 1;
+                ActorResponse::async(fut::ok(conn))
+            }
+            Acquire::NotAvailable => {
+                // connection is not available, wait
+                let rx = self.wait_for(key.clone(), wait_timeout, conn_timeout);
+                self.stats.waits += 1;
+
+                ActorResponse::async(
+                    rx.map_err(|_| ClientConnectorError::Disconnected)
+                        .into_actor(self)
+                        .and_then(move |res, act, ctx| match res {
+                            Ok(conn) => fut::ok(conn),
+                            Err(err) => {
+                                match err {
+                                    ClientConnectorError::Timeout => (),
+                                    _ => {
+                                        act.release_key(&key);
+                                    }
+                                }
+                                act.stats.errors += 1;
+                                act.check_availibility(ctx);
+                                fut::err(err)
+                            }
+                        }),
+                )
+            }
+            Acquire::Available => {
+                let (tx, rx) = oneshot::channel();
+                let wait = Instant::now() + wait_timeout;
+                let waiter = Waiter {
+                    tx,
+                    wait,
+                    conn_timeout,
+                };
+                self.connect_waiter(&key, waiter, ctx);
+
+                ActorResponse::async(
+                    rx.map_err(|_| ClientConnectorError::Disconnected)
+                        .into_actor(self)
+                        .and_then(move |res, act, ctx| match res {
+                            Ok(conn) => fut::ok(conn),
+                            Err(err) => {
+                                act.stats.errors += 1;
+                                act.release_key(&key);
+                                act.check_availibility(ctx);
+                                fut::err(err)
+                            }
+                        }),
+                )
+            }
+        }
+    }
+}
+
+impl StreamHandler<AcquiredConnOperation, ()> for ClientConnector {
+    fn handle(&mut self, msg: AcquiredConnOperation, ctx: &mut Context<Self>) {
+        match msg {
+            AcquiredConnOperation::Close(conn) => {
+                self.release_key(&conn.key);
+                self.to_close.push(conn);
+                self.stats.closed += 1;
+            }
+            AcquiredConnOperation::Release(conn) => {
+                self.release_key(&conn.key);
+                if (Instant::now() - conn.ts) < self.conn_lifetime {
+                    self.available
+                        .entry(conn.key.clone())
+                        .or_insert_with(VecDeque::new)
+                        .push_back(Conn(Instant::now(), conn));
+                } else {
+                    self.to_close.push(conn);
+                    self.stats.closed += 1;
+                }
+            }
+            AcquiredConnOperation::ReleaseKey(key) => {
+                // closed
+                self.stats.closed += 1;
+                self.release_key(&key);
+            }
+        }
+
+        self.check_availibility(ctx);
+    }
+}
+
+struct Maintenance;
+
+impl fut::ActorFuture for Maintenance {
+    type Item = ();
+    type Error = ();
+    type Actor = ClientConnector;
+
+    fn poll(
+        &mut self, act: &mut ClientConnector, ctx: &mut Context<ClientConnector>,
+    ) -> Poll<Self::Item, Self::Error> {
+        // check pause duration
+        if let Paused::Timeout(inst, _) = act.paused {
+            if inst <= Instant::now() {
+                act.paused = Paused::No;
+            }
+        }
+
+        // collect wait timers
+        act.collect_waiters();
+
+        // check waiters
+        act.check_availibility(ctx);
+
+        Ok(Async::NotReady)
+    }
+}
+
+#[derive(PartialEq, Hash, Debug, Clone, Copy)]
+enum Protocol {
+    Http,
+    Https,
+    Ws,
+    Wss,
+}
+
+impl Protocol {
+    fn from(s: &str) -> Option<Protocol> {
+        match s {
+            "http" => Some(Protocol::Http),
+            "https" => Some(Protocol::Https),
+            "ws" => Some(Protocol::Ws),
+            "wss" => Some(Protocol::Wss),
+            _ => None,
+        }
+    }
+
+    fn is_http(self) -> bool {
+        match self {
+            Protocol::Https | Protocol::Http => true,
+            _ => false,
+        }
+    }
+
+    fn is_secure(self) -> bool {
+        match self {
+            Protocol::Https | Protocol::Wss => true,
+            _ => false,
+        }
+    }
+
+    fn port(self) -> u16 {
+        match self {
+            Protocol::Http | Protocol::Ws => 80,
+            Protocol::Https | Protocol::Wss => 443,
+        }
+    }
+}
+
+#[derive(Hash, Eq, PartialEq, Clone, Debug)]
+struct Key {
+    host: String,
+    port: u16,
+    ssl: bool,
+}
+
+impl Key {
+    fn empty() -> Key {
+        Key {
+            host: String::new(),
+            port: 0,
+            ssl: false,
+        }
+    }
+}
+
+#[derive(Debug)]
+struct Conn(Instant, Connection);
+
+enum Acquire {
+    Acquired(Connection),
+    Available,
+    NotAvailable,
+}
+
+enum AcquiredConnOperation {
+    Close(Connection),
+    Release(Connection),
+    ReleaseKey(Key),
+}
+
+struct AcquiredConn(Key, Option<mpsc::UnboundedSender<AcquiredConnOperation>>);
+
+impl AcquiredConn {
+    fn close(&mut self, conn: Connection) {
+        if let Some(tx) = self.1.take() {
+            let _ = tx.unbounded_send(AcquiredConnOperation::Close(conn));
+        }
+    }
+    fn release(&mut self, conn: Connection) {
+        if let Some(tx) = self.1.take() {
+            let _ = tx.unbounded_send(AcquiredConnOperation::Release(conn));
+        }
+    }
+}
+
+impl Drop for AcquiredConn {
+    fn drop(&mut self) {
+        if let Some(tx) = self.1.take() {
+            let _ = tx.unbounded_send(AcquiredConnOperation::ReleaseKey(self.0.clone()));
+        }
+    }
+}
+
+/// HTTP client connection
+pub struct Connection {
+    key: Key,
+    stream: Box<IoStream + Send>,
+    pool: Option<AcquiredConn>,
+    ts: Instant,
+}
+
+impl fmt::Debug for Connection {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "Connection {}:{}", self.key.host, self.key.port)
+    }
+}
+
+impl Connection {
+    fn new(key: Key, pool: Option<AcquiredConn>, stream: Box<IoStream + Send>) -> Self {
+        Connection {
+            key,
+            stream,
+            pool,
+            ts: Instant::now(),
+        }
+    }
+
+    /// Raw IO stream
+    pub fn stream(&mut self) -> &mut IoStream {
+        &mut *self.stream
+    }
+
+    /// Create a new connection from an IO Stream
+    pub fn from_stream<T: IoStream + Send>(io: T) -> Connection {
+        Connection::new(Key::empty(), None, Box::new(io))
+    }
+
+    /// Close connection
+    pub fn close(mut self) {
+        if let Some(mut pool) = self.pool.take() {
+            pool.close(self)
+        }
+    }
+
+    /// Release this connection to the connection pool
+    pub fn release(mut self) {
+        if let Some(mut pool) = self.pool.take() {
+            pool.release(self)
+        }
+    }
+}
+
+impl IoStream for Connection {
+    fn shutdown(&mut self, how: Shutdown) -> io::Result<()> {
+        IoStream::shutdown(&mut *self.stream, how)
+    }
+
+    #[inline]
+    fn set_nodelay(&mut self, nodelay: bool) -> io::Result<()> {
+        IoStream::set_nodelay(&mut *self.stream, nodelay)
+    }
+
+    #[inline]
+    fn set_linger(&mut self, dur: Option<time::Duration>) -> io::Result<()> {
+        IoStream::set_linger(&mut *self.stream, dur)
+    }
+}
+
+impl io::Read for Connection {
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        self.stream.read(buf)
+    }
+}
+
+impl AsyncRead for Connection {}
+
+impl io::Write for Connection {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.stream.write(buf)
+    }
+
+    fn flush(&mut self) -> io::Result<()> {
+        self.stream.flush()
+    }
+}
+
+impl AsyncWrite for Connection {
+    fn shutdown(&mut self) -> Poll<(), io::Error> {
+        self.stream.shutdown()
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/mod.rs.html new file mode 100644 index 0000000..053524e --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/mod.rs.html @@ -0,0 +1,239 @@ +mod.rs.html -- source
  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
+
+//! Http client api
+//!
+//! ```rust
+//! # extern crate actix_web;
+//! # extern crate futures;
+//! # extern crate tokio;
+//! # use futures::Future;
+//! # use std::process;
+//! use actix_web::{actix, client};
+//!
+//! fn main() {
+//!     actix::run(
+//!         || client::get("http://www.rust-lang.org")   // <- Create request builder
+//!             .header("User-Agent", "Actix-web")
+//!             .finish().unwrap()
+//!             .send()                               // <- Send http request
+//!             .map_err(|_| ())
+//!             .and_then(|response| {                // <- server http response
+//!                 println!("Response: {:?}", response);
+//! #               actix::System::current().stop();
+//!                 Ok(())
+//!             })
+//!     );
+//! }
+//! ```
+mod connector;
+mod parser;
+mod pipeline;
+mod request;
+mod response;
+mod writer;
+
+pub use self::connector::{
+    ClientConnector, ClientConnectorError, ClientConnectorStats, Connect, Connection,
+    Pause, Resume,
+};
+pub(crate) use self::parser::{HttpResponseParser, HttpResponseParserError};
+pub(crate) use self::pipeline::Pipeline;
+pub use self::pipeline::{SendRequest, SendRequestError};
+pub use self::request::{ClientRequest, ClientRequestBuilder};
+pub use self::response::ClientResponse;
+pub(crate) use self::writer::HttpClientWriter;
+
+use error::ResponseError;
+use http::Method;
+use httpresponse::HttpResponse;
+
+/// Convert `SendRequestError` to a `HttpResponse`
+impl ResponseError for SendRequestError {
+    fn error_response(&self) -> HttpResponse {
+        match *self {
+            SendRequestError::Timeout => HttpResponse::GatewayTimeout(),
+            SendRequestError::Connector(_) => HttpResponse::BadGateway(),
+            _ => HttpResponse::InternalServerError(),
+        }.into()
+    }
+}
+
+/// Create request builder for `GET` requests
+///
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// # extern crate tokio;
+/// # extern crate env_logger;
+/// # use futures::Future;
+/// # use std::process;
+/// use actix_web::{actix, client};
+///
+/// fn main() {
+///     actix::run(
+///         || client::get("http://www.rust-lang.org")   // <- Create request builder
+///             .header("User-Agent", "Actix-web")
+///             .finish().unwrap()
+///             .send()                               // <- Send http request
+///             .map_err(|_| ())
+///             .and_then(|response| {                // <- server http response
+///                 println!("Response: {:?}", response);
+/// #               actix::System::current().stop();
+///                 Ok(())
+///             }),
+///     );
+/// }
+/// ```
+pub fn get<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+    let mut builder = ClientRequest::build();
+    builder.method(Method::GET).uri(uri);
+    builder
+}
+
+/// Create request builder for `HEAD` requests
+pub fn head<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+    let mut builder = ClientRequest::build();
+    builder.method(Method::HEAD).uri(uri);
+    builder
+}
+
+/// Create request builder for `POST` requests
+pub fn post<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+    let mut builder = ClientRequest::build();
+    builder.method(Method::POST).uri(uri);
+    builder
+}
+
+/// Create request builder for `PUT` requests
+pub fn put<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+    let mut builder = ClientRequest::build();
+    builder.method(Method::PUT).uri(uri);
+    builder
+}
+
+/// Create request builder for `DELETE` requests
+pub fn delete<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+    let mut builder = ClientRequest::build();
+    builder.method(Method::DELETE).uri(uri);
+    builder
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/parser.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/parser.rs.html new file mode 100644 index 0000000..be90d39 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/parser.rs.html @@ -0,0 +1,447 @@ +parser.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+
+use std::mem;
+
+use bytes::{Bytes, BytesMut};
+use futures::{Async, Poll};
+use http::header::{self, HeaderName, HeaderValue};
+use http::{HeaderMap, StatusCode, Version};
+use httparse;
+
+use error::{ParseError, PayloadError};
+
+use server::h1decoder::{EncodingDecoder, HeaderIndex};
+use server::IoStream;
+
+use super::response::ClientMessage;
+use super::ClientResponse;
+
+const MAX_BUFFER_SIZE: usize = 131_072;
+const MAX_HEADERS: usize = 96;
+
+#[derive(Default)]
+pub struct HttpResponseParser {
+    decoder: Option<EncodingDecoder>,
+}
+
+#[derive(Debug, Fail)]
+pub enum HttpResponseParserError {
+    /// Server disconnected
+    #[fail(display = "Server disconnected")]
+    Disconnect,
+    #[fail(display = "{}", _0)]
+    Error(#[cause] ParseError),
+}
+
+impl HttpResponseParser {
+    pub fn parse<T>(
+        &mut self, io: &mut T, buf: &mut BytesMut,
+    ) -> Poll<ClientResponse, HttpResponseParserError>
+    where
+        T: IoStream,
+    {
+        // if buf is empty parse_message will always return NotReady, let's avoid that
+        if buf.is_empty() {
+            match io.read_available(buf) {
+                Ok(Async::Ready(true)) => {
+                    return Err(HttpResponseParserError::Disconnect)
+                }
+                Ok(Async::Ready(false)) => (),
+                Ok(Async::NotReady) => return Ok(Async::NotReady),
+                Err(err) => return Err(HttpResponseParserError::Error(err.into())),
+            }
+        }
+
+        loop {
+            match HttpResponseParser::parse_message(buf)
+                .map_err(HttpResponseParserError::Error)?
+            {
+                Async::Ready((msg, decoder)) => {
+                    self.decoder = decoder;
+                    return Ok(Async::Ready(msg));
+                }
+                Async::NotReady => {
+                    if buf.capacity() >= MAX_BUFFER_SIZE {
+                        return Err(HttpResponseParserError::Error(ParseError::TooLarge));
+                    }
+                    match io.read_available(buf) {
+                        Ok(Async::Ready(true)) => {
+                            return Err(HttpResponseParserError::Disconnect)
+                        }
+                        Ok(Async::Ready(false)) => (),
+                        Ok(Async::NotReady) => return Ok(Async::NotReady),
+                        Err(err) => {
+                            return Err(HttpResponseParserError::Error(err.into()))
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    pub fn parse_payload<T>(
+        &mut self, io: &mut T, buf: &mut BytesMut,
+    ) -> Poll<Option<Bytes>, PayloadError>
+    where
+        T: IoStream,
+    {
+        if self.decoder.is_some() {
+            loop {
+                // read payload
+                let (not_ready, stream_finished) = match io.read_available(buf) {
+                    Ok(Async::Ready(true)) => (false, true),
+                    Ok(Async::Ready(false)) => (false, false),
+                    Ok(Async::NotReady) => (true, false),
+                    Err(err) => return Err(err.into()),
+                };
+
+                match self.decoder.as_mut().unwrap().decode(buf) {
+                    Ok(Async::Ready(Some(b))) => return Ok(Async::Ready(Some(b))),
+                    Ok(Async::Ready(None)) => {
+                        self.decoder.take();
+                        return Ok(Async::Ready(None));
+                    }
+                    Ok(Async::NotReady) => {
+                        if not_ready {
+                            return Ok(Async::NotReady);
+                        }
+                        if stream_finished {
+                            return Err(PayloadError::Incomplete);
+                        }
+                    }
+                    Err(err) => return Err(err.into()),
+                }
+            }
+        } else {
+            Ok(Async::Ready(None))
+        }
+    }
+
+    fn parse_message(
+        buf: &mut BytesMut,
+    ) -> Poll<(ClientResponse, Option<EncodingDecoder>), ParseError> {
+        // Unsafe: we read only this data only after httparse parses headers into.
+        // performance bump for pipeline benchmarks.
+        let mut headers: [HeaderIndex; MAX_HEADERS] = unsafe { mem::uninitialized() };
+
+        let (len, version, status, headers_len) = {
+            let mut parsed: [httparse::Header; MAX_HEADERS] =
+                unsafe { mem::uninitialized() };
+
+            let mut resp = httparse::Response::new(&mut parsed);
+            match resp.parse(buf)? {
+                httparse::Status::Complete(len) => {
+                    let version = if resp.version.unwrap_or(1) == 1 {
+                        Version::HTTP_11
+                    } else {
+                        Version::HTTP_10
+                    };
+                    HeaderIndex::record(buf, resp.headers, &mut headers);
+                    let status = StatusCode::from_u16(resp.code.unwrap())
+                        .map_err(|_| ParseError::Status)?;
+
+                    (len, version, status, resp.headers.len())
+                }
+                httparse::Status::Partial => return Ok(Async::NotReady),
+            }
+        };
+
+        let slice = buf.split_to(len).freeze();
+
+        // convert headers
+        let mut hdrs = HeaderMap::new();
+        for idx in headers[..headers_len].iter() {
+            if let Ok(name) = HeaderName::from_bytes(&slice[idx.name.0..idx.name.1]) {
+                // Unsafe: httparse check header value for valid utf-8
+                let value = unsafe {
+                    HeaderValue::from_shared_unchecked(
+                        slice.slice(idx.value.0, idx.value.1),
+                    )
+                };
+                hdrs.append(name, value);
+            } else {
+                return Err(ParseError::Header);
+            }
+        }
+
+        let decoder = if status == StatusCode::SWITCHING_PROTOCOLS {
+            Some(EncodingDecoder::eof())
+        } else if let Some(len) = hdrs.get(header::CONTENT_LENGTH) {
+            // Content-Length
+            if let Ok(s) = len.to_str() {
+                if let Ok(len) = s.parse::<u64>() {
+                    Some(EncodingDecoder::length(len))
+                } else {
+                    debug!("illegal Content-Length: {:?}", len);
+                    return Err(ParseError::Header);
+                }
+            } else {
+                debug!("illegal Content-Length: {:?}", len);
+                return Err(ParseError::Header);
+            }
+        } else if chunked(&hdrs)? {
+            // Chunked encoding
+            Some(EncodingDecoder::chunked())
+        } else {
+            None
+        };
+
+        if let Some(decoder) = decoder {
+            Ok(Async::Ready((
+                ClientResponse::new(ClientMessage {
+                    status,
+                    version,
+                    headers: hdrs,
+                    cookies: None,
+                }),
+                Some(decoder),
+            )))
+        } else {
+            Ok(Async::Ready((
+                ClientResponse::new(ClientMessage {
+                    status,
+                    version,
+                    headers: hdrs,
+                    cookies: None,
+                }),
+                None,
+            )))
+        }
+    }
+}
+
+/// Check if request has chunked transfer encoding
+pub fn chunked(headers: &HeaderMap) -> Result<bool, ParseError> {
+    if let Some(encodings) = headers.get(header::TRANSFER_ENCODING) {
+        if let Ok(s) = encodings.to_str() {
+            Ok(s.to_lowercase().contains("chunked"))
+        } else {
+            Err(ParseError::Header)
+        }
+    } else {
+        Ok(false)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/pipeline.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/pipeline.rs.html new file mode 100644 index 0000000..e194330 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/pipeline.rs.html @@ -0,0 +1,1107 @@ +pipeline.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+
+use bytes::{Bytes, BytesMut};
+use futures::sync::oneshot;
+use futures::{Async, Future, Poll, Stream};
+use http::header::CONTENT_ENCODING;
+use std::time::{Duration, Instant};
+use std::{io, mem};
+use tokio_timer::Delay;
+
+use actix::{Addr, Request, SystemService};
+
+use super::{
+    ClientConnector, ClientConnectorError, ClientRequest, ClientResponse, Connect,
+    Connection, HttpClientWriter, HttpResponseParser, HttpResponseParserError,
+};
+use body::{Body, BodyStream};
+use context::{ActorHttpContext, Frame};
+use error::Error;
+use error::PayloadError;
+use header::ContentEncoding;
+use http::{Method, Uri};
+use httpmessage::HttpMessage;
+use server::input::PayloadStream;
+use server::WriterState;
+
+/// A set of errors that can occur during request sending and response reading
+#[derive(Fail, Debug)]
+pub enum SendRequestError {
+    /// Response took too long
+    #[fail(display = "Timeout while waiting for response")]
+    Timeout,
+    /// Failed to connect to host
+    #[fail(display = "Failed to connect to host: {}", _0)]
+    Connector(#[cause] ClientConnectorError),
+    /// Error parsing response
+    #[fail(display = "{}", _0)]
+    ParseError(#[cause] HttpResponseParserError),
+    /// Error reading response payload
+    #[fail(display = "Error reading response payload: {}", _0)]
+    Io(#[cause] io::Error),
+}
+
+impl From<io::Error> for SendRequestError {
+    fn from(err: io::Error) -> SendRequestError {
+        SendRequestError::Io(err)
+    }
+}
+
+impl From<ClientConnectorError> for SendRequestError {
+    fn from(err: ClientConnectorError) -> SendRequestError {
+        match err {
+            ClientConnectorError::Timeout => SendRequestError::Timeout,
+            _ => SendRequestError::Connector(err),
+        }
+    }
+}
+
+enum State {
+    New,
+    Connect(Request<ClientConnector, Connect>),
+    Connection(Connection),
+    Send(Box<Pipeline>),
+    None,
+}
+
+/// `SendRequest` is a `Future` which represents an asynchronous
+/// request sending process.
+#[must_use = "SendRequest does nothing unless polled"]
+pub struct SendRequest {
+    req: ClientRequest,
+    state: State,
+    conn: Option<Addr<ClientConnector>>,
+    conn_timeout: Duration,
+    wait_timeout: Duration,
+    timeout: Option<Duration>,
+}
+
+impl SendRequest {
+    pub(crate) fn new(req: ClientRequest) -> SendRequest {
+        SendRequest {
+            req,
+            conn: None,
+            state: State::New,
+            timeout: None,
+            wait_timeout: Duration::from_secs(5),
+            conn_timeout: Duration::from_secs(1),
+        }
+    }
+
+    pub(crate) fn with_connector(
+        req: ClientRequest, conn: Addr<ClientConnector>,
+    ) -> SendRequest {
+        SendRequest {
+            req,
+            conn: Some(conn),
+            state: State::New,
+            timeout: None,
+            wait_timeout: Duration::from_secs(5),
+            conn_timeout: Duration::from_secs(1),
+        }
+    }
+
+    pub(crate) fn with_connection(req: ClientRequest, conn: Connection) -> SendRequest {
+        SendRequest {
+            req,
+            state: State::Connection(conn),
+            conn: None,
+            timeout: None,
+            wait_timeout: Duration::from_secs(5),
+            conn_timeout: Duration::from_secs(1),
+        }
+    }
+
+    /// Set request timeout
+    ///
+    /// Request timeout is the total time before a response must be received.
+    /// Default value is 5 seconds.
+    pub fn timeout(mut self, timeout: Duration) -> Self {
+        self.timeout = Some(timeout);
+        self
+    }
+
+    /// Set connection timeout
+    ///
+    /// Connection timeout includes resolving hostname and actual connection to
+    /// the host.
+    /// Default value is 1 second.
+    pub fn conn_timeout(mut self, timeout: Duration) -> Self {
+        self.conn_timeout = timeout;
+        self
+    }
+
+    /// Set wait timeout
+    ///
+    /// If connections pool limits are enabled, wait time indicates max time
+    /// to wait for available connection. Default value is 5 seconds.
+    pub fn wait_timeout(mut self, timeout: Duration) -> Self {
+        self.wait_timeout = timeout;
+        self
+    }
+}
+
+impl Future for SendRequest {
+    type Item = ClientResponse;
+    type Error = SendRequestError;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        loop {
+            let state = mem::replace(&mut self.state, State::None);
+
+            match state {
+                State::New => {
+                    let conn = if let Some(conn) = self.conn.take() {
+                        conn
+                    } else {
+                        ClientConnector::from_registry()
+                    };
+                    self.state = State::Connect(conn.send(Connect {
+                        uri: self.req.uri().clone(),
+                        wait_timeout: self.wait_timeout,
+                        conn_timeout: self.conn_timeout,
+                    }))
+                }
+                State::Connect(mut conn) => match conn.poll() {
+                    Ok(Async::NotReady) => {
+                        self.state = State::Connect(conn);
+                        return Ok(Async::NotReady);
+                    }
+                    Ok(Async::Ready(result)) => match result {
+                        Ok(stream) => self.state = State::Connection(stream),
+                        Err(err) => return Err(err.into()),
+                    },
+                    Err(_) => {
+                        return Err(SendRequestError::Connector(
+                            ClientConnectorError::Disconnected,
+                        ));
+                    }
+                },
+                State::Connection(conn) => {
+                    let mut writer = HttpClientWriter::new();
+                    writer.start(&mut self.req)?;
+
+                    let body = match self.req.replace_body(Body::Empty) {
+                        Body::Streaming(stream) => IoBody::Payload(stream),
+                        Body::Actor(ctx) => IoBody::Actor(ctx),
+                        _ => IoBody::Done,
+                    };
+
+                    let timeout = self
+                        .timeout
+                        .take()
+                        .unwrap_or_else(|| Duration::from_secs(5));
+
+                    let pl = Box::new(Pipeline {
+                        body,
+                        writer,
+                        conn: Some(conn),
+                        parser: Some(HttpResponseParser::default()),
+                        parser_buf: BytesMut::new(),
+                        disconnected: false,
+                        body_completed: false,
+                        drain: None,
+                        decompress: None,
+                        should_decompress: self.req.response_decompress(),
+                        write_state: RunningState::Running,
+                        timeout: Some(Delay::new(Instant::now() + timeout)),
+                        meth: self.req.method().clone(),
+                        path: self.req.uri().clone(),
+                    });
+                    self.state = State::Send(pl);
+                }
+                State::Send(mut pl) => {
+                    pl.poll_timeout()?;
+                    pl.poll_write().map_err(|e| {
+                        io::Error::new(io::ErrorKind::Other, format!("{}", e).as_str())
+                    })?;
+
+                    match pl.parse() {
+                        Ok(Async::Ready(mut resp)) => {
+                            if self.req.method() == Method::HEAD {
+                                pl.parser.take();
+                            }
+                            resp.set_pipeline(pl);
+                            return Ok(Async::Ready(resp));
+                        }
+                        Ok(Async::NotReady) => {
+                            self.state = State::Send(pl);
+                            return Ok(Async::NotReady);
+                        }
+                        Err(err) => {
+                            return Err(SendRequestError::ParseError(err));
+                        }
+                    }
+                }
+                State::None => unreachable!(),
+            }
+        }
+    }
+}
+
+pub struct Pipeline {
+    body: IoBody,
+    body_completed: bool,
+    conn: Option<Connection>,
+    writer: HttpClientWriter,
+    parser: Option<HttpResponseParser>,
+    parser_buf: BytesMut,
+    disconnected: bool,
+    drain: Option<oneshot::Sender<()>>,
+    decompress: Option<PayloadStream>,
+    should_decompress: bool,
+    write_state: RunningState,
+    timeout: Option<Delay>,
+    meth: Method,
+    path: Uri,
+}
+
+enum IoBody {
+    Payload(BodyStream),
+    Actor(Box<ActorHttpContext>),
+    Done,
+}
+
+#[derive(Debug, PartialEq)]
+enum RunningState {
+    Running,
+    Paused,
+    Done,
+}
+
+impl RunningState {
+    #[inline]
+    fn pause(&mut self) {
+        if *self != RunningState::Done {
+            *self = RunningState::Paused
+        }
+    }
+    #[inline]
+    fn resume(&mut self) {
+        if *self != RunningState::Done {
+            *self = RunningState::Running
+        }
+    }
+}
+
+impl Pipeline {
+    fn release_conn(&mut self) {
+        if let Some(conn) = self.conn.take() {
+            if self.meth == Method::HEAD {
+                conn.close()
+            } else {
+                conn.release()
+            }
+        }
+    }
+
+    #[inline]
+    fn parse(&mut self) -> Poll<ClientResponse, HttpResponseParserError> {
+        if let Some(ref mut conn) = self.conn {
+            match self
+                .parser
+                .as_mut()
+                .unwrap()
+                .parse(conn, &mut self.parser_buf)
+            {
+                Ok(Async::Ready(resp)) => {
+                    // check content-encoding
+                    if self.should_decompress {
+                        if let Some(enc) = resp.headers().get(CONTENT_ENCODING) {
+                            if let Ok(enc) = enc.to_str() {
+                                match ContentEncoding::from(enc) {
+                                    ContentEncoding::Auto
+                                    | ContentEncoding::Identity => (),
+                                    enc => {
+                                        self.decompress = Some(PayloadStream::new(enc))
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    Ok(Async::Ready(resp))
+                }
+                val => val,
+            }
+        } else {
+            Ok(Async::NotReady)
+        }
+    }
+
+    #[inline]
+    pub(crate) fn poll(&mut self) -> Poll<Option<Bytes>, PayloadError> {
+        if self.conn.is_none() {
+            return Ok(Async::Ready(None));
+        }
+        let mut need_run = false;
+
+        // need write?
+        match self
+            .poll_write()
+            .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("{}", e)))?
+        {
+            Async::NotReady => need_run = true,
+            Async::Ready(_) => {
+                self.poll_timeout().map_err(|e| {
+                    io::Error::new(io::ErrorKind::Other, format!("{}", e))
+                })?;
+            }
+        }
+
+        // need read?
+        if self.parser.is_some() {
+            let conn: &mut Connection = self.conn.as_mut().unwrap();
+
+            loop {
+                match self
+                    .parser
+                    .as_mut()
+                    .unwrap()
+                    .parse_payload(conn, &mut self.parser_buf)?
+                {
+                    Async::Ready(Some(b)) => {
+                        if let Some(ref mut decompress) = self.decompress {
+                            match decompress.feed_data(b) {
+                                Ok(Some(b)) => return Ok(Async::Ready(Some(b))),
+                                Ok(None) => return Ok(Async::NotReady),
+                                Err(ref err)
+                                    if err.kind() == io::ErrorKind::WouldBlock =>
+                                {
+                                    continue
+                                }
+                                Err(err) => return Err(err.into()),
+                            }
+                        } else {
+                            return Ok(Async::Ready(Some(b)));
+                        }
+                    }
+                    Async::Ready(None) => {
+                        let _ = self.parser.take();
+                        break;
+                    }
+                    Async::NotReady => return Ok(Async::NotReady),
+                }
+            }
+        }
+
+        // eof
+        if let Some(mut decompress) = self.decompress.take() {
+            let res = decompress.feed_eof();
+            if let Some(b) = res? {
+                self.release_conn();
+                return Ok(Async::Ready(Some(b)));
+            }
+        }
+
+        if need_run {
+            Ok(Async::NotReady)
+        } else {
+            self.release_conn();
+            Ok(Async::Ready(None))
+        }
+    }
+
+    fn poll_timeout(&mut self) -> Result<(), SendRequestError> {
+        if self.timeout.is_some() {
+            match self.timeout.as_mut().unwrap().poll() {
+                Ok(Async::Ready(())) => return Err(SendRequestError::Timeout),
+                Ok(Async::NotReady) => (),
+                Err(e) => return Err(io::Error::new(io::ErrorKind::Other, e).into()),
+            }
+        }
+        Ok(())
+    }
+
+    #[inline]
+    fn poll_write(&mut self) -> Poll<(), Error> {
+        if self.write_state == RunningState::Done || self.conn.is_none() {
+            return Ok(Async::Ready(()));
+        }
+
+        let mut done = false;
+        if self.drain.is_none() && self.write_state != RunningState::Paused {
+            'outter: loop {
+                let result = match mem::replace(&mut self.body, IoBody::Done) {
+                    IoBody::Payload(mut body) => match body.poll()? {
+                        Async::Ready(None) => {
+                            self.writer.write_eof()?;
+                            self.body_completed = true;
+                            break;
+                        }
+                        Async::Ready(Some(chunk)) => {
+                            self.body = IoBody::Payload(body);
+                            self.writer.write(chunk.as_ref())?
+                        }
+                        Async::NotReady => {
+                            done = true;
+                            self.body = IoBody::Payload(body);
+                            break;
+                        }
+                    },
+                    IoBody::Actor(mut ctx) => {
+                        if self.disconnected {
+                            ctx.disconnected();
+                        }
+                        match ctx.poll()? {
+                            Async::Ready(Some(vec)) => {
+                                if vec.is_empty() {
+                                    self.body = IoBody::Actor(ctx);
+                                    break;
+                                }
+                                let mut res = None;
+                                for frame in vec {
+                                    match frame {
+                                        Frame::Chunk(None) => {
+                                            self.body_completed = true;
+                                            self.writer.write_eof()?;
+                                            break 'outter;
+                                        }
+                                        Frame::Chunk(Some(chunk)) => {
+                                            res =
+                                                Some(self.writer.write(chunk.as_ref())?)
+                                        }
+                                        Frame::Drain(fut) => self.drain = Some(fut),
+                                    }
+                                }
+                                self.body = IoBody::Actor(ctx);
+                                if self.drain.is_some() {
+                                    self.write_state.resume();
+                                    break;
+                                }
+                                res.unwrap()
+                            }
+                            Async::Ready(None) => {
+                                done = true;
+                                break;
+                            }
+                            Async::NotReady => {
+                                done = true;
+                                self.body = IoBody::Actor(ctx);
+                                break;
+                            }
+                        }
+                    }
+                    IoBody::Done => {
+                        self.body_completed = true;
+                        done = true;
+                        break;
+                    }
+                };
+
+                match result {
+                    WriterState::Pause => {
+                        self.write_state.pause();
+                        break;
+                    }
+                    WriterState::Done => self.write_state.resume(),
+                }
+            }
+        }
+
+        // flush io but only if we need to
+        match self
+            .writer
+            .poll_completed(self.conn.as_mut().unwrap(), false)
+        {
+            Ok(Async::Ready(_)) => {
+                if self.disconnected
+                    || (self.body_completed && self.writer.is_completed())
+                {
+                    self.write_state = RunningState::Done;
+                } else {
+                    self.write_state.resume();
+                }
+
+                // resolve drain futures
+                if let Some(tx) = self.drain.take() {
+                    let _ = tx.send(());
+                }
+                // restart io processing
+                if !done || self.write_state == RunningState::Done {
+                    self.poll_write()
+                } else {
+                    Ok(Async::NotReady)
+                }
+            }
+            Ok(Async::NotReady) => Ok(Async::NotReady),
+            Err(err) => Err(err.into()),
+        }
+    }
+}
+
+impl Drop for Pipeline {
+    fn drop(&mut self) {
+        if let Some(conn) = self.conn.take() {
+            debug!(
+                "Client http transaction is not completed, dropping connection: {:?} {:?}",
+                self.meth,
+                self.path,
+            );
+            conn.close()
+        }
+    }
+}
+
+/// Future that resolves to a complete request body.
+impl Stream for Box<Pipeline> {
+    type Item = Bytes;
+    type Error = PayloadError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        Pipeline::poll(self)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/request.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/request.rs.html new file mode 100644 index 0000000..a626287 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/request.rs.html @@ -0,0 +1,1533 @@ +request.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+
+use std::fmt::Write as FmtWrite;
+use std::io::Write;
+use std::time::Duration;
+use std::{fmt, mem};
+
+use actix::Addr;
+use bytes::{BufMut, Bytes, BytesMut};
+use cookie::{Cookie, CookieJar};
+use futures::Stream;
+use percent_encoding::{percent_encode, USERINFO_ENCODE_SET};
+use serde::Serialize;
+use serde_json;
+use serde_urlencoded;
+use url::Url;
+
+use super::connector::{ClientConnector, Connection};
+use super::pipeline::SendRequest;
+use body::Body;
+use error::Error;
+use header::{ContentEncoding, Header, IntoHeaderValue};
+use http::header::{self, HeaderName, HeaderValue};
+use http::{uri, Error as HttpError, HeaderMap, HttpTryFrom, Method, Uri, Version};
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+
+/// An HTTP Client Request
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// # extern crate tokio;
+/// # use futures::Future;
+/// # use std::process;
+/// use actix_web::{actix, client};
+///
+/// fn main() {
+///     actix::run(
+///         || client::ClientRequest::get("http://www.rust-lang.org") // <- Create request builder
+///             .header("User-Agent", "Actix-web")
+///             .finish().unwrap()
+///             .send()                                    // <- Send http request
+///             .map_err(|_| ())
+///             .and_then(|response| {                     // <- server http response
+///                 println!("Response: {:?}", response);
+/// #               actix::System::current().stop();
+///                 Ok(())
+///             }),
+///     );
+/// }
+/// ```
+pub struct ClientRequest {
+    uri: Uri,
+    method: Method,
+    version: Version,
+    headers: HeaderMap,
+    body: Body,
+    chunked: bool,
+    upgrade: bool,
+    timeout: Option<Duration>,
+    encoding: ContentEncoding,
+    response_decompress: bool,
+    buffer_capacity: usize,
+    conn: ConnectionType,
+}
+
+enum ConnectionType {
+    Default,
+    Connector(Addr<ClientConnector>),
+    Connection(Connection),
+}
+
+impl Default for ClientRequest {
+    fn default() -> ClientRequest {
+        ClientRequest {
+            uri: Uri::default(),
+            method: Method::default(),
+            version: Version::HTTP_11,
+            headers: HeaderMap::with_capacity(16),
+            body: Body::Empty,
+            chunked: false,
+            upgrade: false,
+            timeout: None,
+            encoding: ContentEncoding::Auto,
+            response_decompress: true,
+            buffer_capacity: 32_768,
+            conn: ConnectionType::Default,
+        }
+    }
+}
+
+impl ClientRequest {
+    /// Create request builder for `GET` request
+    pub fn get<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        builder.method(Method::GET).uri(uri);
+        builder
+    }
+
+    /// Create request builder for `HEAD` request
+    pub fn head<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        builder.method(Method::HEAD).uri(uri);
+        builder
+    }
+
+    /// Create request builder for `POST` request
+    pub fn post<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        builder.method(Method::POST).uri(uri);
+        builder
+    }
+
+    /// Create request builder for `PUT` request
+    pub fn put<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        builder.method(Method::PUT).uri(uri);
+        builder
+    }
+
+    /// Create request builder for `DELETE` request
+    pub fn delete<U: AsRef<str>>(uri: U) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        builder.method(Method::DELETE).uri(uri);
+        builder
+    }
+}
+
+impl ClientRequest {
+    /// Create client request builder
+    pub fn build() -> ClientRequestBuilder {
+        ClientRequestBuilder {
+            request: Some(ClientRequest::default()),
+            err: None,
+            cookies: None,
+            default_headers: true,
+        }
+    }
+
+    /// Create client request builder
+    pub fn build_from<T: Into<ClientRequestBuilder>>(source: T) -> ClientRequestBuilder {
+        source.into()
+    }
+
+    /// Get the request URI
+    #[inline]
+    pub fn uri(&self) -> &Uri {
+        &self.uri
+    }
+
+    /// Set client request URI
+    #[inline]
+    pub fn set_uri(&mut self, uri: Uri) {
+        self.uri = uri
+    }
+
+    /// Get the request method
+    #[inline]
+    pub fn method(&self) -> &Method {
+        &self.method
+    }
+
+    /// Set HTTP `Method` for the request
+    #[inline]
+    pub fn set_method(&mut self, method: Method) {
+        self.method = method
+    }
+
+    /// Get HTTP version for the request
+    #[inline]
+    pub fn version(&self) -> Version {
+        self.version
+    }
+
+    /// Set http `Version` for the request
+    #[inline]
+    pub fn set_version(&mut self, version: Version) {
+        self.version = version
+    }
+
+    /// Get the headers from the request
+    #[inline]
+    pub fn headers(&self) -> &HeaderMap {
+        &self.headers
+    }
+
+    /// Get a mutable reference to the headers
+    #[inline]
+    pub fn headers_mut(&mut self) -> &mut HeaderMap {
+        &mut self.headers
+    }
+
+    /// is chunked encoding enabled
+    #[inline]
+    pub fn chunked(&self) -> bool {
+        self.chunked
+    }
+
+    /// is upgrade request
+    #[inline]
+    pub fn upgrade(&self) -> bool {
+        self.upgrade
+    }
+
+    /// Content encoding
+    #[inline]
+    pub fn content_encoding(&self) -> ContentEncoding {
+        self.encoding
+    }
+
+    /// Decompress response payload
+    #[inline]
+    pub fn response_decompress(&self) -> bool {
+        self.response_decompress
+    }
+
+    /// Requested write buffer capacity
+    pub fn write_buffer_capacity(&self) -> usize {
+        self.buffer_capacity
+    }
+
+    /// Get body of this response
+    #[inline]
+    pub fn body(&self) -> &Body {
+        &self.body
+    }
+
+    /// Set a body
+    pub fn set_body<B: Into<Body>>(&mut self, body: B) {
+        self.body = body.into();
+    }
+
+    /// Extract body, replace it with `Empty`
+    pub(crate) fn replace_body(&mut self, body: Body) -> Body {
+        mem::replace(&mut self.body, body)
+    }
+
+    /// Send request
+    ///
+    /// This method returns a future that resolves to a ClientResponse
+    pub fn send(mut self) -> SendRequest {
+        let timeout = self.timeout.take();
+        let send = match mem::replace(&mut self.conn, ConnectionType::Default) {
+            ConnectionType::Default => SendRequest::new(self),
+            ConnectionType::Connector(conn) => SendRequest::with_connector(self, conn),
+            ConnectionType::Connection(conn) => SendRequest::with_connection(self, conn),
+        };
+        if let Some(timeout) = timeout {
+            send.timeout(timeout)
+        } else {
+            send
+        }
+    }
+}
+
+impl fmt::Debug for ClientRequest {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let res = writeln!(
+            f,
+            "\nClientRequest {:?} {}:{}",
+            self.version, self.method, self.uri
+        );
+        let _ = writeln!(f, "  headers:");
+        for (key, val) in self.headers.iter() {
+            let _ = writeln!(f, "    {:?}: {:?}", key, val);
+        }
+        res
+    }
+}
+
+/// An HTTP Client request builder
+///
+/// This type can be used to construct an instance of `ClientRequest` through a
+/// builder-like pattern.
+pub struct ClientRequestBuilder {
+    request: Option<ClientRequest>,
+    err: Option<HttpError>,
+    cookies: Option<CookieJar>,
+    default_headers: bool,
+}
+
+impl ClientRequestBuilder {
+    /// Set HTTP URI of request.
+    #[inline]
+    pub fn uri<U: AsRef<str>>(&mut self, uri: U) -> &mut Self {
+        match Url::parse(uri.as_ref()) {
+            Ok(url) => self._uri(url.as_str()),
+            Err(_) => self._uri(uri.as_ref()),
+        }
+    }
+
+    fn _uri(&mut self, url: &str) -> &mut Self {
+        match Uri::try_from(url) {
+            Ok(uri) => {
+                // set request host header
+                if let Some(host) = uri.host() {
+                    self.set_header(header::HOST, host);
+                }
+                if let Some(parts) = parts(&mut self.request, &self.err) {
+                    parts.uri = uri;
+                }
+            }
+            Err(e) => self.err = Some(e.into()),
+        }
+        self
+    }
+
+    /// Set HTTP method of this request.
+    #[inline]
+    pub fn method(&mut self, method: Method) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.method = method;
+        }
+        self
+    }
+
+    /// Set HTTP method of this request.
+    #[inline]
+    pub fn get_method(&mut self) -> &Method {
+        let parts =
+            parts(&mut self.request, &self.err).expect("cannot reuse request builder");
+        &parts.method
+    }
+
+    /// Set HTTP version of this request.
+    ///
+    /// By default requests's HTTP version depends on network stream
+    #[inline]
+    pub fn version(&mut self, version: Version) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.version = version;
+        }
+        self
+    }
+
+    /// Set a header.
+    ///
+    /// ```rust
+    /// # extern crate mime;
+    /// # extern crate actix_web;
+    /// # use actix_web::client::*;
+    /// #
+    /// use actix_web::{client, http};
+    ///
+    /// fn main() {
+    ///     let req = client::ClientRequest::build()
+    ///         .set(http::header::Date::now())
+    ///         .set(http::header::ContentType(mime::TEXT_HTML))
+    ///         .finish()
+    ///         .unwrap();
+    /// }
+    /// ```
+    #[doc(hidden)]
+    pub fn set<H: Header>(&mut self, hdr: H) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            match hdr.try_into() {
+                Ok(value) => {
+                    parts.headers.insert(H::name(), value);
+                }
+                Err(e) => self.err = Some(e.into()),
+            }
+        }
+        self
+    }
+
+    /// Append a header.
+    ///
+    /// Header gets appended to existing header.
+    /// To override header use `set_header()` method.
+    ///
+    /// ```rust
+    /// # extern crate http;
+    /// # extern crate actix_web;
+    /// # use actix_web::client::*;
+    /// #
+    /// use http::header;
+    ///
+    /// fn main() {
+    ///     let req = ClientRequest::build()
+    ///         .header("X-TEST", "value")
+    ///         .header(header::CONTENT_TYPE, "application/json")
+    ///         .finish()
+    ///         .unwrap();
+    /// }
+    /// ```
+    pub fn header<K, V>(&mut self, key: K, value: V) -> &mut Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            match HeaderName::try_from(key) {
+                Ok(key) => match value.try_into() {
+                    Ok(value) => {
+                        parts.headers.append(key, value);
+                    }
+                    Err(e) => self.err = Some(e.into()),
+                },
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set a header.
+    pub fn set_header<K, V>(&mut self, key: K, value: V) -> &mut Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            match HeaderName::try_from(key) {
+                Ok(key) => match value.try_into() {
+                    Ok(value) => {
+                        parts.headers.insert(key, value);
+                    }
+                    Err(e) => self.err = Some(e.into()),
+                },
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set a header only if it is not yet set.
+    pub fn set_header_if_none<K, V>(&mut self, key: K, value: V) -> &mut Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            match HeaderName::try_from(key) {
+                Ok(key) => if !parts.headers.contains_key(&key) {
+                    match value.try_into() {
+                        Ok(value) => {
+                            parts.headers.insert(key, value);
+                        }
+                        Err(e) => self.err = Some(e.into()),
+                    }
+                },
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set content encoding.
+    ///
+    /// By default `ContentEncoding::Identity` is used.
+    #[inline]
+    pub fn content_encoding(&mut self, enc: ContentEncoding) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.encoding = enc;
+        }
+        self
+    }
+
+    /// Enables automatic chunked transfer encoding
+    #[inline]
+    pub fn chunked(&mut self) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.chunked = true;
+        }
+        self
+    }
+
+    /// Enable connection upgrade
+    #[inline]
+    pub fn upgrade(&mut self) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.upgrade = true;
+        }
+        self
+    }
+
+    /// Set request's content type
+    #[inline]
+    pub fn content_type<V>(&mut self, value: V) -> &mut Self
+    where
+        HeaderValue: HttpTryFrom<V>,
+    {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            match HeaderValue::try_from(value) {
+                Ok(value) => {
+                    parts.headers.insert(header::CONTENT_TYPE, value);
+                }
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set content length
+    #[inline]
+    pub fn content_length(&mut self, len: u64) -> &mut Self {
+        let mut wrt = BytesMut::new().writer();
+        let _ = write!(wrt, "{}", len);
+        self.header(header::CONTENT_LENGTH, wrt.get_mut().take().freeze())
+    }
+
+    /// Set a cookie
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{client, http};
+    ///
+    /// fn main() {
+    ///     let req = client::ClientRequest::build()
+    ///         .cookie(
+    ///             http::Cookie::build("name", "value")
+    ///                 .domain("www.rust-lang.org")
+    ///                 .path("/")
+    ///                 .secure(true)
+    ///                 .http_only(true)
+    ///                 .finish(),
+    ///         )
+    ///         .finish()
+    ///         .unwrap();
+    /// }
+    /// ```
+    pub fn cookie<'c>(&mut self, cookie: Cookie<'c>) -> &mut Self {
+        if self.cookies.is_none() {
+            let mut jar = CookieJar::new();
+            jar.add(cookie.into_owned());
+            self.cookies = Some(jar)
+        } else {
+            self.cookies.as_mut().unwrap().add(cookie.into_owned());
+        }
+        self
+    }
+
+    /// Do not add default request headers.
+    /// By default `Accept-Encoding` and `User-Agent` headers are set.
+    pub fn no_default_headers(&mut self) -> &mut Self {
+        self.default_headers = false;
+        self
+    }
+
+    /// Disable automatic decompress response body
+    pub fn disable_decompress(&mut self) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.response_decompress = false;
+        }
+        self
+    }
+
+    /// Set write buffer capacity
+    ///
+    /// Default buffer capacity is 32kb
+    pub fn write_buffer_capacity(&mut self, cap: usize) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.buffer_capacity = cap;
+        }
+        self
+    }
+
+    /// Set request timeout
+    ///
+    /// Request timeout is a total time before response should be received.
+    /// Default value is 5 seconds.
+    pub fn timeout(&mut self, timeout: Duration) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.timeout = Some(timeout);
+        }
+        self
+    }
+
+    /// Send request using custom connector
+    pub fn with_connector(&mut self, conn: Addr<ClientConnector>) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.conn = ConnectionType::Connector(conn);
+        }
+        self
+    }
+
+    /// Send request using existing `Connection`
+    pub fn with_connection(&mut self, conn: Connection) -> &mut Self {
+        if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.conn = ConnectionType::Connection(conn);
+        }
+        self
+    }
+
+    /// This method calls provided closure with builder reference if
+    /// value is `true`.
+    pub fn if_true<F>(&mut self, value: bool, f: F) -> &mut Self
+    where
+        F: FnOnce(&mut ClientRequestBuilder),
+    {
+        if value {
+            f(self);
+        }
+        self
+    }
+
+    /// This method calls provided closure with builder reference if
+    /// value is `Some`.
+    pub fn if_some<T, F>(&mut self, value: Option<T>, f: F) -> &mut Self
+    where
+        F: FnOnce(T, &mut ClientRequestBuilder),
+    {
+        if let Some(val) = value {
+            f(val, self);
+        }
+        self
+    }
+
+    /// Set a body and generate `ClientRequest`.
+    ///
+    /// `ClientRequestBuilder` can not be used after this call.
+    pub fn body<B: Into<Body>>(&mut self, body: B) -> Result<ClientRequest, Error> {
+        if let Some(e) = self.err.take() {
+            return Err(e.into());
+        }
+
+        if self.default_headers {
+            // enable br only for https
+            let https = if let Some(parts) = parts(&mut self.request, &self.err) {
+                parts
+                    .uri
+                    .scheme_part()
+                    .map(|s| s == &uri::Scheme::HTTPS)
+                    .unwrap_or(true)
+            } else {
+                true
+            };
+
+            if https {
+                self.set_header_if_none(header::ACCEPT_ENCODING, "br, gzip, deflate");
+            } else {
+                self.set_header_if_none(header::ACCEPT_ENCODING, "gzip, deflate");
+            }
+
+            self.set_header_if_none(
+                header::USER_AGENT,
+                concat!("Actix-web/", env!("CARGO_PKG_VERSION")),
+            );
+        }
+
+        let mut request = self.request.take().expect("cannot reuse request builder");
+
+        // set cookies
+        if let Some(ref mut jar) = self.cookies {
+            let mut cookie = String::new();
+            for c in jar.delta() {
+                let name = percent_encode(c.name().as_bytes(), USERINFO_ENCODE_SET);
+                let value = percent_encode(c.value().as_bytes(), USERINFO_ENCODE_SET);
+                let _ = write!(&mut cookie, "; {}={}", name, value);
+            }
+            request.headers.insert(
+                header::COOKIE,
+                HeaderValue::from_str(&cookie.as_str()[2..]).unwrap(),
+            );
+        }
+        request.body = body.into();
+        Ok(request)
+    }
+
+    /// Set a JSON body and generate `ClientRequest`
+    ///
+    /// `ClientRequestBuilder` can not be used after this call.
+    pub fn json<T: Serialize>(&mut self, value: T) -> Result<ClientRequest, Error> {
+        let body = serde_json::to_string(&value)?;
+
+        let contains = if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.headers.contains_key(header::CONTENT_TYPE)
+        } else {
+            true
+        };
+        if !contains {
+            self.header(header::CONTENT_TYPE, "application/json");
+        }
+
+        self.body(body)
+    }
+
+    /// Set a urlencoded body and generate `ClientRequest`
+    ///
+    /// `ClientRequestBuilder` can not be used after this call.
+    pub fn form<T: Serialize>(&mut self, value: T) -> Result<ClientRequest, Error> {
+        let body = serde_urlencoded::to_string(&value)?;
+
+        let contains = if let Some(parts) = parts(&mut self.request, &self.err) {
+            parts.headers.contains_key(header::CONTENT_TYPE)
+        } else {
+            true
+        };
+        if !contains {
+            self.header(header::CONTENT_TYPE, "application/x-www-form-urlencoded");
+        }
+
+        self.body(body)
+    }
+
+    /// Set a streaming body and generate `ClientRequest`.
+    ///
+    /// `ClientRequestBuilder` can not be used after this call.
+    pub fn streaming<S, E>(&mut self, stream: S) -> Result<ClientRequest, Error>
+    where
+        S: Stream<Item = Bytes, Error = E> + 'static,
+        E: Into<Error>,
+    {
+        self.body(Body::Streaming(Box::new(stream.map_err(|e| e.into()))))
+    }
+
+    /// Set an empty body and generate `ClientRequest`
+    ///
+    /// `ClientRequestBuilder` can not be used after this call.
+    pub fn finish(&mut self) -> Result<ClientRequest, Error> {
+        self.body(Body::Empty)
+    }
+
+    /// This method construct new `ClientRequestBuilder`
+    pub fn take(&mut self) -> ClientRequestBuilder {
+        ClientRequestBuilder {
+            request: self.request.take(),
+            err: self.err.take(),
+            cookies: self.cookies.take(),
+            default_headers: self.default_headers,
+        }
+    }
+}
+
+#[inline]
+fn parts<'a>(
+    parts: &'a mut Option<ClientRequest>, err: &Option<HttpError>,
+) -> Option<&'a mut ClientRequest> {
+    if err.is_some() {
+        return None;
+    }
+    parts.as_mut()
+}
+
+impl fmt::Debug for ClientRequestBuilder {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        if let Some(ref parts) = self.request {
+            let res = writeln!(
+                f,
+                "\nClientRequestBuilder {:?} {}:{}",
+                parts.version, parts.method, parts.uri
+            );
+            let _ = writeln!(f, "  headers:");
+            for (key, val) in parts.headers.iter() {
+                let _ = writeln!(f, "    {:?}: {:?}", key, val);
+            }
+            res
+        } else {
+            write!(f, "ClientRequestBuilder(Consumed)")
+        }
+    }
+}
+
+/// Create `ClientRequestBuilder` from `HttpRequest`
+///
+/// It is useful for proxy requests. This implementation
+/// copies all request headers and the method.
+impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder {
+    fn from(req: &'a HttpRequest<S>) -> ClientRequestBuilder {
+        let mut builder = ClientRequest::build();
+        for (key, value) in req.headers() {
+            builder.header(key.clone(), value.clone());
+        }
+        builder.method(req.method().clone());
+        builder
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/response.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/response.rs.html new file mode 100644 index 0000000..c3fe621 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/response.rs.html @@ -0,0 +1,251 @@ +response.rs.html -- source
  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
+
+use std::cell::RefCell;
+use std::{fmt, str};
+
+use cookie::Cookie;
+use http::header::{self, HeaderValue};
+use http::{HeaderMap, StatusCode, Version};
+
+use error::CookieParseError;
+use httpmessage::HttpMessage;
+
+use super::pipeline::Pipeline;
+
+pub(crate) struct ClientMessage {
+    pub status: StatusCode,
+    pub version: Version,
+    pub headers: HeaderMap<HeaderValue>,
+    pub cookies: Option<Vec<Cookie<'static>>>,
+}
+
+impl Default for ClientMessage {
+    fn default() -> ClientMessage {
+        ClientMessage {
+            status: StatusCode::OK,
+            version: Version::HTTP_11,
+            headers: HeaderMap::with_capacity(16),
+            cookies: None,
+        }
+    }
+}
+
+/// An HTTP Client response
+pub struct ClientResponse(ClientMessage, RefCell<Option<Box<Pipeline>>>);
+
+impl HttpMessage for ClientResponse {
+    type Stream = Box<Pipeline>;
+
+    /// Get the headers from the response.
+    #[inline]
+    fn headers(&self) -> &HeaderMap {
+        &self.0.headers
+    }
+
+    #[inline]
+    fn payload(&self) -> Box<Pipeline> {
+        self.1
+            .borrow_mut()
+            .take()
+            .expect("Payload is already consumed.")
+    }
+}
+
+impl ClientResponse {
+    pub(crate) fn new(msg: ClientMessage) -> ClientResponse {
+        ClientResponse(msg, RefCell::new(None))
+    }
+
+    pub(crate) fn set_pipeline(&mut self, pl: Box<Pipeline>) {
+        *self.1.borrow_mut() = Some(pl);
+    }
+
+    /// Get the HTTP version of this response.
+    #[inline]
+    pub fn version(&self) -> Version {
+        self.0.version
+    }
+
+    /// Get the status from the server.
+    #[inline]
+    pub fn status(&self) -> StatusCode {
+        self.0.status
+    }
+
+    /// Load response cookies.
+    pub fn cookies(&self) -> Result<Vec<Cookie<'static>>, CookieParseError> {
+        let mut cookies = Vec::new();
+        for val in self.0.headers.get_all(header::SET_COOKIE).iter() {
+            let s = str::from_utf8(val.as_bytes()).map_err(CookieParseError::from)?;
+            cookies.push(Cookie::parse_encoded(s)?.into_owned());
+        }
+        Ok(cookies)
+    }
+
+    /// Return request cookie.
+    pub fn cookie(&self, name: &str) -> Option<Cookie> {
+        if let Ok(cookies) = self.cookies() {
+            for cookie in cookies {
+                if cookie.name() == name {
+                    return Some(cookie);
+                }
+            }
+        }
+        None
+    }
+}
+
+impl fmt::Debug for ClientResponse {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let res = writeln!(f, "\nClientResponse {:?} {}", self.version(), self.status());
+        let _ = writeln!(f, "  headers:");
+        for (key, val) in self.headers().iter() {
+            let _ = writeln!(f, "    {:?}: {:?}", key, val);
+        }
+        res
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_debug() {
+        let mut resp = ClientResponse::new(ClientMessage::default());
+        resp.0
+            .headers
+            .insert(header::COOKIE, HeaderValue::from_static("cookie1=value1"));
+        resp.0
+            .headers
+            .insert(header::COOKIE, HeaderValue::from_static("cookie2=value2"));
+
+        let dbg = format!("{:?}", resp);
+        assert!(dbg.contains("ClientResponse"));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/client/writer.rs.html b/static/api/actix-web/0.7.2/src/actix_web/client/writer.rs.html new file mode 100644 index 0000000..c951367 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/client/writer.rs.html @@ -0,0 +1,823 @@ +writer.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+
+#![cfg_attr(feature = "cargo-clippy", allow(redundant_field_names))]
+
+use std::cell::RefCell;
+use std::fmt::Write as FmtWrite;
+use std::io::{self, Write};
+
+#[cfg(feature = "brotli")]
+use brotli2::write::BrotliEncoder;
+use bytes::{BufMut, BytesMut};
+#[cfg(feature = "flate2")]
+use flate2::write::{DeflateEncoder, GzEncoder};
+#[cfg(feature = "flate2")]
+use flate2::Compression;
+use futures::{Async, Poll};
+use http::header::{
+    HeaderValue, CONNECTION, CONTENT_ENCODING, CONTENT_LENGTH, DATE, TRANSFER_ENCODING,
+};
+use http::{HttpTryFrom, Version};
+use time::{self, Duration};
+use tokio_io::AsyncWrite;
+
+use body::{Binary, Body};
+use header::ContentEncoding;
+use server::output::{ContentEncoder, Output, TransferEncoding};
+use server::WriterState;
+
+use client::ClientRequest;
+
+const AVERAGE_HEADER_SIZE: usize = 30;
+
+bitflags! {
+    struct Flags: u8 {
+        const STARTED = 0b0000_0001;
+        const UPGRADE = 0b0000_0010;
+        const KEEPALIVE = 0b0000_0100;
+        const DISCONNECTED = 0b0000_1000;
+    }
+}
+
+pub(crate) struct HttpClientWriter {
+    flags: Flags,
+    written: u64,
+    headers_size: u32,
+    buffer: Output,
+    buffer_capacity: usize,
+}
+
+impl HttpClientWriter {
+    pub fn new() -> HttpClientWriter {
+        HttpClientWriter {
+            flags: Flags::empty(),
+            written: 0,
+            headers_size: 0,
+            buffer_capacity: 0,
+            buffer: Output::Buffer(BytesMut::new()),
+        }
+    }
+
+    pub fn disconnected(&mut self) {
+        self.buffer.take();
+    }
+
+    pub fn is_completed(&self) -> bool {
+        self.buffer.is_empty()
+    }
+
+    // pub fn keepalive(&self) -> bool {
+    // self.flags.contains(Flags::KEEPALIVE) &&
+    // !self.flags.contains(Flags::UPGRADE) }
+
+    fn write_to_stream<T: AsyncWrite>(
+        &mut self, stream: &mut T,
+    ) -> io::Result<WriterState> {
+        while !self.buffer.is_empty() {
+            match stream.write(self.buffer.as_ref().as_ref()) {
+                Ok(0) => {
+                    self.disconnected();
+                    return Ok(WriterState::Done);
+                }
+                Ok(n) => {
+                    let _ = self.buffer.split_to(n);
+                }
+                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
+                    if self.buffer.len() > self.buffer_capacity {
+                        return Ok(WriterState::Pause);
+                    } else {
+                        return Ok(WriterState::Done);
+                    }
+                }
+                Err(err) => return Err(err),
+            }
+        }
+        Ok(WriterState::Done)
+    }
+}
+
+pub struct Writer<'a>(pub &'a mut BytesMut);
+
+impl<'a> io::Write for Writer<'a> {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.0.extend_from_slice(buf);
+        Ok(buf.len())
+    }
+    fn flush(&mut self) -> io::Result<()> {
+        Ok(())
+    }
+}
+
+impl HttpClientWriter {
+    pub fn start(&mut self, msg: &mut ClientRequest) -> io::Result<()> {
+        // prepare task
+        self.buffer = content_encoder(self.buffer.take(), msg);
+        self.flags.insert(Flags::STARTED);
+        if msg.upgrade() {
+            self.flags.insert(Flags::UPGRADE);
+        }
+
+        // render message
+        {
+            // output buffer
+            let buffer = self.buffer.as_mut();
+
+            // status line
+            writeln!(
+                Writer(buffer),
+                "{} {} {:?}\r",
+                msg.method(),
+                msg.uri()
+                    .path_and_query()
+                    .map(|u| u.as_str())
+                    .unwrap_or("/"),
+                msg.version()
+            ).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
+
+            // write headers
+            if let Body::Binary(ref bytes) = *msg.body() {
+                buffer.reserve(msg.headers().len() * AVERAGE_HEADER_SIZE + bytes.len());
+            } else {
+                buffer.reserve(msg.headers().len() * AVERAGE_HEADER_SIZE);
+            }
+
+            for (key, value) in msg.headers() {
+                let v = value.as_ref();
+                let k = key.as_str().as_bytes();
+                buffer.reserve(k.len() + v.len() + 4);
+                buffer.put_slice(k);
+                buffer.put_slice(b": ");
+                buffer.put_slice(v);
+                buffer.put_slice(b"\r\n");
+            }
+
+            // set date header
+            if !msg.headers().contains_key(DATE) {
+                buffer.extend_from_slice(b"date: ");
+                set_date(buffer);
+                buffer.extend_from_slice(b"\r\n\r\n");
+            } else {
+                buffer.extend_from_slice(b"\r\n");
+            }
+        }
+        self.headers_size = self.buffer.len() as u32;
+
+        if msg.body().is_binary() {
+            if let Body::Binary(bytes) = msg.replace_body(Body::Empty) {
+                self.written += bytes.len() as u64;
+                self.buffer.write(bytes.as_ref())?;
+            }
+        } else {
+            self.buffer_capacity = msg.write_buffer_capacity();
+        }
+        Ok(())
+    }
+
+    pub fn write(&mut self, payload: &[u8]) -> io::Result<WriterState> {
+        self.written += payload.len() as u64;
+        if !self.flags.contains(Flags::DISCONNECTED) {
+            self.buffer.write(payload)?;
+        }
+
+        if self.buffer.len() > self.buffer_capacity {
+            Ok(WriterState::Pause)
+        } else {
+            Ok(WriterState::Done)
+        }
+    }
+
+    pub fn write_eof(&mut self) -> io::Result<()> {
+        if self.buffer.write_eof()? {
+            Ok(())
+        } else {
+            Err(io::Error::new(
+                io::ErrorKind::Other,
+                "Last payload item, but eof is not reached",
+            ))
+        }
+    }
+
+    #[inline]
+    pub fn poll_completed<T: AsyncWrite>(
+        &mut self, stream: &mut T, shutdown: bool,
+    ) -> Poll<(), io::Error> {
+        match self.write_to_stream(stream) {
+            Ok(WriterState::Done) => {
+                if shutdown {
+                    stream.shutdown()
+                } else {
+                    Ok(Async::Ready(()))
+                }
+            }
+            Ok(WriterState::Pause) => Ok(Async::NotReady),
+            Err(err) => Err(err),
+        }
+    }
+}
+
+fn content_encoder(buf: BytesMut, req: &mut ClientRequest) -> Output {
+    let version = req.version();
+    let mut body = req.replace_body(Body::Empty);
+    let mut encoding = req.content_encoding();
+
+    let transfer = match body {
+        Body::Empty => {
+            req.headers_mut().remove(CONTENT_LENGTH);
+            return Output::Empty(buf);
+        }
+        Body::Binary(ref mut bytes) => {
+            #[cfg(any(feature = "flate2", feature = "brotli"))]
+            {
+                if encoding.is_compression() {
+                    let mut tmp = BytesMut::new();
+                    let mut transfer = TransferEncoding::eof(tmp);
+                    let mut enc = match encoding {
+                        #[cfg(feature = "flate2")]
+                        ContentEncoding::Deflate => ContentEncoder::Deflate(
+                            DeflateEncoder::new(transfer, Compression::default()),
+                        ),
+                        #[cfg(feature = "flate2")]
+                        ContentEncoding::Gzip => ContentEncoder::Gzip(GzEncoder::new(
+                            transfer,
+                            Compression::default(),
+                        )),
+                        #[cfg(feature = "brotli")]
+                        ContentEncoding::Br => {
+                            ContentEncoder::Br(BrotliEncoder::new(transfer, 5))
+                        }
+                        ContentEncoding::Auto | ContentEncoding::Identity => {
+                            unreachable!()
+                        }
+                    };
+                    // TODO return error!
+                    let _ = enc.write(bytes.as_ref());
+                    let _ = enc.write_eof();
+                    *bytes = Binary::from(enc.buf_mut().take());
+
+                    req.headers_mut().insert(
+                        CONTENT_ENCODING,
+                        HeaderValue::from_static(encoding.as_str()),
+                    );
+                    encoding = ContentEncoding::Identity;
+                }
+                let mut b = BytesMut::new();
+                let _ = write!(b, "{}", bytes.len());
+                req.headers_mut()
+                    .insert(CONTENT_LENGTH, HeaderValue::try_from(b.freeze()).unwrap());
+                TransferEncoding::eof(buf)
+            }
+            #[cfg(not(any(feature = "flate2", feature = "brotli")))]
+            {
+                let mut b = BytesMut::new();
+                let _ = write!(b, "{}", bytes.len());
+                req.headers_mut()
+                    .insert(CONTENT_LENGTH, HeaderValue::try_from(b.freeze()).unwrap());
+                TransferEncoding::eof(buf)
+            }
+        }
+        Body::Streaming(_) | Body::Actor(_) => {
+            if req.upgrade() {
+                if version == Version::HTTP_2 {
+                    error!("Connection upgrade is forbidden for HTTP/2");
+                } else {
+                    req.headers_mut()
+                        .insert(CONNECTION, HeaderValue::from_static("upgrade"));
+                }
+                if encoding != ContentEncoding::Identity {
+                    encoding = ContentEncoding::Identity;
+                    req.headers_mut().remove(CONTENT_ENCODING);
+                }
+                TransferEncoding::eof(buf)
+            } else {
+                streaming_encoding(buf, version, req)
+            }
+        }
+    };
+
+    if encoding.is_compression() {
+        req.headers_mut().insert(
+            CONTENT_ENCODING,
+            HeaderValue::from_static(encoding.as_str()),
+        );
+    }
+
+    req.replace_body(body);
+    let enc = match encoding {
+        #[cfg(feature = "flate2")]
+        ContentEncoding::Deflate => ContentEncoder::Deflate(DeflateEncoder::new(
+            transfer,
+            Compression::default(),
+        )),
+        #[cfg(feature = "flate2")]
+        ContentEncoding::Gzip => {
+            ContentEncoder::Gzip(GzEncoder::new(transfer, Compression::default()))
+        }
+        #[cfg(feature = "brotli")]
+        ContentEncoding::Br => ContentEncoder::Br(BrotliEncoder::new(transfer, 5)),
+        ContentEncoding::Identity | ContentEncoding::Auto => return Output::TE(transfer),
+    };
+    Output::Encoder(enc)
+}
+
+fn streaming_encoding(
+    buf: BytesMut, version: Version, req: &mut ClientRequest,
+) -> TransferEncoding {
+    if req.chunked() {
+        // Enable transfer encoding
+        req.headers_mut().remove(CONTENT_LENGTH);
+        if version == Version::HTTP_2 {
+            req.headers_mut().remove(TRANSFER_ENCODING);
+            TransferEncoding::eof(buf)
+        } else {
+            req.headers_mut()
+                .insert(TRANSFER_ENCODING, HeaderValue::from_static("chunked"));
+            TransferEncoding::chunked(buf)
+        }
+    } else {
+        // if Content-Length is specified, then use it as length hint
+        let (len, chunked) = if let Some(len) = req.headers().get(CONTENT_LENGTH) {
+            // Content-Length
+            if let Ok(s) = len.to_str() {
+                if let Ok(len) = s.parse::<u64>() {
+                    (Some(len), false)
+                } else {
+                    error!("illegal Content-Length: {:?}", len);
+                    (None, false)
+                }
+            } else {
+                error!("illegal Content-Length: {:?}", len);
+                (None, false)
+            }
+        } else {
+            (None, true)
+        };
+
+        if !chunked {
+            if let Some(len) = len {
+                TransferEncoding::length(len, buf)
+            } else {
+                TransferEncoding::eof(buf)
+            }
+        } else {
+            // Enable transfer encoding
+            match version {
+                Version::HTTP_11 => {
+                    req.headers_mut()
+                        .insert(TRANSFER_ENCODING, HeaderValue::from_static("chunked"));
+                    TransferEncoding::chunked(buf)
+                }
+                _ => {
+                    req.headers_mut().remove(TRANSFER_ENCODING);
+                    TransferEncoding::eof(buf)
+                }
+            }
+        }
+    }
+}
+
+// "Sun, 06 Nov 1994 08:49:37 GMT".len()
+pub const DATE_VALUE_LENGTH: usize = 29;
+
+fn set_date(dst: &mut BytesMut) {
+    CACHED.with(|cache| {
+        let mut cache = cache.borrow_mut();
+        let now = time::get_time();
+        if now > cache.next_update {
+            cache.update(now);
+        }
+        dst.extend_from_slice(cache.buffer());
+    })
+}
+
+struct CachedDate {
+    bytes: [u8; DATE_VALUE_LENGTH],
+    next_update: time::Timespec,
+}
+
+thread_local!(static CACHED: RefCell<CachedDate> = RefCell::new(CachedDate {
+    bytes: [0; DATE_VALUE_LENGTH],
+    next_update: time::Timespec::new(0, 0),
+}));
+
+impl CachedDate {
+    fn buffer(&self) -> &[u8] {
+        &self.bytes[..]
+    }
+
+    fn update(&mut self, now: time::Timespec) {
+        write!(&mut self.bytes[..], "{}", time::at_utc(now).rfc822()).unwrap();
+        self.next_update = now + Duration::seconds(1);
+        self.next_update.nsec = 0;
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/context.rs.html b/static/api/actix-web/0.7.2/src/actix_web/context.rs.html new file mode 100644 index 0000000..76f6b85 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/context.rs.html @@ -0,0 +1,591 @@ +context.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+
+extern crate actix;
+
+use futures::sync::oneshot;
+use futures::sync::oneshot::Sender;
+use futures::{Async, Future, Poll};
+use smallvec::SmallVec;
+use std::marker::PhantomData;
+
+use self::actix::dev::{
+    AsyncContextParts, ContextFut, ContextParts, Envelope, Mailbox, ToEnvelope,
+};
+use self::actix::fut::ActorFuture;
+use self::actix::{
+    Actor, ActorContext, ActorState, Addr, AsyncContext, Handler, Message, SpawnHandle,
+};
+
+use body::{Binary, Body};
+use error::{Error, ErrorInternalServerError};
+use httprequest::HttpRequest;
+
+pub trait ActorHttpContext: 'static {
+    fn disconnected(&mut self);
+    fn poll(&mut self) -> Poll<Option<SmallVec<[Frame; 4]>>, Error>;
+}
+
+#[derive(Debug)]
+pub enum Frame {
+    Chunk(Option<Binary>),
+    Drain(oneshot::Sender<()>),
+}
+
+impl Frame {
+    pub fn len(&self) -> usize {
+        match *self {
+            Frame::Chunk(Some(ref bin)) => bin.len(),
+            _ => 0,
+        }
+    }
+}
+
+/// Execution context for http actors
+pub struct HttpContext<A, S = ()>
+where
+    A: Actor<Context = HttpContext<A, S>>,
+{
+    inner: ContextParts<A>,
+    stream: Option<SmallVec<[Frame; 4]>>,
+    request: HttpRequest<S>,
+    disconnected: bool,
+}
+
+impl<A, S> ActorContext for HttpContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    fn stop(&mut self) {
+        self.inner.stop();
+    }
+    fn terminate(&mut self) {
+        self.inner.terminate()
+    }
+    fn state(&self) -> ActorState {
+        self.inner.state()
+    }
+}
+
+impl<A, S> AsyncContext<A> for HttpContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    #[inline]
+    fn spawn<F>(&mut self, fut: F) -> SpawnHandle
+    where
+        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static,
+    {
+        self.inner.spawn(fut)
+    }
+    #[inline]
+    fn wait<F>(&mut self, fut: F)
+    where
+        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static,
+    {
+        self.inner.wait(fut)
+    }
+    #[doc(hidden)]
+    #[inline]
+    fn waiting(&self) -> bool {
+        self.inner.waiting()
+            || self.inner.state() == ActorState::Stopping
+            || self.inner.state() == ActorState::Stopped
+    }
+    #[inline]
+    fn cancel_future(&mut self, handle: SpawnHandle) -> bool {
+        self.inner.cancel_future(handle)
+    }
+    #[inline]
+    fn address(&self) -> Addr<A> {
+        self.inner.address()
+    }
+}
+
+impl<A, S: 'static> HttpContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    #[inline]
+    /// Create a new HTTP Context from a request and an actor
+    pub fn create(req: HttpRequest<S>, actor: A) -> Body {
+        let mb = Mailbox::default();
+        let ctx = HttpContext {
+            inner: ContextParts::new(mb.sender_producer()),
+            stream: None,
+            request: req,
+            disconnected: false,
+        };
+        Body::Actor(Box::new(HttpContextFut::new(ctx, actor, mb)))
+    }
+
+    /// Create a new HTTP Context
+    pub fn with_factory<F>(req: HttpRequest<S>, f: F) -> Body
+    where
+        F: FnOnce(&mut Self) -> A + 'static,
+    {
+        let mb = Mailbox::default();
+        let mut ctx = HttpContext {
+            inner: ContextParts::new(mb.sender_producer()),
+            stream: None,
+            request: req,
+            disconnected: false,
+        };
+
+        let act = f(&mut ctx);
+        Body::Actor(Box::new(HttpContextFut::new(ctx, act, mb)))
+    }
+}
+
+impl<A, S> HttpContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    /// Shared application state
+    #[inline]
+    pub fn state(&self) -> &S {
+        self.request.state()
+    }
+
+    /// Incoming request
+    #[inline]
+    pub fn request(&mut self) -> &mut HttpRequest<S> {
+        &mut self.request
+    }
+
+    /// Write payload
+    #[inline]
+    pub fn write<B: Into<Binary>>(&mut self, data: B) {
+        if !self.disconnected {
+            self.add_frame(Frame::Chunk(Some(data.into())));
+        } else {
+            warn!("Trying to write to disconnected response");
+        }
+    }
+
+    /// Indicate end of streaming payload. Also this method calls `Self::close`.
+    #[inline]
+    pub fn write_eof(&mut self) {
+        self.add_frame(Frame::Chunk(None));
+    }
+
+    /// Returns drain future
+    pub fn drain(&mut self) -> Drain<A> {
+        let (tx, rx) = oneshot::channel();
+        self.add_frame(Frame::Drain(tx));
+        Drain::new(rx)
+    }
+
+    /// Check if connection still open
+    #[inline]
+    pub fn connected(&self) -> bool {
+        !self.disconnected
+    }
+
+    #[inline]
+    fn add_frame(&mut self, frame: Frame) {
+        if self.stream.is_none() {
+            self.stream = Some(SmallVec::new());
+        }
+        if let Some(s) = self.stream.as_mut() {
+            s.push(frame)
+        }
+    }
+
+    /// Handle of the running future
+    ///
+    /// SpawnHandle is the handle returned by `AsyncContext::spawn()` method.
+    pub fn handle(&self) -> SpawnHandle {
+        self.inner.curr_handle()
+    }
+}
+
+impl<A, S> AsyncContextParts<A> for HttpContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    fn parts(&mut self) -> &mut ContextParts<A> {
+        &mut self.inner
+    }
+}
+
+struct HttpContextFut<A, S>
+where
+    A: Actor<Context = HttpContext<A, S>>,
+{
+    fut: ContextFut<A, HttpContext<A, S>>,
+}
+
+impl<A, S> HttpContextFut<A, S>
+where
+    A: Actor<Context = HttpContext<A, S>>,
+{
+    fn new(ctx: HttpContext<A, S>, act: A, mailbox: Mailbox<A>) -> Self {
+        let fut = ContextFut::new(ctx, act, mailbox);
+        HttpContextFut { fut }
+    }
+}
+
+impl<A, S> ActorHttpContext for HttpContextFut<A, S>
+where
+    A: Actor<Context = HttpContext<A, S>>,
+    S: 'static,
+{
+    #[inline]
+    fn disconnected(&mut self) {
+        self.fut.ctx().disconnected = true;
+        self.fut.ctx().stop();
+    }
+
+    fn poll(&mut self) -> Poll<Option<SmallVec<[Frame; 4]>>, Error> {
+        if self.fut.alive() {
+            match self.fut.poll() {
+                Ok(Async::NotReady) | Ok(Async::Ready(())) => (),
+                Err(_) => return Err(ErrorInternalServerError("error")),
+            }
+        }
+
+        // frames
+        if let Some(data) = self.fut.ctx().stream.take() {
+            Ok(Async::Ready(Some(data)))
+        } else if self.fut.alive() {
+            Ok(Async::NotReady)
+        } else {
+            Ok(Async::Ready(None))
+        }
+    }
+}
+
+impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S>
+where
+    A: Actor<Context = HttpContext<A, S>> + Handler<M>,
+    M: Message + Send + 'static,
+    M::Result: Send,
+{
+    fn pack(msg: M, tx: Option<Sender<M::Result>>) -> Envelope<A> {
+        Envelope::new(msg, tx)
+    }
+}
+
+/// Consume a future
+pub struct Drain<A> {
+    fut: oneshot::Receiver<()>,
+    _a: PhantomData<A>,
+}
+
+impl<A> Drain<A> {
+    /// Create a drain from a future
+    pub fn new(fut: oneshot::Receiver<()>) -> Self {
+        Drain {
+            fut,
+            _a: PhantomData,
+        }
+    }
+}
+
+impl<A: Actor> ActorFuture for Drain<A> {
+    type Item = ();
+    type Error = ();
+    type Actor = A;
+
+    #[inline]
+    fn poll(
+        &mut self, _: &mut A, _: &mut <Self::Actor as Actor>::Context,
+    ) -> Poll<Self::Item, Self::Error> {
+        self.fut.poll().map_err(|_| ())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/de.rs.html b/static/api/actix-web/0.7.2/src/actix_web/de.rs.html new file mode 100644 index 0000000..3cf68cb --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/de.rs.html @@ -0,0 +1,889 @@ +de.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+
+use serde::de::{self, Deserializer, Error as DeError, Visitor};
+
+use httprequest::HttpRequest;
+use param::ParamsIter;
+
+macro_rules! unsupported_type {
+    ($trait_fn:ident, $name:expr) => {
+        fn $trait_fn<V>(self, _: V) -> Result<V::Value, Self::Error>
+            where V: Visitor<'de>
+        {
+            Err(de::value::Error::custom(concat!("unsupported type: ", $name)))
+        }
+    };
+}
+
+macro_rules! parse_single_value {
+    ($trait_fn:ident, $visit_fn:ident, $tp:tt) => {
+        fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+            where V: Visitor<'de>
+        {
+            if self.req.match_info().len() != 1 {
+                Err(de::value::Error::custom(
+                    format!("wrong number of parameters: {} expected 1",
+                            self.req.match_info().len()).as_str()))
+            } else {
+                let v = self.req.match_info()[0].parse().map_err(
+                    |_| de::value::Error::custom(
+                        format!("can not parse {:?} to a {}",
+                                &self.req.match_info()[0], $tp)))?;
+                visitor.$visit_fn(v)
+            }
+        }
+    }
+}
+
+pub struct PathDeserializer<'de, S: 'de> {
+    req: &'de HttpRequest<S>,
+}
+
+impl<'de, S: 'de> PathDeserializer<'de, S> {
+    pub fn new(req: &'de HttpRequest<S>) -> Self {
+        PathDeserializer { req }
+    }
+}
+
+impl<'de, S: 'de> Deserializer<'de> for PathDeserializer<'de, S> {
+    type Error = de::value::Error;
+
+    fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_map(ParamsDeserializer {
+            params: self.req.match_info().iter(),
+            current: None,
+        })
+    }
+
+    fn deserialize_struct<V>(
+        self, _: &'static str, _: &'static [&'static str], visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        self.deserialize_map(visitor)
+    }
+
+    fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_unit()
+    }
+
+    fn deserialize_unit_struct<V>(
+        self, _: &'static str, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        self.deserialize_unit(visitor)
+    }
+
+    fn deserialize_newtype_struct<V>(
+        self, _: &'static str, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_newtype_struct(self)
+    }
+
+    fn deserialize_tuple<V>(
+        self, len: usize, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        if self.req.match_info().len() < len {
+            Err(de::value::Error::custom(
+                format!(
+                    "wrong number of parameters: {} expected {}",
+                    self.req.match_info().len(),
+                    len
+                ).as_str(),
+            ))
+        } else {
+            visitor.visit_seq(ParamsSeq {
+                params: self.req.match_info().iter(),
+            })
+        }
+    }
+
+    fn deserialize_tuple_struct<V>(
+        self, _: &'static str, len: usize, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        if self.req.match_info().len() < len {
+            Err(de::value::Error::custom(
+                format!(
+                    "wrong number of parameters: {} expected {}",
+                    self.req.match_info().len(),
+                    len
+                ).as_str(),
+            ))
+        } else {
+            visitor.visit_seq(ParamsSeq {
+                params: self.req.match_info().iter(),
+            })
+        }
+    }
+
+    fn deserialize_enum<V>(
+        self, _: &'static str, _: &'static [&'static str], _: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("unsupported type: enum"))
+    }
+
+    fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        if self.req.match_info().len() != 1 {
+            Err(de::value::Error::custom(
+                format!(
+                    "wrong number of parameters: {} expected 1",
+                    self.req.match_info().len()
+                ).as_str(),
+            ))
+        } else {
+            visitor.visit_str(&self.req.match_info()[0])
+        }
+    }
+
+    fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_seq(ParamsSeq {
+            params: self.req.match_info().iter(),
+        })
+    }
+
+    unsupported_type!(deserialize_any, "'any'");
+    unsupported_type!(deserialize_bytes, "bytes");
+    unsupported_type!(deserialize_option, "Option<T>");
+    unsupported_type!(deserialize_identifier, "identifier");
+    unsupported_type!(deserialize_ignored_any, "ignored_any");
+
+    parse_single_value!(deserialize_bool, visit_bool, "bool");
+    parse_single_value!(deserialize_i8, visit_i8, "i8");
+    parse_single_value!(deserialize_i16, visit_i16, "i16");
+    parse_single_value!(deserialize_i32, visit_i32, "i16");
+    parse_single_value!(deserialize_i64, visit_i64, "i64");
+    parse_single_value!(deserialize_u8, visit_u8, "u8");
+    parse_single_value!(deserialize_u16, visit_u16, "u16");
+    parse_single_value!(deserialize_u32, visit_u32, "u32");
+    parse_single_value!(deserialize_u64, visit_u64, "u64");
+    parse_single_value!(deserialize_f32, visit_f32, "f32");
+    parse_single_value!(deserialize_f64, visit_f64, "f64");
+    parse_single_value!(deserialize_string, visit_string, "String");
+    parse_single_value!(deserialize_byte_buf, visit_string, "String");
+    parse_single_value!(deserialize_char, visit_char, "char");
+}
+
+struct ParamsDeserializer<'de> {
+    params: ParamsIter<'de>,
+    current: Option<(&'de str, &'de str)>,
+}
+
+impl<'de> de::MapAccess<'de> for ParamsDeserializer<'de> {
+    type Error = de::value::Error;
+
+    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
+    where
+        K: de::DeserializeSeed<'de>,
+    {
+        self.current = self.params.next().map(|ref item| (item.0, item.1));
+        match self.current {
+            Some((key, _)) => Ok(Some(seed.deserialize(Key { key })?)),
+            None => Ok(None),
+        }
+    }
+
+    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::DeserializeSeed<'de>,
+    {
+        if let Some((_, value)) = self.current.take() {
+            seed.deserialize(Value { value })
+        } else {
+            Err(de::value::Error::custom("unexpected item"))
+        }
+    }
+}
+
+struct Key<'de> {
+    key: &'de str,
+}
+
+impl<'de> Deserializer<'de> for Key<'de> {
+    type Error = de::value::Error;
+
+    fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_str(self.key)
+    }
+
+    fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("Unexpected"))
+    }
+
+    forward_to_deserialize_any! {
+        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
+            byte_buf option unit unit_struct newtype_struct seq tuple
+            tuple_struct map struct enum ignored_any
+    }
+}
+
+macro_rules! parse_value {
+    ($trait_fn:ident, $visit_fn:ident, $tp:tt) => {
+        fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+            where V: Visitor<'de>
+        {
+            let v = self.value.parse().map_err(
+                |_| de::value::Error::custom(
+                    format!("can not parse {:?} to a {}", self.value, $tp)))?;
+            visitor.$visit_fn(v)
+        }
+    }
+}
+
+struct Value<'de> {
+    value: &'de str,
+}
+
+impl<'de> Deserializer<'de> for Value<'de> {
+    type Error = de::value::Error;
+
+    parse_value!(deserialize_bool, visit_bool, "bool");
+    parse_value!(deserialize_i8, visit_i8, "i8");
+    parse_value!(deserialize_i16, visit_i16, "i16");
+    parse_value!(deserialize_i32, visit_i32, "i16");
+    parse_value!(deserialize_i64, visit_i64, "i64");
+    parse_value!(deserialize_u8, visit_u8, "u8");
+    parse_value!(deserialize_u16, visit_u16, "u16");
+    parse_value!(deserialize_u32, visit_u32, "u32");
+    parse_value!(deserialize_u64, visit_u64, "u64");
+    parse_value!(deserialize_f32, visit_f32, "f32");
+    parse_value!(deserialize_f64, visit_f64, "f64");
+    parse_value!(deserialize_string, visit_string, "String");
+    parse_value!(deserialize_byte_buf, visit_string, "String");
+    parse_value!(deserialize_char, visit_char, "char");
+
+    fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_unit()
+    }
+
+    fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_unit()
+    }
+
+    fn deserialize_unit_struct<V>(
+        self, _: &'static str, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_unit()
+    }
+
+    fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_borrowed_bytes(self.value.as_bytes())
+    }
+
+    fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_borrowed_str(self.value)
+    }
+
+    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_some(self)
+    }
+
+    fn deserialize_enum<V>(
+        self, _: &'static str, _: &'static [&'static str], visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_enum(ValueEnum { value: self.value })
+    }
+
+    fn deserialize_newtype_struct<V>(
+        self, _: &'static str, visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        visitor.visit_newtype_struct(self)
+    }
+
+    fn deserialize_tuple<V>(self, _: usize, _: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("unsupported type: tuple"))
+    }
+
+    fn deserialize_struct<V>(
+        self, _: &'static str, _: &'static [&'static str], _: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("unsupported type: struct"))
+    }
+
+    fn deserialize_tuple_struct<V>(
+        self, _: &'static str, _: usize, _: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("unsupported type: tuple struct"))
+    }
+
+    unsupported_type!(deserialize_any, "any");
+    unsupported_type!(deserialize_seq, "seq");
+    unsupported_type!(deserialize_map, "map");
+    unsupported_type!(deserialize_identifier, "identifier");
+}
+
+struct ParamsSeq<'de> {
+    params: ParamsIter<'de>,
+}
+
+impl<'de> de::SeqAccess<'de> for ParamsSeq<'de> {
+    type Error = de::value::Error;
+
+    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
+    where
+        T: de::DeserializeSeed<'de>,
+    {
+        match self.params.next() {
+            Some(item) => Ok(Some(seed.deserialize(Value { value: item.1 })?)),
+            None => Ok(None),
+        }
+    }
+}
+
+struct ValueEnum<'de> {
+    value: &'de str,
+}
+
+impl<'de> de::EnumAccess<'de> for ValueEnum<'de> {
+    type Error = de::value::Error;
+    type Variant = UnitVariant;
+
+    fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
+    where
+        V: de::DeserializeSeed<'de>,
+    {
+        Ok((seed.deserialize(Key { key: self.value })?, UnitVariant))
+    }
+}
+
+struct UnitVariant;
+
+impl<'de> de::VariantAccess<'de> for UnitVariant {
+    type Error = de::value::Error;
+
+    fn unit_variant(self) -> Result<(), Self::Error> {
+        Ok(())
+    }
+
+    fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value, Self::Error>
+    where
+        T: de::DeserializeSeed<'de>,
+    {
+        Err(de::value::Error::custom("not supported"))
+    }
+
+    fn tuple_variant<V>(self, _len: usize, _visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("not supported"))
+    }
+
+    fn struct_variant<V>(
+        self, _: &'static [&'static str], _: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(de::value::Error::custom("not supported"))
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/error.rs.html b/static/api/actix-web/0.7.2/src/actix_web/error.rs.html new file mode 100644 index 0000000..3278f79 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/error.rs.html @@ -0,0 +1,2245 @@ +error.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+
+//! Error and Result module
+use std::io::Error as IoError;
+use std::str::Utf8Error;
+use std::string::FromUtf8Error;
+use std::sync::Mutex;
+use std::{fmt, io, result};
+
+use actix::MailboxError;
+use cookie;
+use failure::{self, Backtrace, Fail};
+use futures::Canceled;
+use http::uri::InvalidUri;
+use http::{header, Error as HttpError, StatusCode};
+use http2::Error as Http2Error;
+use httparse;
+use serde::de::value::Error as DeError;
+use serde_json::error::Error as JsonError;
+use serde_urlencoded::ser::Error as FormError;
+use tokio_timer::Error as TimerError;
+pub use url::ParseError as UrlParseError;
+
+// re-exports
+pub use cookie::ParseError as CookieParseError;
+
+use handler::Responder;
+use httprequest::HttpRequest;
+use httpresponse::{HttpResponse, HttpResponseParts};
+
+/// A specialized [`Result`](https://doc.rust-lang.org/std/result/enum.Result.html)
+/// for actix web operations
+///
+/// This typedef is generally used to avoid writing out
+/// `actix_web::error::Error` directly and is otherwise a direct mapping to
+/// `Result`.
+pub type Result<T, E = Error> = result::Result<T, E>;
+
+/// General purpose actix web error.
+///
+/// An actix web error is used to carry errors from `failure` or `std::error`
+/// through actix in a convenient way.  It can be created through
+/// converting errors with `into()`.
+///
+/// Whenever it is created from an external object a response error is created
+/// for it that can be used to create an http response from it this means that
+/// if you have access to an actix `Error` you can always get a
+/// `ResponseError` reference from it.
+pub struct Error {
+    cause: Box<ResponseError>,
+    backtrace: Option<Backtrace>,
+}
+
+impl Error {
+    /// Deprecated way to reference the underlying response error.
+    #[deprecated(
+        since = "0.6.0", note = "please use `Error::as_response_error()` instead"
+    )]
+    pub fn cause(&self) -> &ResponseError {
+        self.cause.as_ref()
+    }
+
+    /// Returns a reference to the underlying cause of this `Error` as `Fail`
+    pub fn as_fail(&self) -> &Fail {
+        self.cause.as_fail()
+    }
+
+    /// Returns the reference to the underlying `ResponseError`.
+    pub fn as_response_error(&self) -> &ResponseError {
+        self.cause.as_ref()
+    }
+
+    /// Returns a reference to the Backtrace carried by this error, if it
+    /// carries one.
+    ///
+    /// This uses the same `Backtrace` type that `failure` uses.
+    pub fn backtrace(&self) -> &Backtrace {
+        if let Some(bt) = self.cause.backtrace() {
+            bt
+        } else {
+            self.backtrace.as_ref().unwrap()
+        }
+    }
+
+    /// Attempts to downcast this `Error` to a particular `Fail` type by
+    /// reference.
+    ///
+    /// If the underlying error is not of type `T`, this will return `None`.
+    pub fn downcast_ref<T: Fail>(&self) -> Option<&T> {
+        // in the most trivial way the cause is directly of the requested type.
+        if let Some(rv) = Fail::downcast_ref(self.cause.as_fail()) {
+            return Some(rv);
+        }
+
+        // in the more complex case the error has been constructed from a failure
+        // error.  This happens because we implement From<failure::Error> by
+        // calling compat() and then storing it here.  In failure this is
+        // represented by a failure::Error being wrapped in a failure::Compat.
+        //
+        // So we first downcast into that compat, to then further downcast through
+        // the failure's Error downcasting system into the original failure.
+        //
+        // This currently requires a transmute.  This could be avoided if failure
+        // provides a deref: https://github.com/rust-lang-nursery/failure/pull/213
+        let compat: Option<&failure::Compat<failure::Error>> =
+            Fail::downcast_ref(self.cause.as_fail());
+        if let Some(compat) = compat {
+            pub struct CompatWrappedError {
+                error: failure::Error,
+            }
+            let compat: &CompatWrappedError =
+                unsafe { &*(compat as *const _ as *const CompatWrappedError) };
+            compat.error.downcast_ref()
+        } else {
+            None
+        }
+    }
+}
+
+/// Helper trait to downcast a response error into a fail.
+///
+/// This is currently not exposed because it's unclear if this is the best way
+/// to achieve the downcasting on `Error` for which this is needed.
+#[doc(hidden)]
+pub trait InternalResponseErrorAsFail {
+    #[doc(hidden)]
+    fn as_fail(&self) -> &Fail;
+    #[doc(hidden)]
+    fn as_mut_fail(&mut self) -> &mut Fail;
+}
+
+#[doc(hidden)]
+impl<T: ResponseError> InternalResponseErrorAsFail for T {
+    fn as_fail(&self) -> &Fail {
+        self
+    }
+    fn as_mut_fail(&mut self) -> &mut Fail {
+        self
+    }
+}
+
+/// Error that can be converted to `HttpResponse`
+pub trait ResponseError: Fail + InternalResponseErrorAsFail {
+    /// Create response for error
+    ///
+    /// Internal server error is generated by default.
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR)
+    }
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Display::fmt(&self.cause, f)
+    }
+}
+
+impl fmt::Debug for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        if let Some(bt) = self.cause.backtrace() {
+            write!(f, "{:?}\n\n{:?}", &self.cause, bt)
+        } else {
+            write!(
+                f,
+                "{:?}\n\n{:?}",
+                &self.cause,
+                self.backtrace.as_ref().unwrap()
+            )
+        }
+    }
+}
+
+/// Convert `Error` to a `HttpResponse` instance
+impl From<Error> for HttpResponse {
+    fn from(err: Error) -> Self {
+        HttpResponse::from_error(err)
+    }
+}
+
+/// `Error` for any error that implements `ResponseError`
+impl<T: ResponseError> From<T> for Error {
+    fn from(err: T) -> Error {
+        let backtrace = if err.backtrace().is_none() {
+            Some(Backtrace::new())
+        } else {
+            None
+        };
+        Error {
+            cause: Box::new(err),
+            backtrace,
+        }
+    }
+}
+
+/// Compatibility for `failure::Error`
+impl<T> ResponseError for failure::Compat<T> where
+    T: fmt::Display + fmt::Debug + Sync + Send + 'static
+{}
+
+impl From<failure::Error> for Error {
+    fn from(err: failure::Error) -> Error {
+        err.compat().into()
+    }
+}
+
+/// `InternalServerError` for `JsonError`
+impl ResponseError for JsonError {}
+
+/// `InternalServerError` for `FormError`
+impl ResponseError for FormError {}
+
+/// `InternalServerError` for `TimerError`
+impl ResponseError for TimerError {}
+
+/// `InternalServerError` for `UrlParseError`
+impl ResponseError for UrlParseError {}
+
+/// Return `BAD_REQUEST` for `de::value::Error`
+impl ResponseError for DeError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// Return `BAD_REQUEST` for `Utf8Error`
+impl ResponseError for Utf8Error {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// Return `InternalServerError` for `HttpError`,
+/// Response generation can return `HttpError`, so it is internal error
+impl ResponseError for HttpError {}
+
+/// Return `InternalServerError` for `io::Error`
+impl ResponseError for io::Error {
+    fn error_response(&self) -> HttpResponse {
+        match self.kind() {
+            io::ErrorKind::NotFound => HttpResponse::new(StatusCode::NOT_FOUND),
+            io::ErrorKind::PermissionDenied => HttpResponse::new(StatusCode::FORBIDDEN),
+            _ => HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR),
+        }
+    }
+}
+
+/// `BadRequest` for `InvalidHeaderValue`
+impl ResponseError for header::InvalidHeaderValue {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// `BadRequest` for `InvalidHeaderValue`
+impl ResponseError for header::InvalidHeaderValueBytes {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// `InternalServerError` for `futures::Canceled`
+impl ResponseError for Canceled {}
+
+/// `InternalServerError` for `actix::MailboxError`
+impl ResponseError for MailboxError {}
+
+/// A set of errors that can occur during parsing HTTP streams
+#[derive(Fail, Debug)]
+pub enum ParseError {
+    /// An invalid `Method`, such as `GE.T`.
+    #[fail(display = "Invalid Method specified")]
+    Method,
+    /// An invalid `Uri`, such as `exam ple.domain`.
+    #[fail(display = "Uri error: {}", _0)]
+    Uri(InvalidUri),
+    /// An invalid `HttpVersion`, such as `HTP/1.1`
+    #[fail(display = "Invalid HTTP version specified")]
+    Version,
+    /// An invalid `Header`.
+    #[fail(display = "Invalid Header provided")]
+    Header,
+    /// A message head is too large to be reasonable.
+    #[fail(display = "Message head is too large")]
+    TooLarge,
+    /// A message reached EOF, but is not complete.
+    #[fail(display = "Message is incomplete")]
+    Incomplete,
+    /// An invalid `Status`, such as `1337 ELITE`.
+    #[fail(display = "Invalid Status provided")]
+    Status,
+    /// A timeout occurred waiting for an IO event.
+    #[allow(dead_code)]
+    #[fail(display = "Timeout")]
+    Timeout,
+    /// An `io::Error` that occurred while trying to read or write to a network
+    /// stream.
+    #[fail(display = "IO error: {}", _0)]
+    Io(#[cause] IoError),
+    /// Parsing a field as string failed
+    #[fail(display = "UTF8 error: {}", _0)]
+    Utf8(#[cause] Utf8Error),
+}
+
+/// Return `BadRequest` for `ParseError`
+impl ResponseError for ParseError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+impl From<IoError> for ParseError {
+    fn from(err: IoError) -> ParseError {
+        ParseError::Io(err)
+    }
+}
+
+impl From<InvalidUri> for ParseError {
+    fn from(err: InvalidUri) -> ParseError {
+        ParseError::Uri(err)
+    }
+}
+
+impl From<Utf8Error> for ParseError {
+    fn from(err: Utf8Error) -> ParseError {
+        ParseError::Utf8(err)
+    }
+}
+
+impl From<FromUtf8Error> for ParseError {
+    fn from(err: FromUtf8Error) -> ParseError {
+        ParseError::Utf8(err.utf8_error())
+    }
+}
+
+impl From<httparse::Error> for ParseError {
+    fn from(err: httparse::Error) -> ParseError {
+        match err {
+            httparse::Error::HeaderName
+            | httparse::Error::HeaderValue
+            | httparse::Error::NewLine
+            | httparse::Error::Token => ParseError::Header,
+            httparse::Error::Status => ParseError::Status,
+            httparse::Error::TooManyHeaders => ParseError::TooLarge,
+            httparse::Error::Version => ParseError::Version,
+        }
+    }
+}
+
+#[derive(Fail, Debug)]
+/// A set of errors that can occur during payload parsing
+pub enum PayloadError {
+    /// A payload reached EOF, but is not complete.
+    #[fail(display = "A payload reached EOF, but is not complete.")]
+    Incomplete,
+    /// Content encoding stream corruption
+    #[fail(display = "Can not decode content-encoding.")]
+    EncodingCorrupted,
+    /// A payload reached size limit.
+    #[fail(display = "A payload reached size limit.")]
+    Overflow,
+    /// A payload length is unknown.
+    #[fail(display = "A payload length is unknown.")]
+    UnknownLength,
+    /// Io error
+    #[fail(display = "{}", _0)]
+    Io(#[cause] IoError),
+    /// Http2 error
+    #[fail(display = "{}", _0)]
+    Http2(#[cause] Http2Error),
+}
+
+impl From<IoError> for PayloadError {
+    fn from(err: IoError) -> PayloadError {
+        PayloadError::Io(err)
+    }
+}
+
+/// `PayloadError` returns two possible results:
+///
+/// - `Overflow` returns `PayloadTooLarge`
+/// - Other errors returns `BadRequest`
+impl ResponseError for PayloadError {
+    fn error_response(&self) -> HttpResponse {
+        match *self {
+            PayloadError::Overflow => HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE),
+            _ => HttpResponse::new(StatusCode::BAD_REQUEST),
+        }
+    }
+}
+
+/// Return `BadRequest` for `cookie::ParseError`
+impl ResponseError for cookie::ParseError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// A set of errors that can occur during parsing multipart streams
+#[derive(Fail, Debug)]
+pub enum MultipartError {
+    /// Content-Type header is not found
+    #[fail(display = "No Content-type header found")]
+    NoContentType,
+    /// Can not parse Content-Type header
+    #[fail(display = "Can not parse Content-Type header")]
+    ParseContentType,
+    /// Multipart boundary is not found
+    #[fail(display = "Multipart boundary is not found")]
+    Boundary,
+    /// Multipart stream is incomplete
+    #[fail(display = "Multipart stream is incomplete")]
+    Incomplete,
+    /// Error during field parsing
+    #[fail(display = "{}", _0)]
+    Parse(#[cause] ParseError),
+    /// Payload error
+    #[fail(display = "{}", _0)]
+    Payload(#[cause] PayloadError),
+}
+
+impl From<ParseError> for MultipartError {
+    fn from(err: ParseError) -> MultipartError {
+        MultipartError::Parse(err)
+    }
+}
+
+impl From<PayloadError> for MultipartError {
+    fn from(err: PayloadError) -> MultipartError {
+        MultipartError::Payload(err)
+    }
+}
+
+/// Return `BadRequest` for `MultipartError`
+impl ResponseError for MultipartError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// Error during handling `Expect` header
+#[derive(Fail, PartialEq, Debug)]
+pub enum ExpectError {
+    /// Expect header value can not be converted to utf8
+    #[fail(display = "Expect header value can not be converted to utf8")]
+    Encoding,
+    /// Unknown expect value
+    #[fail(display = "Unknown expect value")]
+    UnknownExpect,
+}
+
+impl ResponseError for ExpectError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::with_body(StatusCode::EXPECTATION_FAILED, "Unknown Expect")
+    }
+}
+
+/// A set of error that can occure during parsing content type
+#[derive(Fail, PartialEq, Debug)]
+pub enum ContentTypeError {
+    /// Can not parse content type
+    #[fail(display = "Can not parse content type")]
+    ParseError,
+    /// Unknown content encoding
+    #[fail(display = "Unknown content encoding")]
+    UnknownEncoding,
+}
+
+/// Return `BadRequest` for `ContentTypeError`
+impl ResponseError for ContentTypeError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// A set of errors that can occur during parsing urlencoded payloads
+#[derive(Fail, Debug)]
+pub enum UrlencodedError {
+    /// Can not decode chunked transfer encoding
+    #[fail(display = "Can not decode chunked transfer encoding")]
+    Chunked,
+    /// Payload size is bigger than allowed. (default: 256kB)
+    #[fail(
+        display = "Urlencoded payload size is bigger than allowed. (default: 256kB)"
+    )]
+    Overflow,
+    /// Payload size is now known
+    #[fail(display = "Payload size is now known")]
+    UnknownLength,
+    /// Content type error
+    #[fail(display = "Content type error")]
+    ContentType,
+    /// Parse error
+    #[fail(display = "Parse error")]
+    Parse,
+    /// Payload error
+    #[fail(display = "Error that occur during reading payload: {}", _0)]
+    Payload(#[cause] PayloadError),
+}
+
+/// Return `BadRequest` for `UrlencodedError`
+impl ResponseError for UrlencodedError {
+    fn error_response(&self) -> HttpResponse {
+        match *self {
+            UrlencodedError::Overflow => {
+                HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE)
+            }
+            UrlencodedError::UnknownLength => {
+                HttpResponse::new(StatusCode::LENGTH_REQUIRED)
+            }
+            _ => HttpResponse::new(StatusCode::BAD_REQUEST),
+        }
+    }
+}
+
+impl From<PayloadError> for UrlencodedError {
+    fn from(err: PayloadError) -> UrlencodedError {
+        UrlencodedError::Payload(err)
+    }
+}
+
+/// A set of errors that can occur during parsing json payloads
+#[derive(Fail, Debug)]
+pub enum JsonPayloadError {
+    /// Payload size is bigger than allowed. (default: 256kB)
+    #[fail(display = "Json payload size is bigger than allowed. (default: 256kB)")]
+    Overflow,
+    /// Content type error
+    #[fail(display = "Content type error")]
+    ContentType,
+    /// Deserialize error
+    #[fail(display = "Json deserialize error: {}", _0)]
+    Deserialize(#[cause] JsonError),
+    /// Payload error
+    #[fail(display = "Error that occur during reading payload: {}", _0)]
+    Payload(#[cause] PayloadError),
+}
+
+/// Return `BadRequest` for `UrlencodedError`
+impl ResponseError for JsonPayloadError {
+    fn error_response(&self) -> HttpResponse {
+        match *self {
+            JsonPayloadError::Overflow => {
+                HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE)
+            }
+            _ => HttpResponse::new(StatusCode::BAD_REQUEST),
+        }
+    }
+}
+
+impl From<PayloadError> for JsonPayloadError {
+    fn from(err: PayloadError) -> JsonPayloadError {
+        JsonPayloadError::Payload(err)
+    }
+}
+
+impl From<JsonError> for JsonPayloadError {
+    fn from(err: JsonError) -> JsonPayloadError {
+        JsonPayloadError::Deserialize(err)
+    }
+}
+
+/// Error type returned when reading body as lines.
+pub enum ReadlinesError {
+    /// Error when decoding a line.
+    EncodingError,
+    /// Payload error.
+    PayloadError(PayloadError),
+    /// Line limit exceeded.
+    LimitOverflow,
+    /// ContentType error.
+    ContentTypeError(ContentTypeError),
+}
+
+impl From<PayloadError> for ReadlinesError {
+    fn from(err: PayloadError) -> Self {
+        ReadlinesError::PayloadError(err)
+    }
+}
+
+impl From<ContentTypeError> for ReadlinesError {
+    fn from(err: ContentTypeError) -> Self {
+        ReadlinesError::ContentTypeError(err)
+    }
+}
+
+/// Errors which can occur when attempting to interpret a segment string as a
+/// valid path segment.
+#[derive(Fail, Debug, PartialEq)]
+pub enum UriSegmentError {
+    /// The segment started with the wrapped invalid character.
+    #[fail(display = "The segment started with the wrapped invalid character")]
+    BadStart(char),
+    /// The segment contained the wrapped invalid character.
+    #[fail(display = "The segment contained the wrapped invalid character")]
+    BadChar(char),
+    /// The segment ended with the wrapped invalid character.
+    #[fail(display = "The segment ended with the wrapped invalid character")]
+    BadEnd(char),
+}
+
+/// Return `BadRequest` for `UriSegmentError`
+impl ResponseError for UriSegmentError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::BAD_REQUEST)
+    }
+}
+
+/// Errors which can occur when attempting to generate resource uri.
+#[derive(Fail, Debug, PartialEq)]
+pub enum UrlGenerationError {
+    /// Resource not found
+    #[fail(display = "Resource not found")]
+    ResourceNotFound,
+    /// Not all path pattern covered
+    #[fail(display = "Not all path pattern covered")]
+    NotEnoughElements,
+    /// URL parse error
+    #[fail(display = "{}", _0)]
+    ParseError(#[cause] UrlParseError),
+}
+
+/// `InternalServerError` for `UrlGeneratorError`
+impl ResponseError for UrlGenerationError {}
+
+impl From<UrlParseError> for UrlGenerationError {
+    fn from(err: UrlParseError) -> Self {
+        UrlGenerationError::ParseError(err)
+    }
+}
+
+/// Errors which can occur when serving static files.
+#[derive(Fail, Debug, PartialEq)]
+pub enum StaticFileError {
+    /// Path is not a directory
+    #[fail(display = "Path is not a directory. Unable to serve static files")]
+    IsNotDirectory,
+    /// Cannot render directory
+    #[fail(display = "Unable to render directory without index file")]
+    IsDirectory,
+}
+
+/// Return `NotFound` for `StaticFileError`
+impl ResponseError for StaticFileError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::new(StatusCode::NOT_FOUND)
+    }
+}
+
+/// Helper type that can wrap any error and generate custom response.
+///
+/// In following example any `io::Error` will be converted into "BAD REQUEST"
+/// response as opposite to *INTERNAL SERVER ERROR* which is defined by
+/// default.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # use actix_web::*;
+/// use actix_web::fs::NamedFile;
+///
+/// fn index(req: HttpRequest) -> Result<fs::NamedFile> {
+///     let f = NamedFile::open("test.txt").map_err(error::ErrorBadRequest)?;
+///     Ok(f)
+/// }
+/// # fn main() {}
+/// ```
+pub struct InternalError<T> {
+    cause: T,
+    status: InternalErrorType,
+    backtrace: Backtrace,
+}
+
+enum InternalErrorType {
+    Status(StatusCode),
+    Response(Box<Mutex<Option<HttpResponseParts>>>),
+}
+
+impl<T> InternalError<T> {
+    /// Create `InternalError` instance
+    pub fn new(cause: T, status: StatusCode) -> Self {
+        InternalError {
+            cause,
+            status: InternalErrorType::Status(status),
+            backtrace: Backtrace::new(),
+        }
+    }
+
+    /// Create `InternalError` with predefined `HttpResponse`.
+    pub fn from_response(cause: T, response: HttpResponse) -> Self {
+        let resp = response.into_parts();
+        InternalError {
+            cause,
+            status: InternalErrorType::Response(Box::new(Mutex::new(Some(resp)))),
+            backtrace: Backtrace::new(),
+        }
+    }
+}
+
+impl<T> Fail for InternalError<T>
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    fn backtrace(&self) -> Option<&Backtrace> {
+        Some(&self.backtrace)
+    }
+}
+
+impl<T> fmt::Debug for InternalError<T>
+where
+    T: Send + Sync + fmt::Debug + 'static,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Debug::fmt(&self.cause, f)
+    }
+}
+
+impl<T> fmt::Display for InternalError<T>
+where
+    T: Send + Sync + fmt::Display + 'static,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Display::fmt(&self.cause, f)
+    }
+}
+
+impl<T> ResponseError for InternalError<T>
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    fn error_response(&self) -> HttpResponse {
+        match self.status {
+            InternalErrorType::Status(st) => HttpResponse::new(st),
+            InternalErrorType::Response(ref resp) => {
+                if let Some(resp) = resp.lock().unwrap().take() {
+                    HttpResponse::from_parts(resp)
+                } else {
+                    HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR)
+                }
+            }
+        }
+    }
+}
+
+impl<T> Responder for InternalError<T>
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, _: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Err(self.into())
+    }
+}
+
+/// Helper function that creates wrapper of any error and generate *BAD
+/// REQUEST* response.
+#[allow(non_snake_case)]
+pub fn ErrorBadRequest<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::BAD_REQUEST).into()
+}
+
+/// Helper function that creates wrapper of any error and generate
+/// *UNAUTHORIZED* response.
+#[allow(non_snake_case)]
+pub fn ErrorUnauthorized<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::UNAUTHORIZED).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *FORBIDDEN*
+/// response.
+#[allow(non_snake_case)]
+pub fn ErrorForbidden<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::FORBIDDEN).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *NOT FOUND*
+/// response.
+#[allow(non_snake_case)]
+pub fn ErrorNotFound<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::NOT_FOUND).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *METHOD NOT
+/// ALLOWED* response.
+#[allow(non_snake_case)]
+pub fn ErrorMethodNotAllowed<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::METHOD_NOT_ALLOWED).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *REQUEST
+/// TIMEOUT* response.
+#[allow(non_snake_case)]
+pub fn ErrorRequestTimeout<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::REQUEST_TIMEOUT).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *CONFLICT*
+/// response.
+#[allow(non_snake_case)]
+pub fn ErrorConflict<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::CONFLICT).into()
+}
+
+/// Helper function that creates wrapper of any error and generate *GONE*
+/// response.
+#[allow(non_snake_case)]
+pub fn ErrorGone<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::GONE).into()
+}
+
+/// Helper function that creates wrapper of any error and generate
+/// *PRECONDITION FAILED* response.
+#[allow(non_snake_case)]
+pub fn ErrorPreconditionFailed<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::PRECONDITION_FAILED).into()
+}
+
+/// Helper function that creates wrapper of any error and generate
+/// *EXPECTATION FAILED* response.
+#[allow(non_snake_case)]
+pub fn ErrorExpectationFailed<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::EXPECTATION_FAILED).into()
+}
+
+/// Helper function that creates wrapper of any error and
+/// generate *INTERNAL SERVER ERROR* response.
+#[allow(non_snake_case)]
+pub fn ErrorInternalServerError<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::INTERNAL_SERVER_ERROR).into()
+}
+
+/// Helper function that creates wrapper of any error and
+/// generate *NOT IMPLEMENTED* response.
+#[allow(non_snake_case)]
+pub fn ErrorNotImplemented<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::NOT_IMPLEMENTED).into()
+}
+
+/// Helper function that creates wrapper of any error and
+/// generate *BAD GATEWAY* response.
+#[allow(non_snake_case)]
+pub fn ErrorBadGateway<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::BAD_GATEWAY).into()
+}
+
+/// Helper function that creates wrapper of any error and
+/// generate *SERVICE UNAVAILABLE* response.
+#[allow(non_snake_case)]
+pub fn ErrorServiceUnavailable<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::SERVICE_UNAVAILABLE).into()
+}
+
+/// Helper function that creates wrapper of any error and
+/// generate *GATEWAY TIMEOUT* response.
+#[allow(non_snake_case)]
+pub fn ErrorGatewayTimeout<T>(err: T) -> Error
+where
+    T: Send + Sync + fmt::Debug + fmt::Display + 'static,
+{
+    InternalError::new(err, StatusCode::GATEWAY_TIMEOUT).into()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use cookie::ParseError as CookieParseError;
+    use failure;
+    use http::{Error as HttpError, StatusCode};
+    use httparse;
+    use std::env;
+    use std::error::Error as StdError;
+    use std::io;
+
+    #[test]
+    #[cfg(actix_nightly)]
+    fn test_nightly() {
+        let resp: HttpResponse =
+            IoError::new(io::ErrorKind::Other, "test").error_response();
+        assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
+    }
+
+    #[test]
+    fn test_into_response() {
+        let resp: HttpResponse = ParseError::Incomplete.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+
+        let resp: HttpResponse = CookieParseError::EmptyName.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+
+        let resp: HttpResponse = MultipartError::Boundary.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+
+        let err: HttpError = StatusCode::from_u16(10000).err().unwrap().into();
+        let resp: HttpResponse = err.error_response();
+        assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
+    }
+
+    #[test]
+    fn test_as_fail() {
+        let orig = io::Error::new(io::ErrorKind::Other, "other");
+        let desc = orig.description().to_owned();
+        let e = ParseError::Io(orig);
+        assert_eq!(format!("{}", e.cause().unwrap()), desc);
+    }
+
+    #[test]
+    fn test_backtrace() {
+        let e = ErrorBadRequest("err");
+        let _ = e.backtrace();
+    }
+
+    #[test]
+    fn test_error_cause() {
+        let orig = io::Error::new(io::ErrorKind::Other, "other");
+        let desc = orig.description().to_owned();
+        let e = Error::from(orig);
+        assert_eq!(format!("{}", e.as_fail()), desc);
+    }
+
+    #[test]
+    fn test_error_display() {
+        let orig = io::Error::new(io::ErrorKind::Other, "other");
+        let desc = orig.description().to_owned();
+        let e = Error::from(orig);
+        assert_eq!(format!("{}", e), desc);
+    }
+
+    #[test]
+    fn test_error_http_response() {
+        let orig = io::Error::new(io::ErrorKind::Other, "other");
+        let e = Error::from(orig);
+        let resp: HttpResponse = e.into();
+        assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
+    }
+
+    #[test]
+    fn test_expect_error() {
+        let resp: HttpResponse = ExpectError::Encoding.error_response();
+        assert_eq!(resp.status(), StatusCode::EXPECTATION_FAILED);
+        let resp: HttpResponse = ExpectError::UnknownExpect.error_response();
+        assert_eq!(resp.status(), StatusCode::EXPECTATION_FAILED);
+    }
+
+    macro_rules! from {
+        ($from:expr => $error:pat) => {
+            match ParseError::from($from) {
+                e @ $error => {
+                    assert!(format!("{}", e).len() >= 5);
+                }
+                e => unreachable!("{:?}", e),
+            }
+        };
+    }
+
+    macro_rules! from_and_cause {
+        ($from:expr => $error:pat) => {
+            match ParseError::from($from) {
+                e @ $error => {
+                    let desc = format!("{}", e.cause().unwrap());
+                    assert_eq!(desc, $from.description().to_owned());
+                }
+                _ => unreachable!("{:?}", $from),
+            }
+        };
+    }
+
+    #[test]
+    fn test_from() {
+        from_and_cause!(io::Error::new(io::ErrorKind::Other, "other") => ParseError::Io(..));
+
+        from!(httparse::Error::HeaderName => ParseError::Header);
+        from!(httparse::Error::HeaderName => ParseError::Header);
+        from!(httparse::Error::HeaderValue => ParseError::Header);
+        from!(httparse::Error::NewLine => ParseError::Header);
+        from!(httparse::Error::Status => ParseError::Status);
+        from!(httparse::Error::Token => ParseError::Header);
+        from!(httparse::Error::TooManyHeaders => ParseError::TooLarge);
+        from!(httparse::Error::Version => ParseError::Version);
+    }
+
+    #[test]
+    fn failure_error() {
+        const NAME: &str = "RUST_BACKTRACE";
+        let old_tb = env::var(NAME);
+        env::set_var(NAME, "0");
+        let error = failure::err_msg("Hello!");
+        let resp: Error = error.into();
+        assert_eq!(
+            format!("{:?}", resp),
+            "Compat { error: ErrorMessage { msg: \"Hello!\" } }\n\n"
+        );
+        match old_tb {
+            Ok(x) => env::set_var(NAME, x),
+            _ => env::remove_var(NAME),
+        }
+    }
+
+    #[test]
+    fn test_internal_error() {
+        let err = InternalError::from_response(
+            ExpectError::Encoding,
+            HttpResponse::Ok().into(),
+        );
+        let resp: HttpResponse = err.error_response();
+        assert_eq!(resp.status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_error_downcasting_direct() {
+        #[derive(Debug, Fail)]
+        #[fail(display = "demo error")]
+        struct DemoError;
+
+        impl ResponseError for DemoError {}
+
+        let err: Error = DemoError.into();
+        let err_ref: &DemoError = err.downcast_ref().unwrap();
+        assert_eq!(err_ref.to_string(), "demo error");
+    }
+
+    #[test]
+    fn test_error_downcasting_compat() {
+        #[derive(Debug, Fail)]
+        #[fail(display = "demo error")]
+        struct DemoError;
+
+        impl ResponseError for DemoError {}
+
+        let err: Error = failure::Error::from(DemoError).into();
+        let err_ref: &DemoError = err.downcast_ref().unwrap();
+        assert_eq!(err_ref.to_string(), "demo error");
+    }
+
+    #[test]
+    fn test_error_helpers() {
+        let r: HttpResponse = ErrorBadRequest("err").into();
+        assert_eq!(r.status(), StatusCode::BAD_REQUEST);
+
+        let r: HttpResponse = ErrorUnauthorized("err").into();
+        assert_eq!(r.status(), StatusCode::UNAUTHORIZED);
+
+        let r: HttpResponse = ErrorForbidden("err").into();
+        assert_eq!(r.status(), StatusCode::FORBIDDEN);
+
+        let r: HttpResponse = ErrorNotFound("err").into();
+        assert_eq!(r.status(), StatusCode::NOT_FOUND);
+
+        let r: HttpResponse = ErrorMethodNotAllowed("err").into();
+        assert_eq!(r.status(), StatusCode::METHOD_NOT_ALLOWED);
+
+        let r: HttpResponse = ErrorRequestTimeout("err").into();
+        assert_eq!(r.status(), StatusCode::REQUEST_TIMEOUT);
+
+        let r: HttpResponse = ErrorConflict("err").into();
+        assert_eq!(r.status(), StatusCode::CONFLICT);
+
+        let r: HttpResponse = ErrorGone("err").into();
+        assert_eq!(r.status(), StatusCode::GONE);
+
+        let r: HttpResponse = ErrorPreconditionFailed("err").into();
+        assert_eq!(r.status(), StatusCode::PRECONDITION_FAILED);
+
+        let r: HttpResponse = ErrorExpectationFailed("err").into();
+        assert_eq!(r.status(), StatusCode::EXPECTATION_FAILED);
+
+        let r: HttpResponse = ErrorInternalServerError("err").into();
+        assert_eq!(r.status(), StatusCode::INTERNAL_SERVER_ERROR);
+
+        let r: HttpResponse = ErrorNotImplemented("err").into();
+        assert_eq!(r.status(), StatusCode::NOT_IMPLEMENTED);
+
+        let r: HttpResponse = ErrorBadGateway("err").into();
+        assert_eq!(r.status(), StatusCode::BAD_GATEWAY);
+
+        let r: HttpResponse = ErrorServiceUnavailable("err").into();
+        assert_eq!(r.status(), StatusCode::SERVICE_UNAVAILABLE);
+
+        let r: HttpResponse = ErrorGatewayTimeout("err").into();
+        assert_eq!(r.status(), StatusCode::GATEWAY_TIMEOUT);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/extensions.rs.html b/static/api/actix-web/0.7.2/src/actix_web/extensions.rs.html new file mode 100644 index 0000000..48e1395 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/extensions.rs.html @@ -0,0 +1,229 @@ +extensions.rs.html -- source
  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
+
+use std::any::{Any, TypeId};
+use std::collections::HashMap;
+use std::fmt;
+use std::hash::{BuildHasherDefault, Hasher};
+
+struct IdHasher {
+    id: u64,
+}
+
+impl Default for IdHasher {
+    fn default() -> IdHasher {
+        IdHasher { id: 0 }
+    }
+}
+
+impl Hasher for IdHasher {
+    fn write(&mut self, bytes: &[u8]) {
+        for &x in bytes {
+            self.id.wrapping_add(u64::from(x));
+        }
+    }
+
+    fn write_u64(&mut self, u: u64) {
+        self.id = u;
+    }
+
+    fn finish(&self) -> u64 {
+        self.id
+    }
+}
+
+type AnyMap = HashMap<TypeId, Box<Any>, BuildHasherDefault<IdHasher>>;
+
+/// A type map of request extensions.
+pub struct Extensions {
+    map: AnyMap,
+}
+
+impl Extensions {
+    /// Create an empty `Extensions`.
+    #[inline]
+    pub(crate) fn new() -> Extensions {
+        Extensions {
+            map: HashMap::default(),
+        }
+    }
+
+    /// Insert a type into this `Extensions`.
+    ///
+    /// If a extension of this type already existed, it will
+    /// be returned.
+    pub fn insert<T: 'static>(&mut self, val: T) {
+        self.map.insert(TypeId::of::<T>(), Box::new(val));
+    }
+
+    /// Get a reference to a type previously inserted on this `Extensions`.
+    pub fn get<T: 'static>(&self) -> Option<&T> {
+        self.map
+            .get(&TypeId::of::<T>())
+            .and_then(|boxed| (&**boxed as &(Any + 'static)).downcast_ref())
+    }
+
+    /// Get a mutable reference to a type previously inserted on this `Extensions`.
+    pub fn get_mut<T: 'static>(&mut self) -> Option<&mut T> {
+        self.map
+            .get_mut(&TypeId::of::<T>())
+            .and_then(|boxed| (&mut **boxed as &mut (Any + 'static)).downcast_mut())
+    }
+
+    /// Remove a type from this `Extensions`.
+    ///
+    /// If a extension of this type existed, it will be returned.
+    pub fn remove<T: 'static>(&mut self) -> Option<T> {
+        self.map.remove(&TypeId::of::<T>()).and_then(|boxed| {
+            (boxed as Box<Any + 'static>)
+                .downcast()
+                .ok()
+                .map(|boxed| *boxed)
+        })
+    }
+
+    /// Clear the `Extensions` of all inserted extensions.
+    #[inline]
+    pub fn clear(&mut self) {
+        self.map.clear();
+    }
+}
+
+impl fmt::Debug for Extensions {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_struct("Extensions").finish()
+    }
+}
+
+#[test]
+fn test_extensions() {
+    #[derive(Debug, PartialEq)]
+    struct MyType(i32);
+
+    let mut extensions = Extensions::new();
+
+    extensions.insert(5i32);
+    extensions.insert(MyType(10));
+
+    assert_eq!(extensions.get(), Some(&5i32));
+    assert_eq!(extensions.get_mut(), Some(&mut 5i32));
+
+    assert_eq!(extensions.remove::<i32>(), Some(5i32));
+    assert!(extensions.get::<i32>().is_none());
+
+    assert_eq!(extensions.get::<bool>(), None);
+    assert_eq!(extensions.get(), Some(&MyType(10)));
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/extractor.rs.html b/static/api/actix-web/0.7.2/src/actix_web/extractor.rs.html new file mode 100644 index 0000000..1e274f3 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/extractor.rs.html @@ -0,0 +1,2023 @@ +extractor.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+
+use std::marker::PhantomData;
+use std::ops::{Deref, DerefMut};
+use std::rc::Rc;
+use std::{fmt, str};
+
+use bytes::Bytes;
+use encoding::all::UTF_8;
+use encoding::types::{DecoderTrap, Encoding};
+use futures::{future, Async, Future, Poll};
+use mime::Mime;
+use serde::de::{self, DeserializeOwned};
+use serde_urlencoded;
+
+use de::PathDeserializer;
+use error::{Error, ErrorBadRequest, ErrorNotFound, UrlencodedError};
+use handler::{AsyncResult, FromRequest};
+use httpmessage::{HttpMessage, MessageBody, UrlEncoded};
+use httprequest::HttpRequest;
+
+#[derive(PartialEq, Eq, PartialOrd, Ord)]
+/// Extract typed information from the request's path.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate bytes;
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// use actix_web::{http, App, Path, Result};
+///
+/// /// extract path info from "/{username}/{count}/index.html" url
+/// /// {username} - deserializes to a String
+/// /// {count} -  - deserializes to a u32
+/// fn index(info: Path<(String, u32)>) -> Result<String> {
+///     Ok(format!("Welcome {}! {}", info.0, info.1))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource(
+///         "/{username}/{count}/index.html", // <- define path parameters
+///         |r| r.method(http::Method::GET).with(index),
+///     ); // <- use `with` extractor
+/// }
+/// ```
+///
+/// It is possible to extract path information to a specific type that
+/// implements `Deserialize` trait from *serde*.
+///
+/// ```rust
+/// # extern crate bytes;
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{http, App, Path, Result};
+///
+/// #[derive(Deserialize)]
+/// struct Info {
+///     username: String,
+/// }
+///
+/// /// extract path info using serde
+/// fn index(info: Path<Info>) -> Result<String> {
+///     Ok(format!("Welcome {}!", info.username))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource(
+///         "/{username}/index.html", // <- define path parameters
+///         |r| r.method(http::Method::GET).with(index),
+///     ); // <- use `with` extractor
+/// }
+/// ```
+pub struct Path<T> {
+    inner: T,
+}
+
+impl<T> AsRef<T> for Path<T> {
+    fn as_ref(&self) -> &T {
+        &self.inner
+    }
+}
+
+impl<T> Deref for Path<T> {
+    type Target = T;
+
+    fn deref(&self) -> &T {
+        &self.inner
+    }
+}
+
+impl<T> DerefMut for Path<T> {
+    fn deref_mut(&mut self) -> &mut T {
+        &mut self.inner
+    }
+}
+
+impl<T> Path<T> {
+    /// Deconstruct to an inner value
+    pub fn into_inner(self) -> T {
+        self.inner
+    }
+}
+
+impl<T, S> FromRequest<S> for Path<T>
+where
+    T: DeserializeOwned,
+{
+    type Config = ();
+    type Result = Result<Self, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _: &Self::Config) -> Self::Result {
+        let req = req.clone();
+        de::Deserialize::deserialize(PathDeserializer::new(&req))
+            .map_err(ErrorNotFound)
+            .map(|inner| Path { inner })
+    }
+}
+
+impl<T: fmt::Debug> fmt::Debug for Path<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.inner.fmt(f)
+    }
+}
+
+impl<T: fmt::Display> fmt::Display for Path<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.inner.fmt(f)
+    }
+}
+
+#[derive(PartialEq, Eq, PartialOrd, Ord)]
+/// Extract typed information from from the request's query.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate bytes;
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{App, Query, http};
+///
+///
+///#[derive(Debug, Deserialize)]
+///pub enum ResponseType {
+///    Token,
+///    Code
+///}
+///
+///#[derive(Deserialize)]
+///pub struct AuthRequest {
+///    id: u64,
+///    response_type: ResponseType,
+///}
+///
+/// // use `with` extractor for query info
+/// // this handler get called only if request's query contains `username` field
+/// // The correct request for this handler would be `/index.html?id=64&response_type=Code"`
+/// fn index(info: Query<AuthRequest>) -> String {
+///     format!("Authorization request for client with id={} and type={:?}!", info.id, info.response_type)
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource(
+///        "/index.html",
+///        |r| r.method(http::Method::GET).with(index)); // <- use `with` extractor
+/// }
+/// ```
+pub struct Query<T>(T);
+
+impl<T> Deref for Query<T> {
+    type Target = T;
+
+    fn deref(&self) -> &T {
+        &self.0
+    }
+}
+
+impl<T> DerefMut for Query<T> {
+    fn deref_mut(&mut self) -> &mut T {
+        &mut self.0
+    }
+}
+
+impl<T> Query<T> {
+    /// Deconstruct to a inner value
+    pub fn into_inner(self) -> T {
+        self.0
+    }
+}
+
+impl<T, S> FromRequest<S> for Query<T>
+where
+    T: de::DeserializeOwned,
+{
+    type Config = ();
+    type Result = Result<Self, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _: &Self::Config) -> Self::Result {
+        serde_urlencoded::from_str::<T>(req.query_string())
+            .map_err(|e| e.into())
+            .map(Query)
+    }
+}
+
+impl<T: fmt::Debug> fmt::Debug for Query<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+impl<T: fmt::Display> fmt::Display for Query<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+#[derive(PartialEq, Eq, PartialOrd, Ord)]
+/// Extract typed information from the request's body.
+///
+/// To extract typed information from request's body, the type `T` must
+/// implement the `Deserialize` trait from *serde*.
+///
+/// [**FormConfig**](dev/struct.FormConfig.html) allows to configure extraction
+/// process.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{App, Form, Result};
+///
+/// #[derive(Deserialize)]
+/// struct FormData {
+///     username: String,
+/// }
+///
+/// /// extract form data using serde
+/// /// this handler get called only if content type is *x-www-form-urlencoded*
+/// /// and content of the request could be deserialized to a `FormData` struct
+/// fn index(form: Form<FormData>) -> Result<String> {
+///     Ok(format!("Welcome {}!", form.username))
+/// }
+/// # fn main() {}
+/// ```
+pub struct Form<T>(pub T);
+
+impl<T> Form<T> {
+    /// Deconstruct to an inner value
+    pub fn into_inner(self) -> T {
+        self.0
+    }
+}
+
+impl<T> Deref for Form<T> {
+    type Target = T;
+
+    fn deref(&self) -> &T {
+        &self.0
+    }
+}
+
+impl<T> DerefMut for Form<T> {
+    fn deref_mut(&mut self) -> &mut T {
+        &mut self.0
+    }
+}
+
+impl<T, S> FromRequest<S> for Form<T>
+where
+    T: DeserializeOwned + 'static,
+    S: 'static,
+{
+    type Config = FormConfig<S>;
+    type Result = Box<Future<Item = Self, Error = Error>>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        let req2 = req.clone();
+        let err = Rc::clone(&cfg.ehandler);
+        Box::new(
+            UrlEncoded::new(req)
+                .limit(cfg.limit)
+                .map_err(move |e| (*err)(e, &req2))
+                .map(Form),
+        )
+    }
+}
+
+impl<T: fmt::Debug> fmt::Debug for Form<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+impl<T: fmt::Display> fmt::Display for Form<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+/// Form extractor configuration
+///
+/// ```rust
+/// # extern crate actix_web;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{http, App, Form, Result};
+///
+/// #[derive(Deserialize)]
+/// struct FormData {
+///     username: String,
+/// }
+///
+/// /// extract form data using serde.
+/// /// custom configuration is used for this handler, max payload size is 4k
+/// fn index(form: Form<FormData>) -> Result<String> {
+///     Ok(format!("Welcome {}!", form.username))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource(
+///         "/index.html",
+///         |r| {
+///             r.method(http::Method::GET)
+///                 // register form handler and change form extractor configuration
+///                 .with_config(index, |cfg| {cfg.limit(4096);})
+///         },
+///     );
+/// }
+/// ```
+pub struct FormConfig<S> {
+    limit: usize,
+    ehandler: Rc<Fn(UrlencodedError, &HttpRequest<S>) -> Error>,
+}
+
+impl<S> FormConfig<S> {
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(&mut self, limit: usize) -> &mut Self {
+        self.limit = limit;
+        self
+    }
+
+    /// Set custom error handler
+    pub fn error_handler<F>(&mut self, f: F) -> &mut Self
+    where
+        F: Fn(UrlencodedError, &HttpRequest<S>) -> Error + 'static,
+    {
+        self.ehandler = Rc::new(f);
+        self
+    }
+}
+
+impl<S> Default for FormConfig<S> {
+    fn default() -> Self {
+        FormConfig {
+            limit: 262_144,
+            ehandler: Rc::new(|e, _| e.into()),
+        }
+    }
+}
+
+/// Request payload extractor.
+///
+/// Loads request's payload and construct Bytes instance.
+///
+/// [**PayloadConfig**](dev/struct.PayloadConfig.html) allows to configure
+/// extraction process.
+///
+/// ## Example
+///
+/// ```rust
+/// extern crate bytes;
+/// # extern crate actix_web;
+/// use actix_web::{http, App, Result};
+///
+/// /// extract text data from request
+/// fn index(body: bytes::Bytes) -> Result<String> {
+///     Ok(format!("Body {:?}!", body))
+/// }
+///
+/// fn main() {
+///     let app = App::new()
+///         .resource("/index.html", |r| r.method(http::Method::GET).with(index));
+/// }
+/// ```
+impl<S: 'static> FromRequest<S> for Bytes {
+    type Config = PayloadConfig;
+    type Result = Result<Box<Future<Item = Self, Error = Error>>, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        // check content-type
+        cfg.check_mimetype(req)?;
+
+        Ok(Box::new(MessageBody::new(req).limit(cfg.limit).from_err()))
+    }
+}
+
+/// Extract text information from the request's body.
+///
+/// Text extractor automatically decode body according to the request's charset.
+///
+/// [**PayloadConfig**](dev/struct.PayloadConfig.html) allows to configure
+/// extraction process.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{http, App, Result};
+///
+/// /// extract text data from request
+/// fn index(body: String) -> Result<String> {
+///     Ok(format!("Body {}!", body))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource("/index.html", |r| {
+///         r.method(http::Method::GET)
+///                .with_config(index, |cfg| { // <- register handler with extractor params
+///                   cfg.limit(4096);  // <- limit size of the payload
+///                 })
+///     });
+/// }
+/// ```
+impl<S: 'static> FromRequest<S> for String {
+    type Config = PayloadConfig;
+    type Result = Result<Box<Future<Item = String, Error = Error>>, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        // check content-type
+        cfg.check_mimetype(req)?;
+
+        // check charset
+        let encoding = req.encoding()?;
+
+        Ok(Box::new(
+            MessageBody::new(req)
+                .limit(cfg.limit)
+                .from_err()
+                .and_then(move |body| {
+                    let enc: *const Encoding = encoding as *const Encoding;
+                    if enc == UTF_8 {
+                        Ok(str::from_utf8(body.as_ref())
+                            .map_err(|_| ErrorBadRequest("Can not decode body"))?
+                            .to_owned())
+                    } else {
+                        Ok(encoding
+                            .decode(&body, DecoderTrap::Strict)
+                            .map_err(|_| ErrorBadRequest("Can not decode body"))?)
+                    }
+                }),
+        ))
+    }
+}
+
+/// Optionally extract a field from the request
+///
+/// If the FromRequest for T fails, return None rather than returning an error response
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// extern crate rand;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+/// use actix_web::error::ErrorBadRequest;
+///
+/// #[derive(Debug, Deserialize)]
+/// struct Thing { name: String }
+///
+/// impl<S> FromRequest<S> for Thing {
+///     type Config = ();
+///     type Result = Result<Thing, Error>;
+///
+///     #[inline]
+///     fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+///         if rand::random() {
+///             Ok(Thing { name: "thingy".into() })
+///         } else {
+///             Err(ErrorBadRequest("no luck"))
+///         }
+///
+///     }
+/// }
+///
+/// /// extract text data from request
+/// fn index(supplied_thing: Option<Thing>) -> Result<String> {
+///     match supplied_thing {
+///         // Puns not intended
+///         Some(thing) => Ok(format!("Got something: {:?}", thing)),
+///         None => Ok(format!("No thing!"))
+///     }
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource("/users/:first", |r| {
+///         r.method(http::Method::POST).with(index)
+///     });
+/// }
+/// ```
+impl<T: 'static, S: 'static> FromRequest<S> for Option<T>
+where
+    T: FromRequest<S>,
+{
+    type Config = T::Config;
+    type Result = Box<Future<Item = Option<T>, Error = Error>>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        Box::new(T::from_request(req, cfg).into().then(|r| match r {
+            Ok(v) => future::ok(Some(v)),
+            Err(_) => future::ok(None),
+        }))
+    }
+}
+
+/// Optionally extract a field from the request or extract the Error if unsuccessful
+///
+/// If the FromRequest for T fails, inject Err into handler rather than returning an error response
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// extern crate rand;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+/// use actix_web::error::ErrorBadRequest;
+///
+/// #[derive(Debug, Deserialize)]
+/// struct Thing { name: String }
+///
+/// impl<S> FromRequest<S> for Thing {
+///     type Config = ();
+///     type Result = Result<Thing, Error>;
+///
+///     #[inline]
+///     fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+///         if rand::random() {
+///             Ok(Thing { name: "thingy".into() })
+///         } else {
+///             Err(ErrorBadRequest("no luck"))
+///         }
+///
+///     }
+/// }
+///
+/// /// extract text data from request
+/// fn index(supplied_thing: Result<Thing>) -> Result<String> {
+///     match supplied_thing {
+///         Ok(thing) => Ok(format!("Got thing: {:?}", thing)),
+///         Err(e) => Ok(format!("Error extracting thing: {}", e))
+///     }
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource("/users/:first", |r| {
+///         r.method(http::Method::POST).with(index)
+///     });
+/// }
+/// ```
+impl<T: 'static, S: 'static> FromRequest<S> for Result<T, Error>
+where
+    T: FromRequest<S>,
+{
+    type Config = T::Config;
+    type Result = Box<Future<Item = Result<T, Error>, Error = Error>>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        Box::new(T::from_request(req, cfg).into().then(future::ok))
+    }
+}
+
+/// Payload configuration for request's payload.
+pub struct PayloadConfig {
+    limit: usize,
+    mimetype: Option<Mime>,
+}
+
+impl PayloadConfig {
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(&mut self, limit: usize) -> &mut Self {
+        self.limit = limit;
+        self
+    }
+
+    /// Set required mime-type of the request. By default mime type is not
+    /// enforced.
+    pub fn mimetype(&mut self, mt: Mime) -> &mut Self {
+        self.mimetype = Some(mt);
+        self
+    }
+
+    fn check_mimetype<S>(&self, req: &HttpRequest<S>) -> Result<(), Error> {
+        // check content-type
+        if let Some(ref mt) = self.mimetype {
+            match req.mime_type() {
+                Ok(Some(ref req_mt)) => {
+                    if mt != req_mt {
+                        return Err(ErrorBadRequest("Unexpected Content-Type"));
+                    }
+                }
+                Ok(None) => {
+                    return Err(ErrorBadRequest("Content-Type is expected"));
+                }
+                Err(err) => {
+                    return Err(err.into());
+                }
+            }
+        }
+        Ok(())
+    }
+}
+
+impl Default for PayloadConfig {
+    fn default() -> Self {
+        PayloadConfig {
+            limit: 262_144,
+            mimetype: None,
+        }
+    }
+}
+
+macro_rules! tuple_from_req ({$fut_type:ident, $(($n:tt, $T:ident)),+} => {
+
+    /// FromRequest implementation for tuple
+    impl<S, $($T: FromRequest<S> + 'static),+> FromRequest<S> for ($($T,)+)
+    where
+        S: 'static,
+    {
+        type Config = ($($T::Config,)+);
+        type Result = Box<Future<Item = ($($T,)+), Error = Error>>;
+
+        fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+            Box::new($fut_type {
+                s: PhantomData,
+                items: <($(Option<$T>,)+)>::default(),
+                futs: ($(Some($T::from_request(req, &cfg.$n).into()),)+),
+            })
+        }
+    }
+
+    struct $fut_type<S, $($T: FromRequest<S>),+>
+    where
+        S: 'static,
+    {
+        s: PhantomData<S>,
+        items: ($(Option<$T>,)+),
+        futs: ($(Option<AsyncResult<$T>>,)+),
+    }
+
+    impl<S, $($T: FromRequest<S>),+> Future for $fut_type<S, $($T),+>
+    where
+        S: 'static,
+    {
+        type Item = ($($T,)+);
+        type Error = Error;
+
+        fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+            let mut ready = true;
+
+            $(
+                if self.futs.$n.is_some() {
+                    match self.futs.$n.as_mut().unwrap().poll() {
+                        Ok(Async::Ready(item)) => {
+                            self.items.$n = Some(item);
+                            self.futs.$n.take();
+                        }
+                        Ok(Async::NotReady) => ready = false,
+                        Err(e) => return Err(e),
+                    }
+                }
+            )+
+
+                if ready {
+                    Ok(Async::Ready(
+                        ($(self.items.$n.take().unwrap(),)+)
+                    ))
+                } else {
+                    Ok(Async::NotReady)
+                }
+        }
+    }
+});
+
+tuple_from_req!(TupleFromRequest1, (0, A));
+tuple_from_req!(TupleFromRequest2, (0, A), (1, B));
+tuple_from_req!(TupleFromRequest3, (0, A), (1, B), (2, C));
+tuple_from_req!(TupleFromRequest4, (0, A), (1, B), (2, C), (3, D));
+tuple_from_req!(TupleFromRequest5, (0, A), (1, B), (2, C), (3, D), (4, E));
+tuple_from_req!(
+    TupleFromRequest6,
+    (0, A),
+    (1, B),
+    (2, C),
+    (3, D),
+    (4, E),
+    (5, F)
+);
+tuple_from_req!(
+    TupleFromRequest7,
+    (0, A),
+    (1, B),
+    (2, C),
+    (3, D),
+    (4, E),
+    (5, F),
+    (6, G)
+);
+tuple_from_req!(
+    TupleFromRequest8,
+    (0, A),
+    (1, B),
+    (2, C),
+    (3, D),
+    (4, E),
+    (5, F),
+    (6, G),
+    (7, H)
+);
+tuple_from_req!(
+    TupleFromRequest9,
+    (0, A),
+    (1, B),
+    (2, C),
+    (3, D),
+    (4, E),
+    (5, F),
+    (6, G),
+    (7, H),
+    (8, I)
+);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use bytes::Bytes;
+    use futures::{Async, Future};
+    use http::header;
+    use mime;
+    use resource::Resource;
+    use router::{ResourceDef, Router};
+    use test::TestRequest;
+
+    #[derive(Deserialize, Debug, PartialEq)]
+    struct Info {
+        hello: String,
+    }
+
+    #[test]
+    fn test_bytes() {
+        let cfg = PayloadConfig::default();
+        let req = TestRequest::with_header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        match Bytes::from_request(&req, &cfg).unwrap().poll().unwrap() {
+            Async::Ready(s) => {
+                assert_eq!(s, Bytes::from_static(b"hello=world"));
+            }
+            _ => unreachable!(),
+        }
+    }
+
+    #[test]
+    fn test_string() {
+        let cfg = PayloadConfig::default();
+        let req = TestRequest::with_header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        match String::from_request(&req, &cfg).unwrap().poll().unwrap() {
+            Async::Ready(s) => {
+                assert_eq!(s, "hello=world");
+            }
+            _ => unreachable!(),
+        }
+    }
+
+    #[test]
+    fn test_form() {
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        let mut cfg = FormConfig::default();
+        cfg.limit(4096);
+        match Form::<Info>::from_request(&req, &cfg).poll().unwrap() {
+            Async::Ready(s) => {
+                assert_eq!(s.hello, "world");
+            }
+            _ => unreachable!(),
+        }
+    }
+
+    #[test]
+    fn test_option() {
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).finish();
+
+        let mut cfg = FormConfig::default();
+        cfg.limit(4096);
+
+        match Option::<Form<Info>>::from_request(&req, &cfg)
+            .poll()
+            .unwrap()
+        {
+            Async::Ready(r) => assert_eq!(r, None),
+            _ => unreachable!(),
+        }
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "9")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        match Option::<Form<Info>>::from_request(&req, &cfg)
+            .poll()
+            .unwrap()
+        {
+            Async::Ready(r) => assert_eq!(
+                r,
+                Some(Form(Info {
+                    hello: "world".into()
+                }))
+            ),
+            _ => unreachable!(),
+        }
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "9")
+            .set_payload(Bytes::from_static(b"bye=world"))
+            .finish();
+
+        match Option::<Form<Info>>::from_request(&req, &cfg)
+            .poll()
+            .unwrap()
+        {
+            Async::Ready(r) => assert_eq!(r, None),
+            _ => unreachable!(),
+        }
+    }
+
+    #[test]
+    fn test_result() {
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        match Result::<Form<Info>, Error>::from_request(&req, &FormConfig::default())
+            .poll()
+            .unwrap()
+        {
+            Async::Ready(Ok(r)) => assert_eq!(
+                r,
+                Form(Info {
+                    hello: "world".into()
+                })
+            ),
+            _ => unreachable!(),
+        }
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "9")
+            .set_payload(Bytes::from_static(b"bye=world"))
+            .finish();
+
+        match Result::<Form<Info>, Error>::from_request(&req, &FormConfig::default())
+            .poll()
+            .unwrap()
+        {
+            Async::Ready(r) => assert!(r.is_err()),
+            _ => unreachable!(),
+        }
+    }
+
+    #[test]
+    fn test_payload_config() {
+        let req = TestRequest::default().finish();
+        let mut cfg = PayloadConfig::default();
+        cfg.mimetype(mime::APPLICATION_JSON);
+        assert!(cfg.check_mimetype(&req).is_err());
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).finish();
+        assert!(cfg.check_mimetype(&req).is_err());
+
+        let req =
+            TestRequest::with_header(header::CONTENT_TYPE, "application/json").finish();
+        assert!(cfg.check_mimetype(&req).is_ok());
+    }
+
+    #[derive(Deserialize)]
+    struct MyStruct {
+        key: String,
+        value: String,
+    }
+
+    #[derive(Deserialize)]
+    struct Id {
+        id: String,
+    }
+
+    #[derive(Deserialize)]
+    struct Test2 {
+        key: String,
+        value: u32,
+    }
+
+    #[test]
+    fn test_request_extract() {
+        let req = TestRequest::with_uri("/name/user1/?id=test").finish();
+
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/{key}/{value}/")));
+        let info = router.recognize(&req, &(), 0);
+        let req = req.with_route_info(info);
+
+        let s = Path::<MyStruct>::from_request(&req, &()).unwrap();
+        assert_eq!(s.key, "name");
+        assert_eq!(s.value, "user1");
+
+        let s = Path::<(String, String)>::from_request(&req, &()).unwrap();
+        assert_eq!(s.0, "name");
+        assert_eq!(s.1, "user1");
+
+        let s = Query::<Id>::from_request(&req, &()).unwrap();
+        assert_eq!(s.id, "test");
+
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/{key}/{value}/")));
+        let req = TestRequest::with_uri("/name/32/").finish();
+        let info = router.recognize(&req, &(), 0);
+        let req = req.with_route_info(info);
+
+        let s = Path::<Test2>::from_request(&req, &()).unwrap();
+        assert_eq!(s.as_ref().key, "name");
+        assert_eq!(s.value, 32);
+
+        let s = Path::<(String, u8)>::from_request(&req, &()).unwrap();
+        assert_eq!(s.0, "name");
+        assert_eq!(s.1, 32);
+
+        let res = Path::<Vec<String>>::extract(&req).unwrap();
+        assert_eq!(res[0], "name".to_owned());
+        assert_eq!(res[1], "32".to_owned());
+    }
+
+    #[test]
+    fn test_extract_path_single() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/{value}/")));
+
+        let req = TestRequest::with_uri("/32/").finish();
+        let info = router.recognize(&req, &(), 0);
+        let req = req.with_route_info(info);
+        assert_eq!(*Path::<i8>::from_request(&req, &()).unwrap(), 32);
+    }
+
+    #[test]
+    fn test_tuple_extract() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/{key}/{value}/")));
+
+        let req = TestRequest::with_uri("/name/user1/?id=test").finish();
+        let info = router.recognize(&req, &(), 0);
+        let req = req.with_route_info(info);
+
+        let res = match <(Path<(String, String)>,)>::extract(&req).poll() {
+            Ok(Async::Ready(res)) => res,
+            _ => panic!("error"),
+        };
+        assert_eq!((res.0).0, "name");
+        assert_eq!((res.0).1, "user1");
+
+        let res = match <(Path<(String, String)>, Path<(String, String)>)>::extract(&req)
+            .poll()
+        {
+            Ok(Async::Ready(res)) => res,
+            _ => panic!("error"),
+        };
+        assert_eq!((res.0).0, "name");
+        assert_eq!((res.0).1, "user1");
+        assert_eq!((res.1).0, "name");
+        assert_eq!((res.1).1, "user1");
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/fs.rs.html b/static/api/actix-web/0.7.2/src/actix_web/fs.rs.html new file mode 100644 index 0000000..3315fb9 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/fs.rs.html @@ -0,0 +1,3599 @@ +fs.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+
+//! Static files support
+use std::fmt::Write;
+use std::fs::{DirEntry, File, Metadata};
+use std::io::{Read, Seek};
+use std::marker::PhantomData;
+use std::ops::{Deref, DerefMut};
+use std::path::{Path, PathBuf};
+use std::time::{SystemTime, UNIX_EPOCH};
+use std::{cmp, io};
+
+#[cfg(unix)]
+use std::os::unix::fs::MetadataExt;
+
+use bytes::Bytes;
+use futures::{Async, Future, Poll, Stream};
+use futures_cpupool::{CpuFuture, CpuPool};
+use htmlescape::encode_minimal as escape_html_entity;
+use mime;
+use mime_guess::{get_mime_type, guess_mime_type};
+use percent_encoding::{utf8_percent_encode, DEFAULT_ENCODE_SET};
+
+use error::{Error, StaticFileError};
+use handler::{AsyncResult, Handler, Responder, RouteHandler, WrapHandler};
+use header;
+use header::{ContentDisposition, DispositionParam, DispositionType};
+use http::{ContentEncoding, Method, StatusCode};
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use param::FromParam;
+use server::settings::DEFAULT_CPUPOOL;
+
+///Describes `StaticFiles` configiration
+///
+///To configure actix's static resources you need
+///to define own configiration type and implement any method
+///you wish to customize.
+///As trait implements reasonable defaults for Actix.
+///
+///## Example
+///
+///```rust
+/// extern crate mime;
+/// extern crate actix_web;
+/// use actix_web::http::header::DispositionType;
+/// use actix_web::fs::{StaticFileConfig, NamedFile};
+///
+/// #[derive(Default)]
+/// struct MyConfig;
+///
+/// impl StaticFileConfig for MyConfig {
+///     fn content_disposition_map(typ: mime::Name) -> DispositionType {
+///         DispositionType::Attachment
+///     }
+/// }
+///
+/// let file = NamedFile::open_with_config("foo.txt", MyConfig);
+///```
+pub trait StaticFileConfig: Default {
+    ///Describes mapping for mime type to content disposition header
+    ///
+    ///By default `IMAGE`, `TEXT` and `VIDEO` are mapped to Inline.
+    ///Others are mapped to Attachment
+    fn content_disposition_map(typ: mime::Name) -> DispositionType {
+        match typ {
+            mime::IMAGE | mime::TEXT | mime::VIDEO => DispositionType::Inline,
+            _ => DispositionType::Attachment,
+        }
+    }
+
+    ///Describes whether Actix should attempt to calculate `ETag`
+    ///
+    ///Defaults to `true`
+    fn is_use_etag() -> bool {
+        true
+    }
+
+    ///Describes whether Actix should use last modified date of file.
+    ///
+    ///Defaults to `true`
+    fn is_use_last_modifier() -> bool {
+        true
+    }
+
+    ///Describes allowed methods to access static resources.
+    ///
+    ///By default all methods are allowed
+    fn is_method_allowed(_method: &Method) -> bool {
+        true
+    }
+}
+
+///Default content disposition as described in
+///[StaticFileConfig](trait.StaticFileConfig.html)
+#[derive(Default)]
+pub struct DefaultConfig;
+impl StaticFileConfig for DefaultConfig {}
+
+/// Return the MIME type associated with a filename extension (case-insensitive).
+/// If `ext` is empty or no associated type for the extension was found, returns
+/// the type `application/octet-stream`.
+#[inline]
+pub fn file_extension_to_mime(ext: &str) -> mime::Mime {
+    get_mime_type(ext)
+}
+
+/// A file with an associated name.
+#[derive(Debug)]
+pub struct NamedFile<C = DefaultConfig> {
+    path: PathBuf,
+    file: File,
+    content_type: mime::Mime,
+    content_disposition: header::ContentDisposition,
+    md: Metadata,
+    modified: Option<SystemTime>,
+    cpu_pool: Option<CpuPool>,
+    encoding: Option<ContentEncoding>,
+    status_code: StatusCode,
+    _cd_map: PhantomData<C>,
+}
+
+impl NamedFile {
+    /// Attempts to open a file in read-only mode.
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::fs::NamedFile;
+    ///
+    /// let file = NamedFile::open("foo.txt");
+    /// ```
+    pub fn open<P: AsRef<Path>>(path: P) -> io::Result<NamedFile> {
+        Self::open_with_config(path, DefaultConfig)
+    }
+}
+
+impl<C: StaticFileConfig> NamedFile<C> {
+    /// Attempts to open a file in read-only mode using provided configiration.
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::fs::{DefaultConfig, NamedFile};
+    ///
+    /// let file = NamedFile::open_with_config("foo.txt", DefaultConfig);
+    /// ```
+    pub fn open_with_config<P: AsRef<Path>>(path: P, _: C) -> io::Result<NamedFile<C>> {
+        let path = path.as_ref().to_path_buf();
+
+        // Get the name of the file and use it to construct default Content-Type
+        // and Content-Disposition values
+        let (content_type, content_disposition) = {
+            let filename = match path.file_name() {
+                Some(name) => name.to_string_lossy(),
+                None => {
+                    return Err(io::Error::new(
+                        io::ErrorKind::InvalidInput,
+                        "Provided path has no filename",
+                    ))
+                }
+            };
+
+            let ct = guess_mime_type(&path);
+            let disposition_type = C::content_disposition_map(ct.type_());
+            let cd = ContentDisposition {
+                disposition: disposition_type,
+                parameters: vec![DispositionParam::Filename(
+                    header::Charset::Ext("UTF-8".to_owned()),
+                    None,
+                    filename.as_bytes().to_vec(),
+                )],
+            };
+            (ct, cd)
+        };
+
+        let file = File::open(&path)?;
+        let md = file.metadata()?;
+        let modified = md.modified().ok();
+        let cpu_pool = None;
+        let encoding = None;
+        Ok(NamedFile {
+            path,
+            file,
+            content_type,
+            content_disposition,
+            md,
+            modified,
+            cpu_pool,
+            encoding,
+            status_code: StatusCode::OK,
+            _cd_map: PhantomData,
+        })
+    }
+
+    /// Returns reference to the underlying `File` object.
+    #[inline]
+    pub fn file(&self) -> &File {
+        &self.file
+    }
+
+    /// Retrieve the path of this file.
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// # use std::io;
+    /// use actix_web::fs::NamedFile;
+    ///
+    /// # fn path() -> io::Result<()> {
+    /// let file = NamedFile::open("test.txt")?;
+    /// assert_eq!(file.path().as_os_str(), "foo.txt");
+    /// # Ok(())
+    /// # }
+    /// ```
+    #[inline]
+    pub fn path(&self) -> &Path {
+        self.path.as_path()
+    }
+
+    /// Set `CpuPool` to use
+    #[inline]
+    pub fn set_cpu_pool(mut self, cpu_pool: CpuPool) -> Self {
+        self.cpu_pool = Some(cpu_pool);
+        self
+    }
+
+    /// Set response **Status Code**
+    pub fn set_status_code(mut self, status: StatusCode) -> Self {
+        self.status_code = status;
+        self
+    }
+
+    /// Set the MIME Content-Type for serving this file. By default
+    /// the Content-Type is inferred from the filename extension.
+    #[inline]
+    pub fn set_content_type(mut self, mime_type: mime::Mime) -> Self {
+        self.content_type = mime_type;
+        self
+    }
+
+    /// Set the Content-Disposition for serving this file. This allows
+    /// changing the inline/attachment disposition as well as the filename
+    /// sent to the peer. By default the disposition is `inline` for text,
+    /// image, and video content types, and `attachment` otherwise, and
+    /// the filename is taken from the path provided in the `open` method
+    /// after converting it to UTF-8 using
+    /// [to_string_lossy](https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.to_string_lossy).
+    #[inline]
+    pub fn set_content_disposition(mut self, cd: header::ContentDisposition) -> Self {
+        self.content_disposition = cd;
+        self
+    }
+
+    /// Set content encoding for serving this file
+    #[inline]
+    pub fn set_content_encoding(mut self, enc: ContentEncoding) -> Self {
+        self.encoding = Some(enc);
+        self
+    }
+
+    fn etag(&self) -> Option<header::EntityTag> {
+        // This etag format is similar to Apache's.
+        self.modified.as_ref().map(|mtime| {
+            let ino = {
+                #[cfg(unix)]
+                {
+                    self.md.ino()
+                }
+                #[cfg(not(unix))]
+                {
+                    0
+                }
+            };
+
+            let dur = mtime
+                .duration_since(UNIX_EPOCH)
+                .expect("modification time must be after epoch");
+            header::EntityTag::strong(format!(
+                "{:x}:{:x}:{:x}:{:x}",
+                ino,
+                self.md.len(),
+                dur.as_secs(),
+                dur.subsec_nanos()
+            ))
+        })
+    }
+
+    fn last_modified(&self) -> Option<header::HttpDate> {
+        self.modified.map(|mtime| mtime.into())
+    }
+}
+
+impl<C> Deref for NamedFile<C> {
+    type Target = File;
+
+    fn deref(&self) -> &File {
+        &self.file
+    }
+}
+
+impl<C> DerefMut for NamedFile<C> {
+    fn deref_mut(&mut self) -> &mut File {
+        &mut self.file
+    }
+}
+
+/// Returns true if `req` has no `If-Match` header or one which matches `etag`.
+fn any_match<S>(etag: Option<&header::EntityTag>, req: &HttpRequest<S>) -> bool {
+    match req.get_header::<header::IfMatch>() {
+        None | Some(header::IfMatch::Any) => true,
+        Some(header::IfMatch::Items(ref items)) => {
+            if let Some(some_etag) = etag {
+                for item in items {
+                    if item.strong_eq(some_etag) {
+                        return true;
+                    }
+                }
+            }
+            false
+        }
+    }
+}
+
+/// Returns true if `req` doesn't have an `If-None-Match` header matching `req`.
+fn none_match<S>(etag: Option<&header::EntityTag>, req: &HttpRequest<S>) -> bool {
+    match req.get_header::<header::IfNoneMatch>() {
+        Some(header::IfNoneMatch::Any) => false,
+        Some(header::IfNoneMatch::Items(ref items)) => {
+            if let Some(some_etag) = etag {
+                for item in items {
+                    if item.weak_eq(some_etag) {
+                        return false;
+                    }
+                }
+            }
+            true
+        }
+        None => true,
+    }
+}
+
+impl<C: StaticFileConfig> Responder for NamedFile<C> {
+    type Item = HttpResponse;
+    type Error = io::Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, io::Error> {
+        if self.status_code != StatusCode::OK {
+            let mut resp = HttpResponse::build(self.status_code);
+            resp.set(header::ContentType(self.content_type.clone()))
+                .header(
+                    header::CONTENT_DISPOSITION,
+                    self.content_disposition.to_string(),
+                );
+
+            if let Some(current_encoding) = self.encoding {
+                resp.content_encoding(current_encoding);
+            }
+            let reader = ChunkedReadFile {
+                size: self.md.len(),
+                offset: 0,
+                cpu_pool: self.cpu_pool.unwrap_or_else(|| req.cpu_pool().clone()),
+                file: Some(self.file),
+                fut: None,
+                counter: 0,
+            };
+            return Ok(resp.streaming(reader));
+        }
+
+        if !C::is_method_allowed(req.method()) {
+            return Ok(HttpResponse::MethodNotAllowed()
+                .header(header::CONTENT_TYPE, "text/plain")
+                .header(header::ALLOW, "GET, HEAD")
+                .body("This resource only supports GET and HEAD."));
+        }
+
+        let etag = if C::is_use_etag() {
+            self.etag()
+        } else {
+            None
+        };
+        let last_modified = if C::is_use_last_modifier() {
+            self.last_modified()
+        } else {
+            None
+        };
+
+        // check preconditions
+        let precondition_failed = if !any_match(etag.as_ref(), req) {
+            true
+        } else if let (Some(ref m), Some(header::IfUnmodifiedSince(ref since))) =
+            (last_modified, req.get_header())
+        {
+            m > since
+        } else {
+            false
+        };
+
+        // check last modified
+        let not_modified = if !none_match(etag.as_ref(), req) {
+            true
+        } else if let (Some(ref m), Some(header::IfModifiedSince(ref since))) =
+            (last_modified, req.get_header())
+        {
+            m <= since
+        } else {
+            false
+        };
+
+        let mut resp = HttpResponse::build(self.status_code);
+        resp.set(header::ContentType(self.content_type.clone()))
+            .header(
+                header::CONTENT_DISPOSITION,
+                self.content_disposition.to_string(),
+            );
+
+        if let Some(current_encoding) = self.encoding {
+            resp.content_encoding(current_encoding);
+        }
+
+        resp.if_some(last_modified, |lm, resp| {
+            resp.set(header::LastModified(lm));
+        }).if_some(etag, |etag, resp| {
+            resp.set(header::ETag(etag));
+        });
+
+        resp.header(header::ACCEPT_RANGES, "bytes");
+
+        let mut length = self.md.len();
+        let mut offset = 0;
+
+        // check for range header
+        if let Some(ranges) = req.headers().get(header::RANGE) {
+            if let Ok(rangesheader) = ranges.to_str() {
+                if let Ok(rangesvec) = HttpRange::parse(rangesheader, length) {
+                    length = rangesvec[0].length;
+                    offset = rangesvec[0].start;
+                    resp.content_encoding(ContentEncoding::Identity);
+                    resp.header(
+                        header::CONTENT_RANGE,
+                        format!(
+                            "bytes {}-{}/{}",
+                            offset,
+                            offset + length - 1,
+                            self.md.len()
+                        ),
+                    );
+                } else {
+                    resp.header(header::CONTENT_RANGE, format!("bytes */{}", length));
+                    return Ok(resp.status(StatusCode::RANGE_NOT_SATISFIABLE).finish());
+                };
+            } else {
+                return Ok(resp.status(StatusCode::BAD_REQUEST).finish());
+            };
+        };
+
+        resp.header(header::CONTENT_LENGTH, format!("{}", length));
+
+        if precondition_failed {
+            return Ok(resp.status(StatusCode::PRECONDITION_FAILED).finish());
+        } else if not_modified {
+            return Ok(resp.status(StatusCode::NOT_MODIFIED).finish());
+        }
+
+        if *req.method() == Method::HEAD {
+            Ok(resp.finish())
+        } else {
+            let reader = ChunkedReadFile {
+                offset,
+                size: length,
+                cpu_pool: self.cpu_pool.unwrap_or_else(|| req.cpu_pool().clone()),
+                file: Some(self.file),
+                fut: None,
+                counter: 0,
+            };
+            if offset != 0 || length != self.md.len() {
+                return Ok(resp.status(StatusCode::PARTIAL_CONTENT).streaming(reader));
+            };
+            Ok(resp.streaming(reader))
+        }
+    }
+}
+
+/// A helper created from a `std::fs::File` which reads the file
+/// chunk-by-chunk on a `CpuPool`.
+pub struct ChunkedReadFile {
+    size: u64,
+    offset: u64,
+    cpu_pool: CpuPool,
+    file: Option<File>,
+    fut: Option<CpuFuture<(File, Bytes), io::Error>>,
+    counter: u64,
+}
+
+impl Stream for ChunkedReadFile {
+    type Item = Bytes;
+    type Error = Error;
+
+    fn poll(&mut self) -> Poll<Option<Bytes>, Error> {
+        if self.fut.is_some() {
+            return match self.fut.as_mut().unwrap().poll()? {
+                Async::Ready((file, bytes)) => {
+                    self.fut.take();
+                    self.file = Some(file);
+                    self.offset += bytes.len() as u64;
+                    self.counter += bytes.len() as u64;
+                    Ok(Async::Ready(Some(bytes)))
+                }
+                Async::NotReady => Ok(Async::NotReady),
+            };
+        }
+
+        let size = self.size;
+        let offset = self.offset;
+        let counter = self.counter;
+
+        if size == counter {
+            Ok(Async::Ready(None))
+        } else {
+            let mut file = self.file.take().expect("Use after completion");
+            self.fut = Some(self.cpu_pool.spawn_fn(move || {
+                let max_bytes: usize;
+                max_bytes = cmp::min(size.saturating_sub(counter), 65_536) as usize;
+                let mut buf = Vec::with_capacity(max_bytes);
+                file.seek(io::SeekFrom::Start(offset))?;
+                let nbytes = file.by_ref().take(max_bytes as u64).read_to_end(&mut buf)?;
+                if nbytes == 0 {
+                    return Err(io::ErrorKind::UnexpectedEof.into());
+                }
+                Ok((file, Bytes::from(buf)))
+            }));
+            self.poll()
+        }
+    }
+}
+
+type DirectoryRenderer<S> =
+    Fn(&Directory, &HttpRequest<S>) -> Result<HttpResponse, io::Error>;
+
+/// A directory; responds with the generated directory listing.
+#[derive(Debug)]
+pub struct Directory {
+    /// Base directory
+    pub base: PathBuf,
+    /// Path of subdirectory to generate listing for
+    pub path: PathBuf,
+}
+
+impl Directory {
+    /// Create a new directory
+    pub fn new(base: PathBuf, path: PathBuf) -> Directory {
+        Directory { base, path }
+    }
+
+    /// Is this entry visible from this directory?
+    pub fn is_visible(&self, entry: &io::Result<DirEntry>) -> bool {
+        if let Ok(ref entry) = *entry {
+            if let Some(name) = entry.file_name().to_str() {
+                if name.starts_with('.') {
+                    return false;
+                }
+            }
+            if let Ok(ref md) = entry.metadata() {
+                let ft = md.file_type();
+                return ft.is_dir() || ft.is_file() || ft.is_symlink();
+            }
+        }
+        false
+    }
+}
+
+fn directory_listing<S>(
+    dir: &Directory, req: &HttpRequest<S>,
+) -> Result<HttpResponse, io::Error> {
+    let index_of = format!("Index of {}", req.path());
+    let mut body = String::new();
+    let base = Path::new(req.path());
+
+    for entry in dir.path.read_dir()? {
+        if dir.is_visible(&entry) {
+            let entry = entry.unwrap();
+            let p = match entry.path().strip_prefix(&dir.path) {
+                Ok(p) => base.join(p),
+                Err(_) => continue,
+            };
+            // show file url as relative to static path
+            let file_url = utf8_percent_encode(&p.to_string_lossy(), DEFAULT_ENCODE_SET)
+                .to_string();
+            // " -- &quot;  & -- &amp;  ' -- &#x27;  < -- &lt;  > -- &gt;
+            let file_name = escape_html_entity(&entry.file_name().to_string_lossy());
+
+            // if file is a directory, add '/' to the end of the name
+            if let Ok(metadata) = entry.metadata() {
+                if metadata.is_dir() {
+                    let _ = write!(
+                        body,
+                        "<li><a href=\"{}\">{}/</a></li>",
+                        file_url, file_name
+                    );
+                } else {
+                    let _ = write!(
+                        body,
+                        "<li><a href=\"{}\">{}</a></li>",
+                        file_url, file_name
+                    );
+                }
+            } else {
+                continue;
+            }
+        }
+    }
+
+    let html = format!(
+        "<html>\
+         <head><title>{}</title></head>\
+         <body><h1>{}</h1>\
+         <ul>\
+         {}\
+         </ul></body>\n</html>",
+        index_of, index_of, body
+    );
+    Ok(HttpResponse::Ok()
+        .content_type("text/html; charset=utf-8")
+        .body(html))
+}
+
+/// Static files handling
+///
+/// `StaticFile` handler must be registered with `App::handler()` method,
+/// because `StaticFile` handler requires access sub-path information.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{fs, App};
+///
+/// fn main() {
+///     let app = App::new()
+///         .handler("/static", fs::StaticFiles::new(".").unwrap())
+///         .finish();
+/// }
+/// ```
+pub struct StaticFiles<S, C = DefaultConfig> {
+    directory: PathBuf,
+    index: Option<String>,
+    show_index: bool,
+    cpu_pool: CpuPool,
+    default: Box<RouteHandler<S>>,
+    renderer: Box<DirectoryRenderer<S>>,
+    _chunk_size: usize,
+    _follow_symlinks: bool,
+    _cd_map: PhantomData<C>,
+}
+
+impl<S: 'static> StaticFiles<S> {
+    /// Create new `StaticFiles` instance for specified base directory.
+    ///
+    /// `StaticFile` uses `CpuPool` for blocking filesystem operations.
+    /// By default pool with 20 threads is used.
+    /// Pool size can be changed by setting ACTIX_CPU_POOL environment variable.
+    pub fn new<T: Into<PathBuf>>(dir: T) -> Result<StaticFiles<S>, Error> {
+        Self::with_config(dir, DefaultConfig)
+    }
+
+    /// Create new `StaticFiles` instance for specified base directory and
+    /// `CpuPool`.
+    pub fn with_pool<T: Into<PathBuf>>(
+        dir: T, pool: CpuPool,
+    ) -> Result<StaticFiles<S>, Error> {
+        Self::with_config_pool(dir, pool, DefaultConfig)
+    }
+}
+
+impl<S: 'static, C: StaticFileConfig> StaticFiles<S, C> {
+    /// Create new `StaticFiles` instance for specified base directory.
+    ///
+    /// Identical with `new` but allows to specify configiration to use.
+    pub fn with_config<T: Into<PathBuf>>(
+        dir: T, config: C,
+    ) -> Result<StaticFiles<S, C>, Error> {
+        // use default CpuPool
+        let pool = { DEFAULT_CPUPOOL.lock().clone() };
+
+        StaticFiles::with_config_pool(dir, pool, config)
+    }
+
+    /// Create new `StaticFiles` instance for specified base directory with config and
+    /// `CpuPool`.
+    pub fn with_config_pool<T: Into<PathBuf>>(
+        dir: T, pool: CpuPool, _: C,
+    ) -> Result<StaticFiles<S, C>, Error> {
+        let dir = dir.into().canonicalize()?;
+
+        if !dir.is_dir() {
+            return Err(StaticFileError::IsNotDirectory.into());
+        }
+
+        Ok(StaticFiles {
+            directory: dir,
+            index: None,
+            show_index: false,
+            cpu_pool: pool,
+            default: Box::new(WrapHandler::new(|_: &_| {
+                HttpResponse::new(StatusCode::NOT_FOUND)
+            })),
+            renderer: Box::new(directory_listing),
+            _chunk_size: 0,
+            _follow_symlinks: false,
+            _cd_map: PhantomData,
+        })
+    }
+
+    /// Show files listing for directories.
+    ///
+    /// By default show files listing is disabled.
+    pub fn show_files_listing(mut self) -> Self {
+        self.show_index = true;
+        self
+    }
+
+    /// Set custom directory renderer
+    pub fn files_listing_renderer<F>(mut self, f: F) -> Self
+    where
+        for<'r, 's> F: Fn(&'r Directory, &'s HttpRequest<S>)
+                -> Result<HttpResponse, io::Error>
+            + 'static,
+    {
+        self.renderer = Box::new(f);
+        self
+    }
+
+    /// Set index file
+    ///
+    /// Redirects to specific index file for directory "/" instead of
+    /// showing files listing.
+    pub fn index_file<T: Into<String>>(mut self, index: T) -> StaticFiles<S, C> {
+        self.index = Some(index.into());
+        self
+    }
+
+    /// Sets default handler which is used when no matched file could be found.
+    pub fn default_handler<H: Handler<S>>(mut self, handler: H) -> StaticFiles<S, C> {
+        self.default = Box::new(WrapHandler::new(handler));
+        self
+    }
+
+    fn try_handle(
+        &self, req: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        let tail: String = req.match_info().query("tail")?;
+        let relpath = PathBuf::from_param(tail.trim_left_matches('/'))?;
+
+        // full filepath
+        let path = self.directory.join(&relpath).canonicalize()?;
+
+        if path.is_dir() {
+            if let Some(ref redir_index) = self.index {
+                // TODO: Don't redirect, just return the index content.
+                // TODO: It'd be nice if there were a good usable URL manipulation
+                // library
+                let mut new_path: String = req.path().to_owned();
+                if !new_path.ends_with('/') {
+                    new_path.push('/');
+                }
+                new_path.push_str(redir_index);
+                HttpResponse::Found()
+                    .header(header::LOCATION, new_path.as_str())
+                    .finish()
+                    .respond_to(&req)
+            } else if self.show_index {
+                let dir = Directory::new(self.directory.clone(), path);
+                Ok((*self.renderer)(&dir, &req)?.into())
+            } else {
+                Err(StaticFileError::IsDirectory.into())
+            }
+        } else {
+            NamedFile::open_with_config(path, C::default())?
+                .set_cpu_pool(self.cpu_pool.clone())
+                .respond_to(&req)?
+                .respond_to(&req)
+        }
+    }
+}
+
+impl<S: 'static, C: 'static + StaticFileConfig> Handler<S> for StaticFiles<S, C> {
+    type Result = Result<AsyncResult<HttpResponse>, Error>;
+
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result {
+        self.try_handle(req).or_else(|e| {
+            debug!("StaticFiles: Failed to handle {}: {}", req.path(), e);
+            Ok(self.default.handle(req))
+        })
+    }
+}
+
+/// HTTP Range header representation.
+#[derive(Debug, Clone, Copy)]
+struct HttpRange {
+    pub start: u64,
+    pub length: u64,
+}
+
+static PREFIX: &'static str = "bytes=";
+const PREFIX_LEN: usize = 6;
+
+impl HttpRange {
+    /// Parses Range HTTP header string as per RFC 2616.
+    ///
+    /// `header` is HTTP Range header (e.g. `bytes=bytes=0-9`).
+    /// `size` is full size of response (file).
+    fn parse(header: &str, size: u64) -> Result<Vec<HttpRange>, ()> {
+        if header.is_empty() {
+            return Ok(Vec::new());
+        }
+        if !header.starts_with(PREFIX) {
+            return Err(());
+        }
+
+        let size_sig = size as i64;
+        let mut no_overlap = false;
+
+        let all_ranges: Vec<Option<HttpRange>> = header[PREFIX_LEN..]
+            .split(',')
+            .map(|x| x.trim())
+            .filter(|x| !x.is_empty())
+            .map(|ra| {
+                let mut start_end_iter = ra.split('-');
+
+                let start_str = start_end_iter.next().ok_or(())?.trim();
+                let end_str = start_end_iter.next().ok_or(())?.trim();
+
+                if start_str.is_empty() {
+                    // If no start is specified, end specifies the
+                    // range start relative to the end of the file.
+                    let mut length: i64 = try!(end_str.parse().map_err(|_| ()));
+
+                    if length > size_sig {
+                        length = size_sig;
+                    }
+
+                    Ok(Some(HttpRange {
+                        start: (size_sig - length) as u64,
+                        length: length as u64,
+                    }))
+                } else {
+                    let start: i64 = start_str.parse().map_err(|_| ())?;
+
+                    if start < 0 {
+                        return Err(());
+                    }
+                    if start >= size_sig {
+                        no_overlap = true;
+                        return Ok(None);
+                    }
+
+                    let length = if end_str.is_empty() {
+                        // If no end is specified, range extends to end of the file.
+                        size_sig - start
+                    } else {
+                        let mut end: i64 = end_str.parse().map_err(|_| ())?;
+
+                        if start > end {
+                            return Err(());
+                        }
+
+                        if end >= size_sig {
+                            end = size_sig - 1;
+                        }
+
+                        end - start + 1
+                    };
+
+                    Ok(Some(HttpRange {
+                        start: start as u64,
+                        length: length as u64,
+                    }))
+                }
+            })
+            .collect::<Result<_, _>>()?;
+
+        let ranges: Vec<HttpRange> = all_ranges.into_iter().filter_map(|x| x).collect();
+
+        if no_overlap && ranges.is_empty() {
+            return Err(());
+        }
+
+        Ok(ranges)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use std::fs;
+
+    use super::*;
+    use application::App;
+    use body::{Binary, Body};
+    use http::{header, Method, StatusCode};
+    use test::{self, TestRequest};
+
+    #[test]
+    fn test_file_extension_to_mime() {
+        let m = file_extension_to_mime("jpg");
+        assert_eq!(m, mime::IMAGE_JPEG);
+
+        let m = file_extension_to_mime("invalid extension!!");
+        assert_eq!(m, mime::APPLICATION_OCTET_STREAM);
+
+        let m = file_extension_to_mime("");
+        assert_eq!(m, mime::APPLICATION_OCTET_STREAM);
+    }
+
+    #[test]
+    fn test_named_file_text() {
+        assert!(NamedFile::open("test--").is_err());
+        let mut file = NamedFile::open("Cargo.toml")
+            .unwrap()
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "text/x-toml"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "inline; filename=\"Cargo.toml\""
+        );
+    }
+
+    #[test]
+    fn test_named_file_set_content_type() {
+        let mut file = NamedFile::open("Cargo.toml")
+            .unwrap()
+            .set_content_type(mime::TEXT_XML)
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "text/xml"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "inline; filename=\"Cargo.toml\""
+        );
+    }
+
+    #[test]
+    fn test_named_file_image() {
+        let mut file = NamedFile::open("tests/test.png")
+            .unwrap()
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "image/png"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "inline; filename=\"test.png\""
+        );
+    }
+
+    #[test]
+    fn test_named_file_image_attachment() {
+        use header::{ContentDisposition, DispositionParam, DispositionType};
+        let cd = ContentDisposition {
+            disposition: DispositionType::Attachment,
+            parameters: vec![DispositionParam::Filename(
+                header::Charset::Ext("UTF-8".to_owned()),
+                None,
+                "test.png".as_bytes().to_vec(),
+            )],
+        };
+        let mut file = NamedFile::open("tests/test.png")
+            .unwrap()
+            .set_content_disposition(cd)
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "image/png"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "attachment; filename=\"test.png\""
+        );
+    }
+
+    #[derive(Default)]
+    pub struct AllAttachmentConfig;
+    impl StaticFileConfig for AllAttachmentConfig {
+        fn content_disposition_map(_typ: mime::Name) -> DispositionType {
+            DispositionType::Attachment
+        }
+    }
+
+    #[derive(Default)]
+    pub struct AllInlineConfig;
+    impl StaticFileConfig for AllInlineConfig {
+        fn content_disposition_map(_typ: mime::Name) -> DispositionType {
+            DispositionType::Inline
+        }
+    }
+
+    #[test]
+    fn test_named_file_image_attachment_and_custom_config() {
+        let file = NamedFile::open_with_config("tests/test.png", AllAttachmentConfig)
+            .unwrap()
+            .set_cpu_pool(CpuPool::new(1));
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "image/png"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "attachment; filename=\"test.png\""
+        );
+
+        let file = NamedFile::open_with_config("tests/test.png", AllInlineConfig)
+            .unwrap()
+            .set_cpu_pool(CpuPool::new(1));
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "image/png"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "inline; filename=\"test.png\""
+        );
+    }
+
+    #[test]
+    fn test_named_file_binary() {
+        let mut file = NamedFile::open("tests/test.binary")
+            .unwrap()
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "application/octet-stream"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "attachment; filename=\"test.binary\""
+        );
+    }
+
+    #[test]
+    fn test_named_file_status_code_text() {
+        let mut file = NamedFile::open("Cargo.toml")
+            .unwrap()
+            .set_status_code(StatusCode::NOT_FOUND)
+            .set_cpu_pool(CpuPool::new(1));
+        {
+            file.file();
+            let _f: &File = &file;
+        }
+        {
+            let _f: &mut File = &mut file;
+        }
+
+        let req = TestRequest::default().finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "text/x-toml"
+        );
+        assert_eq!(
+            resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
+            "inline; filename=\"Cargo.toml\""
+        );
+        assert_eq!(resp.status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_named_file_ranges_status_code() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().handler(
+                "test",
+                StaticFiles::new(".").unwrap().index_file("Cargo.toml"),
+            )
+        });
+
+        // Valid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/Cargo.toml"))
+            .header(header::RANGE, "bytes=10-20")
+            .finish()
+            .unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::PARTIAL_CONTENT);
+
+        // Invalid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/Cargo.toml"))
+            .header(header::RANGE, "bytes=1-0")
+            .finish()
+            .unwrap();
+        let response = srv.execute(request.send()).unwrap();
+
+        assert_eq!(response.status(), StatusCode::RANGE_NOT_SATISFIABLE);
+    }
+
+    #[test]
+    fn test_named_file_content_range_headers() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().handler(
+                "test",
+                StaticFiles::new(".")
+                    .unwrap()
+                    .index_file("tests/test.binary"),
+            )
+        });
+
+        // Valid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .header(header::RANGE, "bytes=10-20")
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+
+        let contentrange = response
+            .headers()
+            .get(header::CONTENT_RANGE)
+            .unwrap()
+            .to_str()
+            .unwrap();
+
+        assert_eq!(contentrange, "bytes 10-20/100");
+
+        // Invalid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .header(header::RANGE, "bytes=10-5")
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+
+        let contentrange = response
+            .headers()
+            .get(header::CONTENT_RANGE)
+            .unwrap()
+            .to_str()
+            .unwrap();
+
+        assert_eq!(contentrange, "bytes */100");
+    }
+
+    #[test]
+    fn test_named_file_content_length_headers() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().handler(
+                "test",
+                StaticFiles::new(".")
+                    .unwrap()
+                    .index_file("tests/test.binary"),
+            )
+        });
+
+        // Valid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .header(header::RANGE, "bytes=10-20")
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+
+        let contentlength = response
+            .headers()
+            .get(header::CONTENT_LENGTH)
+            .unwrap()
+            .to_str()
+            .unwrap();
+
+        assert_eq!(contentlength, "11");
+
+        // Invalid range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .header(header::RANGE, "bytes=10-8")
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+
+        let contentlength = response
+            .headers()
+            .get(header::CONTENT_LENGTH)
+            .unwrap()
+            .to_str()
+            .unwrap();
+
+        assert_eq!(contentlength, "0");
+
+        // Without range header
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .no_default_headers()
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+
+        let contentlength = response
+            .headers()
+            .get(header::CONTENT_LENGTH)
+            .unwrap()
+            .to_str()
+            .unwrap();
+
+        assert_eq!(contentlength, "100");
+
+        // chunked
+        let request = srv
+            .get()
+            .uri(srv.url("/t%65st/tests/test.binary"))
+            .finish()
+            .unwrap();
+
+        let response = srv.execute(request.send()).unwrap();
+        {
+            let te = response
+                .headers()
+                .get(header::TRANSFER_ENCODING)
+                .unwrap()
+                .to_str()
+                .unwrap();
+            assert_eq!(te, "chunked");
+        }
+        let bytes = srv.execute(response.body()).unwrap();
+        let data = Bytes::from(fs::read("tests/test.binary").unwrap());
+        assert_eq!(bytes, data);
+    }
+
+    #[derive(Default)]
+    pub struct OnlyMethodHeadConfig;
+    impl StaticFileConfig for OnlyMethodHeadConfig {
+        fn is_method_allowed(method: &Method) -> bool {
+            match *method {
+                Method::HEAD => true,
+                _ => false,
+            }
+        }
+    }
+
+    #[test]
+    fn test_named_file_not_allowed() {
+        let file =
+            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
+        let req = TestRequest::default().method(Method::POST).finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
+
+        let file =
+            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
+        let req = TestRequest::default().method(Method::PUT).finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
+
+        let file =
+            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
+        let req = TestRequest::default().method(Method::GET).finish();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
+    }
+
+    #[test]
+    fn test_named_file_content_encoding() {
+        let req = TestRequest::default().method(Method::GET).finish();
+        let file = NamedFile::open("Cargo.toml").unwrap();
+
+        assert!(file.encoding.is_none());
+        let resp = file
+            .set_content_encoding(ContentEncoding::Identity)
+            .respond_to(&req)
+            .unwrap();
+
+        assert!(resp.content_encoding().is_some());
+        assert_eq!(resp.content_encoding().unwrap().as_str(), "identity");
+    }
+
+    #[test]
+    fn test_named_file_any_method() {
+        let req = TestRequest::default().method(Method::POST).finish();
+        let file = NamedFile::open("Cargo.toml").unwrap();
+        let resp = file.respond_to(&req).unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_static_files() {
+        let mut st = StaticFiles::new(".").unwrap().show_files_listing();
+        let req = TestRequest::with_uri("/missing")
+            .param("tail", "missing")
+            .finish();
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::NOT_FOUND);
+
+        st.show_index = false;
+        let req = TestRequest::default().finish();
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::default().param("tail", "").finish();
+
+        st.show_index = true;
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "text/html; charset=utf-8"
+        );
+        assert!(resp.body().is_binary());
+        assert!(format!("{:?}", resp.body()).contains("README.md"));
+    }
+
+    #[test]
+    fn test_static_files_bad_directory() {
+        let st: Result<StaticFiles<()>, Error> = StaticFiles::new("missing");
+        assert!(st.is_err());
+
+        let st: Result<StaticFiles<()>, Error> = StaticFiles::new("Cargo.toml");
+        assert!(st.is_err());
+    }
+
+    #[test]
+    fn test_default_handler_file_missing() {
+        let st = StaticFiles::new(".")
+            .unwrap()
+            .default_handler(|_: &_| "default content");
+        let req = TestRequest::with_uri("/missing")
+            .param("tail", "missing")
+            .finish();
+
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.body(),
+            &Body::Binary(Binary::Slice(b"default content"))
+        );
+    }
+
+    #[test]
+    fn test_redirect_to_index() {
+        let st = StaticFiles::new(".").unwrap().index_file("index.html");
+        let req = TestRequest::default().uri("/tests").finish();
+
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::FOUND);
+        assert_eq!(
+            resp.headers().get(header::LOCATION).unwrap(),
+            "/tests/index.html"
+        );
+
+        let req = TestRequest::default().uri("/tests/").finish();
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::FOUND);
+        assert_eq!(
+            resp.headers().get(header::LOCATION).unwrap(),
+            "/tests/index.html"
+        );
+    }
+
+    #[test]
+    fn test_redirect_to_index_nested() {
+        let st = StaticFiles::new(".").unwrap().index_file("mod.rs");
+        let req = TestRequest::default().uri("/src/client").finish();
+        let resp = st.handle(&req).respond_to(&req).unwrap();
+        let resp = resp.as_msg();
+        assert_eq!(resp.status(), StatusCode::FOUND);
+        assert_eq!(
+            resp.headers().get(header::LOCATION).unwrap(),
+            "/src/client/mod.rs"
+        );
+    }
+
+    #[test]
+    fn integration_redirect_to_index_with_prefix() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new()
+                .prefix("public")
+                .handler("/", StaticFiles::new(".").unwrap().index_file("Cargo.toml"))
+        });
+
+        let request = srv.get().uri(srv.url("/public")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::FOUND);
+        let loc = response
+            .headers()
+            .get(header::LOCATION)
+            .unwrap()
+            .to_str()
+            .unwrap();
+        assert_eq!(loc, "/public/Cargo.toml");
+
+        let request = srv.get().uri(srv.url("/public/")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::FOUND);
+        let loc = response
+            .headers()
+            .get(header::LOCATION)
+            .unwrap()
+            .to_str()
+            .unwrap();
+        assert_eq!(loc, "/public/Cargo.toml");
+    }
+
+    #[test]
+    fn integration_redirect_to_index() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().handler(
+                "test",
+                StaticFiles::new(".").unwrap().index_file("Cargo.toml"),
+            )
+        });
+
+        let request = srv.get().uri(srv.url("/test")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::FOUND);
+        let loc = response
+            .headers()
+            .get(header::LOCATION)
+            .unwrap()
+            .to_str()
+            .unwrap();
+        assert_eq!(loc, "/test/Cargo.toml");
+
+        let request = srv.get().uri(srv.url("/test/")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::FOUND);
+        let loc = response
+            .headers()
+            .get(header::LOCATION)
+            .unwrap()
+            .to_str()
+            .unwrap();
+        assert_eq!(loc, "/test/Cargo.toml");
+    }
+
+    #[test]
+    fn integration_percent_encoded() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().handler(
+                "test",
+                StaticFiles::new(".").unwrap().index_file("Cargo.toml"),
+            )
+        });
+
+        let request = srv
+            .get()
+            .uri(srv.url("/test/%43argo.toml"))
+            .finish()
+            .unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::OK);
+    }
+
+    struct T(&'static str, u64, Vec<HttpRange>);
+
+    #[test]
+    fn test_parse() {
+        let tests = vec![
+            T("", 0, vec![]),
+            T("", 1000, vec![]),
+            T("foo", 0, vec![]),
+            T("bytes=", 0, vec![]),
+            T("bytes=7", 10, vec![]),
+            T("bytes= 7 ", 10, vec![]),
+            T("bytes=1-", 0, vec![]),
+            T("bytes=5-4", 10, vec![]),
+            T("bytes=0-2,5-4", 10, vec![]),
+            T("bytes=2-5,4-3", 10, vec![]),
+            T("bytes=--5,4--3", 10, vec![]),
+            T("bytes=A-", 10, vec![]),
+            T("bytes=A- ", 10, vec![]),
+            T("bytes=A-Z", 10, vec![]),
+            T("bytes= -Z", 10, vec![]),
+            T("bytes=5-Z", 10, vec![]),
+            T("bytes=Ran-dom, garbage", 10, vec![]),
+            T("bytes=0x01-0x02", 10, vec![]),
+            T("bytes=         ", 10, vec![]),
+            T("bytes= , , ,   ", 10, vec![]),
+            T(
+                "bytes=0-9",
+                10,
+                vec![HttpRange {
+                    start: 0,
+                    length: 10,
+                }],
+            ),
+            T(
+                "bytes=0-",
+                10,
+                vec![HttpRange {
+                    start: 0,
+                    length: 10,
+                }],
+            ),
+            T(
+                "bytes=5-",
+                10,
+                vec![HttpRange {
+                    start: 5,
+                    length: 5,
+                }],
+            ),
+            T(
+                "bytes=0-20",
+                10,
+                vec![HttpRange {
+                    start: 0,
+                    length: 10,
+                }],
+            ),
+            T(
+                "bytes=15-,0-5",
+                10,
+                vec![HttpRange {
+                    start: 0,
+                    length: 6,
+                }],
+            ),
+            T(
+                "bytes=1-2,5-",
+                10,
+                vec![
+                    HttpRange {
+                        start: 1,
+                        length: 2,
+                    },
+                    HttpRange {
+                        start: 5,
+                        length: 5,
+                    },
+                ],
+            ),
+            T(
+                "bytes=-2 , 7-",
+                11,
+                vec![
+                    HttpRange {
+                        start: 9,
+                        length: 2,
+                    },
+                    HttpRange {
+                        start: 7,
+                        length: 4,
+                    },
+                ],
+            ),
+            T(
+                "bytes=0-0 ,2-2, 7-",
+                11,
+                vec![
+                    HttpRange {
+                        start: 0,
+                        length: 1,
+                    },
+                    HttpRange {
+                        start: 2,
+                        length: 1,
+                    },
+                    HttpRange {
+                        start: 7,
+                        length: 4,
+                    },
+                ],
+            ),
+            T(
+                "bytes=-5",
+                10,
+                vec![HttpRange {
+                    start: 5,
+                    length: 5,
+                }],
+            ),
+            T(
+                "bytes=-15",
+                10,
+                vec![HttpRange {
+                    start: 0,
+                    length: 10,
+                }],
+            ),
+            T(
+                "bytes=0-499",
+                10000,
+                vec![HttpRange {
+                    start: 0,
+                    length: 500,
+                }],
+            ),
+            T(
+                "bytes=500-999",
+                10000,
+                vec![HttpRange {
+                    start: 500,
+                    length: 500,
+                }],
+            ),
+            T(
+                "bytes=-500",
+                10000,
+                vec![HttpRange {
+                    start: 9500,
+                    length: 500,
+                }],
+            ),
+            T(
+                "bytes=9500-",
+                10000,
+                vec![HttpRange {
+                    start: 9500,
+                    length: 500,
+                }],
+            ),
+            T(
+                "bytes=0-0,-1",
+                10000,
+                vec![
+                    HttpRange {
+                        start: 0,
+                        length: 1,
+                    },
+                    HttpRange {
+                        start: 9999,
+                        length: 1,
+                    },
+                ],
+            ),
+            T(
+                "bytes=500-600,601-999",
+                10000,
+                vec![
+                    HttpRange {
+                        start: 500,
+                        length: 101,
+                    },
+                    HttpRange {
+                        start: 601,
+                        length: 399,
+                    },
+                ],
+            ),
+            T(
+                "bytes=500-700,601-999",
+                10000,
+                vec![
+                    HttpRange {
+                        start: 500,
+                        length: 201,
+                    },
+                    HttpRange {
+                        start: 601,
+                        length: 399,
+                    },
+                ],
+            ),
+            // Match Apache laxity:
+            T(
+                "bytes=   1 -2   ,  4- 5, 7 - 8 , ,,",
+                11,
+                vec![
+                    HttpRange {
+                        start: 1,
+                        length: 2,
+                    },
+                    HttpRange {
+                        start: 4,
+                        length: 2,
+                    },
+                    HttpRange {
+                        start: 7,
+                        length: 2,
+                    },
+                ],
+            ),
+        ];
+
+        for t in tests {
+            let header = t.0;
+            let size = t.1;
+            let expected = t.2;
+
+            let res = HttpRange::parse(header, size);
+
+            if res.is_err() {
+                if expected.is_empty() {
+                    continue;
+                } else {
+                    assert!(
+                        false,
+                        "parse({}, {}) returned error {:?}",
+                        header,
+                        size,
+                        res.unwrap_err()
+                    );
+                }
+            }
+
+            let got = res.unwrap();
+
+            if got.len() != expected.len() {
+                assert!(
+                    false,
+                    "len(parseRange({}, {})) = {}, want {}",
+                    header,
+                    size,
+                    got.len(),
+                    expected.len()
+                );
+                continue;
+            }
+
+            for i in 0..expected.len() {
+                if got[i].start != expected[i].start {
+                    assert!(
+                        false,
+                        "parseRange({}, {})[{}].start = {}, want {}",
+                        header, size, i, got[i].start, expected[i].start
+                    )
+                }
+                if got[i].length != expected[i].length {
+                    assert!(
+                        false,
+                        "parseRange({}, {})[{}].length = {}, want {}",
+                        header, size, i, got[i].length, expected[i].length
+                    )
+                }
+            }
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/handler.rs.html b/static/api/actix-web/0.7.2/src/actix_web/handler.rs.html new file mode 100644 index 0000000..ee7a29c --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/handler.rs.html @@ -0,0 +1,1121 @@ +handler.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+
+use std::marker::PhantomData;
+use std::ops::Deref;
+
+use futures::future::{err, ok, Future};
+use futures::{Async, Poll};
+
+use error::Error;
+use http::StatusCode;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use resource::DefaultResource;
+
+/// Trait defines object that could be registered as route handler
+#[allow(unused_variables)]
+pub trait Handler<S>: 'static {
+    /// The type of value that handler will return.
+    type Result: Responder;
+
+    /// Handle request
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result;
+}
+
+/// Trait implemented by types that generate responses for clients.
+///
+/// Types that implement this trait can be used as the return type of a handler.
+pub trait Responder {
+    /// The associated item which can be returned.
+    type Item: Into<AsyncResult<HttpResponse>>;
+
+    /// The associated error which can be returned.
+    type Error: Into<Error>;
+
+    /// Convert itself to `AsyncResult` or `Error`.
+    fn respond_to<S: 'static>(
+        self, req: &HttpRequest<S>,
+    ) -> Result<Self::Item, Self::Error>;
+}
+
+/// Trait implemented by types that can be extracted from request.
+///
+/// Types that implement this trait can be used with `Route::with()` method.
+pub trait FromRequest<S>: Sized {
+    /// Configuration for conversion process
+    type Config: Default;
+
+    /// Future that resolves to a Self
+    type Result: Into<AsyncResult<Self>>;
+
+    /// Convert request to a Self
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result;
+
+    /// Convert request to a Self
+    ///
+    /// This method uses default extractor configuration
+    fn extract(req: &HttpRequest<S>) -> Self::Result {
+        Self::from_request(req, &Self::Config::default())
+    }
+}
+
+/// Combines two different responder types into a single type
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// # use futures::future::Future;
+/// use actix_web::{AsyncResponder, Either, Error, HttpRequest, HttpResponse};
+/// use futures::future::result;
+///
+/// type RegisterResult =
+///     Either<HttpResponse, Box<Future<Item = HttpResponse, Error = Error>>>;
+///
+/// fn index(req: HttpRequest) -> RegisterResult {
+///     if is_a_variant() {
+///         // <- choose variant A
+///         Either::A(HttpResponse::BadRequest().body("Bad data"))
+///     } else {
+///         Either::B(
+///             // <- variant B
+///             result(Ok(HttpResponse::Ok()
+///                 .content_type("text/html")
+///                 .body("Hello!")))
+///                 .responder(),
+///         )
+///     }
+/// }
+/// # fn is_a_variant() -> bool { true }
+/// # fn main() {}
+/// ```
+#[derive(Debug)]
+pub enum Either<A, B> {
+    /// First branch of the type
+    A(A),
+    /// Second branch of the type
+    B(B),
+}
+
+impl<A, B> Responder for Either<A, B>
+where
+    A: Responder,
+    B: Responder,
+{
+    type Item = AsyncResult<HttpResponse>;
+    type Error = Error;
+
+    fn respond_to<S: 'static>(
+        self, req: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        match self {
+            Either::A(a) => match a.respond_to(req) {
+                Ok(val) => Ok(val.into()),
+                Err(err) => Err(err.into()),
+            },
+            Either::B(b) => match b.respond_to(req) {
+                Ok(val) => Ok(val.into()),
+                Err(err) => Err(err.into()),
+            },
+        }
+    }
+}
+
+impl<A, B, I, E> Future for Either<A, B>
+where
+    A: Future<Item = I, Error = E>,
+    B: Future<Item = I, Error = E>,
+{
+    type Item = I;
+    type Error = E;
+
+    fn poll(&mut self) -> Poll<I, E> {
+        match *self {
+            Either::A(ref mut fut) => fut.poll(),
+            Either::B(ref mut fut) => fut.poll(),
+        }
+    }
+}
+
+impl<T> Responder for Option<T>
+where
+    T: Responder,
+{
+    type Item = AsyncResult<HttpResponse>;
+    type Error = Error;
+
+    fn respond_to<S: 'static>(
+        self, req: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        match self {
+            Some(t) => match t.respond_to(req) {
+                Ok(val) => Ok(val.into()),
+                Err(err) => Err(err.into()),
+            },
+            None => Ok(req.build_response(StatusCode::NOT_FOUND).finish().into()),
+        }
+    }
+}
+
+/// Convenience trait that converts `Future` object to a `Boxed` future
+///
+/// For example loading json from request's body is async operation.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// # #[macro_use] extern crate serde_derive;
+/// use actix_web::{
+///     App, AsyncResponder, Error, HttpMessage, HttpRequest, HttpResponse,
+/// };
+/// use futures::future::Future;
+///
+/// #[derive(Deserialize, Debug)]
+/// struct MyObj {
+///     name: String,
+/// }
+///
+/// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+///     req.json()                   // <- get JsonBody future
+///        .from_err()
+///        .and_then(|val: MyObj| {  // <- deserialized value
+///            Ok(HttpResponse::Ok().into())
+///        })
+///     // Construct boxed future by using `AsyncResponder::responder()` method
+///     .responder()
+/// }
+/// # fn main() {}
+/// ```
+pub trait AsyncResponder<I, E>: Sized {
+    /// Convert to a boxed future
+    fn responder(self) -> Box<Future<Item = I, Error = E>>;
+}
+
+impl<F, I, E> AsyncResponder<I, E> for F
+where
+    F: Future<Item = I, Error = E> + 'static,
+    I: Responder + 'static,
+    E: Into<Error> + 'static,
+{
+    fn responder(self) -> Box<Future<Item = I, Error = E>> {
+        Box::new(self)
+    }
+}
+
+/// Handler<S> for Fn()
+impl<F, R, S> Handler<S> for F
+where
+    F: Fn(&HttpRequest<S>) -> R + 'static,
+    R: Responder + 'static,
+{
+    type Result = R;
+
+    fn handle(&self, req: &HttpRequest<S>) -> R {
+        (self)(req)
+    }
+}
+
+/// Represents async result
+///
+/// Result could be in tree different forms.
+/// * Ok(T) - ready item
+/// * Err(E) - error happen during reply process
+/// * Future<T, E> - reply process completes in the future
+pub struct AsyncResult<I, E = Error>(Option<AsyncResultItem<I, E>>);
+
+impl<I, E> Future for AsyncResult<I, E> {
+    type Item = I;
+    type Error = E;
+
+    fn poll(&mut self) -> Poll<I, E> {
+        let res = self.0.take().expect("use after resolve");
+        match res {
+            AsyncResultItem::Ok(msg) => Ok(Async::Ready(msg)),
+            AsyncResultItem::Err(err) => Err(err),
+            AsyncResultItem::Future(mut fut) => match fut.poll() {
+                Ok(Async::NotReady) => {
+                    self.0 = Some(AsyncResultItem::Future(fut));
+                    Ok(Async::NotReady)
+                }
+                Ok(Async::Ready(msg)) => Ok(Async::Ready(msg)),
+                Err(err) => Err(err),
+            },
+        }
+    }
+}
+
+pub(crate) enum AsyncResultItem<I, E> {
+    Ok(I),
+    Err(E),
+    Future(Box<Future<Item = I, Error = E>>),
+}
+
+impl<I, E> AsyncResult<I, E> {
+    /// Create async response
+    #[inline]
+    pub fn async(fut: Box<Future<Item = I, Error = E>>) -> AsyncResult<I, E> {
+        AsyncResult(Some(AsyncResultItem::Future(fut)))
+    }
+
+    /// Send response
+    #[inline]
+    pub fn ok<R: Into<I>>(ok: R) -> AsyncResult<I, E> {
+        AsyncResult(Some(AsyncResultItem::Ok(ok.into())))
+    }
+
+    /// Send error
+    #[inline]
+    pub fn err<R: Into<E>>(err: R) -> AsyncResult<I, E> {
+        AsyncResult(Some(AsyncResultItem::Err(err.into())))
+    }
+
+    #[inline]
+    pub(crate) fn into(self) -> AsyncResultItem<I, E> {
+        self.0.expect("use after resolve")
+    }
+
+    #[cfg(test)]
+    pub(crate) fn as_msg(&self) -> &I {
+        match self.0.as_ref().unwrap() {
+            &AsyncResultItem::Ok(ref resp) => resp,
+            _ => panic!(),
+        }
+    }
+
+    #[cfg(test)]
+    pub(crate) fn as_err(&self) -> Option<&E> {
+        match self.0.as_ref().unwrap() {
+            &AsyncResultItem::Err(ref err) => Some(err),
+            _ => None,
+        }
+    }
+}
+
+impl Responder for AsyncResult<HttpResponse> {
+    type Item = AsyncResult<HttpResponse>;
+    type Error = Error;
+
+    fn respond_to<S>(
+        self, _: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        Ok(self)
+    }
+}
+
+impl Responder for HttpResponse {
+    type Item = AsyncResult<HttpResponse>;
+    type Error = Error;
+
+    #[inline]
+    fn respond_to<S>(
+        self, _: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        Ok(AsyncResult(Some(AsyncResultItem::Ok(self))))
+    }
+}
+
+impl<T> From<T> for AsyncResult<T> {
+    #[inline]
+    fn from(resp: T) -> AsyncResult<T> {
+        AsyncResult(Some(AsyncResultItem::Ok(resp)))
+    }
+}
+
+impl<T: Responder, E: Into<Error>> Responder for Result<T, E> {
+    type Item = <T as Responder>::Item;
+    type Error = Error;
+
+    fn respond_to<S: 'static>(self, req: &HttpRequest<S>) -> Result<Self::Item, Error> {
+        match self {
+            Ok(val) => match val.respond_to(req) {
+                Ok(val) => Ok(val),
+                Err(err) => Err(err.into()),
+            },
+            Err(err) => Err(err.into()),
+        }
+    }
+}
+
+impl<T, E: Into<Error>> From<Result<AsyncResult<T>, E>> for AsyncResult<T> {
+    #[inline]
+    fn from(res: Result<AsyncResult<T>, E>) -> Self {
+        match res {
+            Ok(val) => val,
+            Err(err) => AsyncResult(Some(AsyncResultItem::Err(err.into()))),
+        }
+    }
+}
+
+impl<T, E: Into<Error>> From<Result<T, E>> for AsyncResult<T> {
+    #[inline]
+    fn from(res: Result<T, E>) -> Self {
+        match res {
+            Ok(val) => AsyncResult(Some(AsyncResultItem::Ok(val))),
+            Err(err) => AsyncResult(Some(AsyncResultItem::Err(err.into()))),
+        }
+    }
+}
+
+impl<T, E: Into<Error>> From<Result<Box<Future<Item = T, Error = Error>>, E>>
+    for AsyncResult<T>
+{
+    #[inline]
+    fn from(res: Result<Box<Future<Item = T, Error = Error>>, E>) -> Self {
+        match res {
+            Ok(fut) => AsyncResult(Some(AsyncResultItem::Future(fut))),
+            Err(err) => AsyncResult(Some(AsyncResultItem::Err(err.into()))),
+        }
+    }
+}
+
+impl<T> From<Box<Future<Item = T, Error = Error>>> for AsyncResult<T> {
+    #[inline]
+    fn from(fut: Box<Future<Item = T, Error = Error>>) -> AsyncResult<T> {
+        AsyncResult(Some(AsyncResultItem::Future(fut)))
+    }
+}
+
+/// Convenience type alias
+pub type FutureResponse<I, E = Error> = Box<Future<Item = I, Error = E>>;
+
+impl<I, E> Responder for Box<Future<Item = I, Error = E>>
+where
+    I: Responder + 'static,
+    E: Into<Error> + 'static,
+{
+    type Item = AsyncResult<HttpResponse>;
+    type Error = Error;
+
+    #[inline]
+    fn respond_to<S: 'static>(
+        self, req: &HttpRequest<S>,
+    ) -> Result<AsyncResult<HttpResponse>, Error> {
+        let req = req.clone();
+        let fut = self
+            .map_err(|e| e.into())
+            .then(move |r| match r.respond_to(&req) {
+                Ok(reply) => match reply.into().into() {
+                    AsyncResultItem::Ok(resp) => ok(resp),
+                    _ => panic!("Nested async replies are not supported"),
+                },
+                Err(e) => err(e),
+            });
+        Ok(AsyncResult::async(Box::new(fut)))
+    }
+}
+
+pub(crate) trait RouteHandler<S>: 'static {
+    fn handle(&self, &HttpRequest<S>) -> AsyncResult<HttpResponse>;
+
+    fn has_default_resource(&self) -> bool {
+        false
+    }
+
+    fn default_resource(&mut self, _: DefaultResource<S>) {}
+
+    fn finish(&mut self) {}
+}
+
+/// Route handler wrapper for Handler
+pub(crate) struct WrapHandler<S, H, R>
+where
+    H: Handler<S, Result = R>,
+    R: Responder,
+    S: 'static,
+{
+    h: H,
+    s: PhantomData<S>,
+}
+
+impl<S, H, R> WrapHandler<S, H, R>
+where
+    H: Handler<S, Result = R>,
+    R: Responder,
+    S: 'static,
+{
+    pub fn new(h: H) -> Self {
+        WrapHandler { h, s: PhantomData }
+    }
+}
+
+impl<S, H, R> RouteHandler<S> for WrapHandler<S, H, R>
+where
+    H: Handler<S, Result = R>,
+    R: Responder + 'static,
+    S: 'static,
+{
+    fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        match self.h.handle(req).respond_to(req) {
+            Ok(reply) => reply.into(),
+            Err(err) => AsyncResult::err(err.into()),
+        }
+    }
+}
+
+/// Async route handler
+pub(crate) struct AsyncHandler<S, H, F, R, E>
+where
+    H: Fn(&HttpRequest<S>) -> F + 'static,
+    F: Future<Item = R, Error = E> + 'static,
+    R: Responder + 'static,
+    E: Into<Error> + 'static,
+    S: 'static,
+{
+    h: Box<H>,
+    s: PhantomData<S>,
+}
+
+impl<S, H, F, R, E> AsyncHandler<S, H, F, R, E>
+where
+    H: Fn(&HttpRequest<S>) -> F + 'static,
+    F: Future<Item = R, Error = E> + 'static,
+    R: Responder + 'static,
+    E: Into<Error> + 'static,
+    S: 'static,
+{
+    pub fn new(h: H) -> Self {
+        AsyncHandler {
+            h: Box::new(h),
+            s: PhantomData,
+        }
+    }
+}
+
+impl<S, H, F, R, E> RouteHandler<S> for AsyncHandler<S, H, F, R, E>
+where
+    H: Fn(&HttpRequest<S>) -> F + 'static,
+    F: Future<Item = R, Error = E> + 'static,
+    R: Responder + 'static,
+    E: Into<Error> + 'static,
+    S: 'static,
+{
+    fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        let req = req.clone();
+        let fut = (self.h)(&req).map_err(|e| e.into()).then(move |r| {
+            match r.respond_to(&req) {
+                Ok(reply) => match reply.into().into() {
+                    AsyncResultItem::Ok(resp) => Either::A(ok(resp)),
+                    AsyncResultItem::Err(e) => Either::A(err(e)),
+                    AsyncResultItem::Future(fut) => Either::B(fut),
+                },
+                Err(e) => Either::A(err(e)),
+            }
+        });
+        AsyncResult::async(Box::new(fut))
+    }
+}
+
+/// Access an application state
+///
+/// `S` - application state type
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate bytes;
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{http, App, Path, State};
+///
+/// /// Application state
+/// struct MyApp {
+///     msg: &'static str,
+/// }
+///
+/// #[derive(Deserialize)]
+/// struct Info {
+///     username: String,
+/// }
+///
+/// /// extract path info using serde
+/// fn index(data: (State<MyApp>, Path<Info>)) -> String {
+///     let (state, path) = data;
+///     format!("{} {}!", state.msg, path.username)
+/// }
+///
+/// fn main() {
+///     let app = App::with_state(MyApp { msg: "Welcome" }).resource(
+///         "/{username}/index.html", // <- define path parameters
+///         |r| r.method(http::Method::GET).with(index),
+///     ); // <- use `with` extractor
+/// }
+/// ```
+pub struct State<S>(HttpRequest<S>);
+
+impl<S> Deref for State<S> {
+    type Target = S;
+
+    fn deref(&self) -> &S {
+        self.0.state()
+    }
+}
+
+impl<S> FromRequest<S> for State<S> {
+    type Config = ();
+    type Result = State<S>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _: &Self::Config) -> Self::Result {
+        State(req.clone())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/accept.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept.rs.html new file mode 100644 index 0000000..cafe5c8 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept.rs.html @@ -0,0 +1,321 @@ +accept.rs.html -- source
  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
+
+use header::{qitem, QualityItem};
+use http::header as http;
+use mime::{self, Mime};
+
+header! {
+    /// `Accept` header, defined in [RFC7231](http://tools.ietf.org/html/rfc7231#section-5.3.2)
+    ///
+    /// The `Accept` header field can be used by user agents to specify
+    /// response media types that are acceptable.  Accept header fields can
+    /// be used to indicate that the request is specifically limited to a
+    /// small set of desired types, as in the case of a request for an
+    /// in-line image
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Accept = #( media-range [ accept-params ] )
+    ///
+    /// media-range    = ( "*/*"
+    ///                  / ( type "/" "*" )
+    ///                  / ( type "/" subtype )
+    ///                  ) *( OWS ";" OWS parameter )
+    /// accept-params  = weight *( accept-ext )
+    /// accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ]
+    /// ```
+    ///
+    /// # Example values
+    /// * `audio/*; q=0.2, audio/basic`
+    /// * `text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c`
+    ///
+    /// # Examples
+    /// ```rust
+    /// # extern crate actix_web;
+    /// extern crate mime;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{Accept, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    ///
+    /// builder.set(
+    ///     Accept(vec![
+    ///         qitem(mime::TEXT_HTML),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// extern crate mime;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{Accept, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    ///
+    /// builder.set(
+    ///     Accept(vec![
+    ///         qitem(mime::APPLICATION_JSON),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// extern crate mime;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{Accept, QualityItem, q, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    ///
+    /// builder.set(
+    ///     Accept(vec![
+    ///         qitem(mime::TEXT_HTML),
+    ///         qitem("application/xhtml+xml".parse().unwrap()),
+    ///         QualityItem::new(
+    ///             mime::TEXT_XML,
+    ///             q(900)
+    ///         ),
+    ///         qitem("image/webp".parse().unwrap()),
+    ///         QualityItem::new(
+    ///             mime::STAR_STAR,
+    ///             q(800)
+    ///         ),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    (Accept, http::ACCEPT) => (QualityItem<Mime>)+
+
+    test_accept {
+        // Tests from the RFC
+         test_header!(
+            test1,
+            vec![b"audio/*; q=0.2, audio/basic"],
+            Some(HeaderField(vec![
+                QualityItem::new("audio/*".parse().unwrap(), q(200)),
+                qitem("audio/basic".parse().unwrap()),
+                ])));
+        test_header!(
+            test2,
+            vec![b"text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"],
+            Some(HeaderField(vec![
+                QualityItem::new(TEXT_PLAIN, q(500)),
+                qitem(TEXT_HTML),
+                QualityItem::new(
+                    "text/x-dvi".parse().unwrap(),
+                    q(800)),
+                qitem("text/x-c".parse().unwrap()),
+                ])));
+        // Custom tests
+        test_header!(
+            test3,
+            vec![b"text/plain; charset=utf-8"],
+            Some(Accept(vec![
+                qitem(TEXT_PLAIN_UTF_8),
+                ])));
+        test_header!(
+            test4,
+            vec![b"text/plain; charset=utf-8; q=0.5"],
+            Some(Accept(vec![
+                QualityItem::new(TEXT_PLAIN_UTF_8,
+                    q(500)),
+            ])));
+
+        #[test]
+        fn test_fuzzing1() {
+            use test::TestRequest;
+            let req = TestRequest::with_header(super::http::ACCEPT, "chunk#;e").finish();
+            let header = Accept::parse(&req);
+            assert!(header.is_ok());
+        }
+    }
+}
+
+impl Accept {
+    /// A constructor to easily create `Accept: */*`.
+    pub fn star() -> Accept {
+        Accept(vec![qitem(mime::STAR_STAR)])
+    }
+
+    /// A constructor to easily create `Accept: application/json`.
+    pub fn json() -> Accept {
+        Accept(vec![qitem(mime::APPLICATION_JSON)])
+    }
+
+    /// A constructor to easily create `Accept: text/*`.
+    pub fn text() -> Accept {
+        Accept(vec![qitem(mime::TEXT_STAR)])
+    }
+
+    /// A constructor to easily create `Accept: image/*`.
+    pub fn image() -> Accept {
+        Accept(vec![qitem(mime::IMAGE_STAR)])
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_charset.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_charset.rs.html new file mode 100644 index 0000000..f16e079 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_charset.rs.html @@ -0,0 +1,141 @@ +accept_charset.rs.html -- source
 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
+
+use header::{Charset, QualityItem, ACCEPT_CHARSET};
+
+header! {
+    /// `Accept-Charset` header, defined in
+    /// [RFC7231](http://tools.ietf.org/html/rfc7231#section-5.3.3)
+    ///
+    /// The `Accept-Charset` header field can be sent by a user agent to
+    /// indicate what charsets are acceptable in textual response content.
+    /// This field allows user agents capable of understanding more
+    /// comprehensive or special-purpose charsets to signal that capability
+    /// to an origin server that is capable of representing information in
+    /// those charsets.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Accept-Charset = 1#( ( charset / "*" ) [ weight ] )
+    /// ```
+    ///
+    /// # Example values
+    /// * `iso-8859-5, unicode-1-1;q=0.8`
+    ///
+    /// # Examples
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{AcceptCharset, Charset, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     AcceptCharset(vec![qitem(Charset::Us_Ascii)])
+    /// );
+    /// # }
+    /// ```
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{AcceptCharset, Charset, q, QualityItem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     AcceptCharset(vec![
+    ///         QualityItem::new(Charset::Us_Ascii, q(900)),
+    ///         QualityItem::new(Charset::Iso_8859_10, q(200)),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{AcceptCharset, Charset, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     AcceptCharset(vec![qitem(Charset::Ext("utf-8".to_owned()))])
+    /// );
+    /// # }
+    /// ```
+    (AcceptCharset, ACCEPT_CHARSET) => (QualityItem<Charset>)+
+
+    test_accept_charset {
+        /// Test case from RFC
+        test_header!(test1, vec![b"iso-8859-5, unicode-1-1;q=0.8"]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_language.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_language.rs.html new file mode 100644 index 0000000..d5bface --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/accept_language.rs.html @@ -0,0 +1,153 @@ +accept_language.rs.html -- source
 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
+
+use header::{QualityItem, ACCEPT_LANGUAGE};
+use language_tags::LanguageTag;
+
+header! {
+    /// `Accept-Language` header, defined in
+    /// [RFC7231](http://tools.ietf.org/html/rfc7231#section-5.3.5)
+    ///
+    /// The `Accept-Language` header field can be used by user agents to
+    /// indicate the set of natural languages that are preferred in the
+    /// response.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Accept-Language = 1#( language-range [ weight ] )
+    /// language-range  = <language-range, see [RFC4647], Section 2.1>
+    /// ```
+    ///
+    /// # Example values
+    /// * `da, en-gb;q=0.8, en;q=0.7`
+    /// * `en-us;q=1.0, en;q=0.5, fr`
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate language_tags;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{AcceptLanguage, LanguageTag, qitem};
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// let mut langtag: LanguageTag = Default::default();
+    /// langtag.language = Some("en".to_owned());
+    /// langtag.region = Some("US".to_owned());
+    /// builder.set(
+    ///     AcceptLanguage(vec![
+    ///         qitem(langtag),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # #[macro_use] extern crate language_tags;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{AcceptLanguage, QualityItem, q, qitem};
+    /// #
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     AcceptLanguage(vec![
+    ///         qitem(langtag!(da)),
+    ///         QualityItem::new(langtag!(en;;;GB), q(800)),
+    ///         QualityItem::new(langtag!(en), q(700)),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    (AcceptLanguage, ACCEPT_LANGUAGE) => (QualityItem<LanguageTag>)+
+
+    test_accept_language {
+        // From the RFC
+        test_header!(test1, vec![b"da, en-gb;q=0.8, en;q=0.7"]);
+        // Own test
+        test_header!(
+            test2, vec![b"en-US, en; q=0.5, fr"],
+            Some(AcceptLanguage(vec![
+                qitem("en-US".parse().unwrap()),
+                QualityItem::new("en".parse().unwrap(), q(500)),
+                qitem("fr".parse().unwrap()),
+        ])));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/allow.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/allow.rs.html new file mode 100644 index 0000000..b895b5b --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/allow.rs.html @@ -0,0 +1,173 @@ +allow.rs.html -- source
 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
+
+use http::Method;
+use http::header;
+
+header! {
+    /// `Allow` header, defined in [RFC7231](http://tools.ietf.org/html/rfc7231#section-7.4.1)
+    ///
+    /// The `Allow` header field lists the set of methods advertised as
+    /// supported by the target resource.  The purpose of this field is
+    /// strictly to inform the recipient of valid request methods associated
+    /// with the resource.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Allow = #method
+    /// ```
+    ///
+    /// # Example values
+    /// * `GET, HEAD, PUT`
+    /// * `OPTIONS, GET, PUT, POST, DELETE, HEAD, TRACE, CONNECT, PATCH, fOObAr`
+    /// * ``
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// # extern crate http;
+    /// # extern crate actix_web;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::Allow;
+    /// use http::Method;
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     Allow(vec![Method::GET])
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate http;
+    /// # extern crate actix_web;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::Allow;
+    /// use http::Method;
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     Allow(vec![
+    ///         Method::GET,
+    ///         Method::POST,
+    ///         Method::PATCH,
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    (Allow, header::ALLOW) => (Method)*
+
+    test_allow {
+        // From the RFC
+        test_header!(
+            test1,
+            vec![b"GET, HEAD, PUT"],
+            Some(HeaderField(vec![Method::GET, Method::HEAD, Method::PUT])));
+        // Own tests
+        test_header!(
+            test2,
+            vec![b"OPTIONS, GET, PUT, POST, DELETE, HEAD, TRACE, CONNECT, PATCH"],
+            Some(HeaderField(vec![
+                Method::OPTIONS,
+                Method::GET,
+                Method::PUT,
+                Method::POST,
+                Method::DELETE,
+                Method::HEAD,
+                Method::TRACE,
+                Method::CONNECT,
+                Method::PATCH])));
+        test_header!(
+            test3,
+            vec![b""],
+            Some(HeaderField(Vec::<Method>::new())));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/cache_control.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/cache_control.rs.html new file mode 100644 index 0000000..d11348f --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/cache_control.rs.html @@ -0,0 +1,511 @@ +cache_control.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+
+use header::{Header, IntoHeaderValue, Writer};
+use header::{fmt_comma_delimited, from_comma_delimited};
+use http::header;
+use std::fmt::{self, Write};
+use std::str::FromStr;
+
+/// `Cache-Control` header, defined in [RFC7234](https://tools.ietf.org/html/rfc7234#section-5.2)
+///
+/// The `Cache-Control` header field is used to specify directives for
+/// caches along the request/response chain.  Such cache directives are
+/// unidirectional in that the presence of a directive in a request does
+/// not imply that the same directive is to be given in the response.
+///
+/// # ABNF
+///
+/// ```text
+/// Cache-Control   = 1#cache-directive
+/// cache-directive = token [ "=" ( token / quoted-string ) ]
+/// ```
+///
+/// # Example values
+///
+/// * `no-cache`
+/// * `private, community="UCI"`
+/// * `max-age=30`
+///
+/// # Examples
+/// ```rust
+/// use actix_web::HttpResponse;
+/// use actix_web::http::header::{CacheControl, CacheDirective};
+///
+/// let mut builder = HttpResponse::Ok();
+/// builder.set(CacheControl(vec![CacheDirective::MaxAge(86400u32)]));
+/// ```
+///
+/// ```rust
+/// use actix_web::HttpResponse;
+/// use actix_web::http::header::{CacheControl, CacheDirective};
+///
+/// let mut builder = HttpResponse::Ok();
+/// builder.set(CacheControl(vec![
+///     CacheDirective::NoCache,
+///     CacheDirective::Private,
+///     CacheDirective::MaxAge(360u32),
+///     CacheDirective::Extension("foo".to_owned(), Some("bar".to_owned())),
+/// ]));
+/// ```
+#[derive(PartialEq, Clone, Debug)]
+pub struct CacheControl(pub Vec<CacheDirective>);
+
+__hyper__deref!(CacheControl => Vec<CacheDirective>);
+
+//TODO: this could just be the header! macro
+impl Header for CacheControl {
+    fn name() -> header::HeaderName {
+        header::CACHE_CONTROL
+    }
+
+    #[inline]
+    fn parse<T>(msg: &T) -> Result<Self, ::error::ParseError>
+    where
+        T: ::HttpMessage,
+    {
+        let directives = from_comma_delimited(msg.headers().get_all(Self::name()))?;
+        if !directives.is_empty() {
+            Ok(CacheControl(directives))
+        } else {
+            Err(::error::ParseError::Header)
+        }
+    }
+}
+
+impl fmt::Display for CacheControl {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt_comma_delimited(f, &self[..])
+    }
+}
+
+impl IntoHeaderValue for CacheControl {
+    type Error = header::InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<header::HeaderValue, Self::Error> {
+        let mut writer = Writer::new();
+        let _ = write!(&mut writer, "{}", self);
+        header::HeaderValue::from_shared(writer.take())
+    }
+}
+
+/// `CacheControl` contains a list of these directives.
+#[derive(PartialEq, Clone, Debug)]
+pub enum CacheDirective {
+    /// "no-cache"
+    NoCache,
+    /// "no-store"
+    NoStore,
+    /// "no-transform"
+    NoTransform,
+    /// "only-if-cached"
+    OnlyIfCached,
+
+    // request directives
+    /// "max-age=delta"
+    MaxAge(u32),
+    /// "max-stale=delta"
+    MaxStale(u32),
+    /// "min-fresh=delta"
+    MinFresh(u32),
+
+    // response directives
+    /// "must-revalidate"
+    MustRevalidate,
+    /// "public"
+    Public,
+    /// "private"
+    Private,
+    /// "proxy-revalidate"
+    ProxyRevalidate,
+    /// "s-maxage=delta"
+    SMaxAge(u32),
+
+    /// Extension directives. Optionally include an argument.
+    Extension(String, Option<String>),
+}
+
+impl fmt::Display for CacheDirective {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        use self::CacheDirective::*;
+        fmt::Display::fmt(
+            match *self {
+                NoCache => "no-cache",
+                NoStore => "no-store",
+                NoTransform => "no-transform",
+                OnlyIfCached => "only-if-cached",
+
+                MaxAge(secs) => return write!(f, "max-age={}", secs),
+                MaxStale(secs) => return write!(f, "max-stale={}", secs),
+                MinFresh(secs) => return write!(f, "min-fresh={}", secs),
+
+                MustRevalidate => "must-revalidate",
+                Public => "public",
+                Private => "private",
+                ProxyRevalidate => "proxy-revalidate",
+                SMaxAge(secs) => return write!(f, "s-maxage={}", secs),
+
+                Extension(ref name, None) => &name[..],
+                Extension(ref name, Some(ref arg)) => {
+                    return write!(f, "{}={}", name, arg)
+                }
+            },
+            f,
+        )
+    }
+}
+
+impl FromStr for CacheDirective {
+    type Err = Option<<u32 as FromStr>::Err>;
+    fn from_str(s: &str) -> Result<CacheDirective, Option<<u32 as FromStr>::Err>> {
+        use self::CacheDirective::*;
+        match s {
+            "no-cache" => Ok(NoCache),
+            "no-store" => Ok(NoStore),
+            "no-transform" => Ok(NoTransform),
+            "only-if-cached" => Ok(OnlyIfCached),
+            "must-revalidate" => Ok(MustRevalidate),
+            "public" => Ok(Public),
+            "private" => Ok(Private),
+            "proxy-revalidate" => Ok(ProxyRevalidate),
+            "" => Err(None),
+            _ => match s.find('=') {
+                Some(idx) if idx + 1 < s.len() => {
+                    match (&s[..idx], (&s[idx + 1..]).trim_matches('"')) {
+                        ("max-age", secs) => secs.parse().map(MaxAge).map_err(Some),
+                        ("max-stale", secs) => secs.parse().map(MaxStale).map_err(Some),
+                        ("min-fresh", secs) => secs.parse().map(MinFresh).map_err(Some),
+                        ("s-maxage", secs) => secs.parse().map(SMaxAge).map_err(Some),
+                        (left, right) => {
+                            Ok(Extension(left.to_owned(), Some(right.to_owned())))
+                        }
+                    }
+                }
+                Some(_) => Err(None),
+                None => Ok(Extension(s.to_owned(), None)),
+            },
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use header::Header;
+    use test::TestRequest;
+
+    #[test]
+    fn test_parse_multiple_headers() {
+        let req = TestRequest::with_header(header::CACHE_CONTROL, "no-cache, private")
+            .finish();
+        let cache = Header::parse(&req);
+        assert_eq!(
+            cache.ok(),
+            Some(CacheControl(vec![
+                CacheDirective::NoCache,
+                CacheDirective::Private,
+            ]))
+        )
+    }
+
+    #[test]
+    fn test_parse_argument() {
+        let req =
+            TestRequest::with_header(header::CACHE_CONTROL, "max-age=100, private")
+                .finish();
+        let cache = Header::parse(&req);
+        assert_eq!(
+            cache.ok(),
+            Some(CacheControl(vec![
+                CacheDirective::MaxAge(100),
+                CacheDirective::Private,
+            ]))
+        )
+    }
+
+    #[test]
+    fn test_parse_quote_form() {
+        let req =
+            TestRequest::with_header(header::CACHE_CONTROL, "max-age=\"200\"").finish();
+        let cache = Header::parse(&req);
+        assert_eq!(
+            cache.ok(),
+            Some(CacheControl(vec![CacheDirective::MaxAge(200)]))
+        )
+    }
+
+    #[test]
+    fn test_parse_extension() {
+        let req =
+            TestRequest::with_header(header::CACHE_CONTROL, "foo, bar=baz").finish();
+        let cache = Header::parse(&req);
+        assert_eq!(
+            cache.ok(),
+            Some(CacheControl(vec![
+                CacheDirective::Extension("foo".to_owned(), None),
+                CacheDirective::Extension("bar".to_owned(), Some("baz".to_owned())),
+            ]))
+        )
+    }
+
+    #[test]
+    fn test_parse_bad_syntax() {
+        let req = TestRequest::with_header(header::CACHE_CONTROL, "foo=").finish();
+        let cache: Result<CacheControl, _> = Header::parse(&req);
+        assert_eq!(cache.ok(), None)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/content_disposition.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_disposition.rs.html new file mode 100644 index 0000000..2c7b151 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_disposition.rs.html @@ -0,0 +1,573 @@ +content_disposition.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+
+// # References
+//
+// "The Content-Disposition Header Field" https://www.ietf.org/rfc/rfc2183.txt
+// "The Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)" https://www.ietf.org/rfc/rfc6266.txt
+// "Returning Values from Forms: multipart/form-data" https://www.ietf.org/rfc/rfc2388.txt
+// Browser conformance tests at: http://greenbytes.de/tech/tc2231/
+// IANA assignment: http://www.iana.org/assignments/cont-disp/cont-disp.xhtml
+
+use language_tags::LanguageTag;
+use header;
+use header::{Header, IntoHeaderValue, Writer};
+use header::shared::Charset;
+
+use std::fmt::{self, Write};
+
+/// The implied disposition of the content of the HTTP body.
+#[derive(Clone, Debug, PartialEq)]
+pub enum DispositionType {
+    /// Inline implies default processing
+    Inline,
+    /// Attachment implies that the recipient should prompt the user to save the response locally,
+    /// rather than process it normally (as per its media type).
+    Attachment,
+    /// Extension type.  Should be handled by recipients the same way as Attachment
+    Ext(String)
+}
+
+/// A parameter to the disposition type.
+#[derive(Clone, Debug, PartialEq)]
+pub enum DispositionParam {
+    /// A Filename consisting of a Charset, an optional LanguageTag, and finally a sequence of
+    /// bytes representing the filename
+    Filename(Charset, Option<LanguageTag>, Vec<u8>),
+    /// Extension type consisting of token and value.  Recipients should ignore unrecognized
+    /// parameters.
+    Ext(String, String)
+}
+
+/// A `Content-Disposition` header, (re)defined in [RFC6266](https://tools.ietf.org/html/rfc6266).
+///
+/// The Content-Disposition response header field is used to convey
+/// additional information about how to process the response payload, and
+/// also can be used to attach additional metadata, such as the filename
+/// to use when saving the response payload locally.
+///
+/// # ABNF
+
+/// ```text
+/// content-disposition = "Content-Disposition" ":"
+///                       disposition-type *( ";" disposition-parm )
+///
+/// disposition-type    = "inline" | "attachment" | disp-ext-type
+///                       ; case-insensitive
+///
+/// disp-ext-type       = token
+///
+/// disposition-parm    = filename-parm | disp-ext-parm
+///
+/// filename-parm       = "filename" "=" value
+///                     | "filename*" "=" ext-value
+///
+/// disp-ext-parm       = token "=" value
+///                     | ext-token "=" ext-value
+///
+/// ext-token           = <the characters in token, followed by "*">
+/// ```
+///
+/// # Example
+///
+/// ```
+/// use actix_web::http::header::{ContentDisposition, DispositionType, DispositionParam, Charset};
+///
+/// let cd1 = ContentDisposition {
+///     disposition: DispositionType::Attachment,
+///     parameters: vec![DispositionParam::Filename(
+///       Charset::Iso_8859_1, // The character set for the bytes of the filename
+///       None, // The optional language tag (see `language-tag` crate)
+///       b"\xa9 Copyright 1989.txt".to_vec() // the actual bytes of the filename
+///     )]
+/// };
+///
+/// let cd2 = ContentDisposition {
+///     disposition: DispositionType::Inline,
+///     parameters: vec![DispositionParam::Filename(
+///       Charset::Ext("UTF-8".to_owned()),
+///       None,
+///       "\u{2764}".as_bytes().to_vec()
+///     )]
+/// };
+/// ```
+#[derive(Clone, Debug, PartialEq)]
+pub struct ContentDisposition {
+    /// The disposition
+    pub disposition: DispositionType,
+    /// Disposition parameters
+    pub parameters: Vec<DispositionParam>,
+}
+impl ContentDisposition {
+    /// Parse a raw Content-Disposition header value
+    pub fn from_raw(hv: &header::HeaderValue) -> Result<Self, ::error::ParseError> {
+        header::from_one_raw_str(Some(hv)).and_then(|s: String| {
+            let mut sections = s.split(';');
+            let disposition = match sections.next() {
+                Some(s) => s.trim(),
+                None => return Err(::error::ParseError::Header),
+            };
+
+            let mut cd = ContentDisposition {
+                disposition: if disposition.eq_ignore_ascii_case("inline") {
+                    DispositionType::Inline
+                } else if disposition.eq_ignore_ascii_case("attachment") {
+                    DispositionType::Attachment
+                } else {
+                    DispositionType::Ext(disposition.to_owned())
+                },
+                parameters: Vec::new(),
+            };
+
+            for section in sections {
+                let mut parts = section.splitn(2, '=');
+
+                let key = if let Some(key) = parts.next() {
+                    key.trim()
+                } else {
+                    return Err(::error::ParseError::Header);
+                };
+
+                let val = if let Some(val) = parts.next() {
+                    val.trim()
+                } else {
+                    return Err(::error::ParseError::Header);
+                };
+
+                cd.parameters.push(
+                    if key.eq_ignore_ascii_case("filename") {
+                        DispositionParam::Filename(
+                            Charset::Ext("UTF-8".to_owned()), None,
+                            val.trim_matches('"').as_bytes().to_owned())
+                    } else if key.eq_ignore_ascii_case("filename*") {
+                        let extended_value = try!(header::parse_extended_value(val));
+                        DispositionParam::Filename(extended_value.charset, extended_value.language_tag, extended_value.value)
+                    } else {
+                        DispositionParam::Ext(key.to_owned(), val.trim_matches('"').to_owned())
+                    }
+                );
+            }
+
+            Ok(cd)
+        })
+    }
+}
+
+impl IntoHeaderValue for ContentDisposition {
+    type Error = header::InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<header::HeaderValue, Self::Error> {
+        let mut writer = Writer::new();
+        let _ = write!(&mut writer, "{}", self);
+        header::HeaderValue::from_shared(writer.take())
+    }
+}
+
+impl Header for ContentDisposition {
+    fn name() -> header::HeaderName {
+        header::CONTENT_DISPOSITION
+    }
+
+    fn parse<T: ::HttpMessage>(msg: &T) -> Result<Self, ::error::ParseError> {
+        if let Some(h) = msg.headers().get(Self::name()) {
+            Self::from_raw(&h)
+        } else {
+            Err(::error::ParseError::Header)
+        }
+    }
+}
+
+impl fmt::Display for ContentDisposition {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self.disposition {
+            DispositionType::Inline => try!(write!(f, "inline")),
+            DispositionType::Attachment => try!(write!(f, "attachment")),
+            DispositionType::Ext(ref s) => try!(write!(f, "{}", s)),
+        }
+        for param in &self.parameters {
+            match *param {
+                DispositionParam::Filename(ref charset, ref opt_lang, ref bytes) => {
+                    let mut use_simple_format: bool = false;
+                    if opt_lang.is_none() {
+                        if let Charset::Ext(ref ext) = *charset {
+                            if ext.eq_ignore_ascii_case("utf-8") {
+                                use_simple_format = true;
+                            }
+                        }
+                    }
+                    if use_simple_format {
+                        use std::str;
+                        try!(write!(f, "; filename=\"{}\"",
+                                    match str::from_utf8(bytes) {
+                                        Ok(s) => s,
+                                        Err(_) => return Err(fmt::Error),
+                                    }));
+                    } else {
+                        try!(write!(f, "; filename*={}'", charset));
+                        if let Some(ref lang) = *opt_lang {
+                            try!(write!(f, "{}", lang));
+                        };
+                        try!(write!(f, "'"));
+                        try!(header::http_percent_encode(f, bytes))
+                    }
+                },
+                DispositionParam::Ext(ref k, ref v) => try!(write!(f, "; {}=\"{}\"", k, v)),
+            }
+        }
+        Ok(())
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::{ContentDisposition,DispositionType,DispositionParam};
+    use header::HeaderValue;
+    use header::shared::Charset;
+    #[test]
+    fn test_from_raw() {
+        assert!(ContentDisposition::from_raw(&HeaderValue::from_static("")).is_err());
+
+        let a = HeaderValue::from_static("form-data; dummy=3; name=upload; filename=\"sample.png\"");
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let b = ContentDisposition {
+            disposition: DispositionType::Ext("form-data".to_owned()),
+            parameters: vec![
+                DispositionParam::Ext("dummy".to_owned(), "3".to_owned()),
+                DispositionParam::Ext("name".to_owned(), "upload".to_owned()),
+                DispositionParam::Filename(
+                    Charset::Ext("UTF-8".to_owned()),
+                    None,
+                    "sample.png".bytes().collect()) ]
+        };
+        assert_eq!(a, b);
+
+        let a = HeaderValue::from_static("attachment; filename=\"image.jpg\"");
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let b = ContentDisposition {
+            disposition: DispositionType::Attachment,
+            parameters: vec![
+                DispositionParam::Filename(
+                    Charset::Ext("UTF-8".to_owned()),
+                    None,
+                    "image.jpg".bytes().collect()) ]
+        };
+        assert_eq!(a, b);
+
+        let a = HeaderValue::from_static("attachment; filename*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates");
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let b = ContentDisposition {
+            disposition: DispositionType::Attachment,
+            parameters: vec![
+                DispositionParam::Filename(
+                    Charset::Ext("UTF-8".to_owned()),
+                    None,
+                    vec![0xc2, 0xa3, 0x20, b'a', b'n', b'd', 0x20,
+                         0xe2, 0x82, 0xac, 0x20, b'r', b'a', b't', b'e', b's']) ]
+        };
+        assert_eq!(a, b);
+    }
+
+    #[test]
+    fn test_display() {
+        let as_string = "attachment; filename*=UTF-8'en'%C2%A3%20and%20%E2%82%AC%20rates";
+        let a = HeaderValue::from_static(as_string);
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let display_rendered = format!("{}",a);
+        assert_eq!(as_string, display_rendered);
+
+        let a = HeaderValue::from_static("attachment; filename*=UTF-8''black%20and%20white.csv");
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let display_rendered = format!("{}",a);
+        assert_eq!("attachment; filename=\"black and white.csv\"".to_owned(), display_rendered);
+
+        let a = HeaderValue::from_static("attachment; filename=colourful.csv");
+        let a: ContentDisposition = ContentDisposition::from_raw(&a).unwrap();
+        let display_rendered = format!("{}",a);
+        assert_eq!("attachment; filename=\"colourful.csv\"".to_owned(), display_rendered);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/content_language.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_language.rs.html new file mode 100644 index 0000000..32abf82 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_language.rs.html @@ -0,0 +1,133 @@ +content_language.rs.html -- source
 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
+
+use header::{QualityItem, CONTENT_LANGUAGE};
+use language_tags::LanguageTag;
+
+header! {
+    /// `Content-Language` header, defined in
+    /// [RFC7231](https://tools.ietf.org/html/rfc7231#section-3.1.3.2)
+    ///
+    /// The `Content-Language` header field describes the natural language(s)
+    /// of the intended audience for the representation.  Note that this
+    /// might not be equivalent to all the languages used within the
+    /// representation.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Content-Language = 1#language-tag
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `da`
+    /// * `mi, en`
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # #[macro_use] extern crate language_tags;
+    /// use actix_web::HttpResponse;
+    /// # use actix_web::http::header::{ContentLanguage, qitem};
+    /// #
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     ContentLanguage(vec![
+    ///         qitem(langtag!(en)),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # #[macro_use] extern crate language_tags;
+    /// use actix_web::HttpResponse;
+    /// # use actix_web::http::header::{ContentLanguage, qitem};
+    /// #
+    /// # fn main() {
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     ContentLanguage(vec![
+    ///         qitem(langtag!(da)),
+    ///         qitem(langtag!(en;;;GB)),
+    ///     ])
+    /// );
+    /// # }
+    /// ```
+    (ContentLanguage, CONTENT_LANGUAGE) => (QualityItem<LanguageTag>)+
+
+    test_content_language {
+        test_header!(test1, vec![b"da"]);
+        test_header!(test2, vec![b"mi, en"]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/content_range.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_range.rs.html new file mode 100644 index 0000000..ef9b087 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_range.rs.html @@ -0,0 +1,423 @@ +content_range.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+
+use error::ParseError;
+use header::{HeaderValue, IntoHeaderValue, InvalidHeaderValueBytes, Writer,
+             CONTENT_RANGE};
+use std::fmt::{self, Display, Write};
+use std::str::FromStr;
+
+header! {
+    /// `Content-Range` header, defined in
+    /// [RFC7233](http://tools.ietf.org/html/rfc7233#section-4.2)
+    (ContentRange, CONTENT_RANGE) => [ContentRangeSpec]
+
+    test_content_range {
+        test_header!(test_bytes,
+            vec![b"bytes 0-499/500"],
+            Some(ContentRange(ContentRangeSpec::Bytes {
+                range: Some((0, 499)),
+                instance_length: Some(500)
+            })));
+
+        test_header!(test_bytes_unknown_len,
+            vec![b"bytes 0-499/*"],
+            Some(ContentRange(ContentRangeSpec::Bytes {
+                range: Some((0, 499)),
+                instance_length: None
+            })));
+
+        test_header!(test_bytes_unknown_range,
+            vec![b"bytes */500"],
+            Some(ContentRange(ContentRangeSpec::Bytes {
+                range: None,
+                instance_length: Some(500)
+            })));
+
+        test_header!(test_unregistered,
+            vec![b"seconds 1-2"],
+            Some(ContentRange(ContentRangeSpec::Unregistered {
+                unit: "seconds".to_owned(),
+                resp: "1-2".to_owned()
+            })));
+
+        test_header!(test_no_len,
+            vec![b"bytes 0-499"],
+            None::<ContentRange>);
+
+        test_header!(test_only_unit,
+            vec![b"bytes"],
+            None::<ContentRange>);
+
+        test_header!(test_end_less_than_start,
+            vec![b"bytes 499-0/500"],
+            None::<ContentRange>);
+
+        test_header!(test_blank,
+            vec![b""],
+            None::<ContentRange>);
+
+        test_header!(test_bytes_many_spaces,
+            vec![b"bytes 1-2/500 3"],
+            None::<ContentRange>);
+
+        test_header!(test_bytes_many_slashes,
+            vec![b"bytes 1-2/500/600"],
+            None::<ContentRange>);
+
+        test_header!(test_bytes_many_dashes,
+            vec![b"bytes 1-2-3/500"],
+            None::<ContentRange>);
+
+    }
+}
+
+/// Content-Range, described in [RFC7233](https://tools.ietf.org/html/rfc7233#section-4.2)
+///
+/// # ABNF
+///
+/// ```text
+/// Content-Range       = byte-content-range
+///                     / other-content-range
+///
+/// byte-content-range  = bytes-unit SP
+///                       ( byte-range-resp / unsatisfied-range )
+///
+/// byte-range-resp     = byte-range "/" ( complete-length / "*" )
+/// byte-range          = first-byte-pos "-" last-byte-pos
+/// unsatisfied-range   = "*/" complete-length
+///
+/// complete-length     = 1*DIGIT
+///
+/// other-content-range = other-range-unit SP other-range-resp
+/// other-range-resp    = *CHAR
+/// ```
+#[derive(PartialEq, Clone, Debug)]
+pub enum ContentRangeSpec {
+    /// Byte range
+    Bytes {
+        /// First and last bytes of the range, omitted if request could not be
+        /// satisfied
+        range: Option<(u64, u64)>,
+
+        /// Total length of the instance, can be omitted if unknown
+        instance_length: Option<u64>,
+    },
+
+    /// Custom range, with unit not registered at IANA
+    Unregistered {
+        /// other-range-unit
+        unit: String,
+
+        /// other-range-resp
+        resp: String,
+    },
+}
+
+fn split_in_two(s: &str, separator: char) -> Option<(&str, &str)> {
+    let mut iter = s.splitn(2, separator);
+    match (iter.next(), iter.next()) {
+        (Some(a), Some(b)) => Some((a, b)),
+        _ => None,
+    }
+}
+
+impl FromStr for ContentRangeSpec {
+    type Err = ParseError;
+
+    fn from_str(s: &str) -> Result<Self, ParseError> {
+        let res = match split_in_two(s, ' ') {
+            Some(("bytes", resp)) => {
+                let (range, instance_length) =
+                    split_in_two(resp, '/').ok_or(ParseError::Header)?;
+
+                let instance_length = if instance_length == "*" {
+                    None
+                } else {
+                    Some(instance_length
+                        .parse()
+                        .map_err(|_| ParseError::Header)?)
+                };
+
+                let range = if range == "*" {
+                    None
+                } else {
+                    let (first_byte, last_byte) =
+                        split_in_two(range, '-').ok_or(ParseError::Header)?;
+                    let first_byte = first_byte.parse().map_err(|_| ParseError::Header)?;
+                    let last_byte = last_byte.parse().map_err(|_| ParseError::Header)?;
+                    if last_byte < first_byte {
+                        return Err(ParseError::Header);
+                    }
+                    Some((first_byte, last_byte))
+                };
+
+                ContentRangeSpec::Bytes {
+                    range,
+                    instance_length,
+                }
+            }
+            Some((unit, resp)) => ContentRangeSpec::Unregistered {
+                unit: unit.to_owned(),
+                resp: resp.to_owned(),
+            },
+            _ => return Err(ParseError::Header),
+        };
+        Ok(res)
+    }
+}
+
+impl Display for ContentRangeSpec {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            ContentRangeSpec::Bytes {
+                range,
+                instance_length,
+            } => {
+                f.write_str("bytes ")?;
+                match range {
+                    Some((first_byte, last_byte)) => {
+                        write!(f, "{}-{}", first_byte, last_byte)?;
+                    }
+                    None => {
+                        f.write_str("*")?;
+                    }
+                };
+                f.write_str("/")?;
+                if let Some(v) = instance_length {
+                    write!(f, "{}", v)
+                } else {
+                    f.write_str("*")
+                }
+            }
+            ContentRangeSpec::Unregistered {
+                ref unit,
+                ref resp,
+            } => {
+                f.write_str(unit)?;
+                f.write_str(" ")?;
+                f.write_str(resp)
+            }
+        }
+    }
+}
+
+impl IntoHeaderValue for ContentRangeSpec {
+    type Error = InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        let mut writer = Writer::new();
+        let _ = write!(&mut writer, "{}", self);
+        HeaderValue::from_shared(writer.take())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/content_type.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_type.rs.html new file mode 100644 index 0000000..ecfa851 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/content_type.rs.html @@ -0,0 +1,247 @@ +content_type.rs.html -- source
  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
+
+use header::CONTENT_TYPE;
+use mime::{self, Mime};
+
+header! {
+    /// `Content-Type` header, defined in
+    /// [RFC7231](http://tools.ietf.org/html/rfc7231#section-3.1.1.5)
+    ///
+    /// The `Content-Type` header field indicates the media type of the
+    /// associated representation: either the representation enclosed in the
+    /// message payload or the selected representation, as determined by the
+    /// message semantics.  The indicated media type defines both the data
+    /// format and how that data is intended to be processed by a recipient,
+    /// within the scope of the received message semantics, after any content
+    /// codings indicated by Content-Encoding are decoded.
+    ///
+    /// Although the `mime` crate allows the mime options to be any slice, this crate
+    /// forces the use of Vec. This is to make sure the same header can't have more than 1 type. If
+    /// this is an issue, it's possible to implement `Header` on a custom struct.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Content-Type = media-type
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `text/html; charset=utf-8`
+    /// * `application/json`
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::ContentType;
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     ContentType::json()
+    /// );
+    /// # }
+    /// ```
+    ///
+    /// ```rust
+    /// # extern crate mime;
+    /// # extern crate actix_web;
+    /// use mime::TEXT_HTML;
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::ContentType;
+    ///
+    /// # fn main() {
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     ContentType(TEXT_HTML)
+    /// );
+    /// # }
+    /// ```
+    (ContentType, CONTENT_TYPE) => [Mime]
+
+    test_content_type {
+        test_header!(
+            test1,
+            vec![b"text/html"],
+            Some(HeaderField(TEXT_HTML)));
+    }
+}
+
+impl ContentType {
+    /// A constructor  to easily create a `Content-Type: application/json`
+    /// header.
+    #[inline]
+    pub fn json() -> ContentType {
+        ContentType(mime::APPLICATION_JSON)
+    }
+
+    /// A constructor  to easily create a `Content-Type: text/plain;
+    /// charset=utf-8` header.
+    #[inline]
+    pub fn plaintext() -> ContentType {
+        ContentType(mime::TEXT_PLAIN_UTF_8)
+    }
+
+    /// A constructor  to easily create a `Content-Type: text/html` header.
+    #[inline]
+    pub fn html() -> ContentType {
+        ContentType(mime::TEXT_HTML)
+    }
+
+    /// A constructor  to easily create a `Content-Type: text/xml` header.
+    #[inline]
+    pub fn xml() -> ContentType {
+        ContentType(mime::TEXT_XML)
+    }
+
+    /// A constructor  to easily create a `Content-Type:
+    /// application/www-form-url-encoded` header.
+    #[inline]
+    pub fn form_url_encoded() -> ContentType {
+        ContentType(mime::APPLICATION_WWW_FORM_URLENCODED)
+    }
+    /// A constructor  to easily create a `Content-Type: image/jpeg` header.
+    #[inline]
+    pub fn jpeg() -> ContentType {
+        ContentType(mime::IMAGE_JPEG)
+    }
+
+    /// A constructor  to easily create a `Content-Type: image/png` header.
+    #[inline]
+    pub fn png() -> ContentType {
+        ContentType(mime::IMAGE_PNG)
+    }
+
+    /// A constructor  to easily create a `Content-Type:
+    /// application/octet-stream` header.
+    #[inline]
+    pub fn octet_stream() -> ContentType {
+        ContentType(mime::APPLICATION_OCTET_STREAM)
+    }
+}
+
+impl Eq for ContentType {}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/date.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/date.rs.html new file mode 100644 index 0000000..d2e80b1 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/date.rs.html @@ -0,0 +1,87 @@ +date.rs.html -- source
 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
+
+use header::{HttpDate, DATE};
+use std::time::SystemTime;
+
+header! {
+    /// `Date` header, defined in [RFC7231](http://tools.ietf.org/html/rfc7231#section-7.1.1.2)
+    ///
+    /// The `Date` header field represents the date and time at which the
+    /// message was originated.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Date = HTTP-date
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `Tue, 15 Nov 1994 08:12:31 GMT`
+    ///
+    /// # Example
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::Date;
+    /// use std::time::SystemTime;
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(Date(SystemTime::now().into()));
+    /// ```
+    (Date, DATE) => [HttpDate]
+
+    test_date {
+        test_header!(test1, vec![b"Tue, 15 Nov 1994 08:12:31 GMT"]);
+    }
+}
+
+impl Date {
+    /// Create a date instance set to the current system time
+    pub fn now() -> Date {
+        Date(SystemTime::now().into())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/etag.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/etag.rs.html new file mode 100644 index 0000000..a357e24 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/etag.rs.html @@ -0,0 +1,195 @@ +etag.rs.html -- source
 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
+
+use header::{EntityTag, ETAG};
+
+header! {
+    /// `ETag` header, defined in [RFC7232](http://tools.ietf.org/html/rfc7232#section-2.3)
+    ///
+    /// The `ETag` header field in a response provides the current entity-tag
+    /// for the selected representation, as determined at the conclusion of
+    /// handling the request.  An entity-tag is an opaque validator for
+    /// differentiating between multiple representations of the same
+    /// resource, regardless of whether those multiple representations are
+    /// due to resource state changes over time, content negotiation
+    /// resulting in multiple representations being valid at the same time,
+    /// or both.  An entity-tag consists of an opaque quoted string, possibly
+    /// prefixed by a weakness indicator.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// ETag       = entity-tag
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `"xyzzy"`
+    /// * `W/"xyzzy"`
+    /// * `""`
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{ETag, EntityTag};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(ETag(EntityTag::new(false, "xyzzy".to_owned())));
+    /// ```
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{ETag, EntityTag};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(ETag(EntityTag::new(true, "xyzzy".to_owned())));
+    /// ```
+    (ETag, ETAG) => [EntityTag]
+
+    test_etag {
+        // From the RFC
+        test_header!(test1,
+            vec![b"\"xyzzy\""],
+            Some(ETag(EntityTag::new(false, "xyzzy".to_owned()))));
+        test_header!(test2,
+            vec![b"W/\"xyzzy\""],
+            Some(ETag(EntityTag::new(true, "xyzzy".to_owned()))));
+        test_header!(test3,
+            vec![b"\"\""],
+            Some(ETag(EntityTag::new(false, "".to_owned()))));
+        // Own tests
+        test_header!(test4,
+            vec![b"\"foobar\""],
+            Some(ETag(EntityTag::new(false, "foobar".to_owned()))));
+        test_header!(test5,
+            vec![b"\"\""],
+            Some(ETag(EntityTag::new(false, "".to_owned()))));
+        test_header!(test6,
+            vec![b"W/\"weak-etag\""],
+            Some(ETag(EntityTag::new(true, "weak-etag".to_owned()))));
+        test_header!(test7,
+            vec![b"W/\"\x65\x62\""],
+            Some(ETag(EntityTag::new(true, "\u{0065}\u{0062}".to_owned()))));
+        test_header!(test8,
+            vec![b"W/\"\""],
+            Some(ETag(EntityTag::new(true, "".to_owned()))));
+        test_header!(test9,
+            vec![b"no-dquotes"],
+            None::<ETag>);
+        test_header!(test10,
+            vec![b"w/\"the-first-w-is-case-sensitive\""],
+            None::<ETag>);
+        test_header!(test11,
+            vec![b""],
+            None::<ETag>);
+        test_header!(test12,
+            vec![b"\"unmatched-dquotes1"],
+            None::<ETag>);
+        test_header!(test13,
+            vec![b"unmatched-dquotes2\""],
+            None::<ETag>);
+        test_header!(test14,
+            vec![b"matched-\"dquotes\""],
+            None::<ETag>);
+        test_header!(test15,
+            vec![b"\""],
+            None::<ETag>);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/expires.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/expires.rs.html new file mode 100644 index 0000000..21069f4 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/expires.rs.html @@ -0,0 +1,81 @@ +expires.rs.html -- source
 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
+
+use header::{HttpDate, EXPIRES};
+
+header! {
+    /// `Expires` header, defined in [RFC7234](http://tools.ietf.org/html/rfc7234#section-5.3)
+    ///
+    /// The `Expires` header field gives the date/time after which the
+    /// response is considered stale.
+    ///
+    /// The presence of an Expires field does not imply that the original
+    /// resource will change or cease to exist at, before, or after that
+    /// time.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Expires = HTTP-date
+    /// ```
+    ///
+    /// # Example values
+    /// * `Thu, 01 Dec 1994 16:00:00 GMT`
+    ///
+    /// # Example
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::Expires;
+    /// use std::time::{SystemTime, Duration};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// let expiration = SystemTime::now() + Duration::from_secs(60 * 60 * 24);
+    /// builder.set(Expires(expiration.into()));
+    /// ```
+    (Expires, EXPIRES) => [HttpDate]
+
+    test_expires {
+        // Test case from RFC
+        test_header!(test1, vec![b"Thu, 01 Dec 1994 16:00:00 GMT"]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/if_match.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_match.rs.html new file mode 100644 index 0000000..e89302e --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_match.rs.html @@ -0,0 +1,143 @@ +if_match.rs.html -- source
 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
+
+use header::{EntityTag, IF_MATCH};
+
+header! {
+    /// `If-Match` header, defined in
+    /// [RFC7232](https://tools.ietf.org/html/rfc7232#section-3.1)
+    ///
+    /// The `If-Match` header field makes the request method conditional on
+    /// the recipient origin server either having at least one current
+    /// representation of the target resource, when the field-value is "*",
+    /// or having a current representation of the target resource that has an
+    /// entity-tag matching a member of the list of entity-tags provided in
+    /// the field-value.
+    ///
+    /// An origin server MUST use the strong comparison function when
+    /// comparing entity-tags for `If-Match`, since the client
+    /// intends this precondition to prevent the method from being applied if
+    /// there have been any changes to the representation data.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// If-Match = "*" / 1#entity-tag
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `"xyzzy"`
+    /// * "xyzzy", "r2d2xxxx", "c3piozzzz"
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::IfMatch;
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(IfMatch::Any);
+    /// ```
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{IfMatch, EntityTag};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     IfMatch::Items(vec![
+    ///         EntityTag::new(false, "xyzzy".to_owned()),
+    ///         EntityTag::new(false, "foobar".to_owned()),
+    ///         EntityTag::new(false, "bazquux".to_owned()),
+    ///     ])
+    /// );
+    /// ```
+    (IfMatch, IF_MATCH) => {Any / (EntityTag)+}
+
+    test_if_match {
+        test_header!(
+            test1,
+            vec![b"\"xyzzy\""],
+            Some(HeaderField::Items(
+                vec![EntityTag::new(false, "xyzzy".to_owned())])));
+        test_header!(
+            test2,
+            vec![b"\"xyzzy\", \"r2d2xxxx\", \"c3piozzzz\""],
+            Some(HeaderField::Items(
+                vec![EntityTag::new(false, "xyzzy".to_owned()),
+                     EntityTag::new(false, "r2d2xxxx".to_owned()),
+                     EntityTag::new(false, "c3piozzzz".to_owned())])));
+        test_header!(test3, vec![b"*"], Some(IfMatch::Any));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/if_modified_since.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_modified_since.rs.html new file mode 100644 index 0000000..82e9eaf --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_modified_since.rs.html @@ -0,0 +1,81 @@ +if_modified_since.rs.html -- source
 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
+
+use header::{HttpDate, IF_MODIFIED_SINCE};
+
+header! {
+    /// `If-Modified-Since` header, defined in
+    /// [RFC7232](http://tools.ietf.org/html/rfc7232#section-3.3)
+    ///
+    /// The `If-Modified-Since` header field makes a GET or HEAD request
+    /// method conditional on the selected representation's modification date
+    /// being more recent than the date provided in the field-value.
+    /// Transfer of the selected representation's data is avoided if that
+    /// data has not changed.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// If-Unmodified-Since = HTTP-date
+    /// ```
+    ///
+    /// # Example values
+    /// * `Sat, 29 Oct 1994 19:43:31 GMT`
+    ///
+    /// # Example
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::IfModifiedSince;
+    /// use std::time::{SystemTime, Duration};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// let modified = SystemTime::now() - Duration::from_secs(60 * 60 * 24);
+    /// builder.set(IfModifiedSince(modified.into()));
+    /// ```
+    (IfModifiedSince, IF_MODIFIED_SINCE) => [HttpDate]
+
+    test_if_modified_since {
+        // Test case from RFC
+        test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/if_none_match.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_none_match.rs.html new file mode 100644 index 0000000..88d0011 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_none_match.rs.html @@ -0,0 +1,187 @@ +if_none_match.rs.html -- source
 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
+
+use header::{EntityTag, IF_NONE_MATCH};
+
+header! {
+    /// `If-None-Match` header, defined in
+    /// [RFC7232](https://tools.ietf.org/html/rfc7232#section-3.2)
+    ///
+    /// The `If-None-Match` header field makes the request method conditional
+    /// on a recipient cache or origin server either not having any current
+    /// representation of the target resource, when the field-value is "*",
+    /// or having a selected representation with an entity-tag that does not
+    /// match any of those listed in the field-value.
+    ///
+    /// A recipient MUST use the weak comparison function when comparing
+    /// entity-tags for If-None-Match (Section 2.3.2), since weak entity-tags
+    /// can be used for cache validation even if there have been changes to
+    /// the representation data.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// If-None-Match = "*" / 1#entity-tag
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `"xyzzy"`
+    /// * `W/"xyzzy"`
+    /// * `"xyzzy", "r2d2xxxx", "c3piozzzz"`
+    /// * `W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"`
+    /// * `*`
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::IfNoneMatch;
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(IfNoneMatch::Any);
+    /// ```
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::{IfNoneMatch, EntityTag};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// builder.set(
+    ///     IfNoneMatch::Items(vec![
+    ///         EntityTag::new(false, "xyzzy".to_owned()),
+    ///         EntityTag::new(false, "foobar".to_owned()),
+    ///         EntityTag::new(false, "bazquux".to_owned()),
+    ///     ])
+    /// );
+    /// ```
+    (IfNoneMatch, IF_NONE_MATCH) => {Any / (EntityTag)+}
+
+    test_if_none_match {
+        test_header!(test1, vec![b"\"xyzzy\""]);
+        test_header!(test2, vec![b"W/\"xyzzy\""]);
+        test_header!(test3, vec![b"\"xyzzy\", \"r2d2xxxx\", \"c3piozzzz\""]);
+        test_header!(test4, vec![b"W/\"xyzzy\", W/\"r2d2xxxx\", W/\"c3piozzzz\""]);
+        test_header!(test5, vec![b"*"]);
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::IfNoneMatch;
+    use header::{EntityTag, Header, IF_NONE_MATCH};
+    use test::TestRequest;
+
+    #[test]
+    fn test_if_none_match() {
+        let mut if_none_match: Result<IfNoneMatch, _>;
+
+        let req = TestRequest::with_header(IF_NONE_MATCH, "*").finish();
+        if_none_match = Header::parse(&req);
+        assert_eq!(if_none_match.ok(), Some(IfNoneMatch::Any));
+
+        let req =
+            TestRequest::with_header(IF_NONE_MATCH, &b"\"foobar\", W/\"weak-etag\""[..])
+                .finish();
+
+        if_none_match = Header::parse(&req);
+        let mut entities: Vec<EntityTag> = Vec::new();
+        let foobar_etag = EntityTag::new(false, "foobar".to_owned());
+        let weak_etag = EntityTag::new(true, "weak-etag".to_owned());
+        entities.push(foobar_etag);
+        entities.push(weak_etag);
+        assert_eq!(if_none_match.ok(), Some(IfNoneMatch::Items(entities)));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/if_range.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_range.rs.html new file mode 100644 index 0000000..ccdb088 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_range.rs.html @@ -0,0 +1,233 @@ +if_range.rs.html -- source
  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
+
+use error::ParseError;
+use header::from_one_raw_str;
+use header::{EntityTag, Header, HeaderName, HeaderValue, HttpDate, IntoHeaderValue,
+             InvalidHeaderValueBytes, Writer};
+use http::header;
+use httpmessage::HttpMessage;
+use std::fmt::{self, Display, Write};
+
+/// `If-Range` header, defined in [RFC7233](http://tools.ietf.org/html/rfc7233#section-3.2)
+///
+/// If a client has a partial copy of a representation and wishes to have
+/// an up-to-date copy of the entire representation, it could use the
+/// Range header field with a conditional GET (using either or both of
+/// If-Unmodified-Since and If-Match.)  However, if the precondition
+/// fails because the representation has been modified, the client would
+/// then have to make a second request to obtain the entire current
+/// representation.
+///
+/// The `If-Range` header field allows a client to \"short-circuit\" the
+/// second request.  Informally, its meaning is as follows: if the
+/// representation is unchanged, send me the part(s) that I am requesting
+/// in Range; otherwise, send me the entire representation.
+///
+/// # ABNF
+///
+/// ```text
+/// If-Range = entity-tag / HTTP-date
+/// ```
+///
+/// # Example values
+///
+/// * `Sat, 29 Oct 1994 19:43:31 GMT`
+/// * `\"xyzzy\"`
+///
+/// # Examples
+///
+/// ```rust
+/// use actix_web::HttpResponse;
+/// use actix_web::http::header::{EntityTag, IfRange};
+///
+/// let mut builder = HttpResponse::Ok();
+/// builder.set(IfRange::EntityTag(EntityTag::new(
+///     false,
+///     "xyzzy".to_owned(),
+/// )));
+/// ```
+///
+/// ```rust
+/// use actix_web::HttpResponse;
+/// use actix_web::http::header::IfRange;
+/// use std::time::{Duration, SystemTime};
+///
+/// let mut builder = HttpResponse::Ok();
+/// let fetched = SystemTime::now() - Duration::from_secs(60 * 60 * 24);
+/// builder.set(IfRange::Date(fetched.into()));
+/// ```
+#[derive(Clone, Debug, PartialEq)]
+pub enum IfRange {
+    /// The entity-tag the client has of the resource
+    EntityTag(EntityTag),
+    /// The date when the client retrieved the resource
+    Date(HttpDate),
+}
+
+impl Header for IfRange {
+    fn name() -> HeaderName {
+        header::IF_RANGE
+    }
+    #[inline]
+    fn parse<T>(msg: &T) -> Result<Self, ParseError>
+    where
+        T: HttpMessage,
+    {
+        let etag: Result<EntityTag, _> =
+            from_one_raw_str(msg.headers().get(header::IF_RANGE));
+        if let Ok(etag) = etag {
+            return Ok(IfRange::EntityTag(etag));
+        }
+        let date: Result<HttpDate, _> =
+            from_one_raw_str(msg.headers().get(header::IF_RANGE));
+        if let Ok(date) = date {
+            return Ok(IfRange::Date(date));
+        }
+        Err(ParseError::Header)
+    }
+}
+
+impl Display for IfRange {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            IfRange::EntityTag(ref x) => Display::fmt(x, f),
+            IfRange::Date(ref x) => Display::fmt(x, f),
+        }
+    }
+}
+
+impl IntoHeaderValue for IfRange {
+    type Error = InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        let mut writer = Writer::new();
+        let _ = write!(&mut writer, "{}", self);
+        HeaderValue::from_shared(writer.take())
+    }
+}
+
+#[cfg(test)]
+mod test_if_range {
+    use super::IfRange as HeaderField;
+    use header::*;
+    use std::str;
+    test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);
+    test_header!(test2, vec![b"\"xyzzy\""]);
+    test_header!(test3, vec![b"this-is-invalid"], None::<IfRange>);
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/if_unmodified_since.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_unmodified_since.rs.html new file mode 100644 index 0000000..fa3ef1a --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/if_unmodified_since.rs.html @@ -0,0 +1,83 @@ +if_unmodified_since.rs.html -- source
 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
+
+use header::{HttpDate, IF_UNMODIFIED_SINCE};
+
+header! {
+    /// `If-Unmodified-Since` header, defined in
+    /// [RFC7232](http://tools.ietf.org/html/rfc7232#section-3.4)
+    ///
+    /// The `If-Unmodified-Since` header field makes the request method
+    /// conditional on the selected representation's last modification date
+    /// being earlier than or equal to the date provided in the field-value.
+    /// This field accomplishes the same purpose as If-Match for cases where
+    /// the user agent does not have an entity-tag for the representation.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// If-Unmodified-Since = HTTP-date
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `Sat, 29 Oct 1994 19:43:31 GMT`
+    ///
+    /// # Example
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::IfUnmodifiedSince;
+    /// use std::time::{SystemTime, Duration};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// let modified = SystemTime::now() - Duration::from_secs(60 * 60 * 24);
+    /// builder.set(IfUnmodifiedSince(modified.into()));
+    /// ```
+    (IfUnmodifiedSince, IF_UNMODIFIED_SINCE) => [HttpDate]
+
+    test_if_unmodified_since {
+        // Test case from RFC
+        test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/last_modified.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/last_modified.rs.html new file mode 100644 index 0000000..644d443 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/last_modified.rs.html @@ -0,0 +1,79 @@ +last_modified.rs.html -- source
 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
+
+use header::{HttpDate, LAST_MODIFIED};
+
+header! {
+    /// `Last-Modified` header, defined in
+    /// [RFC7232](http://tools.ietf.org/html/rfc7232#section-2.2)
+    ///
+    /// The `Last-Modified` header field in a response provides a timestamp
+    /// indicating the date and time at which the origin server believes the
+    /// selected representation was last modified, as determined at the
+    /// conclusion of handling the request.
+    ///
+    /// # ABNF
+    ///
+    /// ```text
+    /// Expires = HTTP-date
+    /// ```
+    ///
+    /// # Example values
+    ///
+    /// * `Sat, 29 Oct 1994 19:43:31 GMT`
+    ///
+    /// # Example
+    ///
+    /// ```rust
+    /// use actix_web::HttpResponse;
+    /// use actix_web::http::header::LastModified;
+    /// use std::time::{SystemTime, Duration};
+    ///
+    /// let mut builder = HttpResponse::Ok();
+    /// let modified = SystemTime::now() - Duration::from_secs(60 * 60 * 24);
+    /// builder.set(LastModified(modified.into()));
+    /// ```
+    (LastModified, LAST_MODIFIED) => [HttpDate]
+
+        test_last_modified {
+            // Test case from RFC
+            test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);}
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/common/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/common/mod.rs.html new file mode 100644 index 0000000..ea32e9d --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/common/mod.rs.html @@ -0,0 +1,703 @@ +mod.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+
+//! A Collection of Header implementations for common HTTP Headers.
+//!
+//! ## Mime
+//!
+//! Several header fields use MIME values for their contents. Keeping with the
+//! strongly-typed theme, the [mime](https://docs.rs/mime) crate
+//! is used, such as `ContentType(pub Mime)`.
+#![cfg_attr(rustfmt, rustfmt_skip)]
+
+pub use self::accept_charset::AcceptCharset;
+//pub use self::accept_encoding::AcceptEncoding;
+pub use self::accept_language::AcceptLanguage;
+pub use self::accept::Accept;
+pub use self::allow::Allow;
+pub use self::cache_control::{CacheControl, CacheDirective};
+pub use self::content_disposition::{ContentDisposition, DispositionType, DispositionParam};
+pub use self::content_language::ContentLanguage;
+pub use self::content_range::{ContentRange, ContentRangeSpec};
+pub use self::content_type::ContentType;
+pub use self::date::Date;
+pub use self::etag::ETag;
+pub use self::expires::Expires;
+pub use self::if_match::IfMatch;
+pub use self::if_modified_since::IfModifiedSince;
+pub use self::if_none_match::IfNoneMatch;
+pub use self::if_range::IfRange;
+pub use self::if_unmodified_since::IfUnmodifiedSince;
+pub use self::last_modified::LastModified;
+//pub use self::range::{Range, ByteRangeSpec};
+
+#[doc(hidden)]
+#[macro_export]
+macro_rules! __hyper__deref {
+    ($from:ty => $to:ty) => {
+        impl ::std::ops::Deref for $from {
+            type Target = $to;
+
+            #[inline]
+            fn deref(&self) -> &$to {
+                &self.0
+            }
+        }
+
+        impl ::std::ops::DerefMut for $from {
+            #[inline]
+            fn deref_mut(&mut self) -> &mut $to {
+                &mut self.0
+            }
+        }
+    }
+}
+
+#[doc(hidden)]
+#[macro_export]
+macro_rules! __hyper__tm {
+    ($id:ident, $tm:ident{$($tf:item)*}) => {
+        #[allow(unused_imports)]
+        #[cfg(test)]
+        mod $tm{
+            use std::str;
+            use http::Method;
+            use $crate::header::*;
+            use $crate::mime::*;
+            use super::$id as HeaderField;
+            $($tf)*
+        }
+
+    }
+}
+
+#[doc(hidden)]
+#[macro_export]
+macro_rules! test_header {
+    ($id:ident, $raw:expr) => {
+        #[test]
+        fn $id() {
+            use test;
+            let raw = $raw;
+            let a: Vec<Vec<u8>> = raw.iter().map(|x| x.to_vec()).collect();
+            let mut req = test::TestRequest::default();
+            for item in a {
+                req = req.header(HeaderField::name(), item);
+            }
+            let req = req.finish();
+            let value = HeaderField::parse(&req);
+            let result = format!("{}", value.unwrap());
+            let expected = String::from_utf8(raw[0].to_vec()).unwrap();
+            let result_cmp: Vec<String> = result
+                .to_ascii_lowercase()
+                .split(' ')
+                .map(|x| x.to_owned())
+                .collect();
+            let expected_cmp: Vec<String> = expected
+                .to_ascii_lowercase()
+                .split(' ')
+                .map(|x| x.to_owned())
+                .collect();
+            assert_eq!(result_cmp.concat(), expected_cmp.concat());
+        }
+    };
+    ($id:ident, $raw:expr, $typed:expr) => {
+        #[test]
+        fn $id() {
+            use $crate::test;
+            let a: Vec<Vec<u8>> = $raw.iter().map(|x| x.to_vec()).collect();
+            let mut req = test::TestRequest::default();
+            for item in a {
+                req = req.header(HeaderField::name(), item);
+            }
+            let req = req.finish();
+            let val = HeaderField::parse(&req);
+            let typed: Option<HeaderField> = $typed;
+            // Test parsing
+            assert_eq!(val.ok(), typed);
+            // Test formatting
+            if typed.is_some() {
+                let raw = &($raw)[..];
+                let mut iter = raw.iter().map(|b|str::from_utf8(&b[..]).unwrap());
+                let mut joined = String::new();
+                joined.push_str(iter.next().unwrap());
+                for s in iter {
+                    joined.push_str(", ");
+                    joined.push_str(s);
+                }
+                assert_eq!(format!("{}", typed.unwrap()), joined);
+            }
+        }
+    }
+}
+
+#[macro_export]
+macro_rules! header {
+    // $a:meta: Attributes associated with the header item (usually docs)
+    // $id:ident: Identifier of the header
+    // $n:expr: Lowercase name of the header
+    // $nn:expr: Nice name of the header
+
+    // List header, zero or more items
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)*) => {
+        $(#[$a])*
+        #[derive(Clone, Debug, PartialEq)]
+        pub struct $id(pub Vec<$item>);
+        __hyper__deref!($id => Vec<$item>);
+        impl $crate::header::Header for $id {
+            #[inline]
+            fn name() -> $crate::header::HeaderName {
+                $name
+            }
+            #[inline]
+            fn parse<T>(msg: &T) -> Result<Self, $crate::error::ParseError>
+                where T: $crate::HttpMessage
+            {
+                $crate::header::from_comma_delimited(
+                    msg.headers().get_all(Self::name())).map($id)
+            }
+        }
+        impl ::std::fmt::Display for $id {
+            #[inline]
+            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                $crate::header::fmt_comma_delimited(f, &self.0[..])
+            }
+        }
+        impl $crate::header::IntoHeaderValue for $id {
+            type Error = $crate::header::InvalidHeaderValueBytes;
+
+            fn try_into(self) -> Result<$crate::header::HeaderValue, Self::Error> {
+                use std::fmt::Write;
+                let mut writer = $crate::header::Writer::new();
+                let _ = write!(&mut writer, "{}", self);
+                $crate::header::HeaderValue::from_shared(writer.take())
+            }
+        }
+    };
+    // List header, one or more items
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)+) => {
+        $(#[$a])*
+        #[derive(Clone, Debug, PartialEq)]
+        pub struct $id(pub Vec<$item>);
+        __hyper__deref!($id => Vec<$item>);
+        impl $crate::header::Header for $id {
+            #[inline]
+            fn name() -> $crate::header::HeaderName {
+                $name
+            }
+            #[inline]
+            fn parse<T>(msg: &T) -> Result<Self, $crate::error::ParseError>
+                where T: $crate::HttpMessage
+            {
+                $crate::header::from_comma_delimited(
+                    msg.headers().get_all(Self::name())).map($id)
+            }
+        }
+        impl ::std::fmt::Display for $id {
+            #[inline]
+            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                $crate::header::fmt_comma_delimited(f, &self.0[..])
+            }
+        }
+        impl $crate::header::IntoHeaderValue for $id {
+            type Error = $crate::header::InvalidHeaderValueBytes;
+
+            fn try_into(self) -> Result<$crate::header::HeaderValue, Self::Error> {
+                use std::fmt::Write;
+                let mut writer = $crate::header::Writer::new();
+                let _ = write!(&mut writer, "{}", self);
+                $crate::header::HeaderValue::from_shared(writer.take())
+            }
+        }
+    };
+    // Single value header
+    ($(#[$a:meta])*($id:ident, $name:expr) => [$value:ty]) => {
+        $(#[$a])*
+        #[derive(Clone, Debug, PartialEq)]
+        pub struct $id(pub $value);
+        __hyper__deref!($id => $value);
+        impl $crate::header::Header for $id {
+            #[inline]
+            fn name() -> $crate::header::HeaderName {
+                $name
+            }
+            #[inline]
+            fn parse<T>(msg: &T) -> Result<Self, $crate::error::ParseError>
+                where T: $crate::HttpMessage
+            {
+                $crate::header::from_one_raw_str(
+                    msg.headers().get(Self::name())).map($id)
+            }
+        }
+        impl ::std::fmt::Display for $id {
+            #[inline]
+            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                ::std::fmt::Display::fmt(&self.0, f)
+            }
+        }
+        impl $crate::header::IntoHeaderValue for $id {
+            type Error = $crate::header::InvalidHeaderValueBytes;
+
+            fn try_into(self) -> Result<$crate::header::HeaderValue, Self::Error> {
+                self.0.try_into()
+            }
+        }
+    };
+    // List header, one or more items with "*" option
+    ($(#[$a:meta])*($id:ident, $name:expr) => {Any / ($item:ty)+}) => {
+        $(#[$a])*
+        #[derive(Clone, Debug, PartialEq)]
+        pub enum $id {
+            /// Any value is a match
+            Any,
+            /// Only the listed items are a match
+            Items(Vec<$item>),
+        }
+        impl $crate::header::Header for $id {
+            #[inline]
+            fn name() -> $crate::header::HeaderName {
+                $name
+            }
+            #[inline]
+            fn parse<T>(msg: &T) -> Result<Self, $crate::error::ParseError>
+                where T: $crate::HttpMessage
+            {
+                let any = msg.headers().get(Self::name()).and_then(|hdr| {
+                    hdr.to_str().ok().and_then(|hdr| Some(hdr.trim() == "*"))});
+
+                if let Some(true) = any {
+                    Ok($id::Any)
+                } else {
+                    Ok($id::Items(
+                        $crate::header::from_comma_delimited(
+                            msg.headers().get_all(Self::name()))?))
+                }
+            }
+        }
+        impl ::std::fmt::Display for $id {
+            #[inline]
+            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                match *self {
+                    $id::Any => f.write_str("*"),
+                    $id::Items(ref fields) => $crate::header::fmt_comma_delimited(
+                        f, &fields[..])
+                }
+            }
+        }
+        impl $crate::header::IntoHeaderValue for $id {
+            type Error = $crate::header::InvalidHeaderValueBytes;
+
+            fn try_into(self) -> Result<$crate::header::HeaderValue, Self::Error> {
+                use std::fmt::Write;
+                let mut writer = $crate::header::Writer::new();
+                let _ = write!(&mut writer, "{}", self);
+                $crate::header::HeaderValue::from_shared(writer.take())
+            }
+        }
+    };
+
+    // optional test module
+    ($(#[$a:meta])*($id:ident, $name:expr) => ($item:ty)* $tm:ident{$($tf:item)*}) => {
+        header! {
+            $(#[$a])*
+            ($id, $name) => ($item)*
+        }
+
+        __hyper__tm! { $id, $tm { $($tf)* }}
+    };
+    ($(#[$a:meta])*($id:ident, $n:expr) => ($item:ty)+ $tm:ident{$($tf:item)*}) => {
+        header! {
+            $(#[$a])*
+            ($id, $n) => ($item)+
+        }
+
+        __hyper__tm! { $id, $tm { $($tf)* }}
+    };
+    ($(#[$a:meta])*($id:ident, $name:expr) => [$item:ty] $tm:ident{$($tf:item)*}) => {
+        header! {
+            $(#[$a])* ($id, $name) => [$item]
+        }
+
+        __hyper__tm! { $id, $tm { $($tf)* }}
+    };
+    ($(#[$a:meta])*($id:ident, $name:expr) => {Any / ($item:ty)+} $tm:ident{$($tf:item)*}) => {
+        header! {
+            $(#[$a])*
+            ($id, $name) => {Any / ($item)+}
+        }
+
+        __hyper__tm! { $id, $tm { $($tf)* }}
+    };
+}
+
+
+mod accept_charset;
+//mod accept_encoding;
+mod accept_language;
+mod accept;
+mod allow;
+mod cache_control;
+mod content_disposition;
+mod content_language;
+mod content_range;
+mod content_type;
+mod date;
+mod etag;
+mod expires;
+mod if_match;
+mod if_modified_since;
+mod if_none_match;
+mod if_range;
+mod if_unmodified_since;
+mod last_modified;
+//mod range;
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/mod.rs.html new file mode 100644 index 0000000..69d61ff --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/mod.rs.html @@ -0,0 +1,943 @@ +mod.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+
+//! Various http headers
+// This is mostly copy of [hyper](https://github.com/hyperium/hyper/tree/master/src/header)
+
+use std::fmt;
+use std::str::FromStr;
+
+use bytes::{Bytes, BytesMut};
+use mime::Mime;
+use modhttp::header::GetAll;
+use modhttp::Error as HttpError;
+use percent_encoding;
+
+pub use modhttp::header::*;
+
+use error::ParseError;
+use httpmessage::HttpMessage;
+
+mod common;
+mod shared;
+#[doc(hidden)]
+pub use self::common::*;
+#[doc(hidden)]
+pub use self::shared::*;
+
+#[doc(hidden)]
+/// A trait for any object that will represent a header field and value.
+pub trait Header
+where
+    Self: IntoHeaderValue,
+{
+    /// Returns the name of the header field
+    fn name() -> HeaderName;
+
+    /// Parse a header
+    fn parse<T: HttpMessage>(msg: &T) -> Result<Self, ParseError>;
+}
+
+#[doc(hidden)]
+/// A trait for any object that can be Converted to a `HeaderValue`
+pub trait IntoHeaderValue: Sized {
+    /// The type returned in the event of a conversion error.
+    type Error: Into<HttpError>;
+
+    /// Try to convert value to a Header value.
+    fn try_into(self) -> Result<HeaderValue, Self::Error>;
+}
+
+impl IntoHeaderValue for HeaderValue {
+    type Error = InvalidHeaderValue;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        Ok(self)
+    }
+}
+
+impl<'a> IntoHeaderValue for &'a str {
+    type Error = InvalidHeaderValue;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        self.parse()
+    }
+}
+
+impl<'a> IntoHeaderValue for &'a [u8] {
+    type Error = InvalidHeaderValue;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        HeaderValue::from_bytes(self)
+    }
+}
+
+impl IntoHeaderValue for Bytes {
+    type Error = InvalidHeaderValueBytes;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        HeaderValue::from_shared(self)
+    }
+}
+
+impl IntoHeaderValue for Vec<u8> {
+    type Error = InvalidHeaderValueBytes;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        HeaderValue::from_shared(Bytes::from(self))
+    }
+}
+
+impl IntoHeaderValue for String {
+    type Error = InvalidHeaderValueBytes;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        HeaderValue::from_shared(Bytes::from(self))
+    }
+}
+
+impl IntoHeaderValue for Mime {
+    type Error = InvalidHeaderValueBytes;
+
+    #[inline]
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        HeaderValue::from_shared(Bytes::from(format!("{}", self)))
+    }
+}
+
+/// Represents supported types of content encodings
+#[derive(Copy, Clone, PartialEq, Debug)]
+pub enum ContentEncoding {
+    /// Automatically select encoding based on encoding negotiation
+    Auto,
+    /// A format using the Brotli algorithm
+    #[cfg(feature = "brotli")]
+    Br,
+    /// A format using the zlib structure with deflate algorithm
+    #[cfg(feature = "flate2")]
+    Deflate,
+    /// Gzip algorithm
+    #[cfg(feature = "flate2")]
+    Gzip,
+    /// Indicates the identity function (i.e. no compression, nor modification)
+    Identity,
+}
+
+impl ContentEncoding {
+    #[inline]
+    /// Is the content compressed?
+    pub fn is_compression(self) -> bool {
+        match self {
+            ContentEncoding::Identity | ContentEncoding::Auto => false,
+            _ => true,
+        }
+    }
+
+    #[inline]
+    /// Convert content encoding to string
+    pub fn as_str(self) -> &'static str {
+        match self {
+            #[cfg(feature = "brotli")]
+            ContentEncoding::Br => "br",
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Gzip => "gzip",
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Deflate => "deflate",
+            ContentEncoding::Identity | ContentEncoding::Auto => "identity",
+        }
+    }
+
+    #[inline]
+    /// default quality value
+    pub fn quality(self) -> f64 {
+        match self {
+            #[cfg(feature = "brotli")]
+            ContentEncoding::Br => 1.1,
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Gzip => 1.0,
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Deflate => 0.9,
+            ContentEncoding::Identity | ContentEncoding::Auto => 0.1,
+        }
+    }
+}
+
+// TODO: remove memory allocation
+impl<'a> From<&'a str> for ContentEncoding {
+    fn from(s: &'a str) -> ContentEncoding {
+        match AsRef::<str>::as_ref(&s.trim().to_lowercase()) {
+            #[cfg(feature = "brotli")]
+            "br" => ContentEncoding::Br,
+            #[cfg(feature = "flate2")]
+            "gzip" => ContentEncoding::Gzip,
+            #[cfg(feature = "flate2")]
+            "deflate" => ContentEncoding::Deflate,
+            _ => ContentEncoding::Identity,
+        }
+    }
+}
+
+#[doc(hidden)]
+pub(crate) struct Writer {
+    buf: BytesMut,
+}
+
+impl Writer {
+    fn new() -> Writer {
+        Writer {
+            buf: BytesMut::new(),
+        }
+    }
+    fn take(&mut self) -> Bytes {
+        self.buf.take().freeze()
+    }
+}
+
+impl fmt::Write for Writer {
+    #[inline]
+    fn write_str(&mut self, s: &str) -> fmt::Result {
+        self.buf.extend_from_slice(s.as_bytes());
+        Ok(())
+    }
+
+    #[inline]
+    fn write_fmt(&mut self, args: fmt::Arguments) -> fmt::Result {
+        fmt::write(self, args)
+    }
+}
+
+#[inline]
+#[doc(hidden)]
+/// Reads a comma-delimited raw header into a Vec.
+pub fn from_comma_delimited<T: FromStr>(
+    all: GetAll<HeaderValue>,
+) -> Result<Vec<T>, ParseError> {
+    let mut result = Vec::new();
+    for h in all {
+        let s = h.to_str().map_err(|_| ParseError::Header)?;
+        result.extend(
+            s.split(',')
+                .filter_map(|x| match x.trim() {
+                    "" => None,
+                    y => Some(y),
+                })
+                .filter_map(|x| x.trim().parse().ok()),
+        )
+    }
+    Ok(result)
+}
+
+#[inline]
+#[doc(hidden)]
+/// Reads a single string when parsing a header.
+pub fn from_one_raw_str<T: FromStr>(val: Option<&HeaderValue>) -> Result<T, ParseError> {
+    if let Some(line) = val {
+        let line = line.to_str().map_err(|_| ParseError::Header)?;
+        if !line.is_empty() {
+            return T::from_str(line).or(Err(ParseError::Header));
+        }
+    }
+    Err(ParseError::Header)
+}
+
+#[inline]
+#[doc(hidden)]
+/// Format an array into a comma-delimited string.
+pub fn fmt_comma_delimited<T>(f: &mut fmt::Formatter, parts: &[T]) -> fmt::Result
+where
+    T: fmt::Display,
+{
+    let mut iter = parts.iter();
+    if let Some(part) = iter.next() {
+        fmt::Display::fmt(part, f)?;
+    }
+    for part in iter {
+        f.write_str(", ")?;
+        fmt::Display::fmt(part, f)?;
+    }
+    Ok(())
+}
+
+// From hyper v0.11.27 src/header/parsing.rs
+
+/// An extended header parameter value (i.e., tagged with a character set and optionally,
+/// a language), as defined in [RFC 5987](https://tools.ietf.org/html/rfc5987#section-3.2).
+#[derive(Clone, Debug, PartialEq)]
+pub struct ExtendedValue {
+    /// The character set that is used to encode the `value` to a string.
+    pub charset: Charset,
+    /// The human language details of the `value`, if available.
+    pub language_tag: Option<LanguageTag>,
+    /// The parameter value, as expressed in octets.
+    pub value: Vec<u8>,
+}
+
+/// Parses extended header parameter values (`ext-value`), as defined in
+/// [RFC 5987](https://tools.ietf.org/html/rfc5987#section-3.2).
+///
+/// Extended values are denoted by parameter names that end with `*`.
+///
+/// ## ABNF
+///
+/// ```text
+/// ext-value     = charset  "'" [ language ] "'" value-chars
+///               ; like RFC 2231's <extended-initial-value>
+///               ; (see [RFC2231], Section 7)
+///
+/// charset       = "UTF-8" / "ISO-8859-1" / mime-charset
+///
+/// mime-charset  = 1*mime-charsetc
+/// mime-charsetc = ALPHA / DIGIT
+///               / "!" / "#" / "$" / "%" / "&"
+///               / "+" / "-" / "^" / "_" / "`"
+///               / "{" / "}" / "~"
+///               ; as <mime-charset> in Section 2.3 of [RFC2978]
+///               ; except that the single quote is not included
+///               ; SHOULD be registered in the IANA charset registry
+///
+/// language      = <Language-Tag, defined in [RFC5646], Section 2.1>
+///
+/// value-chars   = *( pct-encoded / attr-char )
+///
+/// pct-encoded   = "%" HEXDIG HEXDIG
+///               ; see [RFC3986], Section 2.1
+///
+/// attr-char     = ALPHA / DIGIT
+///               / "!" / "#" / "$" / "&" / "+" / "-" / "."
+///               / "^" / "_" / "`" / "|" / "~"
+///               ; token except ( "*" / "'" / "%" )
+/// ```
+pub fn parse_extended_value(val: &str) -> Result<ExtendedValue, ::error::ParseError> {
+    // Break into three pieces separated by the single-quote character
+    let mut parts = val.splitn(3, '\'');
+
+    // Interpret the first piece as a Charset
+    let charset: Charset = match parts.next() {
+        None => return Err(::error::ParseError::Header),
+        Some(n) => FromStr::from_str(n).map_err(|_| ::error::ParseError::Header)?,
+    };
+
+    // Interpret the second piece as a language tag
+    let language_tag: Option<LanguageTag> = match parts.next() {
+        None => return Err(::error::ParseError::Header),
+        Some("") => None,
+        Some(s) => match s.parse() {
+            Ok(lt) => Some(lt),
+            Err(_) => return Err(::error::ParseError::Header),
+        },
+    };
+
+    // Interpret the third piece as a sequence of value characters
+    let value: Vec<u8> = match parts.next() {
+        None => return Err(::error::ParseError::Header),
+        Some(v) => percent_encoding::percent_decode(v.as_bytes()).collect(),
+    };
+
+    Ok(ExtendedValue {
+        value,
+        charset,
+        language_tag,
+    })
+}
+
+impl fmt::Display for ExtendedValue {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let encoded_value = percent_encoding::percent_encode(
+            &self.value[..],
+            self::percent_encoding_http::HTTP_VALUE,
+        );
+        if let Some(ref lang) = self.language_tag {
+            write!(f, "{}'{}'{}", self.charset, lang, encoded_value)
+        } else {
+            write!(f, "{}''{}", self.charset, encoded_value)
+        }
+    }
+}
+
+/// Percent encode a sequence of bytes with a character set defined in
+/// [https://tools.ietf.org/html/rfc5987#section-3.2][url]
+///
+/// [url]: https://tools.ietf.org/html/rfc5987#section-3.2
+pub fn http_percent_encode(f: &mut fmt::Formatter, bytes: &[u8]) -> fmt::Result {
+    let encoded =
+        percent_encoding::percent_encode(bytes, self::percent_encoding_http::HTTP_VALUE);
+    fmt::Display::fmt(&encoded, f)
+}
+mod percent_encoding_http {
+    use percent_encoding;
+
+    // internal module because macro is hard-coded to make a public item
+    // but we don't want to public export this item
+    define_encode_set! {
+        // This encode set is used for HTTP header values and is defined at
+        // https://tools.ietf.org/html/rfc5987#section-3.2
+        pub HTTP_VALUE = [percent_encoding::SIMPLE_ENCODE_SET] | {
+            ' ', '"', '%', '\'', '(', ')', '*', ',', '/', ':', ';', '<', '-', '>', '?',
+            '[', '\\', ']', '{', '}'
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::{parse_extended_value, ExtendedValue};
+    use header::shared::Charset;
+    use language_tags::LanguageTag;
+
+    #[test]
+    fn test_parse_extended_value_with_encoding_and_language_tag() {
+        let expected_language_tag = "en".parse::<LanguageTag>().unwrap();
+        // RFC 5987, Section 3.2.2
+        // Extended notation, using the Unicode character U+00A3 (POUND SIGN)
+        let result = parse_extended_value("iso-8859-1'en'%A3%20rates");
+        assert!(result.is_ok());
+        let extended_value = result.unwrap();
+        assert_eq!(Charset::Iso_8859_1, extended_value.charset);
+        assert!(extended_value.language_tag.is_some());
+        assert_eq!(expected_language_tag, extended_value.language_tag.unwrap());
+        assert_eq!(
+            vec![163, b' ', b'r', b'a', b't', b'e', b's'],
+            extended_value.value
+        );
+    }
+
+    #[test]
+    fn test_parse_extended_value_with_encoding() {
+        // RFC 5987, Section 3.2.2
+        // Extended notation, using the Unicode characters U+00A3 (POUND SIGN)
+        // and U+20AC (EURO SIGN)
+        let result = parse_extended_value("UTF-8''%c2%a3%20and%20%e2%82%ac%20rates");
+        assert!(result.is_ok());
+        let extended_value = result.unwrap();
+        assert_eq!(Charset::Ext("UTF-8".to_string()), extended_value.charset);
+        assert!(extended_value.language_tag.is_none());
+        assert_eq!(
+            vec![
+                194, 163, b' ', b'a', b'n', b'd', b' ', 226, 130, 172, b' ', b'r', b'a',
+                b't', b'e', b's',
+            ],
+            extended_value.value
+        );
+    }
+
+    #[test]
+    fn test_parse_extended_value_missing_language_tag_and_encoding() {
+        // From: https://greenbytes.de/tech/tc2231/#attwithfn2231quot2
+        let result = parse_extended_value("foo%20bar.html");
+        assert!(result.is_err());
+    }
+
+    #[test]
+    fn test_parse_extended_value_partially_formatted() {
+        let result = parse_extended_value("UTF-8'missing third part");
+        assert!(result.is_err());
+    }
+
+    #[test]
+    fn test_parse_extended_value_partially_formatted_blank() {
+        let result = parse_extended_value("blank second part'");
+        assert!(result.is_err());
+    }
+
+    #[test]
+    fn test_fmt_extended_value_with_encoding_and_language_tag() {
+        let extended_value = ExtendedValue {
+            charset: Charset::Iso_8859_1,
+            language_tag: Some("en".parse().expect("Could not parse language tag")),
+            value: vec![163, b' ', b'r', b'a', b't', b'e', b's'],
+        };
+        assert_eq!("ISO-8859-1'en'%A3%20rates", format!("{}", extended_value));
+    }
+
+    #[test]
+    fn test_fmt_extended_value_with_encoding() {
+        let extended_value = ExtendedValue {
+            charset: Charset::Ext("UTF-8".to_string()),
+            language_tag: None,
+            value: vec![
+                194, 163, b' ', b'a', b'n', b'd', b' ', 226, 130, 172, b' ', b'r', b'a',
+                b't', b'e', b's',
+            ],
+        };
+        assert_eq!(
+            "UTF-8''%C2%A3%20and%20%E2%82%AC%20rates",
+            format!("{}", extended_value)
+        );
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/charset.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/charset.rs.html new file mode 100644 index 0000000..e061845 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/charset.rs.html @@ -0,0 +1,307 @@ +charset.rs.html -- source
  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
+
+use std::fmt::{self, Display};
+use std::str::FromStr;
+
+use self::Charset::*;
+
+/// A Mime charset.
+///
+/// The string representation is normalized to upper case.
+///
+/// See [http://www.iana.org/assignments/character-sets/character-sets.xhtml][url].
+///
+/// [url]: http://www.iana.org/assignments/character-sets/character-sets.xhtml
+#[derive(Clone, Debug, PartialEq)]
+#[allow(non_camel_case_types)]
+pub enum Charset {
+    /// US ASCII
+    Us_Ascii,
+    /// ISO-8859-1
+    Iso_8859_1,
+    /// ISO-8859-2
+    Iso_8859_2,
+    /// ISO-8859-3
+    Iso_8859_3,
+    /// ISO-8859-4
+    Iso_8859_4,
+    /// ISO-8859-5
+    Iso_8859_5,
+    /// ISO-8859-6
+    Iso_8859_6,
+    /// ISO-8859-7
+    Iso_8859_7,
+    /// ISO-8859-8
+    Iso_8859_8,
+    /// ISO-8859-9
+    Iso_8859_9,
+    /// ISO-8859-10
+    Iso_8859_10,
+    /// Shift_JIS
+    Shift_Jis,
+    /// EUC-JP
+    Euc_Jp,
+    /// ISO-2022-KR
+    Iso_2022_Kr,
+    /// EUC-KR
+    Euc_Kr,
+    /// ISO-2022-JP
+    Iso_2022_Jp,
+    /// ISO-2022-JP-2
+    Iso_2022_Jp_2,
+    /// ISO-8859-6-E
+    Iso_8859_6_E,
+    /// ISO-8859-6-I
+    Iso_8859_6_I,
+    /// ISO-8859-8-E
+    Iso_8859_8_E,
+    /// ISO-8859-8-I
+    Iso_8859_8_I,
+    /// GB2312
+    Gb2312,
+    /// Big5
+    Big5,
+    /// KOI8-R
+    Koi8_R,
+    /// An arbitrary charset specified as a string
+    Ext(String),
+}
+
+impl Charset {
+    fn label(&self) -> &str {
+        match *self {
+            Us_Ascii => "US-ASCII",
+            Iso_8859_1 => "ISO-8859-1",
+            Iso_8859_2 => "ISO-8859-2",
+            Iso_8859_3 => "ISO-8859-3",
+            Iso_8859_4 => "ISO-8859-4",
+            Iso_8859_5 => "ISO-8859-5",
+            Iso_8859_6 => "ISO-8859-6",
+            Iso_8859_7 => "ISO-8859-7",
+            Iso_8859_8 => "ISO-8859-8",
+            Iso_8859_9 => "ISO-8859-9",
+            Iso_8859_10 => "ISO-8859-10",
+            Shift_Jis => "Shift-JIS",
+            Euc_Jp => "EUC-JP",
+            Iso_2022_Kr => "ISO-2022-KR",
+            Euc_Kr => "EUC-KR",
+            Iso_2022_Jp => "ISO-2022-JP",
+            Iso_2022_Jp_2 => "ISO-2022-JP-2",
+            Iso_8859_6_E => "ISO-8859-6-E",
+            Iso_8859_6_I => "ISO-8859-6-I",
+            Iso_8859_8_E => "ISO-8859-8-E",
+            Iso_8859_8_I => "ISO-8859-8-I",
+            Gb2312 => "GB2312",
+            Big5 => "big5",
+            Koi8_R => "KOI8-R",
+            Ext(ref s) => s,
+        }
+    }
+}
+
+impl Display for Charset {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.write_str(self.label())
+    }
+}
+
+impl FromStr for Charset {
+    type Err = ::Error;
+    fn from_str(s: &str) -> ::Result<Charset> {
+        Ok(match s.to_ascii_uppercase().as_ref() {
+            "US-ASCII" => Us_Ascii,
+            "ISO-8859-1" => Iso_8859_1,
+            "ISO-8859-2" => Iso_8859_2,
+            "ISO-8859-3" => Iso_8859_3,
+            "ISO-8859-4" => Iso_8859_4,
+            "ISO-8859-5" => Iso_8859_5,
+            "ISO-8859-6" => Iso_8859_6,
+            "ISO-8859-7" => Iso_8859_7,
+            "ISO-8859-8" => Iso_8859_8,
+            "ISO-8859-9" => Iso_8859_9,
+            "ISO-8859-10" => Iso_8859_10,
+            "SHIFT-JIS" => Shift_Jis,
+            "EUC-JP" => Euc_Jp,
+            "ISO-2022-KR" => Iso_2022_Kr,
+            "EUC-KR" => Euc_Kr,
+            "ISO-2022-JP" => Iso_2022_Jp,
+            "ISO-2022-JP-2" => Iso_2022_Jp_2,
+            "ISO-8859-6-E" => Iso_8859_6_E,
+            "ISO-8859-6-I" => Iso_8859_6_I,
+            "ISO-8859-8-E" => Iso_8859_8_E,
+            "ISO-8859-8-I" => Iso_8859_8_I,
+            "GB2312" => Gb2312,
+            "big5" => Big5,
+            "KOI8-R" => Koi8_R,
+            s => Ext(s.to_owned()),
+        })
+    }
+}
+
+#[test]
+fn test_parse() {
+    assert_eq!(Us_Ascii, "us-ascii".parse().unwrap());
+    assert_eq!(Us_Ascii, "US-Ascii".parse().unwrap());
+    assert_eq!(Us_Ascii, "US-ASCII".parse().unwrap());
+    assert_eq!(Shift_Jis, "Shift-JIS".parse().unwrap());
+    assert_eq!(Ext("ABCD".to_owned()), "abcd".parse().unwrap());
+}
+
+#[test]
+fn test_display() {
+    assert_eq!("US-ASCII", format!("{}", Us_Ascii));
+    assert_eq!("ABCD", format!("{}", Ext("ABCD".to_owned())));
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/encoding.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/encoding.rs.html new file mode 100644 index 0000000..abae4a7 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/encoding.rs.html @@ -0,0 +1,121 @@ +encoding.rs.html -- source
 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
+
+use std::fmt;
+use std::str;
+
+pub use self::Encoding::{
+    Brotli, Chunked, Compress, Deflate, EncodingExt, Gzip, Identity, Trailers,
+};
+
+/// A value to represent an encoding used in `Transfer-Encoding`
+/// or `Accept-Encoding` header.
+#[derive(Clone, PartialEq, Debug)]
+pub enum Encoding {
+    /// The `chunked` encoding.
+    Chunked,
+    /// The `br` encoding.
+    Brotli,
+    /// The `gzip` encoding.
+    Gzip,
+    /// The `deflate` encoding.
+    Deflate,
+    /// The `compress` encoding.
+    Compress,
+    /// The `identity` encoding.
+    Identity,
+    /// The `trailers` encoding.
+    Trailers,
+    /// Some other encoding that is less common, can be any String.
+    EncodingExt(String),
+}
+
+impl fmt::Display for Encoding {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.write_str(match *self {
+            Chunked => "chunked",
+            Brotli => "br",
+            Gzip => "gzip",
+            Deflate => "deflate",
+            Compress => "compress",
+            Identity => "identity",
+            Trailers => "trailers",
+            EncodingExt(ref s) => s.as_ref(),
+        })
+    }
+}
+
+impl str::FromStr for Encoding {
+    type Err = ::error::ParseError;
+    fn from_str(s: &str) -> Result<Encoding, ::error::ParseError> {
+        match s {
+            "chunked" => Ok(Chunked),
+            "br" => Ok(Brotli),
+            "deflate" => Ok(Deflate),
+            "gzip" => Ok(Gzip),
+            "compress" => Ok(Compress),
+            "identity" => Ok(Identity),
+            "trailers" => Ok(Trailers),
+            _ => Ok(EncodingExt(s.to_owned())),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/entity.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/entity.rs.html new file mode 100644 index 0000000..b3137e6 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/entity.rs.html @@ -0,0 +1,535 @@ +entity.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+
+use header::{HeaderValue, IntoHeaderValue, InvalidHeaderValueBytes, Writer};
+use std::fmt::{self, Display, Write};
+use std::str::FromStr;
+
+/// check that each char in the slice is either:
+/// 1. `%x21`, or
+/// 2. in the range `%x23` to `%x7E`, or
+/// 3. above `%x80`
+fn check_slice_validity(slice: &str) -> bool {
+    slice
+        .bytes()
+        .all(|c| c == b'\x21' || (c >= b'\x23' && c <= b'\x7e') | (c >= b'\x80'))
+}
+
+/// An entity tag, defined in [RFC7232](https://tools.ietf.org/html/rfc7232#section-2.3)
+///
+/// An entity tag consists of a string enclosed by two literal double quotes.
+/// Preceding the first double quote is an optional weakness indicator,
+/// which always looks like `W/`. Examples for valid tags are `"xyzzy"` and
+/// `W/"xyzzy"`.
+///
+/// # ABNF
+///
+/// ```text
+/// entity-tag = [ weak ] opaque-tag
+/// weak       = %x57.2F ; "W/", case-sensitive
+/// opaque-tag = DQUOTE *etagc DQUOTE
+/// etagc      = %x21 / %x23-7E / obs-text
+///            ; VCHAR except double quotes, plus obs-text
+/// ```
+///
+/// # Comparison
+/// To check if two entity tags are equivalent in an application always use the
+/// `strong_eq` or `weak_eq` methods based on the context of the Tag. Only use
+/// `==` to check if two tags are identical.
+///
+/// The example below shows the results for a set of entity-tag pairs and
+/// both the weak and strong comparison function results:
+///
+/// | `ETag 1`| `ETag 2`| Strong Comparison | Weak Comparison |
+/// |---------|---------|-------------------|-----------------|
+/// | `W/"1"` | `W/"1"` | no match          | match           |
+/// | `W/"1"` | `W/"2"` | no match          | no match        |
+/// | `W/"1"` | `"1"`   | no match          | match           |
+/// | `"1"`   | `"1"`   | match             | match           |
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub struct EntityTag {
+    /// Weakness indicator for the tag
+    pub weak: bool,
+    /// The opaque string in between the DQUOTEs
+    tag: String,
+}
+
+impl EntityTag {
+    /// Constructs a new EntityTag.
+    /// # Panics
+    /// If the tag contains invalid characters.
+    pub fn new(weak: bool, tag: String) -> EntityTag {
+        assert!(check_slice_validity(&tag), "Invalid tag: {:?}", tag);
+        EntityTag { weak, tag }
+    }
+
+    /// Constructs a new weak EntityTag.
+    /// # Panics
+    /// If the tag contains invalid characters.
+    pub fn weak(tag: String) -> EntityTag {
+        EntityTag::new(true, tag)
+    }
+
+    /// Constructs a new strong EntityTag.
+    /// # Panics
+    /// If the tag contains invalid characters.
+    pub fn strong(tag: String) -> EntityTag {
+        EntityTag::new(false, tag)
+    }
+
+    /// Get the tag.
+    pub fn tag(&self) -> &str {
+        self.tag.as_ref()
+    }
+
+    /// Set the tag.
+    /// # Panics
+    /// If the tag contains invalid characters.
+    pub fn set_tag(&mut self, tag: String) {
+        assert!(check_slice_validity(&tag), "Invalid tag: {:?}", tag);
+        self.tag = tag
+    }
+
+    /// For strong comparison two entity-tags are equivalent if both are not
+    /// weak and their opaque-tags match character-by-character.
+    pub fn strong_eq(&self, other: &EntityTag) -> bool {
+        !self.weak && !other.weak && self.tag == other.tag
+    }
+
+    /// For weak comparison two entity-tags are equivalent if their
+    /// opaque-tags match character-by-character, regardless of either or
+    /// both being tagged as "weak".
+    pub fn weak_eq(&self, other: &EntityTag) -> bool {
+        self.tag == other.tag
+    }
+
+    /// The inverse of `EntityTag.strong_eq()`.
+    pub fn strong_ne(&self, other: &EntityTag) -> bool {
+        !self.strong_eq(other)
+    }
+
+    /// The inverse of `EntityTag.weak_eq()`.
+    pub fn weak_ne(&self, other: &EntityTag) -> bool {
+        !self.weak_eq(other)
+    }
+}
+
+impl Display for EntityTag {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        if self.weak {
+            write!(f, "W/\"{}\"", self.tag)
+        } else {
+            write!(f, "\"{}\"", self.tag)
+        }
+    }
+}
+
+impl FromStr for EntityTag {
+    type Err = ::error::ParseError;
+
+    fn from_str(s: &str) -> Result<EntityTag, ::error::ParseError> {
+        let length: usize = s.len();
+        let slice = &s[..];
+        // Early exits if it doesn't terminate in a DQUOTE.
+        if !slice.ends_with('"') || slice.len() < 2 {
+            return Err(::error::ParseError::Header);
+        }
+        // The etag is weak if its first char is not a DQUOTE.
+        if slice.len() >= 2
+            && slice.starts_with('"')
+            && check_slice_validity(&slice[1..length - 1])
+        {
+            // No need to check if the last char is a DQUOTE,
+            // we already did that above.
+            return Ok(EntityTag {
+                weak: false,
+                tag: slice[1..length - 1].to_owned(),
+            });
+        } else if slice.len() >= 4
+            && slice.starts_with("W/\"")
+            && check_slice_validity(&slice[3..length - 1])
+        {
+            return Ok(EntityTag {
+                weak: true,
+                tag: slice[3..length - 1].to_owned(),
+            });
+        }
+        Err(::error::ParseError::Header)
+    }
+}
+
+impl IntoHeaderValue for EntityTag {
+    type Error = InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        let mut wrt = Writer::new();
+        write!(wrt, "{}", self).unwrap();
+        HeaderValue::from_shared(wrt.take())
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::EntityTag;
+
+    #[test]
+    fn test_etag_parse_success() {
+        // Expected success
+        assert_eq!(
+            "\"foobar\"".parse::<EntityTag>().unwrap(),
+            EntityTag::strong("foobar".to_owned())
+        );
+        assert_eq!(
+            "\"\"".parse::<EntityTag>().unwrap(),
+            EntityTag::strong("".to_owned())
+        );
+        assert_eq!(
+            "W/\"weaktag\"".parse::<EntityTag>().unwrap(),
+            EntityTag::weak("weaktag".to_owned())
+        );
+        assert_eq!(
+            "W/\"\x65\x62\"".parse::<EntityTag>().unwrap(),
+            EntityTag::weak("\x65\x62".to_owned())
+        );
+        assert_eq!(
+            "W/\"\"".parse::<EntityTag>().unwrap(),
+            EntityTag::weak("".to_owned())
+        );
+    }
+
+    #[test]
+    fn test_etag_parse_failures() {
+        // Expected failures
+        assert!("no-dquotes".parse::<EntityTag>().is_err());
+        assert!(
+            "w/\"the-first-w-is-case-sensitive\""
+                .parse::<EntityTag>()
+                .is_err()
+        );
+        assert!("".parse::<EntityTag>().is_err());
+        assert!("\"unmatched-dquotes1".parse::<EntityTag>().is_err());
+        assert!("unmatched-dquotes2\"".parse::<EntityTag>().is_err());
+        assert!("matched-\"dquotes\"".parse::<EntityTag>().is_err());
+    }
+
+    #[test]
+    fn test_etag_fmt() {
+        assert_eq!(
+            format!("{}", EntityTag::strong("foobar".to_owned())),
+            "\"foobar\""
+        );
+        assert_eq!(format!("{}", EntityTag::strong("".to_owned())), "\"\"");
+        assert_eq!(
+            format!("{}", EntityTag::weak("weak-etag".to_owned())),
+            "W/\"weak-etag\""
+        );
+        assert_eq!(
+            format!("{}", EntityTag::weak("\u{0065}".to_owned())),
+            "W/\"\x65\""
+        );
+        assert_eq!(format!("{}", EntityTag::weak("".to_owned())), "W/\"\"");
+    }
+
+    #[test]
+    fn test_cmp() {
+        // | ETag 1  | ETag 2  | Strong Comparison | Weak Comparison |
+        // |---------|---------|-------------------|-----------------|
+        // | `W/"1"` | `W/"1"` | no match          | match           |
+        // | `W/"1"` | `W/"2"` | no match          | no match        |
+        // | `W/"1"` | `"1"`   | no match          | match           |
+        // | `"1"`   | `"1"`   | match             | match           |
+        let mut etag1 = EntityTag::weak("1".to_owned());
+        let mut etag2 = EntityTag::weak("1".to_owned());
+        assert!(!etag1.strong_eq(&etag2));
+        assert!(etag1.weak_eq(&etag2));
+        assert!(etag1.strong_ne(&etag2));
+        assert!(!etag1.weak_ne(&etag2));
+
+        etag1 = EntityTag::weak("1".to_owned());
+        etag2 = EntityTag::weak("2".to_owned());
+        assert!(!etag1.strong_eq(&etag2));
+        assert!(!etag1.weak_eq(&etag2));
+        assert!(etag1.strong_ne(&etag2));
+        assert!(etag1.weak_ne(&etag2));
+
+        etag1 = EntityTag::weak("1".to_owned());
+        etag2 = EntityTag::strong("1".to_owned());
+        assert!(!etag1.strong_eq(&etag2));
+        assert!(etag1.weak_eq(&etag2));
+        assert!(etag1.strong_ne(&etag2));
+        assert!(!etag1.weak_ne(&etag2));
+
+        etag1 = EntityTag::strong("1".to_owned());
+        etag2 = EntityTag::strong("1".to_owned());
+        assert!(etag1.strong_eq(&etag2));
+        assert!(etag1.weak_eq(&etag2));
+        assert!(!etag1.strong_ne(&etag2));
+        assert!(!etag1.weak_ne(&etag2));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/httpdate.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/httpdate.rs.html new file mode 100644 index 0000000..b4a2812 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/httpdate.rs.html @@ -0,0 +1,241 @@ +httpdate.rs.html -- source
  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
+
+use std::fmt::{self, Display};
+use std::io::Write;
+use std::str::FromStr;
+use std::time::{Duration, SystemTime, UNIX_EPOCH};
+
+use bytes::{BufMut, BytesMut};
+use http::header::{HeaderValue, InvalidHeaderValueBytes};
+use time;
+
+use error::ParseError;
+use header::IntoHeaderValue;
+
+/// A timestamp with HTTP formatting and parsing
+#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
+pub struct HttpDate(time::Tm);
+
+impl FromStr for HttpDate {
+    type Err = ParseError;
+
+    fn from_str(s: &str) -> Result<HttpDate, ParseError> {
+        match time::strptime(s, "%a, %d %b %Y %T %Z")
+            .or_else(|_| time::strptime(s, "%A, %d-%b-%y %T %Z"))
+            .or_else(|_| time::strptime(s, "%c"))
+        {
+            Ok(t) => Ok(HttpDate(t)),
+            Err(_) => Err(ParseError::Header),
+        }
+    }
+}
+
+impl Display for HttpDate {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Display::fmt(&self.0.to_utc().rfc822(), f)
+    }
+}
+
+impl From<time::Tm> for HttpDate {
+    fn from(tm: time::Tm) -> HttpDate {
+        HttpDate(tm)
+    }
+}
+
+impl From<SystemTime> for HttpDate {
+    fn from(sys: SystemTime) -> HttpDate {
+        let tmspec = match sys.duration_since(UNIX_EPOCH) {
+            Ok(dur) => {
+                time::Timespec::new(dur.as_secs() as i64, dur.subsec_nanos() as i32)
+            }
+            Err(err) => {
+                let neg = err.duration();
+                time::Timespec::new(
+                    -(neg.as_secs() as i64),
+                    -(neg.subsec_nanos() as i32),
+                )
+            }
+        };
+        HttpDate(time::at_utc(tmspec))
+    }
+}
+
+impl IntoHeaderValue for HttpDate {
+    type Error = InvalidHeaderValueBytes;
+
+    fn try_into(self) -> Result<HeaderValue, Self::Error> {
+        let mut wrt = BytesMut::with_capacity(29).writer();
+        write!(wrt, "{}", self.0.rfc822()).unwrap();
+        HeaderValue::from_shared(wrt.get_mut().take().freeze())
+    }
+}
+
+impl From<HttpDate> for SystemTime {
+    fn from(date: HttpDate) -> SystemTime {
+        let spec = date.0.to_timespec();
+        if spec.sec >= 0 {
+            UNIX_EPOCH + Duration::new(spec.sec as u64, spec.nsec as u32)
+        } else {
+            UNIX_EPOCH - Duration::new(spec.sec as u64, spec.nsec as u32)
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::HttpDate;
+    use time::Tm;
+
+    const NOV_07: HttpDate = HttpDate(Tm {
+        tm_nsec: 0,
+        tm_sec: 37,
+        tm_min: 48,
+        tm_hour: 8,
+        tm_mday: 7,
+        tm_mon: 10,
+        tm_year: 94,
+        tm_wday: 0,
+        tm_isdst: 0,
+        tm_yday: 0,
+        tm_utcoff: 0,
+    });
+
+    #[test]
+    fn test_date() {
+        assert_eq!(
+            "Sun, 07 Nov 1994 08:48:37 GMT".parse::<HttpDate>().unwrap(),
+            NOV_07
+        );
+        assert_eq!(
+            "Sunday, 07-Nov-94 08:48:37 GMT"
+                .parse::<HttpDate>()
+                .unwrap(),
+            NOV_07
+        );
+        assert_eq!(
+            "Sun Nov  7 08:48:37 1994".parse::<HttpDate>().unwrap(),
+            NOV_07
+        );
+        assert!("this-is-no-date".parse::<HttpDate>().is_err());
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/mod.rs.html new file mode 100644 index 0000000..c2a86e6 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/mod.rs.html @@ -0,0 +1,31 @@ +mod.rs.html -- source
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+
+//! Copied for `hyper::header::shared`;
+
+pub use self::charset::Charset;
+pub use self::encoding::Encoding;
+pub use self::entity::EntityTag;
+pub use self::httpdate::HttpDate;
+pub use self::quality_item::{q, qitem, Quality, QualityItem};
+pub use language_tags::LanguageTag;
+
+mod charset;
+mod encoding;
+mod entity;
+mod httpdate;
+mod quality_item;
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/header/shared/quality_item.rs.html b/static/api/actix-web/0.7.2/src/actix_web/header/shared/quality_item.rs.html new file mode 100644 index 0000000..adb7e1c --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/header/shared/quality_item.rs.html @@ -0,0 +1,591 @@ +quality_item.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+
+use std::cmp;
+use std::default::Default;
+use std::fmt;
+use std::str;
+
+use self::internal::IntoQuality;
+
+/// Represents a quality used in quality values.
+///
+/// Can be created with the `q` function.
+///
+/// # Implementation notes
+///
+/// The quality value is defined as a number between 0 and 1 with three decimal
+/// places. This means there are 1001 possible values. Since floating point
+/// numbers are not exact and the smallest floating point data type (`f32`)
+/// consumes four bytes, hyper uses an `u16` value to store the
+/// quality internally. For performance reasons you may set quality directly to
+/// a value between 0 and 1000 e.g. `Quality(532)` matches the quality
+/// `q=0.532`.
+///
+/// [RFC7231 Section 5.3.1](https://tools.ietf.org/html/rfc7231#section-5.3.1)
+/// gives more information on quality values in HTTP header fields.
+#[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
+pub struct Quality(u16);
+
+impl Default for Quality {
+    fn default() -> Quality {
+        Quality(1000)
+    }
+}
+
+/// Represents an item with a quality value as defined in
+/// [RFC7231](https://tools.ietf.org/html/rfc7231#section-5.3.1).
+#[derive(Clone, PartialEq, Debug)]
+pub struct QualityItem<T> {
+    /// The actual contents of the field.
+    pub item: T,
+    /// The quality (client or server preference) for the value.
+    pub quality: Quality,
+}
+
+impl<T> QualityItem<T> {
+    /// Creates a new `QualityItem` from an item and a quality.
+    /// The item can be of any type.
+    /// The quality should be a value in the range [0, 1].
+    pub fn new(item: T, quality: Quality) -> QualityItem<T> {
+        QualityItem { item, quality }
+    }
+}
+
+impl<T: PartialEq> cmp::PartialOrd for QualityItem<T> {
+    fn partial_cmp(&self, other: &QualityItem<T>) -> Option<cmp::Ordering> {
+        self.quality.partial_cmp(&other.quality)
+    }
+}
+
+impl<T: fmt::Display> fmt::Display for QualityItem<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Display::fmt(&self.item, f)?;
+        match self.quality.0 {
+            1000 => Ok(()),
+            0 => f.write_str("; q=0"),
+            x => write!(f, "; q=0.{}", format!("{:03}", x).trim_right_matches('0')),
+        }
+    }
+}
+
+impl<T: str::FromStr> str::FromStr for QualityItem<T> {
+    type Err = ::error::ParseError;
+
+    fn from_str(s: &str) -> Result<QualityItem<T>, ::error::ParseError> {
+        if !s.is_ascii() {
+            return Err(::error::ParseError::Header);
+        }
+        // Set defaults used if parsing fails.
+        let mut raw_item = s;
+        let mut quality = 1f32;
+
+        let parts: Vec<&str> = s.rsplitn(2, ';').map(|x| x.trim()).collect();
+        if parts.len() == 2 {
+            if parts[0].len() < 2 {
+                return Err(::error::ParseError::Header);
+            }
+            let start = &parts[0][0..2];
+            if start == "q=" || start == "Q=" {
+                let q_part = &parts[0][2..parts[0].len()];
+                if q_part.len() > 5 {
+                    return Err(::error::ParseError::Header);
+                }
+                match q_part.parse::<f32>() {
+                    Ok(q_value) => {
+                        if 0f32 <= q_value && q_value <= 1f32 {
+                            quality = q_value;
+                            raw_item = parts[1];
+                        } else {
+                            return Err(::error::ParseError::Header);
+                        }
+                    }
+                    Err(_) => return Err(::error::ParseError::Header),
+                }
+            }
+        }
+        match raw_item.parse::<T>() {
+            // we already checked above that the quality is within range
+            Ok(item) => Ok(QualityItem::new(item, from_f32(quality))),
+            Err(_) => Err(::error::ParseError::Header),
+        }
+    }
+}
+
+#[inline]
+fn from_f32(f: f32) -> Quality {
+    // this function is only used internally. A check that `f` is within range
+    // should be done before calling this method. Just in case, this
+    // debug_assert should catch if we were forgetful
+    debug_assert!(
+        f >= 0f32 && f <= 1f32,
+        "q value must be between 0.0 and 1.0"
+    );
+    Quality((f * 1000f32) as u16)
+}
+
+/// Convenience function to wrap a value in a `QualityItem`
+/// Sets `q` to the default 1.0
+pub fn qitem<T>(item: T) -> QualityItem<T> {
+    QualityItem::new(item, Default::default())
+}
+
+/// Convenience function to create a `Quality` from a float or integer.
+///
+/// Implemented for `u16` and `f32`. Panics if value is out of range.
+pub fn q<T: IntoQuality>(val: T) -> Quality {
+    val.into_quality()
+}
+
+mod internal {
+    use super::Quality;
+
+    // TryFrom is probably better, but it's not stable. For now, we want to
+    // keep the functionality of the `q` function, while allowing it to be
+    // generic over `f32` and `u16`.
+    //
+    // `q` would panic before, so keep that behavior. `TryFrom` can be
+    // introduced later for a non-panicking conversion.
+
+    pub trait IntoQuality: Sealed + Sized {
+        fn into_quality(self) -> Quality;
+    }
+
+    impl IntoQuality for f32 {
+        fn into_quality(self) -> Quality {
+            assert!(
+                self >= 0f32 && self <= 1f32,
+                "float must be between 0.0 and 1.0"
+            );
+            super::from_f32(self)
+        }
+    }
+
+    impl IntoQuality for u16 {
+        fn into_quality(self) -> Quality {
+            assert!(self <= 1000, "u16 must be between 0 and 1000");
+            Quality(self)
+        }
+    }
+
+    pub trait Sealed {}
+    impl Sealed for u16 {}
+    impl Sealed for f32 {}
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::encoding::*;
+    use super::*;
+
+    #[test]
+    fn test_quality_item_fmt_q_1() {
+        let x = qitem(Chunked);
+        assert_eq!(format!("{}", x), "chunked");
+    }
+    #[test]
+    fn test_quality_item_fmt_q_0001() {
+        let x = QualityItem::new(Chunked, Quality(1));
+        assert_eq!(format!("{}", x), "chunked; q=0.001");
+    }
+    #[test]
+    fn test_quality_item_fmt_q_05() {
+        // Custom value
+        let x = QualityItem {
+            item: EncodingExt("identity".to_owned()),
+            quality: Quality(500),
+        };
+        assert_eq!(format!("{}", x), "identity; q=0.5");
+    }
+
+    #[test]
+    fn test_quality_item_fmt_q_0() {
+        // Custom value
+        let x = QualityItem {
+            item: EncodingExt("identity".to_owned()),
+            quality: Quality(0),
+        };
+        assert_eq!(x.to_string(), "identity; q=0");
+    }
+
+    #[test]
+    fn test_quality_item_from_str1() {
+        let x: Result<QualityItem<Encoding>, _> = "chunked".parse();
+        assert_eq!(
+            x.unwrap(),
+            QualityItem {
+                item: Chunked,
+                quality: Quality(1000),
+            }
+        );
+    }
+    #[test]
+    fn test_quality_item_from_str2() {
+        let x: Result<QualityItem<Encoding>, _> = "chunked; q=1".parse();
+        assert_eq!(
+            x.unwrap(),
+            QualityItem {
+                item: Chunked,
+                quality: Quality(1000),
+            }
+        );
+    }
+    #[test]
+    fn test_quality_item_from_str3() {
+        let x: Result<QualityItem<Encoding>, _> = "gzip; q=0.5".parse();
+        assert_eq!(
+            x.unwrap(),
+            QualityItem {
+                item: Gzip,
+                quality: Quality(500),
+            }
+        );
+    }
+    #[test]
+    fn test_quality_item_from_str4() {
+        let x: Result<QualityItem<Encoding>, _> = "gzip; q=0.273".parse();
+        assert_eq!(
+            x.unwrap(),
+            QualityItem {
+                item: Gzip,
+                quality: Quality(273),
+            }
+        );
+    }
+    #[test]
+    fn test_quality_item_from_str5() {
+        let x: Result<QualityItem<Encoding>, _> = "gzip; q=0.2739999".parse();
+        assert!(x.is_err());
+    }
+    #[test]
+    fn test_quality_item_from_str6() {
+        let x: Result<QualityItem<Encoding>, _> = "gzip; q=2".parse();
+        assert!(x.is_err());
+    }
+    #[test]
+    fn test_quality_item_ordering() {
+        let x: QualityItem<Encoding> = "gzip; q=0.5".parse().ok().unwrap();
+        let y: QualityItem<Encoding> = "gzip; q=0.273".parse().ok().unwrap();
+        let comparision_result: bool = x.gt(&y);
+        assert!(comparision_result)
+    }
+
+    #[test]
+    fn test_quality() {
+        assert_eq!(q(0.5), Quality(500));
+    }
+
+    #[test]
+    #[should_panic] // FIXME - 32-bit msvc unwinding broken
+    #[cfg_attr(all(target_arch = "x86", target_env = "msvc"), ignore)]
+    fn test_quality_invalid() {
+        q(-1.0);
+    }
+
+    #[test]
+    #[should_panic] // FIXME - 32-bit msvc unwinding broken
+    #[cfg_attr(all(target_arch = "x86", target_env = "msvc"), ignore)]
+    fn test_quality_invalid2() {
+        q(2.0);
+    }
+
+    #[test]
+    fn test_fuzzing_bugs() {
+        assert!("99999;".parse::<QualityItem<String>>().is_err());
+        assert!("\x0d;;;=\u{d6aa}==".parse::<QualityItem<String>>().is_err())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/helpers.rs.html b/static/api/actix-web/0.7.2/src/actix_web/helpers.rs.html new file mode 100644 index 0000000..5154cb0 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/helpers.rs.html @@ -0,0 +1,1147 @@ +helpers.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+
+//! Various helpers
+
+use http::{header, StatusCode};
+use regex::Regex;
+
+use handler::Handler;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+
+/// Path normalization helper
+///
+/// By normalizing it means:
+///
+/// - Add a trailing slash to the path.
+/// - Remove a trailing slash from the path.
+/// - Double slashes are replaced by one.
+///
+/// The handler returns as soon as it finds a path that resolves
+/// correctly. The order if all enable is 1) merge, 3) both merge and append
+/// and 3) append. If the path resolves with
+/// at least one of those conditions, it will redirect to the new path.
+///
+/// If *append* is *true* append slash when needed. If a resource is
+/// defined with trailing slash and the request comes without it, it will
+/// append it automatically.
+///
+/// If *merge* is *true*, merge multiple consecutive slashes in the path into
+/// one.
+///
+/// This handler designed to be use as a handler for application's *default
+/// resource*.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # #[macro_use] extern crate serde_derive;
+/// # use actix_web::*;
+/// use actix_web::http::NormalizePath;
+///
+/// # fn index(req: &HttpRequest) -> HttpResponse {
+/// #     HttpResponse::Ok().into()
+/// # }
+/// fn main() {
+///     let app = App::new()
+///         .resource("/test/", |r| r.f(index))
+///         .default_resource(|r| r.h(NormalizePath::default()))
+///         .finish();
+/// }
+/// ```
+/// In this example `/test`, `/test///` will be redirected to `/test/` url.
+pub struct NormalizePath {
+    append: bool,
+    merge: bool,
+    re_merge: Regex,
+    redirect: StatusCode,
+    not_found: StatusCode,
+}
+
+impl Default for NormalizePath {
+    /// Create default `NormalizePath` instance, *append* is set to *true*,
+    /// *merge* is set to *true* and *redirect* is set to
+    /// `StatusCode::MOVED_PERMANENTLY`
+    fn default() -> NormalizePath {
+        NormalizePath {
+            append: true,
+            merge: true,
+            re_merge: Regex::new("//+").unwrap(),
+            redirect: StatusCode::MOVED_PERMANENTLY,
+            not_found: StatusCode::NOT_FOUND,
+        }
+    }
+}
+
+impl NormalizePath {
+    /// Create new `NormalizePath` instance
+    pub fn new(append: bool, merge: bool, redirect: StatusCode) -> NormalizePath {
+        NormalizePath {
+            append,
+            merge,
+            redirect,
+            re_merge: Regex::new("//+").unwrap(),
+            not_found: StatusCode::NOT_FOUND,
+        }
+    }
+}
+
+impl<S> Handler<S> for NormalizePath {
+    type Result = HttpResponse;
+
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result {
+        let query = req.query_string();
+        if self.merge {
+            // merge slashes
+            let p = self.re_merge.replace_all(req.path(), "/");
+            if p.len() != req.path().len() {
+                if req.resource().has_prefixed_resource(p.as_ref()) {
+                    let p = if !query.is_empty() {
+                        p + "?" + query
+                    } else {
+                        p
+                    };
+                    return HttpResponse::build(self.redirect)
+                        .header(header::LOCATION, p.as_ref())
+                        .finish();
+                }
+                // merge slashes and append trailing slash
+                if self.append && !p.ends_with('/') {
+                    let p = p.as_ref().to_owned() + "/";
+                    if req.resource().has_prefixed_resource(&p) {
+                        let p = if !query.is_empty() {
+                            p + "?" + query
+                        } else {
+                            p
+                        };
+                        return HttpResponse::build(self.redirect)
+                            .header(header::LOCATION, p.as_str())
+                            .finish();
+                    }
+                }
+
+                // try to remove trailing slash
+                if p.ends_with('/') {
+                    let p = p.as_ref().trim_right_matches('/');
+                    if req.resource().has_prefixed_resource(p) {
+                        let mut req = HttpResponse::build(self.redirect);
+                        return if !query.is_empty() {
+                            req.header(
+                                header::LOCATION,
+                                (p.to_owned() + "?" + query).as_str(),
+                            )
+                        } else {
+                            req.header(header::LOCATION, p)
+                        }.finish();
+                    }
+                }
+            } else if p.ends_with('/') {
+                // try to remove trailing slash
+                let p = p.as_ref().trim_right_matches('/');
+                if req.resource().has_prefixed_resource(p) {
+                    let mut req = HttpResponse::build(self.redirect);
+                    return if !query.is_empty() {
+                        req.header(
+                            header::LOCATION,
+                            (p.to_owned() + "?" + query).as_str(),
+                        )
+                    } else {
+                        req.header(header::LOCATION, p)
+                    }.finish();
+                }
+            }
+        }
+        // append trailing slash
+        if self.append && !req.path().ends_with('/') {
+            let p = req.path().to_owned() + "/";
+            if req.resource().has_prefixed_resource(&p) {
+                let p = if !query.is_empty() {
+                    p + "?" + query
+                } else {
+                    p
+                };
+                return HttpResponse::build(self.redirect)
+                    .header(header::LOCATION, p.as_str())
+                    .finish();
+            }
+        }
+        HttpResponse::new(self.not_found)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use application::App;
+    use http::{header, Method};
+    use test::TestRequest;
+
+    fn index(_req: &HttpRequest) -> HttpResponse {
+        HttpResponse::new(StatusCode::OK)
+    }
+
+    #[test]
+    fn test_normalize_path_trailing_slashes() {
+        let app = App::new()
+            .resource("/resource1", |r| r.method(Method::GET).f(index))
+            .resource("/resource2/", |r| r.method(Method::GET).f(index))
+            .default_resource(|r| r.h(NormalizePath::default()))
+            .finish();
+
+        // trailing slashes
+        let params = vec![
+            ("/resource1", "", StatusCode::OK),
+            ("/resource1/", "/resource1", StatusCode::MOVED_PERMANENTLY),
+            ("/resource2", "/resource2/", StatusCode::MOVED_PERMANENTLY),
+            ("/resource2/", "", StatusCode::OK),
+            ("/resource1?p1=1&p2=2", "", StatusCode::OK),
+            (
+                "/resource1/?p1=1&p2=2",
+                "/resource1?p1=1&p2=2",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/resource2?p1=1&p2=2",
+                "/resource2/?p1=1&p2=2",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/resource2/?p1=1&p2=2", "", StatusCode::OK),
+        ];
+        for (path, target, code) in params {
+            let req = TestRequest::with_uri(path).request();
+            let resp = app.run(req);
+            let r = &resp.as_msg();
+            assert_eq!(r.status(), code);
+            if !target.is_empty() {
+                assert_eq!(
+                    target,
+                    r.headers().get(header::LOCATION).unwrap().to_str().unwrap()
+                );
+            }
+        }
+    }
+
+    #[test]
+    fn test_prefixed_normalize_path_trailing_slashes() {
+        let app = App::new()
+            .prefix("/test")
+            .resource("/resource1", |r| r.method(Method::GET).f(index))
+            .resource("/resource2/", |r| r.method(Method::GET).f(index))
+            .default_resource(|r| r.h(NormalizePath::default()))
+            .finish();
+
+        // trailing slashes
+        let params = vec![
+            ("/test/resource1", "", StatusCode::OK),
+            (
+                "/test/resource1/",
+                "/test/resource1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/test/resource2",
+                "/test/resource2/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/test/resource2/", "", StatusCode::OK),
+            ("/test/resource1?p1=1&p2=2", "", StatusCode::OK),
+            (
+                "/test/resource1/?p1=1&p2=2",
+                "/test/resource1?p1=1&p2=2",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/test/resource2?p1=1&p2=2",
+                "/test/resource2/?p1=1&p2=2",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/test/resource2/?p1=1&p2=2", "", StatusCode::OK),
+        ];
+        for (path, target, code) in params {
+            let req = TestRequest::with_uri(path).request();
+            let resp = app.run(req);
+            let r = &resp.as_msg();
+            assert_eq!(r.status(), code);
+            if !target.is_empty() {
+                assert_eq!(
+                    target,
+                    r.headers().get(header::LOCATION).unwrap().to_str().unwrap()
+                );
+            }
+        }
+    }
+
+    #[test]
+    fn test_normalize_path_trailing_slashes_disabled() {
+        let app = App::new()
+            .resource("/resource1", |r| r.method(Method::GET).f(index))
+            .resource("/resource2/", |r| r.method(Method::GET).f(index))
+            .default_resource(|r| {
+                r.h(NormalizePath::new(
+                    false,
+                    true,
+                    StatusCode::MOVED_PERMANENTLY,
+                ))
+            })
+            .finish();
+
+        // trailing slashes
+        let params = vec![
+            ("/resource1", StatusCode::OK),
+            ("/resource1/", StatusCode::MOVED_PERMANENTLY),
+            ("/resource2", StatusCode::NOT_FOUND),
+            ("/resource2/", StatusCode::OK),
+            ("/resource1?p1=1&p2=2", StatusCode::OK),
+            ("/resource1/?p1=1&p2=2", StatusCode::MOVED_PERMANENTLY),
+            ("/resource2?p1=1&p2=2", StatusCode::NOT_FOUND),
+            ("/resource2/?p1=1&p2=2", StatusCode::OK),
+        ];
+        for (path, code) in params {
+            let req = TestRequest::with_uri(path).request();
+            let resp = app.run(req);
+            let r = &resp.as_msg();
+            assert_eq!(r.status(), code);
+        }
+    }
+
+    #[test]
+    fn test_normalize_path_merge_slashes() {
+        let app = App::new()
+            .resource("/resource1", |r| r.method(Method::GET).f(index))
+            .resource("/resource1/a/b", |r| r.method(Method::GET).f(index))
+            .default_resource(|r| r.h(NormalizePath::default()))
+            .finish();
+
+        // trailing slashes
+        let params = vec![
+            ("/resource1/a/b", "", StatusCode::OK),
+            ("/resource1/", "/resource1", StatusCode::MOVED_PERMANENTLY),
+            ("/resource1//", "/resource1", StatusCode::MOVED_PERMANENTLY),
+            (
+                "//resource1//a//b",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource1//a//b/",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource1//a//b//",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a//b/",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/resource1/a/b?p=1", "", StatusCode::OK),
+            (
+                "//resource1//a//b?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource1//a//b/?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a//b/?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a//b//?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+        ];
+        for (path, target, code) in params {
+            let req = TestRequest::with_uri(path).request();
+            let resp = app.run(req);
+            let r = &resp.as_msg();
+            assert_eq!(r.status(), code);
+            if !target.is_empty() {
+                assert_eq!(
+                    target,
+                    r.headers().get(header::LOCATION).unwrap().to_str().unwrap()
+                );
+            }
+        }
+    }
+
+    #[test]
+    fn test_normalize_path_merge_and_append_slashes() {
+        let app = App::new()
+            .resource("/resource1", |r| r.method(Method::GET).f(index))
+            .resource("/resource2/", |r| r.method(Method::GET).f(index))
+            .resource("/resource1/a/b", |r| r.method(Method::GET).f(index))
+            .resource("/resource2/a/b/", |r| r.method(Method::GET).f(index))
+            .default_resource(|r| r.h(NormalizePath::default()))
+            .finish();
+
+        // trailing slashes
+        let params = vec![
+            ("/resource1/a/b", "", StatusCode::OK),
+            (
+                "/resource1/a/b/",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b/",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b//",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b/",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b/",
+                "/resource1/a/b",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/resource2/a/b",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/resource2/a/b/", "", StatusCode::OK),
+            (
+                "//resource2//a//b",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b/",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource2//a//b",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource2//a//b/",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource2/a///b",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource2/a///b/",
+                "/resource2/a/b/",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            ("/resource1/a/b?p=1", "", StatusCode::OK),
+            (
+                "/resource1/a/b/?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b/?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource1//a//b/?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b/?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource1/a///b//?p=1",
+                "/resource1/a/b?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/resource2/a/b?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "//resource2//a//b/?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource2//a//b?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "///resource2//a//b/?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource2/a///b?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+            (
+                "/////resource2/a///b/?p=1",
+                "/resource2/a/b/?p=1",
+                StatusCode::MOVED_PERMANENTLY,
+            ),
+        ];
+        for (path, target, code) in params {
+            let req = TestRequest::with_uri(path).request();
+            let resp = app.run(req);
+            let r = &resp.as_msg();
+            assert_eq!(r.status(), code);
+            if !target.is_empty() {
+                assert_eq!(
+                    target,
+                    r.headers().get(header::LOCATION).unwrap().to_str().unwrap()
+                );
+            }
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/httpcodes.rs.html b/static/api/actix-web/0.7.2/src/actix_web/httpcodes.rs.html new file mode 100644 index 0000000..4b8c0bf --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/httpcodes.rs.html @@ -0,0 +1,171 @@ +httpcodes.rs.html -- source
 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
+
+//! Basic http responses
+#![allow(non_upper_case_globals)]
+use http::StatusCode;
+use httpresponse::{HttpResponse, HttpResponseBuilder};
+
+macro_rules! STATIC_RESP {
+    ($name:ident, $status:expr) => {
+        #[allow(non_snake_case, missing_docs)]
+        pub fn $name() -> HttpResponseBuilder {
+            HttpResponse::build($status)
+        }
+    };
+}
+
+impl HttpResponse {
+    STATIC_RESP!(Ok, StatusCode::OK);
+    STATIC_RESP!(Created, StatusCode::CREATED);
+    STATIC_RESP!(Accepted, StatusCode::ACCEPTED);
+    STATIC_RESP!(
+        NonAuthoritativeInformation,
+        StatusCode::NON_AUTHORITATIVE_INFORMATION
+    );
+
+    STATIC_RESP!(NoContent, StatusCode::NO_CONTENT);
+    STATIC_RESP!(ResetContent, StatusCode::RESET_CONTENT);
+    STATIC_RESP!(PartialContent, StatusCode::PARTIAL_CONTENT);
+    STATIC_RESP!(MultiStatus, StatusCode::MULTI_STATUS);
+    STATIC_RESP!(AlreadyReported, StatusCode::ALREADY_REPORTED);
+
+    STATIC_RESP!(MultipleChoices, StatusCode::MULTIPLE_CHOICES);
+    STATIC_RESP!(MovedPermanenty, StatusCode::MOVED_PERMANENTLY);
+    STATIC_RESP!(MovedPermanently, StatusCode::MOVED_PERMANENTLY);
+    STATIC_RESP!(Found, StatusCode::FOUND);
+    STATIC_RESP!(SeeOther, StatusCode::SEE_OTHER);
+    STATIC_RESP!(NotModified, StatusCode::NOT_MODIFIED);
+    STATIC_RESP!(UseProxy, StatusCode::USE_PROXY);
+    STATIC_RESP!(TemporaryRedirect, StatusCode::TEMPORARY_REDIRECT);
+    STATIC_RESP!(PermanentRedirect, StatusCode::PERMANENT_REDIRECT);
+
+    STATIC_RESP!(BadRequest, StatusCode::BAD_REQUEST);
+    STATIC_RESP!(NotFound, StatusCode::NOT_FOUND);
+    STATIC_RESP!(Unauthorized, StatusCode::UNAUTHORIZED);
+    STATIC_RESP!(PaymentRequired, StatusCode::PAYMENT_REQUIRED);
+    STATIC_RESP!(Forbidden, StatusCode::FORBIDDEN);
+    STATIC_RESP!(MethodNotAllowed, StatusCode::METHOD_NOT_ALLOWED);
+    STATIC_RESP!(NotAcceptable, StatusCode::NOT_ACCEPTABLE);
+    STATIC_RESP!(
+        ProxyAuthenticationRequired,
+        StatusCode::PROXY_AUTHENTICATION_REQUIRED
+    );
+    STATIC_RESP!(RequestTimeout, StatusCode::REQUEST_TIMEOUT);
+    STATIC_RESP!(Conflict, StatusCode::CONFLICT);
+    STATIC_RESP!(Gone, StatusCode::GONE);
+    STATIC_RESP!(LengthRequired, StatusCode::LENGTH_REQUIRED);
+    STATIC_RESP!(PreconditionFailed, StatusCode::PRECONDITION_FAILED);
+    STATIC_RESP!(PayloadTooLarge, StatusCode::PAYLOAD_TOO_LARGE);
+    STATIC_RESP!(UriTooLong, StatusCode::URI_TOO_LONG);
+    STATIC_RESP!(UnsupportedMediaType, StatusCode::UNSUPPORTED_MEDIA_TYPE);
+    STATIC_RESP!(RangeNotSatisfiable, StatusCode::RANGE_NOT_SATISFIABLE);
+    STATIC_RESP!(ExpectationFailed, StatusCode::EXPECTATION_FAILED);
+
+    STATIC_RESP!(InternalServerError, StatusCode::INTERNAL_SERVER_ERROR);
+    STATIC_RESP!(NotImplemented, StatusCode::NOT_IMPLEMENTED);
+    STATIC_RESP!(BadGateway, StatusCode::BAD_GATEWAY);
+    STATIC_RESP!(ServiceUnavailable, StatusCode::SERVICE_UNAVAILABLE);
+    STATIC_RESP!(GatewayTimeout, StatusCode::GATEWAY_TIMEOUT);
+    STATIC_RESP!(VersionNotSupported, StatusCode::HTTP_VERSION_NOT_SUPPORTED);
+    STATIC_RESP!(VariantAlsoNegotiates, StatusCode::VARIANT_ALSO_NEGOTIATES);
+    STATIC_RESP!(InsufficientStorage, StatusCode::INSUFFICIENT_STORAGE);
+    STATIC_RESP!(LoopDetected, StatusCode::LOOP_DETECTED);
+}
+
+#[cfg(test)]
+mod tests {
+    use body::Body;
+    use http::StatusCode;
+    use httpresponse::HttpResponse;
+
+    #[test]
+    fn test_build() {
+        let resp = HttpResponse::Ok().body(Body::Empty);
+        assert_eq!(resp.status(), StatusCode::OK);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/httpmessage.rs.html b/static/api/actix-web/0.7.2/src/actix_web/httpmessage.rs.html new file mode 100644 index 0000000..e90ff50 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/httpmessage.rs.html @@ -0,0 +1,1719 @@ +httpmessage.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+
+use bytes::{Bytes, BytesMut};
+use encoding::all::UTF_8;
+use encoding::label::encoding_from_whatwg_label;
+use encoding::types::{DecoderTrap, Encoding};
+use encoding::EncodingRef;
+use futures::{Async, Future, Poll, Stream};
+use http::{header, HeaderMap};
+use mime::Mime;
+use serde::de::DeserializeOwned;
+use serde_urlencoded;
+use std::str;
+
+use error::{
+    ContentTypeError, ParseError, PayloadError, ReadlinesError, UrlencodedError,
+};
+use header::Header;
+use json::JsonBody;
+use multipart::Multipart;
+
+/// Trait that implements general purpose operations on http messages
+pub trait HttpMessage: Sized {
+    /// Type of message payload stream
+    type Stream: Stream<Item = Bytes, Error = PayloadError> + Sized;
+
+    /// Read the message headers.
+    fn headers(&self) -> &HeaderMap;
+
+    /// Message payload stream
+    fn payload(&self) -> Self::Stream;
+
+    #[doc(hidden)]
+    /// Get a header
+    fn get_header<H: Header>(&self) -> Option<H>
+    where
+        Self: Sized,
+    {
+        if self.headers().contains_key(H::name()) {
+            H::parse(self).ok()
+        } else {
+            None
+        }
+    }
+
+    /// Read the request content type. If request does not contain
+    /// *Content-Type* header, empty str get returned.
+    fn content_type(&self) -> &str {
+        if let Some(content_type) = self.headers().get(header::CONTENT_TYPE) {
+            if let Ok(content_type) = content_type.to_str() {
+                return content_type.split(';').next().unwrap().trim();
+            }
+        }
+        ""
+    }
+
+    /// Get content type encoding
+    ///
+    /// UTF-8 is used by default, If request charset is not set.
+    fn encoding(&self) -> Result<EncodingRef, ContentTypeError> {
+        if let Some(mime_type) = self.mime_type()? {
+            if let Some(charset) = mime_type.get_param("charset") {
+                if let Some(enc) = encoding_from_whatwg_label(charset.as_str()) {
+                    Ok(enc)
+                } else {
+                    Err(ContentTypeError::UnknownEncoding)
+                }
+            } else {
+                Ok(UTF_8)
+            }
+        } else {
+            Ok(UTF_8)
+        }
+    }
+
+    /// Convert the request content type to a known mime type.
+    fn mime_type(&self) -> Result<Option<Mime>, ContentTypeError> {
+        if let Some(content_type) = self.headers().get(header::CONTENT_TYPE) {
+            if let Ok(content_type) = content_type.to_str() {
+                return match content_type.parse() {
+                    Ok(mt) => Ok(Some(mt)),
+                    Err(_) => Err(ContentTypeError::ParseError),
+                };
+            } else {
+                return Err(ContentTypeError::ParseError);
+            }
+        }
+        Ok(None)
+    }
+
+    /// Check if request has chunked transfer encoding
+    fn chunked(&self) -> Result<bool, ParseError> {
+        if let Some(encodings) = self.headers().get(header::TRANSFER_ENCODING) {
+            if let Ok(s) = encodings.to_str() {
+                Ok(s.to_lowercase().contains("chunked"))
+            } else {
+                Err(ParseError::Header)
+            }
+        } else {
+            Ok(false)
+        }
+    }
+
+    /// Load http message body.
+    ///
+    /// By default only 256Kb payload reads to a memory, then
+    /// `PayloadError::Overflow` get returned. Use `MessageBody::limit()`
+    /// method to change upper limit.
+    ///
+    /// ## Server example
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// # #[macro_use] extern crate serde_derive;
+    /// use actix_web::{
+    ///     AsyncResponder, FutureResponse, HttpMessage, HttpRequest, HttpResponse,
+    /// };
+    /// use bytes::Bytes;
+    /// use futures::future::Future;
+    ///
+    /// fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
+    ///     req.body()                     // <- get Body future
+    ///        .limit(1024)                // <- change max size of the body to a 1kb
+    ///        .from_err()
+    ///        .and_then(|bytes: Bytes| {  // <- complete body
+    ///            println!("==== BODY ==== {:?}", bytes);
+    ///            Ok(HttpResponse::Ok().into())
+    ///        }).responder()
+    /// }
+    /// # fn main() {}
+    /// ```
+    fn body(&self) -> MessageBody<Self> {
+        MessageBody::new(self)
+    }
+
+    /// Parse `application/x-www-form-urlencoded` encoded request's body.
+    /// Return `UrlEncoded` future. Form can be deserialized to any type that
+    /// implements `Deserialize` trait from *serde*.
+    ///
+    /// Returns error:
+    ///
+    /// * content type is not `application/x-www-form-urlencoded`
+    /// * content-length is greater than 256k
+    ///
+    /// ## Server example
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// # use futures::Future;
+    /// # use std::collections::HashMap;
+    /// use actix_web::{FutureResponse, HttpMessage, HttpRequest, HttpResponse};
+    ///
+    /// fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
+    ///     Box::new(
+    ///         req.urlencoded::<HashMap<String, String>>()  // <- get UrlEncoded future
+    ///            .from_err()
+    ///            .and_then(|params| {  // <- url encoded parameters
+    ///                println!("==== BODY ==== {:?}", params);
+    ///                Ok(HttpResponse::Ok().into())
+    ///           }),
+    ///     )
+    /// }
+    /// # fn main() {}
+    /// ```
+    fn urlencoded<T: DeserializeOwned>(&self) -> UrlEncoded<Self, T> {
+        UrlEncoded::new(self)
+    }
+
+    /// Parse `application/json` encoded body.
+    /// Return `JsonBody<T>` future. It resolves to a `T` value.
+    ///
+    /// Returns error:
+    ///
+    /// * content type is not `application/json`
+    /// * content length is greater than 256k
+    ///
+    /// ## Server example
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// # #[macro_use] extern crate serde_derive;
+    /// use actix_web::*;
+    /// use futures::future::{ok, Future};
+    ///
+    /// #[derive(Deserialize, Debug)]
+    /// struct MyObj {
+    ///     name: String,
+    /// }
+    ///
+    /// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    ///     req.json()                   // <- get JsonBody future
+    ///        .from_err()
+    ///        .and_then(|val: MyObj| {  // <- deserialized value
+    ///            println!("==== BODY ==== {:?}", val);
+    ///            Ok(HttpResponse::Ok().into())
+    ///        }).responder()
+    /// }
+    /// # fn main() {}
+    /// ```
+    fn json<T: DeserializeOwned>(&self) -> JsonBody<Self, T> {
+        JsonBody::new(self)
+    }
+
+    /// Return stream to http payload processes as multipart.
+    ///
+    /// Content-type: multipart/form-data;
+    ///
+    /// ## Server example
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate env_logger;
+    /// # extern crate futures;
+    /// # use std::str;
+    /// # use actix_web::*;
+    /// # use actix_web::actix::fut::FinishStream;
+    /// # use futures::{Future, Stream};
+    /// # use futures::future::{ok, result, Either};
+    /// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+    ///     req.multipart().from_err()       // <- get multipart stream for current request
+    ///        .and_then(|item| match item { // <- iterate over multipart items
+    ///            multipart::MultipartItem::Field(field) => {
+    ///                // Field in turn is stream of *Bytes* object
+    ///                Either::A(field.from_err()
+    ///                          .map(|c| println!("-- CHUNK: \n{:?}", str::from_utf8(&c)))
+    ///                          .finish())
+    ///             },
+    ///             multipart::MultipartItem::Nested(mp) => {
+    ///                 // Or item could be nested Multipart stream
+    ///                 Either::B(ok(()))
+    ///             }
+    ///         })
+    ///         .finish()  // <- Stream::finish() combinator from actix
+    ///         .map(|_| HttpResponse::Ok().into())
+    ///         .responder()
+    /// }
+    /// # fn main() {}
+    /// ```
+    fn multipart(&self) -> Multipart<Self::Stream> {
+        let boundary = Multipart::boundary(self.headers());
+        Multipart::new(boundary, self.payload())
+    }
+
+    /// Return stream of lines.
+    fn readlines(&self) -> Readlines<Self> {
+        Readlines::new(self)
+    }
+}
+
+/// Stream to read request line by line.
+pub struct Readlines<T: HttpMessage> {
+    stream: T::Stream,
+    buff: BytesMut,
+    limit: usize,
+    checked_buff: bool,
+    encoding: EncodingRef,
+    err: Option<ReadlinesError>,
+}
+
+impl<T: HttpMessage> Readlines<T> {
+    /// Create a new stream to read request line by line.
+    fn new(req: &T) -> Self {
+        let encoding = match req.encoding() {
+            Ok(enc) => enc,
+            Err(err) => return Self::err(req, err.into()),
+        };
+
+        Readlines {
+            stream: req.payload(),
+            buff: BytesMut::with_capacity(262_144),
+            limit: 262_144,
+            checked_buff: true,
+            err: None,
+            encoding,
+        }
+    }
+
+    /// Change max line size. By default max size is 256Kb
+    pub fn limit(mut self, limit: usize) -> Self {
+        self.limit = limit;
+        self
+    }
+
+    fn err(req: &T, err: ReadlinesError) -> Self {
+        Readlines {
+            stream: req.payload(),
+            buff: BytesMut::new(),
+            limit: 262_144,
+            checked_buff: true,
+            encoding: UTF_8,
+            err: Some(err),
+        }
+    }
+}
+
+impl<T: HttpMessage + 'static> Stream for Readlines<T> {
+    type Item = String;
+    type Error = ReadlinesError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        if let Some(err) = self.err.take() {
+            return Err(err);
+        }
+
+        // check if there is a newline in the buffer
+        if !self.checked_buff {
+            let mut found: Option<usize> = None;
+            for (ind, b) in self.buff.iter().enumerate() {
+                if *b == b'\n' {
+                    found = Some(ind);
+                    break;
+                }
+            }
+            if let Some(ind) = found {
+                // check if line is longer than limit
+                if ind + 1 > self.limit {
+                    return Err(ReadlinesError::LimitOverflow);
+                }
+                let enc: *const Encoding = self.encoding as *const Encoding;
+                let line = if enc == UTF_8 {
+                    str::from_utf8(&self.buff.split_to(ind + 1))
+                        .map_err(|_| ReadlinesError::EncodingError)?
+                        .to_owned()
+                } else {
+                    self.encoding
+                        .decode(&self.buff.split_to(ind + 1), DecoderTrap::Strict)
+                        .map_err(|_| ReadlinesError::EncodingError)?
+                };
+                return Ok(Async::Ready(Some(line)));
+            }
+            self.checked_buff = true;
+        }
+        // poll req for more bytes
+        match self.stream.poll() {
+            Ok(Async::Ready(Some(mut bytes))) => {
+                // check if there is a newline in bytes
+                let mut found: Option<usize> = None;
+                for (ind, b) in bytes.iter().enumerate() {
+                    if *b == b'\n' {
+                        found = Some(ind);
+                        break;
+                    }
+                }
+                if let Some(ind) = found {
+                    // check if line is longer than limit
+                    if ind + 1 > self.limit {
+                        return Err(ReadlinesError::LimitOverflow);
+                    }
+                    let enc: *const Encoding = self.encoding as *const Encoding;
+                    let line = if enc == UTF_8 {
+                        str::from_utf8(&bytes.split_to(ind + 1))
+                            .map_err(|_| ReadlinesError::EncodingError)?
+                            .to_owned()
+                    } else {
+                        self.encoding
+                            .decode(&bytes.split_to(ind + 1), DecoderTrap::Strict)
+                            .map_err(|_| ReadlinesError::EncodingError)?
+                    };
+                    // extend buffer with rest of the bytes;
+                    self.buff.extend_from_slice(&bytes);
+                    self.checked_buff = false;
+                    return Ok(Async::Ready(Some(line)));
+                }
+                self.buff.extend_from_slice(&bytes);
+                Ok(Async::NotReady)
+            }
+            Ok(Async::NotReady) => Ok(Async::NotReady),
+            Ok(Async::Ready(None)) => {
+                if self.buff.is_empty() {
+                    return Ok(Async::Ready(None));
+                }
+                if self.buff.len() > self.limit {
+                    return Err(ReadlinesError::LimitOverflow);
+                }
+                let enc: *const Encoding = self.encoding as *const Encoding;
+                let line = if enc == UTF_8 {
+                    str::from_utf8(&self.buff)
+                        .map_err(|_| ReadlinesError::EncodingError)?
+                        .to_owned()
+                } else {
+                    self.encoding
+                        .decode(&self.buff, DecoderTrap::Strict)
+                        .map_err(|_| ReadlinesError::EncodingError)?
+                };
+                self.buff.clear();
+                Ok(Async::Ready(Some(line)))
+            }
+            Err(e) => Err(ReadlinesError::from(e)),
+        }
+    }
+}
+
+/// Future that resolves to a complete http message body.
+pub struct MessageBody<T: HttpMessage> {
+    limit: usize,
+    length: Option<usize>,
+    stream: Option<T::Stream>,
+    err: Option<PayloadError>,
+    fut: Option<Box<Future<Item = Bytes, Error = PayloadError>>>,
+}
+
+impl<T: HttpMessage> MessageBody<T> {
+    /// Create `MessageBody` for request.
+    pub fn new(req: &T) -> MessageBody<T> {
+        let mut len = None;
+        if let Some(l) = req.headers().get(header::CONTENT_LENGTH) {
+            if let Ok(s) = l.to_str() {
+                if let Ok(l) = s.parse::<usize>() {
+                    len = Some(l)
+                } else {
+                    return Self::err(PayloadError::UnknownLength);
+                }
+            } else {
+                return Self::err(PayloadError::UnknownLength);
+            }
+        }
+
+        MessageBody {
+            limit: 262_144,
+            length: len,
+            stream: Some(req.payload()),
+            fut: None,
+            err: None,
+        }
+    }
+
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(mut self, limit: usize) -> Self {
+        self.limit = limit;
+        self
+    }
+
+    fn err(e: PayloadError) -> Self {
+        MessageBody {
+            stream: None,
+            limit: 262_144,
+            fut: None,
+            err: Some(e),
+            length: None,
+        }
+    }
+}
+
+impl<T> Future for MessageBody<T>
+where
+    T: HttpMessage + 'static,
+{
+    type Item = Bytes;
+    type Error = PayloadError;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if let Some(ref mut fut) = self.fut {
+            return fut.poll();
+        }
+
+        if let Some(err) = self.err.take() {
+            return Err(err);
+        }
+
+        if let Some(len) = self.length.take() {
+            if len > self.limit {
+                return Err(PayloadError::Overflow);
+            }
+        }
+
+        // future
+        let limit = self.limit;
+        self.fut = Some(Box::new(
+            self.stream
+                .take()
+                .expect("Can not be used second time")
+                .from_err()
+                .fold(BytesMut::with_capacity(8192), move |mut body, chunk| {
+                    if (body.len() + chunk.len()) > limit {
+                        Err(PayloadError::Overflow)
+                    } else {
+                        body.extend_from_slice(&chunk);
+                        Ok(body)
+                    }
+                })
+                .map(|body| body.freeze()),
+        ));
+        self.poll()
+    }
+}
+
+/// Future that resolves to a parsed urlencoded values.
+pub struct UrlEncoded<T: HttpMessage, U> {
+    stream: Option<T::Stream>,
+    limit: usize,
+    length: Option<usize>,
+    encoding: EncodingRef,
+    err: Option<UrlencodedError>,
+    fut: Option<Box<Future<Item = U, Error = UrlencodedError>>>,
+}
+
+impl<T: HttpMessage, U> UrlEncoded<T, U> {
+    /// Create a new future to URL encode a request
+    pub fn new(req: &T) -> UrlEncoded<T, U> {
+        // check content type
+        if req.content_type().to_lowercase() != "application/x-www-form-urlencoded" {
+            return Self::err(UrlencodedError::ContentType);
+        }
+        let encoding = match req.encoding() {
+            Ok(enc) => enc,
+            Err(_) => return Self::err(UrlencodedError::ContentType),
+        };
+
+        let mut len = None;
+        if let Some(l) = req.headers().get(header::CONTENT_LENGTH) {
+            if let Ok(s) = l.to_str() {
+                if let Ok(l) = s.parse::<usize>() {
+                    len = Some(l)
+                } else {
+                    return Self::err(UrlencodedError::UnknownLength);
+                }
+            } else {
+                return Self::err(UrlencodedError::UnknownLength);
+            }
+        };
+
+        UrlEncoded {
+            encoding,
+            stream: Some(req.payload()),
+            limit: 262_144,
+            length: len,
+            fut: None,
+            err: None,
+        }
+    }
+
+    fn err(e: UrlencodedError) -> Self {
+        UrlEncoded {
+            stream: None,
+            limit: 262_144,
+            fut: None,
+            err: Some(e),
+            length: None,
+            encoding: UTF_8,
+        }
+    }
+
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(mut self, limit: usize) -> Self {
+        self.limit = limit;
+        self
+    }
+}
+
+impl<T, U> Future for UrlEncoded<T, U>
+where
+    T: HttpMessage + 'static,
+    U: DeserializeOwned + 'static,
+{
+    type Item = U;
+    type Error = UrlencodedError;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if let Some(ref mut fut) = self.fut {
+            return fut.poll();
+        }
+
+        if let Some(err) = self.err.take() {
+            return Err(err);
+        }
+
+        // payload size
+        let limit = self.limit;
+        if let Some(len) = self.length.take() {
+            if len > limit {
+                return Err(UrlencodedError::Overflow);
+            }
+        }
+
+        // future
+        let encoding = self.encoding;
+        let fut = self
+            .stream
+            .take()
+            .expect("UrlEncoded could not be used second time")
+            .from_err()
+            .fold(BytesMut::with_capacity(8192), move |mut body, chunk| {
+                if (body.len() + chunk.len()) > limit {
+                    Err(UrlencodedError::Overflow)
+                } else {
+                    body.extend_from_slice(&chunk);
+                    Ok(body)
+                }
+            })
+            .and_then(move |body| {
+                if (encoding as *const Encoding) == UTF_8 {
+                    serde_urlencoded::from_bytes::<U>(&body)
+                        .map_err(|_| UrlencodedError::Parse)
+                } else {
+                    let body = encoding
+                        .decode(&body, DecoderTrap::Strict)
+                        .map_err(|_| UrlencodedError::Parse)?;
+                    serde_urlencoded::from_str::<U>(&body)
+                        .map_err(|_| UrlencodedError::Parse)
+                }
+            });
+        self.fut = Some(Box::new(fut));
+        self.poll()
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use encoding::all::ISO_8859_2;
+    use encoding::Encoding;
+    use futures::Async;
+    use mime;
+    use test::TestRequest;
+
+    #[test]
+    fn test_content_type() {
+        let req = TestRequest::with_header("content-type", "text/plain").finish();
+        assert_eq!(req.content_type(), "text/plain");
+        let req =
+            TestRequest::with_header("content-type", "application/json; charset=utf=8")
+                .finish();
+        assert_eq!(req.content_type(), "application/json");
+        let req = TestRequest::default().finish();
+        assert_eq!(req.content_type(), "");
+    }
+
+    #[test]
+    fn test_mime_type() {
+        let req = TestRequest::with_header("content-type", "application/json").finish();
+        assert_eq!(req.mime_type().unwrap(), Some(mime::APPLICATION_JSON));
+        let req = TestRequest::default().finish();
+        assert_eq!(req.mime_type().unwrap(), None);
+        let req =
+            TestRequest::with_header("content-type", "application/json; charset=utf-8")
+                .finish();
+        let mt = req.mime_type().unwrap().unwrap();
+        assert_eq!(mt.get_param(mime::CHARSET), Some(mime::UTF_8));
+        assert_eq!(mt.type_(), mime::APPLICATION);
+        assert_eq!(mt.subtype(), mime::JSON);
+    }
+
+    #[test]
+    fn test_mime_type_error() {
+        let req = TestRequest::with_header(
+            "content-type",
+            "applicationadfadsfasdflknadsfklnadsfjson",
+        ).finish();
+        assert_eq!(Err(ContentTypeError::ParseError), req.mime_type());
+    }
+
+    #[test]
+    fn test_encoding() {
+        let req = TestRequest::default().finish();
+        assert_eq!(UTF_8.name(), req.encoding().unwrap().name());
+
+        let req = TestRequest::with_header("content-type", "application/json").finish();
+        assert_eq!(UTF_8.name(), req.encoding().unwrap().name());
+
+        let req = TestRequest::with_header(
+            "content-type",
+            "application/json; charset=ISO-8859-2",
+        ).finish();
+        assert_eq!(ISO_8859_2.name(), req.encoding().unwrap().name());
+    }
+
+    #[test]
+    fn test_encoding_error() {
+        let req = TestRequest::with_header("content-type", "applicatjson").finish();
+        assert_eq!(Some(ContentTypeError::ParseError), req.encoding().err());
+
+        let req = TestRequest::with_header(
+            "content-type",
+            "application/json; charset=kkkttktk",
+        ).finish();
+        assert_eq!(
+            Some(ContentTypeError::UnknownEncoding),
+            req.encoding().err()
+        );
+    }
+
+    #[test]
+    fn test_chunked() {
+        let req = TestRequest::default().finish();
+        assert!(!req.chunked().unwrap());
+
+        let req =
+            TestRequest::with_header(header::TRANSFER_ENCODING, "chunked").finish();
+        assert!(req.chunked().unwrap());
+
+        let req = TestRequest::default()
+            .header(
+                header::TRANSFER_ENCODING,
+                Bytes::from_static(b"some va\xadscc\xacas0xsdasdlue"),
+            )
+            .finish();
+        assert!(req.chunked().is_err());
+    }
+
+    impl PartialEq for UrlencodedError {
+        fn eq(&self, other: &UrlencodedError) -> bool {
+            match *self {
+                UrlencodedError::Chunked => match *other {
+                    UrlencodedError::Chunked => true,
+                    _ => false,
+                },
+                UrlencodedError::Overflow => match *other {
+                    UrlencodedError::Overflow => true,
+                    _ => false,
+                },
+                UrlencodedError::UnknownLength => match *other {
+                    UrlencodedError::UnknownLength => true,
+                    _ => false,
+                },
+                UrlencodedError::ContentType => match *other {
+                    UrlencodedError::ContentType => true,
+                    _ => false,
+                },
+                _ => false,
+            }
+        }
+    }
+
+    #[derive(Deserialize, Debug, PartialEq)]
+    struct Info {
+        hello: String,
+    }
+
+    #[test]
+    fn test_urlencoded_error() {
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "xxxx")
+            .finish();
+        assert_eq!(
+            req.urlencoded::<Info>().poll().err().unwrap(),
+            UrlencodedError::UnknownLength
+        );
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "1000000")
+            .finish();
+        assert_eq!(
+            req.urlencoded::<Info>().poll().err().unwrap(),
+            UrlencodedError::Overflow
+        );
+
+        let req = TestRequest::with_header(header::CONTENT_TYPE, "text/plain")
+            .header(header::CONTENT_LENGTH, "10")
+            .finish();
+        assert_eq!(
+            req.urlencoded::<Info>().poll().err().unwrap(),
+            UrlencodedError::ContentType
+        );
+    }
+
+    #[test]
+    fn test_urlencoded() {
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded",
+        ).header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        let result = req.urlencoded::<Info>().poll().ok().unwrap();
+        assert_eq!(
+            result,
+            Async::Ready(Info {
+                hello: "world".to_owned()
+            })
+        );
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            "application/x-www-form-urlencoded; charset=utf-8",
+        ).header(header::CONTENT_LENGTH, "11")
+            .set_payload(Bytes::from_static(b"hello=world"))
+            .finish();
+
+        let result = req.urlencoded().poll().ok().unwrap();
+        assert_eq!(
+            result,
+            Async::Ready(Info {
+                hello: "world".to_owned()
+            })
+        );
+    }
+
+    #[test]
+    fn test_message_body() {
+        let req = TestRequest::with_header(header::CONTENT_LENGTH, "xxxx").finish();
+        match req.body().poll().err().unwrap() {
+            PayloadError::UnknownLength => (),
+            _ => unreachable!("error"),
+        }
+
+        let req = TestRequest::with_header(header::CONTENT_LENGTH, "1000000").finish();
+        match req.body().poll().err().unwrap() {
+            PayloadError::Overflow => (),
+            _ => unreachable!("error"),
+        }
+
+        let req = TestRequest::default()
+            .set_payload(Bytes::from_static(b"test"))
+            .finish();
+        match req.body().poll().ok().unwrap() {
+            Async::Ready(bytes) => assert_eq!(bytes, Bytes::from_static(b"test")),
+            _ => unreachable!("error"),
+        }
+
+        let req = TestRequest::default()
+            .set_payload(Bytes::from_static(b"11111111111111"))
+            .finish();
+        match req.body().limit(5).poll().err().unwrap() {
+            PayloadError::Overflow => (),
+            _ => unreachable!("error"),
+        }
+    }
+
+    #[test]
+    fn test_readlines() {
+        let req = TestRequest::default()
+            .set_payload(Bytes::from_static(
+                b"Lorem Ipsum is simply dummy text of the printing and typesetting\n\
+                  industry. Lorem Ipsum has been the industry's standard dummy\n\
+                  Contrary to popular belief, Lorem Ipsum is not simply random text.",
+            ))
+            .finish();
+        let mut r = Readlines::new(&req);
+        match r.poll().ok().unwrap() {
+            Async::Ready(Some(s)) => assert_eq!(
+                s,
+                "Lorem Ipsum is simply dummy text of the printing and typesetting\n"
+            ),
+            _ => unreachable!("error"),
+        }
+        match r.poll().ok().unwrap() {
+            Async::Ready(Some(s)) => assert_eq!(
+                s,
+                "industry. Lorem Ipsum has been the industry's standard dummy\n"
+            ),
+            _ => unreachable!("error"),
+        }
+        match r.poll().ok().unwrap() {
+            Async::Ready(Some(s)) => assert_eq!(
+                s,
+                "Contrary to popular belief, Lorem Ipsum is not simply random text."
+            ),
+            _ => unreachable!("error"),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/httprequest.rs.html b/static/api/actix-web/0.7.2/src/actix_web/httprequest.rs.html new file mode 100644 index 0000000..e3bd2c5 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/httprequest.rs.html @@ -0,0 +1,1069 @@ +httprequest.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+
+//! HTTP Request message related code.
+use std::cell::{Ref, RefMut};
+use std::collections::HashMap;
+use std::net::SocketAddr;
+use std::ops::Deref;
+use std::rc::Rc;
+use std::{fmt, str};
+
+use cookie::Cookie;
+use futures_cpupool::CpuPool;
+use http::{header, HeaderMap, Method, StatusCode, Uri, Version};
+use url::{form_urlencoded, Url};
+
+use body::Body;
+use error::{CookieParseError, UrlGenerationError};
+use extensions::Extensions;
+use handler::FromRequest;
+use httpmessage::HttpMessage;
+use httpresponse::{HttpResponse, HttpResponseBuilder};
+use info::ConnectionInfo;
+use param::Params;
+use payload::Payload;
+use router::ResourceInfo;
+use server::Request;
+
+struct Query(HashMap<String, String>);
+struct Cookies(Vec<Cookie<'static>>);
+
+/// An HTTP Request
+pub struct HttpRequest<S = ()> {
+    req: Option<Request>,
+    state: Rc<S>,
+    resource: ResourceInfo,
+}
+
+impl<S> HttpMessage for HttpRequest<S> {
+    type Stream = Payload;
+
+    #[inline]
+    fn headers(&self) -> &HeaderMap {
+        self.request().headers()
+    }
+
+    #[inline]
+    fn payload(&self) -> Payload {
+        if let Some(payload) = self.request().inner.payload.borrow_mut().take() {
+            payload
+        } else {
+            Payload::empty()
+        }
+    }
+}
+
+impl<S> Deref for HttpRequest<S> {
+    type Target = Request;
+
+    fn deref(&self) -> &Request {
+        self.request()
+    }
+}
+
+impl<S> HttpRequest<S> {
+    #[inline]
+    pub(crate) fn new(
+        req: Request, state: Rc<S>, resource: ResourceInfo,
+    ) -> HttpRequest<S> {
+        HttpRequest {
+            state,
+            resource,
+            req: Some(req),
+        }
+    }
+
+    #[inline]
+    /// Construct new http request with state.
+    pub(crate) fn with_state<NS>(&self, state: Rc<NS>) -> HttpRequest<NS> {
+        HttpRequest {
+            state,
+            req: self.req.as_ref().map(|r| r.clone()),
+            resource: self.resource.clone(),
+        }
+    }
+
+    #[inline]
+    /// Construct new http request with new RouteInfo.
+    pub(crate) fn with_route_info(&self, mut resource: ResourceInfo) -> HttpRequest<S> {
+        resource.merge(&self.resource);
+
+        HttpRequest {
+            resource,
+            req: self.req.as_ref().map(|r| r.clone()),
+            state: self.state.clone(),
+        }
+    }
+
+    /// Shared application state
+    #[inline]
+    pub fn state(&self) -> &S {
+        &self.state
+    }
+
+    #[inline]
+    /// Server request
+    pub fn request(&self) -> &Request {
+        self.req.as_ref().unwrap()
+    }
+
+    /// Request extensions
+    #[inline]
+    pub fn extensions(&self) -> Ref<Extensions> {
+        self.request().extensions()
+    }
+
+    /// Mutable reference to a the request's extensions
+    #[inline]
+    pub fn extensions_mut(&self) -> RefMut<Extensions> {
+        self.request().extensions_mut()
+    }
+
+    /// Default `CpuPool`
+    #[inline]
+    #[doc(hidden)]
+    pub fn cpu_pool(&self) -> &CpuPool {
+        self.request().server_settings().cpu_pool()
+    }
+
+    #[inline]
+    /// Create http response
+    pub fn response(&self, status: StatusCode, body: Body) -> HttpResponse {
+        self.request().server_settings().get_response(status, body)
+    }
+
+    #[inline]
+    /// Create http response builder
+    pub fn build_response(&self, status: StatusCode) -> HttpResponseBuilder {
+        self.request()
+            .server_settings()
+            .get_response_builder(status)
+    }
+
+    /// Read the Request Uri.
+    #[inline]
+    pub fn uri(&self) -> &Uri {
+        self.request().inner.url.uri()
+    }
+
+    /// Read the Request method.
+    #[inline]
+    pub fn method(&self) -> &Method {
+        &self.request().inner.method
+    }
+
+    /// Read the Request Version.
+    #[inline]
+    pub fn version(&self) -> Version {
+        self.request().inner.version
+    }
+
+    /// The target path of this Request.
+    #[inline]
+    pub fn path(&self) -> &str {
+        self.request().inner.url.path()
+    }
+
+    /// Get *ConnectionInfo* for the correct request.
+    #[inline]
+    pub fn connection_info(&self) -> Ref<ConnectionInfo> {
+        self.request().connection_info()
+    }
+
+    /// Generate url for named resource
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::{App, HttpRequest, HttpResponse, http};
+    /// #
+    /// fn index(req: HttpRequest) -> HttpResponse {
+    ///     let url = req.url_for("foo", &["1", "2", "3"]); // <- generate url for "foo" resource
+    ///     HttpResponse::Ok().into()
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .resource("/test/{one}/{two}/{three}", |r| {
+    ///              r.name("foo");  // <- set resource name, then it could be used in `url_for`
+    ///              r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+    ///         })
+    ///         .finish();
+    /// }
+    /// ```
+    pub fn url_for<U, I>(
+        &self, name: &str, elements: U,
+    ) -> Result<Url, UrlGenerationError>
+    where
+        U: IntoIterator<Item = I>,
+        I: AsRef<str>,
+    {
+        self.resource.url_for(&self, name, elements)
+    }
+
+    /// Generate url for named resource
+    ///
+    /// This method is similar to `HttpRequest::url_for()` but it can be used
+    /// for urls that do not contain variable parts.
+    pub fn url_for_static(&self, name: &str) -> Result<Url, UrlGenerationError> {
+        const NO_PARAMS: [&str; 0] = [];
+        self.url_for(name, &NO_PARAMS)
+    }
+
+    /// This method returns reference to current `RouteInfo` object.
+    #[inline]
+    pub fn resource(&self) -> &ResourceInfo {
+        &self.resource
+    }
+
+    /// Peer socket address
+    ///
+    /// Peer address is actual socket address, if proxy is used in front of
+    /// actix http server, then peer address would be address of this proxy.
+    ///
+    /// To get client connection information `connection_info()` method should
+    /// be used.
+    #[inline]
+    pub fn peer_addr(&self) -> Option<SocketAddr> {
+        self.request().inner.addr
+    }
+
+    /// url query parameters.
+    pub fn query(&self) -> Ref<HashMap<String, String>> {
+        if self.extensions().get::<Query>().is_none() {
+            let mut query = HashMap::new();
+            for (key, val) in form_urlencoded::parse(self.query_string().as_ref()) {
+                query.insert(key.as_ref().to_string(), val.to_string());
+            }
+            self.extensions_mut().insert(Query(query));
+        }
+        Ref::map(self.extensions(), |ext| &ext.get::<Query>().unwrap().0)
+    }
+
+    /// The query string in the URL.
+    ///
+    /// E.g., id=10
+    #[inline]
+    pub fn query_string(&self) -> &str {
+        if let Some(query) = self.uri().query().as_ref() {
+            query
+        } else {
+            ""
+        }
+    }
+
+    /// Load request cookies.
+    #[inline]
+    pub fn cookies(&self) -> Result<Ref<Vec<Cookie<'static>>>, CookieParseError> {
+        if self.extensions().get::<Cookies>().is_none() {
+            let mut cookies = Vec::new();
+            for hdr in self.request().inner.headers.get_all(header::COOKIE) {
+                let s = str::from_utf8(hdr.as_bytes()).map_err(CookieParseError::from)?;
+                for cookie_str in s.split(';').map(|s| s.trim()) {
+                    if !cookie_str.is_empty() {
+                        cookies.push(Cookie::parse_encoded(cookie_str)?.into_owned());
+                    }
+                }
+            }
+            self.extensions_mut().insert(Cookies(cookies));
+        }
+        Ok(Ref::map(self.extensions(), |ext| {
+            &ext.get::<Cookies>().unwrap().0
+        }))
+    }
+
+    /// Return request cookie.
+    #[inline]
+    pub fn cookie(&self, name: &str) -> Option<Cookie<'static>> {
+        if let Ok(cookies) = self.cookies() {
+            for cookie in cookies.iter() {
+                if cookie.name() == name {
+                    return Some(cookie.to_owned());
+                }
+            }
+        }
+        None
+    }
+
+    pub(crate) fn set_cookies(&mut self, cookies: Option<Vec<Cookie<'static>>>) {
+        if let Some(cookies) = cookies {
+            self.extensions_mut().insert(Cookies(cookies));
+        }
+    }
+
+    /// Get a reference to the Params object.
+    ///
+    /// Params is a container for url parameters.
+    /// A variable segment is specified in the form `{identifier}`,
+    /// where the identifier can be used later in a request handler to
+    /// access the matched value for that segment.
+    #[inline]
+    pub fn match_info(&self) -> &Params {
+        &self.resource.match_info()
+    }
+
+    /// Check if request requires connection upgrade
+    pub(crate) fn upgrade(&self) -> bool {
+        self.request().upgrade()
+    }
+
+    /// Set read buffer capacity
+    ///
+    /// Default buffer capacity is 32Kb.
+    pub fn set_read_buffer_capacity(&mut self, cap: usize) {
+        if let Some(payload) = self.request().inner.payload.borrow_mut().as_mut() {
+            payload.set_read_buffer_capacity(cap)
+        }
+    }
+}
+
+impl<S> Drop for HttpRequest<S> {
+    fn drop(&mut self) {
+        if let Some(req) = self.req.take() {
+            req.release();
+        }
+    }
+}
+
+impl<S> Clone for HttpRequest<S> {
+    fn clone(&self) -> HttpRequest<S> {
+        HttpRequest {
+            req: self.req.as_ref().map(|r| r.clone()),
+            state: self.state.clone(),
+            resource: self.resource.clone(),
+        }
+    }
+}
+
+impl<S> FromRequest<S> for HttpRequest<S> {
+    type Config = ();
+    type Result = Self;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _: &Self::Config) -> Self::Result {
+        req.clone()
+    }
+}
+
+impl<S> fmt::Debug for HttpRequest<S> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let res = writeln!(
+            f,
+            "\nHttpRequest {:?} {}:{}",
+            self.version(),
+            self.method(),
+            self.path()
+        );
+        if !self.query_string().is_empty() {
+            let _ = writeln!(f, "  query: ?{:?}", self.query_string());
+        }
+        if !self.match_info().is_empty() {
+            let _ = writeln!(f, "  params: {:?}", self.match_info());
+        }
+        let _ = writeln!(f, "  headers:");
+        for (key, val) in self.headers().iter() {
+            let _ = writeln!(f, "    {:?}: {:?}", key, val);
+        }
+        res
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use resource::Resource;
+    use router::{ResourceDef, Router};
+    use test::TestRequest;
+
+    #[test]
+    fn test_debug() {
+        let req = TestRequest::with_header("content-type", "text/plain").finish();
+        let dbg = format!("{:?}", req);
+        assert!(dbg.contains("HttpRequest"));
+    }
+
+    #[test]
+    fn test_no_request_cookies() {
+        let req = TestRequest::default().finish();
+        assert!(req.cookies().unwrap().is_empty());
+    }
+
+    #[test]
+    fn test_request_cookies() {
+        let req = TestRequest::default()
+            .header(header::COOKIE, "cookie1=value1")
+            .header(header::COOKIE, "cookie2=value2")
+            .finish();
+        {
+            let cookies = req.cookies().unwrap();
+            assert_eq!(cookies.len(), 2);
+            assert_eq!(cookies[0].name(), "cookie1");
+            assert_eq!(cookies[0].value(), "value1");
+            assert_eq!(cookies[1].name(), "cookie2");
+            assert_eq!(cookies[1].value(), "value2");
+        }
+
+        let cookie = req.cookie("cookie1");
+        assert!(cookie.is_some());
+        let cookie = cookie.unwrap();
+        assert_eq!(cookie.name(), "cookie1");
+        assert_eq!(cookie.value(), "value1");
+
+        let cookie = req.cookie("cookie-unknown");
+        assert!(cookie.is_none());
+    }
+
+    #[test]
+    fn test_request_query() {
+        let req = TestRequest::with_uri("/?id=test").finish();
+        assert_eq!(req.query_string(), "id=test");
+        let query = req.query();
+        assert_eq!(&query["id"], "test");
+    }
+
+    #[test]
+    fn test_request_match_info() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/{key}/")));
+
+        let req = TestRequest::with_uri("/value/?id=test").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.match_info().get("key"), Some("value"));
+    }
+
+    #[test]
+    fn test_url_for() {
+        let mut router = Router::<()>::new();
+        let mut resource = Resource::new(ResourceDef::new("/user/{name}.{ext}"));
+        resource.name("index");
+        router.register_resource(resource);
+
+        let info = router.default_route_info();
+        assert!(!info.has_prefixed_resource("/use/"));
+        assert!(info.has_resource("/user/test.html"));
+        assert!(info.has_prefixed_resource("/user/test.html"));
+        assert!(!info.has_resource("/test/unknown"));
+        assert!(!info.has_prefixed_resource("/test/unknown"));
+
+        let req = TestRequest::with_header(header::HOST, "www.rust-lang.org")
+            .finish_with_router(router);
+
+        assert_eq!(
+            req.url_for("unknown", &["test"]),
+            Err(UrlGenerationError::ResourceNotFound)
+        );
+        assert_eq!(
+            req.url_for("index", &["test"]),
+            Err(UrlGenerationError::NotEnoughElements)
+        );
+        let url = req.url_for("index", &["test", "html"]);
+        assert_eq!(
+            url.ok().unwrap().as_str(),
+            "http://www.rust-lang.org/user/test.html"
+        );
+    }
+
+    #[test]
+    fn test_url_for_with_prefix() {
+        let mut resource = Resource::new(ResourceDef::new("/user/{name}.html"));
+        resource.name("index");
+        let mut router = Router::<()>::new();
+        router.register_resource(resource);
+
+        let mut info = router.default_route_info();
+        info.set_prefix(7);
+        assert!(!info.has_prefixed_resource("/use/"));
+        assert!(info.has_resource("/user/test.html"));
+        assert!(!info.has_prefixed_resource("/user/test.html"));
+        assert!(!info.has_resource("/prefix/user/test.html"));
+        assert!(info.has_prefixed_resource("/prefix/user/test.html"));
+
+        let req = TestRequest::with_uri("/prefix/test")
+            .prefix(7)
+            .header(header::HOST, "www.rust-lang.org")
+            .finish_with_router(router);
+        let url = req.url_for("index", &["test"]);
+        assert_eq!(
+            url.ok().unwrap().as_str(),
+            "http://www.rust-lang.org/prefix/user/test.html"
+        );
+    }
+
+    #[test]
+    fn test_url_for_static() {
+        let mut resource = Resource::new(ResourceDef::new("/index.html"));
+        resource.name("index");
+        let mut router = Router::<()>::new();
+        router.register_resource(resource);
+
+        let mut info = router.default_route_info();
+        info.set_prefix(7);
+        assert!(info.has_resource("/index.html"));
+        assert!(!info.has_prefixed_resource("/index.html"));
+        assert!(!info.has_resource("/prefix/index.html"));
+        assert!(info.has_prefixed_resource("/prefix/index.html"));
+
+        let req = TestRequest::with_uri("/prefix/test")
+            .prefix(7)
+            .header(header::HOST, "www.rust-lang.org")
+            .finish_with_router(router);
+        let url = req.url_for_static("index");
+        assert_eq!(
+            url.ok().unwrap().as_str(),
+            "http://www.rust-lang.org/prefix/index.html"
+        );
+    }
+
+    #[test]
+    fn test_url_for_external() {
+        let mut router = Router::<()>::new();
+        router.register_external(
+            "youtube",
+            ResourceDef::external("https://youtube.com/watch/{video_id}"),
+        );
+
+        let info = router.default_route_info();
+        assert!(!info.has_resource("https://youtube.com/watch/unknown"));
+        assert!(!info.has_prefixed_resource("https://youtube.com/watch/unknown"));
+
+        let req = TestRequest::default().finish_with_router(router);
+        let url = req.url_for("youtube", &["oHg5SJYRHA0"]);
+        assert_eq!(
+            url.ok().unwrap().as_str(),
+            "https://youtube.com/watch/oHg5SJYRHA0"
+        );
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/httpresponse.rs.html b/static/api/actix-web/0.7.2/src/actix_web/httpresponse.rs.html new file mode 100644 index 0000000..586b781 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/httpresponse.rs.html @@ -0,0 +1,2675 @@ +httpresponse.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+
+//! Http response
+use std::cell::RefCell;
+use std::collections::VecDeque;
+use std::io::Write;
+use std::{fmt, mem, str};
+
+use bytes::{BufMut, Bytes, BytesMut};
+use cookie::{Cookie, CookieJar};
+use futures::Stream;
+use http::header::{self, HeaderName, HeaderValue};
+use http::{Error as HttpError, HeaderMap, HttpTryFrom, StatusCode, Version};
+use serde::Serialize;
+use serde_json;
+
+use body::Body;
+use client::ClientResponse;
+use error::Error;
+use handler::Responder;
+use header::{ContentEncoding, Header, IntoHeaderValue};
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+
+/// max write buffer size 64k
+pub(crate) const MAX_WRITE_BUFFER_SIZE: usize = 65_536;
+
+/// Represents various types of connection
+#[derive(Copy, Clone, PartialEq, Debug)]
+pub enum ConnectionType {
+    /// Close connection after response
+    Close,
+    /// Keep connection alive after response
+    KeepAlive,
+    /// Connection is upgraded to different type
+    Upgrade,
+}
+
+/// An HTTP Response
+pub struct HttpResponse(Box<InnerHttpResponse>, &'static HttpResponsePool);
+
+impl HttpResponse {
+    #[inline]
+    fn get_ref(&self) -> &InnerHttpResponse {
+        self.0.as_ref()
+    }
+
+    #[inline]
+    fn get_mut(&mut self) -> &mut InnerHttpResponse {
+        self.0.as_mut()
+    }
+
+    /// Create http response builder with specific status.
+    #[inline]
+    pub fn build(status: StatusCode) -> HttpResponseBuilder {
+        HttpResponsePool::get(status)
+    }
+
+    /// Create http response builder
+    #[inline]
+    pub fn build_from<T: Into<HttpResponseBuilder>>(source: T) -> HttpResponseBuilder {
+        source.into()
+    }
+
+    /// Constructs a response
+    #[inline]
+    pub fn new(status: StatusCode) -> HttpResponse {
+        HttpResponsePool::with_body(status, Body::Empty)
+    }
+
+    /// Constructs a response with body
+    #[inline]
+    pub fn with_body<B: Into<Body>>(status: StatusCode, body: B) -> HttpResponse {
+        HttpResponsePool::with_body(status, body.into())
+    }
+
+    /// Constructs an error response
+    #[inline]
+    pub fn from_error(error: Error) -> HttpResponse {
+        let mut resp = error.as_response_error().error_response();
+        resp.get_mut().error = Some(error);
+        resp
+    }
+
+    /// Convert `HttpResponse` to a `HttpResponseBuilder`
+    #[inline]
+    pub fn into_builder(self) -> HttpResponseBuilder {
+        // If this response has cookies, load them into a jar
+        let mut jar: Option<CookieJar> = None;
+        for c in self.cookies() {
+            if let Some(ref mut j) = jar {
+                j.add_original(c.into_owned());
+            } else {
+                let mut j = CookieJar::new();
+                j.add_original(c.into_owned());
+                jar = Some(j);
+            }
+        }
+
+        HttpResponseBuilder {
+            pool: self.1,
+            response: Some(self.0),
+            err: None,
+            cookies: jar,
+        }
+    }
+
+    /// The source `error` for this response
+    #[inline]
+    pub fn error(&self) -> Option<&Error> {
+        self.get_ref().error.as_ref()
+    }
+
+    /// Get the HTTP version of this response
+    #[inline]
+    pub fn version(&self) -> Option<Version> {
+        self.get_ref().version
+    }
+
+    /// Get the headers from the response
+    #[inline]
+    pub fn headers(&self) -> &HeaderMap {
+        &self.get_ref().headers
+    }
+
+    /// Get a mutable reference to the headers
+    #[inline]
+    pub fn headers_mut(&mut self) -> &mut HeaderMap {
+        &mut self.get_mut().headers
+    }
+
+    /// Get an iterator for the cookies set by this response
+    #[inline]
+    pub fn cookies(&self) -> CookieIter {
+        CookieIter {
+            iter: self.get_ref().headers.get_all(header::SET_COOKIE).iter(),
+        }
+    }
+
+    /// Add a cookie to this response
+    #[inline]
+    pub fn add_cookie(&mut self, cookie: &Cookie) -> Result<(), HttpError> {
+        let h = &mut self.get_mut().headers;
+        HeaderValue::from_str(&cookie.to_string())
+            .map(|c| {
+                h.append(header::SET_COOKIE, c);
+            })
+            .map_err(|e| e.into())
+    }
+
+    /// Remove all cookies with the given name from this response. Returns
+    /// the number of cookies removed.
+    #[inline]
+    pub fn del_cookie(&mut self, name: &str) -> usize {
+        let h = &mut self.get_mut().headers;
+        let vals: Vec<HeaderValue> = h
+            .get_all(header::SET_COOKIE)
+            .iter()
+            .map(|v| v.to_owned())
+            .collect();
+        h.remove(header::SET_COOKIE);
+
+        let mut count: usize = 0;
+        for v in vals {
+            if let Ok(s) = v.to_str() {
+                if let Ok(c) = Cookie::parse_encoded(s) {
+                    if c.name() == name {
+                        count += 1;
+                        continue;
+                    }
+                }
+            }
+            h.append(header::SET_COOKIE, v);
+        }
+        count
+    }
+
+    /// Get the response status code
+    #[inline]
+    pub fn status(&self) -> StatusCode {
+        self.get_ref().status
+    }
+
+    /// Set the `StatusCode` for this response
+    #[inline]
+    pub fn status_mut(&mut self) -> &mut StatusCode {
+        &mut self.get_mut().status
+    }
+
+    /// Get custom reason for the response
+    #[inline]
+    pub fn reason(&self) -> &str {
+        if let Some(reason) = self.get_ref().reason {
+            reason
+        } else {
+            self.get_ref()
+                .status
+                .canonical_reason()
+                .unwrap_or("<unknown status code>")
+        }
+    }
+
+    /// Set the custom reason for the response
+    #[inline]
+    pub fn set_reason(&mut self, reason: &'static str) -> &mut Self {
+        self.get_mut().reason = Some(reason);
+        self
+    }
+
+    /// Set connection type
+    pub fn set_connection_type(&mut self, conn: ConnectionType) -> &mut Self {
+        self.get_mut().connection_type = Some(conn);
+        self
+    }
+
+    /// Connection upgrade status
+    #[inline]
+    pub fn upgrade(&self) -> bool {
+        self.get_ref().connection_type == Some(ConnectionType::Upgrade)
+    }
+
+    /// Keep-alive status for this connection
+    pub fn keep_alive(&self) -> Option<bool> {
+        if let Some(ct) = self.get_ref().connection_type {
+            match ct {
+                ConnectionType::KeepAlive => Some(true),
+                ConnectionType::Close | ConnectionType::Upgrade => Some(false),
+            }
+        } else {
+            None
+        }
+    }
+
+    /// is chunked encoding enabled
+    #[inline]
+    pub fn chunked(&self) -> Option<bool> {
+        self.get_ref().chunked
+    }
+
+    /// Content encoding
+    #[inline]
+    pub fn content_encoding(&self) -> Option<ContentEncoding> {
+        self.get_ref().encoding
+    }
+
+    /// Set content encoding
+    pub fn set_content_encoding(&mut self, enc: ContentEncoding) -> &mut Self {
+        self.get_mut().encoding = Some(enc);
+        self
+    }
+
+    /// Get body os this response
+    #[inline]
+    pub fn body(&self) -> &Body {
+        &self.get_ref().body
+    }
+
+    /// Set a body
+    pub fn set_body<B: Into<Body>>(&mut self, body: B) {
+        self.get_mut().body = body.into();
+    }
+
+    /// Set a body and return previous body value
+    pub fn replace_body<B: Into<Body>>(&mut self, body: B) -> Body {
+        mem::replace(&mut self.get_mut().body, body.into())
+    }
+
+    /// Size of response in bytes, excluding HTTP headers
+    pub fn response_size(&self) -> u64 {
+        self.get_ref().response_size
+    }
+
+    /// Set content encoding
+    pub(crate) fn set_response_size(&mut self, size: u64) {
+        self.get_mut().response_size = size;
+    }
+
+    /// Set write buffer capacity
+    pub fn write_buffer_capacity(&self) -> usize {
+        self.get_ref().write_capacity
+    }
+
+    /// Set write buffer capacity
+    pub fn set_write_buffer_capacity(&mut self, cap: usize) {
+        self.get_mut().write_capacity = cap;
+    }
+
+    pub(crate) fn release(self) {
+        self.1.release(self.0);
+    }
+
+    pub(crate) fn into_parts(self) -> HttpResponseParts {
+        self.0.into_parts()
+    }
+
+    pub(crate) fn from_parts(parts: HttpResponseParts) -> HttpResponse {
+        HttpResponse(
+            Box::new(InnerHttpResponse::from_parts(parts)),
+            HttpResponsePool::get_pool(),
+        )
+    }
+}
+
+impl fmt::Debug for HttpResponse {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let res = writeln!(
+            f,
+            "\nHttpResponse {:?} {}{}",
+            self.get_ref().version,
+            self.get_ref().status,
+            self.get_ref().reason.unwrap_or("")
+        );
+        let _ = writeln!(f, "  encoding: {:?}", self.get_ref().encoding);
+        let _ = writeln!(f, "  headers:");
+        for (key, val) in self.get_ref().headers.iter() {
+            let _ = writeln!(f, "    {:?}: {:?}", key, val);
+        }
+        res
+    }
+}
+
+pub struct CookieIter<'a> {
+    iter: header::ValueIter<'a, HeaderValue>,
+}
+
+impl<'a> Iterator for CookieIter<'a> {
+    type Item = Cookie<'a>;
+
+    #[inline]
+    fn next(&mut self) -> Option<Cookie<'a>> {
+        for v in self.iter.by_ref() {
+            if let Ok(c) = Cookie::parse_encoded(v.to_str().ok()?) {
+                return Some(c);
+            }
+        }
+        None
+    }
+}
+
+/// An HTTP response builder
+///
+/// This type can be used to construct an instance of `HttpResponse` through a
+/// builder-like pattern.
+pub struct HttpResponseBuilder {
+    pool: &'static HttpResponsePool,
+    response: Option<Box<InnerHttpResponse>>,
+    err: Option<HttpError>,
+    cookies: Option<CookieJar>,
+}
+
+impl HttpResponseBuilder {
+    /// Set HTTP status code of this response.
+    #[inline]
+    pub fn status(&mut self, status: StatusCode) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.status = status;
+        }
+        self
+    }
+
+    /// Set HTTP version of this response.
+    ///
+    /// By default response's http version depends on request's version.
+    #[inline]
+    pub fn version(&mut self, version: Version) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.version = Some(version);
+        }
+        self
+    }
+
+    /// Set a header.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, HttpRequest, HttpResponse, Result};
+    ///
+    /// fn index(req: HttpRequest) -> Result<HttpResponse> {
+    ///     Ok(HttpResponse::Ok()
+    ///         .set(http::header::IfModifiedSince(
+    ///             "Sun, 07 Nov 1994 08:48:37 GMT".parse()?,
+    ///         ))
+    ///         .finish())
+    /// }
+    /// fn main() {}
+    /// ```
+    #[doc(hidden)]
+    pub fn set<H: Header>(&mut self, hdr: H) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            match hdr.try_into() {
+                Ok(value) => {
+                    parts.headers.append(H::name(), value);
+                }
+                Err(e) => self.err = Some(e.into()),
+            }
+        }
+        self
+    }
+
+    /// Set a header.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, HttpRequest, HttpResponse};
+    ///
+    /// fn index(req: HttpRequest) -> HttpResponse {
+    ///     HttpResponse::Ok()
+    ///         .header("X-TEST", "value")
+    ///         .header(http::header::CONTENT_TYPE, "application/json")
+    ///         .finish()
+    /// }
+    /// fn main() {}
+    /// ```
+    pub fn header<K, V>(&mut self, key: K, value: V) -> &mut Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            match HeaderName::try_from(key) {
+                Ok(key) => match value.try_into() {
+                    Ok(value) => {
+                        parts.headers.append(key, value);
+                    }
+                    Err(e) => self.err = Some(e.into()),
+                },
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set the custom reason for the response.
+    #[inline]
+    pub fn reason(&mut self, reason: &'static str) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.reason = Some(reason);
+        }
+        self
+    }
+
+    /// Set content encoding.
+    ///
+    /// By default `ContentEncoding::Auto` is used, which automatically
+    /// negotiates content encoding based on request's `Accept-Encoding`
+    /// headers. To enforce specific encoding, use specific
+    /// ContentEncoding` value.
+    #[inline]
+    pub fn content_encoding(&mut self, enc: ContentEncoding) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.encoding = Some(enc);
+        }
+        self
+    }
+
+    /// Set connection type
+    #[inline]
+    #[doc(hidden)]
+    pub fn connection_type(&mut self, conn: ConnectionType) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.connection_type = Some(conn);
+        }
+        self
+    }
+
+    /// Set connection type to Upgrade
+    #[inline]
+    #[doc(hidden)]
+    pub fn upgrade(&mut self) -> &mut Self {
+        self.connection_type(ConnectionType::Upgrade)
+    }
+
+    /// Force close connection, even if it is marked as keep-alive
+    #[inline]
+    pub fn force_close(&mut self) -> &mut Self {
+        self.connection_type(ConnectionType::Close)
+    }
+
+    /// Enables automatic chunked transfer encoding
+    #[inline]
+    pub fn chunked(&mut self) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.chunked = Some(true);
+        }
+        self
+    }
+
+    /// Force disable chunked encoding
+    #[inline]
+    pub fn no_chunking(&mut self) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.chunked = Some(false);
+        }
+        self
+    }
+
+    /// Set response content type
+    #[inline]
+    pub fn content_type<V>(&mut self, value: V) -> &mut Self
+    where
+        HeaderValue: HttpTryFrom<V>,
+    {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            match HeaderValue::try_from(value) {
+                Ok(value) => {
+                    parts.headers.insert(header::CONTENT_TYPE, value);
+                }
+                Err(e) => self.err = Some(e.into()),
+            };
+        }
+        self
+    }
+
+    /// Set content length
+    #[inline]
+    pub fn content_length(&mut self, len: u64) -> &mut Self {
+        let mut wrt = BytesMut::new().writer();
+        let _ = write!(wrt, "{}", len);
+        self.header(header::CONTENT_LENGTH, wrt.get_mut().take().freeze())
+    }
+
+    /// Set a cookie
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, HttpRequest, HttpResponse, Result};
+    ///
+    /// fn index(req: HttpRequest) -> HttpResponse {
+    ///     HttpResponse::Ok()
+    ///         .cookie(
+    ///             http::Cookie::build("name", "value")
+    ///                 .domain("www.rust-lang.org")
+    ///                 .path("/")
+    ///                 .secure(true)
+    ///                 .http_only(true)
+    ///                 .finish(),
+    ///         )
+    ///         .finish()
+    /// }
+    /// ```
+    pub fn cookie<'c>(&mut self, cookie: Cookie<'c>) -> &mut Self {
+        if self.cookies.is_none() {
+            let mut jar = CookieJar::new();
+            jar.add(cookie.into_owned());
+            self.cookies = Some(jar)
+        } else {
+            self.cookies.as_mut().unwrap().add(cookie.into_owned());
+        }
+        self
+    }
+
+    /// Remove cookie
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, HttpRequest, HttpResponse, Result};
+    ///
+    /// fn index(req: &HttpRequest) -> HttpResponse {
+    ///     let mut builder = HttpResponse::Ok();
+    ///
+    ///     if let Some(ref cookie) = req.cookie("name") {
+    ///         builder.del_cookie(cookie);
+    ///     }
+    ///
+    ///     builder.finish()
+    /// }
+    /// ```
+    pub fn del_cookie<'a>(&mut self, cookie: &Cookie<'a>) -> &mut Self {
+        {
+            if self.cookies.is_none() {
+                self.cookies = Some(CookieJar::new())
+            }
+            let jar = self.cookies.as_mut().unwrap();
+            let cookie = cookie.clone().into_owned();
+            jar.add_original(cookie.clone());
+            jar.remove(cookie);
+        }
+        self
+    }
+
+    /// This method calls provided closure with builder reference if value is
+    /// true.
+    pub fn if_true<F>(&mut self, value: bool, f: F) -> &mut Self
+    where
+        F: FnOnce(&mut HttpResponseBuilder),
+    {
+        if value {
+            f(self);
+        }
+        self
+    }
+
+    /// This method calls provided closure with builder reference if value is
+    /// Some.
+    pub fn if_some<T, F>(&mut self, value: Option<T>, f: F) -> &mut Self
+    where
+        F: FnOnce(T, &mut HttpResponseBuilder),
+    {
+        if let Some(val) = value {
+            f(val, self);
+        }
+        self
+    }
+
+    /// Set write buffer capacity
+    ///
+    /// This parameter makes sense only for streaming response
+    /// or actor. If write buffer reaches specified capacity, stream or actor
+    /// get paused.
+    ///
+    /// Default write buffer capacity is 64kb
+    pub fn write_buffer_capacity(&mut self, cap: usize) -> &mut Self {
+        if let Some(parts) = parts(&mut self.response, &self.err) {
+            parts.write_capacity = cap;
+        }
+        self
+    }
+
+    /// Set a body and generate `HttpResponse`.
+    ///
+    /// `HttpResponseBuilder` can not be used after this call.
+    pub fn body<B: Into<Body>>(&mut self, body: B) -> HttpResponse {
+        if let Some(e) = self.err.take() {
+            return Error::from(e).into();
+        }
+        let mut response = self.response.take().expect("cannot reuse response builder");
+        if let Some(ref jar) = self.cookies {
+            for cookie in jar.delta() {
+                match HeaderValue::from_str(&cookie.to_string()) {
+                    Ok(val) => response.headers.append(header::SET_COOKIE, val),
+                    Err(e) => return Error::from(e).into(),
+                };
+            }
+        }
+        response.body = body.into();
+        HttpResponse(response, self.pool)
+    }
+
+    #[inline]
+    /// Set a streaming body and generate `HttpResponse`.
+    ///
+    /// `HttpResponseBuilder` can not be used after this call.
+    pub fn streaming<S, E>(&mut self, stream: S) -> HttpResponse
+    where
+        S: Stream<Item = Bytes, Error = E> + 'static,
+        E: Into<Error>,
+    {
+        self.body(Body::Streaming(Box::new(stream.map_err(|e| e.into()))))
+    }
+
+    /// Set a json body and generate `HttpResponse`
+    ///
+    /// `HttpResponseBuilder` can not be used after this call.
+    pub fn json<T: Serialize>(&mut self, value: T) -> HttpResponse {
+        match serde_json::to_string(&value) {
+            Ok(body) => {
+                let contains = if let Some(parts) = parts(&mut self.response, &self.err)
+                {
+                    parts.headers.contains_key(header::CONTENT_TYPE)
+                } else {
+                    true
+                };
+                if !contains {
+                    self.header(header::CONTENT_TYPE, "application/json");
+                }
+
+                self.body(body)
+            }
+            Err(e) => Error::from(e).into(),
+        }
+    }
+
+    #[inline]
+    /// Set an empty body and generate `HttpResponse`
+    ///
+    /// `HttpResponseBuilder` can not be used after this call.
+    pub fn finish(&mut self) -> HttpResponse {
+        self.body(Body::Empty)
+    }
+
+    /// This method construct new `HttpResponseBuilder`
+    pub fn take(&mut self) -> HttpResponseBuilder {
+        HttpResponseBuilder {
+            pool: self.pool,
+            response: self.response.take(),
+            err: self.err.take(),
+            cookies: self.cookies.take(),
+        }
+    }
+}
+
+#[inline]
+#[cfg_attr(feature = "cargo-clippy", allow(borrowed_box))]
+fn parts<'a>(
+    parts: &'a mut Option<Box<InnerHttpResponse>>, err: &Option<HttpError>,
+) -> Option<&'a mut Box<InnerHttpResponse>> {
+    if err.is_some() {
+        return None;
+    }
+    parts.as_mut()
+}
+
+/// Helper converters
+impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse {
+    fn from(res: Result<I, E>) -> Self {
+        match res {
+            Ok(val) => val.into(),
+            Err(err) => err.into().into(),
+        }
+    }
+}
+
+impl From<HttpResponseBuilder> for HttpResponse {
+    fn from(mut builder: HttpResponseBuilder) -> Self {
+        builder.finish()
+    }
+}
+
+impl Responder for HttpResponseBuilder {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    #[inline]
+    fn respond_to<S>(mut self, _: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(self.finish())
+    }
+}
+
+impl From<&'static str> for HttpResponse {
+    fn from(val: &'static str) -> Self {
+        HttpResponse::Ok()
+            .content_type("text/plain; charset=utf-8")
+            .body(val)
+    }
+}
+
+impl Responder for &'static str {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("text/plain; charset=utf-8")
+            .body(self))
+    }
+}
+
+impl From<&'static [u8]> for HttpResponse {
+    fn from(val: &'static [u8]) -> Self {
+        HttpResponse::Ok()
+            .content_type("application/octet-stream")
+            .body(val)
+    }
+}
+
+impl Responder for &'static [u8] {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("application/octet-stream")
+            .body(self))
+    }
+}
+
+impl From<String> for HttpResponse {
+    fn from(val: String) -> Self {
+        HttpResponse::Ok()
+            .content_type("text/plain; charset=utf-8")
+            .body(val)
+    }
+}
+
+impl Responder for String {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("text/plain; charset=utf-8")
+            .body(self))
+    }
+}
+
+impl<'a> From<&'a String> for HttpResponse {
+    fn from(val: &'a String) -> Self {
+        HttpResponse::build(StatusCode::OK)
+            .content_type("text/plain; charset=utf-8")
+            .body(val)
+    }
+}
+
+impl<'a> Responder for &'a String {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("text/plain; charset=utf-8")
+            .body(self))
+    }
+}
+
+impl From<Bytes> for HttpResponse {
+    fn from(val: Bytes) -> Self {
+        HttpResponse::Ok()
+            .content_type("application/octet-stream")
+            .body(val)
+    }
+}
+
+impl Responder for Bytes {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("application/octet-stream")
+            .body(self))
+    }
+}
+
+impl From<BytesMut> for HttpResponse {
+    fn from(val: BytesMut) -> Self {
+        HttpResponse::Ok()
+            .content_type("application/octet-stream")
+            .body(val)
+    }
+}
+
+impl Responder for BytesMut {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("application/octet-stream")
+            .body(self))
+    }
+}
+
+/// Create `HttpResponseBuilder` from `ClientResponse`
+///
+/// It is useful for proxy response. This implementation
+/// copies all responses's headers and status.
+impl<'a> From<&'a ClientResponse> for HttpResponseBuilder {
+    fn from(resp: &'a ClientResponse) -> HttpResponseBuilder {
+        let mut builder = HttpResponse::build(resp.status());
+        for (key, value) in resp.headers() {
+            builder.header(key.clone(), value.clone());
+        }
+        builder
+    }
+}
+
+impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder {
+    fn from(req: &'a HttpRequest<S>) -> HttpResponseBuilder {
+        req.request()
+            .server_settings()
+            .get_response_builder(StatusCode::OK)
+    }
+}
+
+#[derive(Debug)]
+struct InnerHttpResponse {
+    version: Option<Version>,
+    headers: HeaderMap,
+    status: StatusCode,
+    reason: Option<&'static str>,
+    body: Body,
+    chunked: Option<bool>,
+    encoding: Option<ContentEncoding>,
+    connection_type: Option<ConnectionType>,
+    write_capacity: usize,
+    response_size: u64,
+    error: Option<Error>,
+}
+
+pub(crate) struct HttpResponseParts {
+    version: Option<Version>,
+    headers: HeaderMap,
+    status: StatusCode,
+    reason: Option<&'static str>,
+    body: Option<Bytes>,
+    encoding: Option<ContentEncoding>,
+    connection_type: Option<ConnectionType>,
+    error: Option<Error>,
+}
+
+impl InnerHttpResponse {
+    #[inline]
+    fn new(status: StatusCode, body: Body) -> InnerHttpResponse {
+        InnerHttpResponse {
+            status,
+            body,
+            version: None,
+            headers: HeaderMap::with_capacity(16),
+            reason: None,
+            chunked: None,
+            encoding: None,
+            connection_type: None,
+            response_size: 0,
+            write_capacity: MAX_WRITE_BUFFER_SIZE,
+            error: None,
+        }
+    }
+
+    /// This is for failure, we can not have Send + Sync on Streaming and Actor response
+    fn into_parts(mut self) -> HttpResponseParts {
+        let body = match mem::replace(&mut self.body, Body::Empty) {
+            Body::Empty => None,
+            Body::Binary(mut bin) => Some(bin.take()),
+            Body::Streaming(_) | Body::Actor(_) => {
+                error!("Streaming or Actor body is not support by error response");
+                None
+            }
+        };
+
+        HttpResponseParts {
+            body,
+            version: self.version,
+            headers: self.headers,
+            status: self.status,
+            reason: self.reason,
+            encoding: self.encoding,
+            connection_type: self.connection_type,
+            error: self.error,
+        }
+    }
+
+    fn from_parts(parts: HttpResponseParts) -> InnerHttpResponse {
+        let body = if let Some(ref body) = parts.body {
+            Body::Binary(body.clone().into())
+        } else {
+            Body::Empty
+        };
+
+        InnerHttpResponse {
+            body,
+            status: parts.status,
+            version: parts.version,
+            headers: parts.headers,
+            reason: parts.reason,
+            chunked: None,
+            encoding: parts.encoding,
+            connection_type: parts.connection_type,
+            response_size: 0,
+            write_capacity: MAX_WRITE_BUFFER_SIZE,
+            error: parts.error,
+        }
+    }
+}
+
+/// Internal use only!
+pub(crate) struct HttpResponsePool(RefCell<VecDeque<Box<InnerHttpResponse>>>);
+
+thread_local!(static POOL: &'static HttpResponsePool = HttpResponsePool::pool());
+
+impl HttpResponsePool {
+    fn pool() -> &'static HttpResponsePool {
+        let pool = HttpResponsePool(RefCell::new(VecDeque::with_capacity(128)));
+        Box::leak(Box::new(pool))
+    }
+
+    pub fn get_pool() -> &'static HttpResponsePool {
+        POOL.with(|p| *p)
+    }
+
+    #[inline]
+    pub fn get_builder(
+        pool: &'static HttpResponsePool, status: StatusCode,
+    ) -> HttpResponseBuilder {
+        if let Some(mut msg) = pool.0.borrow_mut().pop_front() {
+            msg.status = status;
+            HttpResponseBuilder {
+                pool,
+                response: Some(msg),
+                err: None,
+                cookies: None,
+            }
+        } else {
+            let msg = Box::new(InnerHttpResponse::new(status, Body::Empty));
+            HttpResponseBuilder {
+                pool,
+                response: Some(msg),
+                err: None,
+                cookies: None,
+            }
+        }
+    }
+
+    #[inline]
+    pub fn get_response(
+        pool: &'static HttpResponsePool, status: StatusCode, body: Body,
+    ) -> HttpResponse {
+        if let Some(mut msg) = pool.0.borrow_mut().pop_front() {
+            msg.status = status;
+            msg.body = body;
+            HttpResponse(msg, pool)
+        } else {
+            let msg = Box::new(InnerHttpResponse::new(status, body));
+            HttpResponse(msg, pool)
+        }
+    }
+
+    #[inline]
+    fn get(status: StatusCode) -> HttpResponseBuilder {
+        POOL.with(|pool| HttpResponsePool::get_builder(pool, status))
+    }
+
+    #[inline]
+    fn with_body(status: StatusCode, body: Body) -> HttpResponse {
+        POOL.with(|pool| HttpResponsePool::get_response(pool, status, body))
+    }
+
+    #[inline]
+    fn release(&self, mut inner: Box<InnerHttpResponse>) {
+        let mut p = self.0.borrow_mut();
+        if p.len() < 128 {
+            inner.headers.clear();
+            inner.version = None;
+            inner.chunked = None;
+            inner.reason = None;
+            inner.encoding = None;
+            inner.connection_type = None;
+            inner.response_size = 0;
+            inner.error = None;
+            inner.write_capacity = MAX_WRITE_BUFFER_SIZE;
+            p.push_front(inner);
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use body::Binary;
+    use http;
+    use http::header::{HeaderValue, CONTENT_TYPE, COOKIE};
+    use time::Duration;
+
+    use test::TestRequest;
+
+    #[test]
+    fn test_debug() {
+        let resp = HttpResponse::Ok()
+            .header(COOKIE, HeaderValue::from_static("cookie1=value1; "))
+            .header(COOKIE, HeaderValue::from_static("cookie2=value2; "))
+            .finish();
+        let dbg = format!("{:?}", resp);
+        assert!(dbg.contains("HttpResponse"));
+    }
+
+    #[test]
+    fn test_response_cookies() {
+        let req = TestRequest::default()
+            .header(COOKIE, "cookie1=value1")
+            .header(COOKIE, "cookie2=value2")
+            .finish();
+        let cookies = req.cookies().unwrap();
+
+        let resp = HttpResponse::Ok()
+            .cookie(
+                http::Cookie::build("name", "value")
+                    .domain("www.rust-lang.org")
+                    .path("/test")
+                    .http_only(true)
+                    .max_age(Duration::days(1))
+                    .finish(),
+            )
+            .del_cookie(&cookies[0])
+            .finish();
+
+        let mut val: Vec<_> = resp
+            .headers()
+            .get_all("Set-Cookie")
+            .iter()
+            .map(|v| v.to_str().unwrap().to_owned())
+            .collect();
+        val.sort();
+        assert!(val[0].starts_with("cookie1=; Max-Age=0;"));
+        assert_eq!(
+            val[1],
+            "name=value; HttpOnly; Path=/test; Domain=www.rust-lang.org; Max-Age=86400"
+        );
+    }
+
+    #[test]
+    fn test_update_response_cookies() {
+        let mut r = HttpResponse::Ok()
+            .cookie(http::Cookie::new("original", "val100"))
+            .finish();
+
+        r.add_cookie(&http::Cookie::new("cookie2", "val200"))
+            .unwrap();
+        r.add_cookie(&http::Cookie::new("cookie2", "val250"))
+            .unwrap();
+        r.add_cookie(&http::Cookie::new("cookie3", "val300"))
+            .unwrap();
+
+        assert_eq!(r.cookies().count(), 4);
+        r.del_cookie("cookie2");
+
+        let mut iter = r.cookies();
+        let v = iter.next().unwrap();
+        assert_eq!((v.name(), v.value()), ("original", "val100"));
+        let v = iter.next().unwrap();
+        assert_eq!((v.name(), v.value()), ("cookie3", "val300"));
+    }
+
+    #[test]
+    fn test_basic_builder() {
+        let resp = HttpResponse::Ok()
+            .header("X-TEST", "value")
+            .version(Version::HTTP_10)
+            .finish();
+        assert_eq!(resp.version(), Some(Version::HTTP_10));
+        assert_eq!(resp.status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_upgrade() {
+        let resp = HttpResponse::build(StatusCode::OK).upgrade().finish();
+        assert!(resp.upgrade())
+    }
+
+    #[test]
+    fn test_force_close() {
+        let resp = HttpResponse::build(StatusCode::OK).force_close().finish();
+        assert!(!resp.keep_alive().unwrap())
+    }
+
+    #[test]
+    fn test_content_type() {
+        let resp = HttpResponse::build(StatusCode::OK)
+            .content_type("text/plain")
+            .body(Body::Empty);
+        assert_eq!(resp.headers().get(CONTENT_TYPE).unwrap(), "text/plain")
+    }
+
+    #[test]
+    fn test_content_encoding() {
+        let resp = HttpResponse::build(StatusCode::OK).finish();
+        assert_eq!(resp.content_encoding(), None);
+
+        #[cfg(feature = "brotli")]
+        {
+            let resp = HttpResponse::build(StatusCode::OK)
+                .content_encoding(ContentEncoding::Br)
+                .finish();
+            assert_eq!(resp.content_encoding(), Some(ContentEncoding::Br));
+        }
+
+        let resp = HttpResponse::build(StatusCode::OK)
+            .content_encoding(ContentEncoding::Gzip)
+            .finish();
+        assert_eq!(resp.content_encoding(), Some(ContentEncoding::Gzip));
+    }
+
+    #[test]
+    fn test_json() {
+        let resp = HttpResponse::build(StatusCode::OK).json(vec!["v1", "v2", "v3"]);
+        let ct = resp.headers().get(CONTENT_TYPE).unwrap();
+        assert_eq!(ct, HeaderValue::from_static("application/json"));
+        assert_eq!(
+            *resp.body(),
+            Body::from(Bytes::from_static(b"[\"v1\",\"v2\",\"v3\"]"))
+        );
+    }
+
+    #[test]
+    fn test_json_ct() {
+        let resp = HttpResponse::build(StatusCode::OK)
+            .header(CONTENT_TYPE, "text/json")
+            .json(vec!["v1", "v2", "v3"]);
+        let ct = resp.headers().get(CONTENT_TYPE).unwrap();
+        assert_eq!(ct, HeaderValue::from_static("text/json"));
+        assert_eq!(
+            *resp.body(),
+            Body::from(Bytes::from_static(b"[\"v1\",\"v2\",\"v3\"]"))
+        );
+    }
+
+    impl Body {
+        pub(crate) fn bin_ref(&self) -> &Binary {
+            match *self {
+                Body::Binary(ref bin) => bin,
+                _ => panic!(),
+            }
+        }
+    }
+
+    #[test]
+    fn test_into_response() {
+        let req = TestRequest::default().finish();
+
+        let resp: HttpResponse = "test".into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from("test"));
+
+        let resp: HttpResponse = "test".respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from("test"));
+
+        let resp: HttpResponse = b"test".as_ref().into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(b"test".as_ref()));
+
+        let resp: HttpResponse = b"test".as_ref().respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(b"test".as_ref()));
+
+        let resp: HttpResponse = "test".to_owned().into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from("test".to_owned()));
+
+        let resp: HttpResponse = "test".to_owned().respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from("test".to_owned()));
+
+        let resp: HttpResponse = (&"test".to_owned()).into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(&"test".to_owned()));
+
+        let resp: HttpResponse = (&"test".to_owned()).respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("text/plain; charset=utf-8")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(&"test".to_owned()));
+
+        let b = Bytes::from_static(b"test");
+        let resp: HttpResponse = b.into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.body().bin_ref(),
+            &Binary::from(Bytes::from_static(b"test"))
+        );
+
+        let b = Bytes::from_static(b"test");
+        let resp: HttpResponse = b.respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.body().bin_ref(),
+            &Binary::from(Bytes::from_static(b"test"))
+        );
+
+        let b = BytesMut::from("test");
+        let resp: HttpResponse = b.into();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(BytesMut::from("test")));
+
+        let b = BytesMut::from("test");
+        let resp: HttpResponse = b.respond_to(&req).ok().unwrap();
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(
+            resp.headers().get(CONTENT_TYPE).unwrap(),
+            HeaderValue::from_static("application/octet-stream")
+        );
+        assert_eq!(resp.status(), StatusCode::OK);
+        assert_eq!(resp.body().bin_ref(), &Binary::from(BytesMut::from("test")));
+    }
+
+    #[test]
+    fn test_into_builder() {
+        let mut resp: HttpResponse = "test".into();
+        assert_eq!(resp.status(), StatusCode::OK);
+
+        resp.add_cookie(&http::Cookie::new("cookie1", "val100"))
+            .unwrap();
+
+        let mut builder = resp.into_builder();
+        let resp = builder.status(StatusCode::BAD_REQUEST).finish();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+
+        let cookie = resp.cookies().next().unwrap();
+        assert_eq!((cookie.name(), cookie.value()), ("cookie1", "val100"));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/info.rs.html b/static/api/actix-web/0.7.2/src/actix_web/info.rs.html new file mode 100644 index 0000000..130ade5 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/info.rs.html @@ -0,0 +1,439 @@ +info.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+
+use http::header::{self, HeaderName};
+use server::Request;
+
+const X_FORWARDED_FOR: &[u8] = b"x-forwarded-for";
+const X_FORWARDED_HOST: &[u8] = b"x-forwarded-host";
+const X_FORWARDED_PROTO: &[u8] = b"x-forwarded-proto";
+
+/// `HttpRequest` connection information
+#[derive(Clone, Default)]
+pub struct ConnectionInfo {
+    scheme: String,
+    host: String,
+    remote: Option<String>,
+    peer: Option<String>,
+}
+
+impl ConnectionInfo {
+    /// Create *ConnectionInfo* instance for a request.
+    #[cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))]
+    pub fn update(&mut self, req: &Request) {
+        let mut host = None;
+        let mut scheme = None;
+        let mut remote = None;
+        let mut peer = None;
+
+        // load forwarded header
+        for hdr in req.headers().get_all(header::FORWARDED) {
+            if let Ok(val) = hdr.to_str() {
+                for pair in val.split(';') {
+                    for el in pair.split(',') {
+                        let mut items = el.trim().splitn(2, '=');
+                        if let Some(name) = items.next() {
+                            if let Some(val) = items.next() {
+                                match &name.to_lowercase() as &str {
+                                    "for" => if remote.is_none() {
+                                        remote = Some(val.trim());
+                                    },
+                                    "proto" => if scheme.is_none() {
+                                        scheme = Some(val.trim());
+                                    },
+                                    "host" => if host.is_none() {
+                                        host = Some(val.trim());
+                                    },
+                                    _ => (),
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // scheme
+        if scheme.is_none() {
+            if let Some(h) = req
+                .headers()
+                .get(HeaderName::from_lowercase(X_FORWARDED_PROTO).unwrap())
+            {
+                if let Ok(h) = h.to_str() {
+                    scheme = h.split(',').next().map(|v| v.trim());
+                }
+            }
+            if scheme.is_none() {
+                scheme = req.uri().scheme_part().map(|a| a.as_str());
+                if scheme.is_none() && req.server_settings().secure() {
+                    scheme = Some("https")
+                }
+            }
+        }
+
+        // host
+        if host.is_none() {
+            if let Some(h) = req
+                .headers()
+                .get(HeaderName::from_lowercase(X_FORWARDED_HOST).unwrap())
+            {
+                if let Ok(h) = h.to_str() {
+                    host = h.split(',').next().map(|v| v.trim());
+                }
+            }
+            if host.is_none() {
+                if let Some(h) = req.headers().get(header::HOST) {
+                    host = h.to_str().ok();
+                }
+                if host.is_none() {
+                    host = req.uri().authority_part().map(|a| a.as_str());
+                    if host.is_none() {
+                        host = Some(req.server_settings().host());
+                    }
+                }
+            }
+        }
+
+        // remote addr
+        if remote.is_none() {
+            if let Some(h) = req
+                .headers()
+                .get(HeaderName::from_lowercase(X_FORWARDED_FOR).unwrap())
+            {
+                if let Ok(h) = h.to_str() {
+                    remote = h.split(',').next().map(|v| v.trim());
+                }
+            }
+            if remote.is_none() {
+                // get peeraddr from socketaddr
+                peer = req.peer_addr().map(|addr| format!("{}", addr));
+            }
+        }
+
+        self.scheme = scheme.unwrap_or("http").to_owned();
+        self.host = host.unwrap_or("localhost").to_owned();
+        self.remote = remote.map(|s| s.to_owned());
+        self.peer = peer;
+    }
+
+    /// Scheme of the request.
+    ///
+    /// Scheme is resolved through the following headers, in this order:
+    ///
+    /// - Forwarded
+    /// - X-Forwarded-Proto
+    /// - Uri
+    #[inline]
+    pub fn scheme(&self) -> &str {
+        &self.scheme
+    }
+
+    /// Hostname of the request.
+    ///
+    /// Hostname is resolved through the following headers, in this order:
+    ///
+    /// - Forwarded
+    /// - X-Forwarded-Host
+    /// - Host
+    /// - Uri
+    /// - Server hostname
+    pub fn host(&self) -> &str {
+        &self.host
+    }
+
+    /// Remote IP of client initiated HTTP request.
+    ///
+    /// The IP is resolved through the following headers, in this order:
+    ///
+    /// - Forwarded
+    /// - X-Forwarded-For
+    /// - peer name of opened socket
+    #[inline]
+    pub fn remote(&self) -> Option<&str> {
+        if let Some(ref r) = self.remote {
+            Some(r)
+        } else if let Some(ref peer) = self.peer {
+            Some(peer)
+        } else {
+            None
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use test::TestRequest;
+
+    #[test]
+    fn test_forwarded() {
+        let req = TestRequest::default().request();
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.scheme(), "http");
+        assert_eq!(info.host(), "localhost:8080");
+
+        let req = TestRequest::default()
+            .header(
+                header::FORWARDED,
+                "for=192.0.2.60; proto=https; by=203.0.113.43; host=rust-lang.org",
+            )
+            .request();
+
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.scheme(), "https");
+        assert_eq!(info.host(), "rust-lang.org");
+        assert_eq!(info.remote(), Some("192.0.2.60"));
+
+        let req = TestRequest::default()
+            .header(header::HOST, "rust-lang.org")
+            .request();
+
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.scheme(), "http");
+        assert_eq!(info.host(), "rust-lang.org");
+        assert_eq!(info.remote(), None);
+
+        let req = TestRequest::default()
+            .header(X_FORWARDED_FOR, "192.0.2.60")
+            .request();
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.remote(), Some("192.0.2.60"));
+
+        let req = TestRequest::default()
+            .header(X_FORWARDED_HOST, "192.0.2.60")
+            .request();
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.host(), "192.0.2.60");
+        assert_eq!(info.remote(), None);
+
+        let req = TestRequest::default()
+            .header(X_FORWARDED_PROTO, "https")
+            .request();
+        let mut info = ConnectionInfo::default();
+        info.update(&req);
+        assert_eq!(info.scheme(), "https");
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/json.rs.html b/static/api/actix-web/0.7.2/src/actix_web/json.rs.html new file mode 100644 index 0000000..187de79 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/json.rs.html @@ -0,0 +1,903 @@ +json.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+
+use bytes::BytesMut;
+use futures::{Future, Poll, Stream};
+use http::header::CONTENT_LENGTH;
+use std::fmt;
+use std::ops::{Deref, DerefMut};
+use std::rc::Rc;
+
+use mime;
+use serde::de::DeserializeOwned;
+use serde::Serialize;
+use serde_json;
+
+use error::{Error, JsonPayloadError};
+use handler::{FromRequest, Responder};
+use http::StatusCode;
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+
+/// Json helper
+///
+/// Json can be used for two different purpose. First is for json response
+/// generation and second is for extracting typed information from request's
+/// payload.
+///
+/// To extract typed information from request's body, the type `T` must
+/// implement the `Deserialize` trait from *serde*.
+///
+/// [**JsonConfig**](dev/struct.JsonConfig.html) allows to configure extraction
+/// process.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{App, Json, Result, http};
+///
+/// #[derive(Deserialize)]
+/// struct Info {
+///     username: String,
+/// }
+///
+/// /// deserialize `Info` from request's body
+/// fn index(info: Json<Info>) -> Result<String> {
+///     Ok(format!("Welcome {}!", info.username))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource(
+///        "/index.html",
+///        |r| r.method(http::Method::POST).with(index));  // <- use `with` extractor
+/// }
+/// ```
+///
+/// The `Json` type allows you to respond with well-formed JSON data: simply
+/// return a value of type Json<T> where T is the type of a structure
+/// to serialize into *JSON*. The type `T` must implement the `Serialize`
+/// trait from *serde*.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # #[macro_use] extern crate serde_derive;
+/// # use actix_web::*;
+/// #
+/// #[derive(Serialize)]
+/// struct MyObj {
+///     name: String,
+/// }
+///
+/// fn index(req: HttpRequest) -> Result<Json<MyObj>> {
+///     Ok(Json(MyObj {
+///         name: req.match_info().query("name")?,
+///     }))
+/// }
+/// # fn main() {}
+/// ```
+pub struct Json<T>(pub T);
+
+impl<T> Json<T> {
+    /// Deconstruct to an inner value
+    pub fn into_inner(self) -> T {
+        self.0
+    }
+}
+
+impl<T> Deref for Json<T> {
+    type Target = T;
+
+    fn deref(&self) -> &T {
+        &self.0
+    }
+}
+
+impl<T> DerefMut for Json<T> {
+    fn deref_mut(&mut self) -> &mut T {
+        &mut self.0
+    }
+}
+
+impl<T> fmt::Debug for Json<T>
+where
+    T: fmt::Debug,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "Json: {:?}", self.0)
+    }
+}
+
+impl<T> fmt::Display for Json<T>
+where
+    T: fmt::Display,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        fmt::Display::fmt(&self.0, f)
+    }
+}
+
+impl<T: Serialize> Responder for Json<T> {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn respond_to<S>(self, req: &HttpRequest<S>) -> Result<HttpResponse, Error> {
+        let body = serde_json::to_string(&self.0)?;
+
+        Ok(req
+            .build_response(StatusCode::OK)
+            .content_type("application/json")
+            .body(body))
+    }
+}
+
+impl<T, S> FromRequest<S> for Json<T>
+where
+    T: DeserializeOwned + 'static,
+    S: 'static,
+{
+    type Config = JsonConfig<S>;
+    type Result = Box<Future<Item = Self, Error = Error>>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
+        let req2 = req.clone();
+        let err = Rc::clone(&cfg.ehandler);
+        Box::new(
+            JsonBody::new(req)
+                .limit(cfg.limit)
+                .map_err(move |e| (*err)(e, &req2))
+                .map(Json),
+        )
+    }
+}
+
+/// Json extractor configuration
+///
+/// ```rust
+/// # extern crate actix_web;
+/// #[macro_use] extern crate serde_derive;
+/// use actix_web::{error, http, App, HttpResponse, Json, Result};
+///
+/// #[derive(Deserialize)]
+/// struct Info {
+///     username: String,
+/// }
+///
+/// /// deserialize `Info` from request's body, max payload size is 4kb
+/// fn index(info: Json<Info>) -> Result<String> {
+///     Ok(format!("Welcome {}!", info.username))
+/// }
+///
+/// fn main() {
+///     let app = App::new().resource("/index.html", |r| {
+///         r.method(http::Method::POST)
+///               .with_config(index, |cfg| {
+///                   cfg.limit(4096)   // <- change json extractor configuration
+///                      .error_handler(|err, req| {  // <- create custom error response
+///                          error::InternalError::from_response(
+///                              err, HttpResponse::Conflict().finish()).into()
+///                          });
+///               })
+///     });
+/// }
+/// ```
+pub struct JsonConfig<S> {
+    limit: usize,
+    ehandler: Rc<Fn(JsonPayloadError, &HttpRequest<S>) -> Error>,
+}
+
+impl<S> JsonConfig<S> {
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(&mut self, limit: usize) -> &mut Self {
+        self.limit = limit;
+        self
+    }
+
+    /// Set custom error handler
+    pub fn error_handler<F>(&mut self, f: F) -> &mut Self
+    where
+        F: Fn(JsonPayloadError, &HttpRequest<S>) -> Error + 'static,
+    {
+        self.ehandler = Rc::new(f);
+        self
+    }
+}
+
+impl<S> Default for JsonConfig<S> {
+    fn default() -> Self {
+        JsonConfig {
+            limit: 262_144,
+            ehandler: Rc::new(|e, _| e.into()),
+        }
+    }
+}
+
+/// Request payload json parser that resolves to a deserialized `T` value.
+///
+/// Returns error:
+///
+/// * content type is not `application/json`
+/// * content length is greater than 256k
+///
+/// # Server example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # extern crate futures;
+/// # #[macro_use] extern crate serde_derive;
+/// use actix_web::{AsyncResponder, Error, HttpMessage, HttpRequest, HttpResponse};
+/// use futures::future::Future;
+///
+/// #[derive(Deserialize, Debug)]
+/// struct MyObj {
+///     name: String,
+/// }
+///
+/// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
+///     req.json()                   // <- get JsonBody future
+///        .from_err()
+///        .and_then(|val: MyObj| {  // <- deserialized value
+///            println!("==== BODY ==== {:?}", val);
+///            Ok(HttpResponse::Ok().into())
+///        }).responder()
+/// }
+/// # fn main() {}
+/// ```
+pub struct JsonBody<T: HttpMessage, U: DeserializeOwned> {
+    limit: usize,
+    length: Option<usize>,
+    stream: Option<T::Stream>,
+    err: Option<JsonPayloadError>,
+    fut: Option<Box<Future<Item = U, Error = JsonPayloadError>>>,
+}
+
+impl<T: HttpMessage, U: DeserializeOwned> JsonBody<T, U> {
+    /// Create `JsonBody` for request.
+    pub fn new(req: &T) -> Self {
+        // check content-type
+        let json = if let Ok(Some(mime)) = req.mime_type() {
+            mime.subtype() == mime::JSON || mime.suffix() == Some(mime::JSON)
+        } else {
+            false
+        };
+        if !json {
+            return JsonBody {
+                limit: 262_144,
+                length: None,
+                stream: None,
+                fut: None,
+                err: Some(JsonPayloadError::ContentType),
+            };
+        }
+
+        let mut len = None;
+        if let Some(l) = req.headers().get(CONTENT_LENGTH) {
+            if let Ok(s) = l.to_str() {
+                if let Ok(l) = s.parse::<usize>() {
+                    len = Some(l)
+                }
+            }
+        }
+
+        JsonBody {
+            limit: 262_144,
+            length: len,
+            stream: Some(req.payload()),
+            fut: None,
+            err: None,
+        }
+    }
+
+    /// Change max size of payload. By default max size is 256Kb
+    pub fn limit(mut self, limit: usize) -> Self {
+        self.limit = limit;
+        self
+    }
+}
+
+impl<T: HttpMessage + 'static, U: DeserializeOwned + 'static> Future for JsonBody<T, U> {
+    type Item = U;
+    type Error = JsonPayloadError;
+
+    fn poll(&mut self) -> Poll<U, JsonPayloadError> {
+        if let Some(ref mut fut) = self.fut {
+            return fut.poll();
+        }
+
+        if let Some(err) = self.err.take() {
+            return Err(err);
+        }
+
+        let limit = self.limit;
+        if let Some(len) = self.length.take() {
+            if len > limit {
+                return Err(JsonPayloadError::Overflow);
+            }
+        }
+
+        let fut = self
+            .stream
+            .take()
+            .expect("JsonBody could not be used second time")
+            .from_err()
+            .fold(BytesMut::with_capacity(8192), move |mut body, chunk| {
+                if (body.len() + chunk.len()) > limit {
+                    Err(JsonPayloadError::Overflow)
+                } else {
+                    body.extend_from_slice(&chunk);
+                    Ok(body)
+                }
+            })
+            .and_then(|body| Ok(serde_json::from_slice::<U>(&body)?));
+        self.fut = Some(Box::new(fut));
+        self.poll()
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use bytes::Bytes;
+    use futures::Async;
+    use http::header;
+
+    use handler::Handler;
+    use test::TestRequest;
+    use with::With;
+
+    impl PartialEq for JsonPayloadError {
+        fn eq(&self, other: &JsonPayloadError) -> bool {
+            match *self {
+                JsonPayloadError::Overflow => match *other {
+                    JsonPayloadError::Overflow => true,
+                    _ => false,
+                },
+                JsonPayloadError::ContentType => match *other {
+                    JsonPayloadError::ContentType => true,
+                    _ => false,
+                },
+                _ => false,
+            }
+        }
+    }
+
+    #[derive(Serialize, Deserialize, PartialEq, Debug)]
+    struct MyObject {
+        name: String,
+    }
+
+    #[test]
+    fn test_json() {
+        let json = Json(MyObject {
+            name: "test".to_owned(),
+        });
+        let resp = json.respond_to(&TestRequest::default().finish()).unwrap();
+        assert_eq!(
+            resp.headers().get(header::CONTENT_TYPE).unwrap(),
+            "application/json"
+        );
+    }
+
+    #[test]
+    fn test_json_body() {
+        let req = TestRequest::default().finish();
+        let mut json = req.json::<MyObject>();
+        assert_eq!(json.poll().err().unwrap(), JsonPayloadError::ContentType);
+
+        let req = TestRequest::default()
+            .header(
+                header::CONTENT_TYPE,
+                header::HeaderValue::from_static("application/text"),
+            )
+            .finish();
+        let mut json = req.json::<MyObject>();
+        assert_eq!(json.poll().err().unwrap(), JsonPayloadError::ContentType);
+
+        let req = TestRequest::default()
+            .header(
+                header::CONTENT_TYPE,
+                header::HeaderValue::from_static("application/json"),
+            )
+            .header(
+                header::CONTENT_LENGTH,
+                header::HeaderValue::from_static("10000"),
+            )
+            .finish();
+        let mut json = req.json::<MyObject>().limit(100);
+        assert_eq!(json.poll().err().unwrap(), JsonPayloadError::Overflow);
+
+        let req = TestRequest::default()
+            .header(
+                header::CONTENT_TYPE,
+                header::HeaderValue::from_static("application/json"),
+            )
+            .header(
+                header::CONTENT_LENGTH,
+                header::HeaderValue::from_static("16"),
+            )
+            .set_payload(Bytes::from_static(b"{\"name\": \"test\"}"))
+            .finish();
+
+        let mut json = req.json::<MyObject>();
+        assert_eq!(
+            json.poll().ok().unwrap(),
+            Async::Ready(MyObject {
+                name: "test".to_owned()
+            })
+        );
+    }
+
+    #[test]
+    fn test_with_json() {
+        let mut cfg = JsonConfig::default();
+        cfg.limit(4096);
+        let handler = With::new(|data: Json<MyObject>| data, cfg);
+
+        let req = TestRequest::default().finish();
+        assert!(handler.handle(&req).as_err().is_some());
+
+        let req = TestRequest::with_header(
+            header::CONTENT_TYPE,
+            header::HeaderValue::from_static("application/json"),
+        ).header(
+            header::CONTENT_LENGTH,
+            header::HeaderValue::from_static("16"),
+        )
+            .set_payload(Bytes::from_static(b"{\"name\": \"test\"}"))
+            .finish();
+        assert!(handler.handle(&req).as_err().is_none())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/lib.rs.html b/static/api/actix-web/0.7.2/src/actix_web/lib.rs.html new file mode 100644 index 0000000..4783063 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/lib.rs.html @@ -0,0 +1,549 @@ +lib.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+
+//! Actix web is a small, pragmatic, and extremely fast web framework
+//! for Rust.
+//!
+//! ```rust
+//! use actix_web::{server, App, Path, Responder};
+//! # use std::thread;
+//!
+//! fn index(info: Path<(String, u32)>) -> impl Responder {
+//!     format!("Hello {}! id:{}", info.0, info.1)
+//! }
+//!
+//! fn main() {
+//!     # thread::spawn(|| {
+//!     server::new(|| {
+//!         App::new().resource("/{name}/{id}/index.html", |r| r.with(index))
+//!     }).bind("127.0.0.1:8080")
+//!         .unwrap()
+//!         .run();
+//!     # });
+//! }
+//! ```
+//!
+//! ## Documentation & community resources
+//!
+//! Besides the API documentation (which you are currently looking
+//! at!), several other resources are available:
+//!
+//! * [User Guide](https://actix.rs/docs/)
+//! * [Chat on gitter](https://gitter.im/actix/actix)
+//! * [GitHub repository](https://github.com/actix/actix-web)
+//! * [Cargo package](https://crates.io/crates/actix-web)
+//!
+//! To get started navigating the API documentation you may want to
+//! consider looking at the following pages:
+//!
+//! * [App](struct.App.html): This struct represents an actix-web
+//!   application and is used to configure routes and other common
+//!   settings.
+//!
+//! * [HttpServer](server/struct.HttpServer.html): This struct
+//!   represents an HTTP server instance and is used to instantiate and
+//!   configure servers.
+//!
+//! * [HttpRequest](struct.HttpRequest.html) and
+//!   [HttpResponse](struct.HttpResponse.html): These structs
+//!   represent HTTP requests and responses and expose various methods
+//!   for inspecting, creating and otherwise utilizing them.
+//!
+//! ## Features
+//!
+//! * Supported *HTTP/1.x* and *HTTP/2.0* protocols
+//! * Streaming and pipelining
+//! * Keep-alive and slow requests handling
+//! * `WebSockets` server/client
+//! * Transparent content compression/decompression (br, gzip, deflate)
+//! * Configurable request routing
+//! * Graceful server shutdown
+//! * Multipart streams
+//! * SSL support with OpenSSL or `native-tls`
+//! * Middlewares (`Logger`, `Session`, `CORS`, `CSRF`, `DefaultHeaders`)
+//! * Built on top of [Actix actor framework](https://github.com/actix/actix)
+//! * Supported Rust version: 1.26 or later
+//!
+//! ## Package feature
+//!
+//! * `tls` - enables ssl support via `native-tls` crate
+//! * `alpn` - enables ssl support via `openssl` crate, require for `http/2`
+//!    support
+//! * `session` - enables session support, includes `ring` crate as
+//!   dependency
+//! * `brotli` - enables `brotli` compression support, requires `c`
+//!   compiler
+//! * `flate2-c` - enables `gzip`, `deflate` compression support, requires
+//!   `c` compiler
+//! * `flate2-rust` - experimental rust based implementation for
+//!   `gzip`, `deflate` compression.
+//!
+#![cfg_attr(actix_nightly, feature(
+    specialization, // for impl ErrorResponse for std::error::Error
+    extern_prelude,
+))]
+#![cfg_attr(
+    feature = "cargo-clippy",
+    allow(decimal_literal_representation, suspicious_arithmetic_impl)
+)]
+#![warn(missing_docs)]
+
+#[macro_use]
+extern crate log;
+extern crate base64;
+extern crate byteorder;
+extern crate bytes;
+extern crate regex;
+extern crate sha1;
+extern crate time;
+#[macro_use]
+extern crate bitflags;
+#[macro_use]
+extern crate failure;
+#[macro_use]
+extern crate lazy_static;
+#[macro_use]
+extern crate futures;
+extern crate cookie;
+extern crate futures_cpupool;
+extern crate htmlescape;
+extern crate http as modhttp;
+extern crate httparse;
+extern crate language_tags;
+extern crate lazycell;
+extern crate mime;
+extern crate mime_guess;
+extern crate mio;
+extern crate net2;
+extern crate parking_lot;
+extern crate rand;
+extern crate slab;
+extern crate tokio;
+extern crate tokio_io;
+extern crate tokio_reactor;
+extern crate tokio_tcp;
+extern crate tokio_timer;
+extern crate url;
+#[macro_use]
+extern crate serde;
+#[cfg(feature = "brotli")]
+extern crate brotli2;
+extern crate encoding;
+#[cfg(feature = "flate2")]
+extern crate flate2;
+extern crate h2 as http2;
+extern crate num_cpus;
+#[macro_use]
+extern crate percent_encoding;
+extern crate serde_json;
+extern crate smallvec;
+#[macro_use]
+extern crate actix as actix_inner;
+
+#[cfg(test)]
+#[macro_use]
+extern crate serde_derive;
+
+#[cfg(feature = "tls")]
+extern crate native_tls;
+#[cfg(feature = "tls")]
+extern crate tokio_tls;
+
+#[cfg(feature = "openssl")]
+extern crate openssl;
+#[cfg(feature = "openssl")]
+extern crate tokio_openssl;
+
+mod application;
+mod body;
+mod context;
+mod de;
+mod extensions;
+mod extractor;
+mod handler;
+mod header;
+mod helpers;
+mod httpcodes;
+mod httpmessage;
+mod httprequest;
+mod httpresponse;
+mod info;
+mod json;
+mod param;
+mod payload;
+mod pipeline;
+mod resource;
+mod route;
+mod router;
+mod scope;
+mod serde_urlencoded;
+mod uri;
+mod with;
+
+pub mod client;
+pub mod error;
+pub mod fs;
+pub mod middleware;
+pub mod multipart;
+pub mod pred;
+pub mod server;
+pub mod test;
+pub mod ws;
+pub use application::App;
+pub use body::{Binary, Body};
+pub use context::HttpContext;
+pub use error::{Error, ResponseError, Result};
+pub use extensions::Extensions;
+pub use extractor::{Form, Path, Query};
+pub use handler::{
+    AsyncResponder, Either, FromRequest, FutureResponse, Responder, State,
+};
+pub use httpmessage::HttpMessage;
+pub use httprequest::HttpRequest;
+pub use httpresponse::HttpResponse;
+pub use json::Json;
+pub use scope::Scope;
+pub use server::Request;
+
+pub mod actix {
+    //! Re-exports [actix's](https://docs.rs/actix/) prelude
+
+    extern crate actix;
+    pub use self::actix::actors::resolver;
+    pub use self::actix::actors::signal;
+    pub use self::actix::fut;
+    pub use self::actix::msgs;
+    pub use self::actix::prelude::*;
+    pub use self::actix::{run, spawn};
+}
+
+#[cfg(feature = "openssl")]
+pub(crate) const HAS_OPENSSL: bool = true;
+#[cfg(not(feature = "openssl"))]
+pub(crate) const HAS_OPENSSL: bool = false;
+
+#[cfg(feature = "tls")]
+pub(crate) const HAS_TLS: bool = true;
+#[cfg(not(feature = "tls"))]
+pub(crate) const HAS_TLS: bool = false;
+
+pub mod dev {
+    //! The `actix-web` prelude for library developers
+    //!
+    //! The purpose of this module is to alleviate imports of many common actix
+    //! traits by adding a glob import to the top of actix heavy modules:
+    //!
+    //! ```
+    //! # #![allow(unused_imports)]
+    //! use actix_web::dev::*;
+    //! ```
+
+    pub use body::BodyStream;
+    pub use context::Drain;
+    pub use extractor::{FormConfig, PayloadConfig};
+    pub use handler::{AsyncResult, Handler};
+    pub use httpmessage::{MessageBody, UrlEncoded};
+    pub use httpresponse::HttpResponseBuilder;
+    pub use info::ConnectionInfo;
+    pub use json::{JsonBody, JsonConfig};
+    pub use param::{FromParam, Params};
+    pub use payload::{Payload, PayloadBuffer};
+    pub use resource::Resource;
+    pub use route::Route;
+    pub use router::{ResourceDef, ResourceInfo, ResourceType, Router};
+}
+
+pub mod http {
+    //! Various HTTP related types
+
+    // re-exports
+    pub use modhttp::{Method, StatusCode, Version};
+
+    #[doc(hidden)]
+    pub use modhttp::{uri, Error, Extensions, HeaderMap, HttpTryFrom, Uri};
+
+    pub use cookie::{Cookie, CookieBuilder};
+
+    pub use helpers::NormalizePath;
+
+    /// Various http headers
+    pub mod header {
+        pub use header::*;
+        pub use header::{ContentDisposition, DispositionType, DispositionParam, Charset, LanguageTag};
+    }
+    pub use header::ContentEncoding;
+    pub use httpresponse::ConnectionType;
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/cors.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/cors.rs.html new file mode 100644 index 0000000..0ecd44a --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/cors.rs.html @@ -0,0 +1,2321 @@ +cors.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+
+//! Cross-origin resource sharing (CORS) for Actix applications
+//!
+//! CORS middleware could be used with application and with resource.
+//! First you need to construct CORS middleware instance.
+//!
+//! To construct a cors:
+//!
+//!   1. Call [`Cors::build`](struct.Cors.html#method.build) to start building.
+//!   2. Use any of the builder methods to set fields in the backend.
+//!   3. Call [finish](struct.Cors.html#method.finish) to retrieve the
+//!      constructed backend.
+//!
+//! Cors middleware could be used as parameter for `App::middleware()` or
+//! `Resource::middleware()` methods. But you have to use
+//! `Cors::for_app()` method to support *preflight* OPTIONS request.
+//!
+//!
+//! # Example
+//!
+//! ```rust
+//! # extern crate actix_web;
+//! use actix_web::middleware::cors::Cors;
+//! use actix_web::{http, App, HttpRequest, HttpResponse};
+//!
+//! fn index(mut req: HttpRequest) -> &'static str {
+//!     "Hello world"
+//! }
+//!
+//! fn main() {
+//!     let app = App::new().configure(|app| {
+//!         Cors::for_app(app) // <- Construct CORS middleware builder
+//!             .allowed_origin("https://www.rust-lang.org/")
+//!             .allowed_methods(vec!["GET", "POST"])
+//!             .allowed_headers(vec![http::header::AUTHORIZATION, http::header::ACCEPT])
+//!             .allowed_header(http::header::CONTENT_TYPE)
+//!             .max_age(3600)
+//!             .resource("/index.html", |r| {
+//!                 r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+//!                 r.method(http::Method::HEAD).f(|_| HttpResponse::MethodNotAllowed());
+//!             })
+//!             .register()
+//!     });
+//! }
+//! ```
+//! In this example custom *CORS* middleware get registered for "/index.html"
+//! endpoint.
+//!
+//! Cors middleware automatically handle *OPTIONS* preflight request.
+use std::collections::HashSet;
+use std::iter::FromIterator;
+use std::rc::Rc;
+
+use http::header::{self, HeaderName, HeaderValue};
+use http::{self, HttpTryFrom, Method, StatusCode, Uri};
+
+use application::App;
+use error::{ResponseError, Result};
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Response, Started};
+use resource::Resource;
+use router::ResourceDef;
+use server::Request;
+
+/// A set of errors that can occur during processing CORS
+#[derive(Debug, Fail)]
+pub enum CorsError {
+    /// The HTTP request header `Origin` is required but was not provided
+    #[fail(
+        display = "The HTTP request header `Origin` is required but was not provided"
+    )]
+    MissingOrigin,
+    /// The HTTP request header `Origin` could not be parsed correctly.
+    #[fail(display = "The HTTP request header `Origin` could not be parsed correctly.")]
+    BadOrigin,
+    /// The request header `Access-Control-Request-Method` is required but is
+    /// missing
+    #[fail(
+        display = "The request header `Access-Control-Request-Method` is required but is missing"
+    )]
+    MissingRequestMethod,
+    /// The request header `Access-Control-Request-Method` has an invalid value
+    #[fail(
+        display = "The request header `Access-Control-Request-Method` has an invalid value"
+    )]
+    BadRequestMethod,
+    /// The request header `Access-Control-Request-Headers`  has an invalid
+    /// value
+    #[fail(
+        display = "The request header `Access-Control-Request-Headers`  has an invalid value"
+    )]
+    BadRequestHeaders,
+    /// The request header `Access-Control-Request-Headers`  is required but is
+    /// missing.
+    #[fail(
+        display = "The request header `Access-Control-Request-Headers`  is required but is
+                     missing"
+    )]
+    MissingRequestHeaders,
+    /// Origin is not allowed to make this request
+    #[fail(display = "Origin is not allowed to make this request")]
+    OriginNotAllowed,
+    /// Requested method is not allowed
+    #[fail(display = "Requested method is not allowed")]
+    MethodNotAllowed,
+    /// One or more headers requested are not allowed
+    #[fail(display = "One or more headers requested are not allowed")]
+    HeadersNotAllowed,
+}
+
+impl ResponseError for CorsError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::with_body(StatusCode::BAD_REQUEST, format!("{}", self))
+    }
+}
+
+/// An enum signifying that some of type T is allowed, or `All` (everything is
+/// allowed).
+///
+/// `Default` is implemented for this enum and is `All`.
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub enum AllOrSome<T> {
+    /// Everything is allowed. Usually equivalent to the "*" value.
+    All,
+    /// Only some of `T` is allowed
+    Some(T),
+}
+
+impl<T> Default for AllOrSome<T> {
+    fn default() -> Self {
+        AllOrSome::All
+    }
+}
+
+impl<T> AllOrSome<T> {
+    /// Returns whether this is an `All` variant
+    pub fn is_all(&self) -> bool {
+        match *self {
+            AllOrSome::All => true,
+            AllOrSome::Some(_) => false,
+        }
+    }
+
+    /// Returns whether this is a `Some` variant
+    pub fn is_some(&self) -> bool {
+        !self.is_all()
+    }
+
+    /// Returns &T
+    pub fn as_ref(&self) -> Option<&T> {
+        match *self {
+            AllOrSome::All => None,
+            AllOrSome::Some(ref t) => Some(t),
+        }
+    }
+}
+
+/// `Middleware` for Cross-origin resource sharing support
+///
+/// The Cors struct contains the settings for CORS requests to be validated and
+/// for responses to be generated.
+#[derive(Clone)]
+pub struct Cors {
+    inner: Rc<Inner>,
+}
+
+struct Inner {
+    methods: HashSet<Method>,
+    origins: AllOrSome<HashSet<String>>,
+    origins_str: Option<HeaderValue>,
+    headers: AllOrSome<HashSet<HeaderName>>,
+    expose_hdrs: Option<String>,
+    max_age: Option<usize>,
+    preflight: bool,
+    send_wildcard: bool,
+    supports_credentials: bool,
+    vary_header: bool,
+}
+
+impl Default for Cors {
+    fn default() -> Cors {
+        let inner = Inner {
+            origins: AllOrSome::default(),
+            origins_str: None,
+            methods: HashSet::from_iter(
+                vec![
+                    Method::GET,
+                    Method::HEAD,
+                    Method::POST,
+                    Method::OPTIONS,
+                    Method::PUT,
+                    Method::PATCH,
+                    Method::DELETE,
+                ].into_iter(),
+            ),
+            headers: AllOrSome::All,
+            expose_hdrs: None,
+            max_age: None,
+            preflight: true,
+            send_wildcard: false,
+            supports_credentials: false,
+            vary_header: true,
+        };
+        Cors {
+            inner: Rc::new(inner),
+        }
+    }
+}
+
+impl Cors {
+    /// Build a new CORS middleware instance
+    pub fn build() -> CorsBuilder<()> {
+        CorsBuilder {
+            cors: Some(Inner {
+                origins: AllOrSome::All,
+                origins_str: None,
+                methods: HashSet::new(),
+                headers: AllOrSome::All,
+                expose_hdrs: None,
+                max_age: None,
+                preflight: true,
+                send_wildcard: false,
+                supports_credentials: false,
+                vary_header: true,
+            }),
+            methods: false,
+            error: None,
+            expose_hdrs: HashSet::new(),
+            resources: Vec::new(),
+            app: None,
+        }
+    }
+
+    /// Create CorsBuilder for a specified application.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::middleware::cors::Cors;
+    /// use actix_web::{http, App, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new().configure(
+    ///         |app| {
+    ///             Cors::for_app(app)   // <- Construct CORS builder
+    ///             .allowed_origin("https://www.rust-lang.org/")
+    ///             .resource("/resource", |r| {       // register resource
+    ///                  r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+    ///             })
+    ///             .register()
+    ///         }, // construct CORS and return application instance
+    ///     );
+    /// }
+    /// ```
+    pub fn for_app<S: 'static>(app: App<S>) -> CorsBuilder<S> {
+        CorsBuilder {
+            cors: Some(Inner {
+                origins: AllOrSome::All,
+                origins_str: None,
+                methods: HashSet::new(),
+                headers: AllOrSome::All,
+                expose_hdrs: None,
+                max_age: None,
+                preflight: true,
+                send_wildcard: false,
+                supports_credentials: false,
+                vary_header: true,
+            }),
+            methods: false,
+            error: None,
+            expose_hdrs: HashSet::new(),
+            resources: Vec::new(),
+            app: Some(app),
+        }
+    }
+
+    /// This method register cors middleware with resource and
+    /// adds route for *OPTIONS* preflight requests.
+    ///
+    /// It is possible to register *Cors* middleware with
+    /// `Resource::middleware()` method, but in that case *Cors*
+    /// middleware wont be able to handle *OPTIONS* requests.
+    pub fn register<S: 'static>(self, resource: &mut Resource<S>) {
+        resource
+            .method(Method::OPTIONS)
+            .h(|_: &_| HttpResponse::Ok());
+        resource.middleware(self);
+    }
+
+    fn validate_origin(&self, req: &Request) -> Result<(), CorsError> {
+        if let Some(hdr) = req.headers().get(header::ORIGIN) {
+            if let Ok(origin) = hdr.to_str() {
+                return match self.inner.origins {
+                    AllOrSome::All => Ok(()),
+                    AllOrSome::Some(ref allowed_origins) => allowed_origins
+                        .get(origin)
+                        .and_then(|_| Some(()))
+                        .ok_or_else(|| CorsError::OriginNotAllowed),
+                };
+            }
+            Err(CorsError::BadOrigin)
+        } else {
+            return match self.inner.origins {
+                AllOrSome::All => Ok(()),
+                _ => Err(CorsError::MissingOrigin),
+            };
+        }
+    }
+
+    fn validate_allowed_method(&self, req: &Request) -> Result<(), CorsError> {
+        if let Some(hdr) = req.headers().get(header::ACCESS_CONTROL_REQUEST_METHOD) {
+            if let Ok(meth) = hdr.to_str() {
+                if let Ok(method) = Method::try_from(meth) {
+                    return self
+                        .inner
+                        .methods
+                        .get(&method)
+                        .and_then(|_| Some(()))
+                        .ok_or_else(|| CorsError::MethodNotAllowed);
+                }
+            }
+            Err(CorsError::BadRequestMethod)
+        } else {
+            Err(CorsError::MissingRequestMethod)
+        }
+    }
+
+    fn validate_allowed_headers(&self, req: &Request) -> Result<(), CorsError> {
+        match self.inner.headers {
+            AllOrSome::All => Ok(()),
+            AllOrSome::Some(ref allowed_headers) => {
+                if let Some(hdr) =
+                    req.headers().get(header::ACCESS_CONTROL_REQUEST_HEADERS)
+                {
+                    if let Ok(headers) = hdr.to_str() {
+                        let mut hdrs = HashSet::new();
+                        for hdr in headers.split(',') {
+                            match HeaderName::try_from(hdr.trim()) {
+                                Ok(hdr) => hdrs.insert(hdr),
+                                Err(_) => return Err(CorsError::BadRequestHeaders),
+                            };
+                        }
+
+                        if !hdrs.is_empty() && !hdrs.is_subset(allowed_headers) {
+                            return Err(CorsError::HeadersNotAllowed);
+                        }
+                        return Ok(());
+                    }
+                    Err(CorsError::BadRequestHeaders)
+                } else {
+                    Err(CorsError::MissingRequestHeaders)
+                }
+            }
+        }
+    }
+}
+
+impl<S> Middleware<S> for Cors {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        if self.inner.preflight && Method::OPTIONS == *req.method() {
+            self.validate_origin(req)?;
+            self.validate_allowed_method(&req)?;
+            self.validate_allowed_headers(&req)?;
+
+            // allowed headers
+            let headers = if let Some(headers) = self.inner.headers.as_ref() {
+                Some(
+                    HeaderValue::try_from(
+                        &headers
+                            .iter()
+                            .fold(String::new(), |s, v| s + "," + v.as_str())
+                            .as_str()[1..],
+                    ).unwrap(),
+                )
+            } else if let Some(hdr) =
+                req.headers().get(header::ACCESS_CONTROL_REQUEST_HEADERS)
+            {
+                Some(hdr.clone())
+            } else {
+                None
+            };
+
+            Ok(Started::Response(
+                HttpResponse::Ok()
+                    .if_some(self.inner.max_age.as_ref(), |max_age, resp| {
+                        let _ = resp.header(
+                            header::ACCESS_CONTROL_MAX_AGE,
+                            format!("{}", max_age).as_str(),
+                        );
+                    })
+                    .if_some(headers, |headers, resp| {
+                        let _ =
+                            resp.header(header::ACCESS_CONTROL_ALLOW_HEADERS, headers);
+                    })
+                    .if_true(self.inner.origins.is_all(), |resp| {
+                        if self.inner.send_wildcard {
+                            resp.header(header::ACCESS_CONTROL_ALLOW_ORIGIN, "*");
+                        } else {
+                            let origin = req.headers().get(header::ORIGIN).unwrap();
+                            resp.header(
+                                header::ACCESS_CONTROL_ALLOW_ORIGIN,
+                                origin.clone(),
+                            );
+                        }
+                    })
+                    .if_true(self.inner.origins.is_some(), |resp| {
+                        resp.header(
+                            header::ACCESS_CONTROL_ALLOW_ORIGIN,
+                            self.inner.origins_str.as_ref().unwrap().clone(),
+                        );
+                    })
+                    .if_true(self.inner.supports_credentials, |resp| {
+                        resp.header(header::ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
+                    })
+                    .header(
+                        header::ACCESS_CONTROL_ALLOW_METHODS,
+                        &self
+                            .inner
+                            .methods
+                            .iter()
+                            .fold(String::new(), |s, v| s + "," + v.as_str())
+                            .as_str()[1..],
+                    )
+                    .finish(),
+            ))
+        } else {
+            // Only check requests with a origin header.
+            if req.headers().contains_key(header::ORIGIN) {
+                self.validate_origin(req)?;
+            }
+
+            Ok(Started::Done)
+        }
+    }
+
+    fn response(
+        &self, req: &HttpRequest<S>, mut resp: HttpResponse,
+    ) -> Result<Response> {
+        match self.inner.origins {
+            AllOrSome::All => {
+                if self.inner.send_wildcard {
+                    resp.headers_mut().insert(
+                        header::ACCESS_CONTROL_ALLOW_ORIGIN,
+                        HeaderValue::from_static("*"),
+                    );
+                } else if let Some(origin) = req.headers().get(header::ORIGIN) {
+                    resp.headers_mut()
+                        .insert(header::ACCESS_CONTROL_ALLOW_ORIGIN, origin.clone());
+                }
+            }
+            AllOrSome::Some(_) => {
+                resp.headers_mut().insert(
+                    header::ACCESS_CONTROL_ALLOW_ORIGIN,
+                    self.inner.origins_str.as_ref().unwrap().clone(),
+                );
+            }
+        }
+
+        if let Some(ref expose) = self.inner.expose_hdrs {
+            resp.headers_mut().insert(
+                header::ACCESS_CONTROL_EXPOSE_HEADERS,
+                HeaderValue::try_from(expose.as_str()).unwrap(),
+            );
+        }
+        if self.inner.supports_credentials {
+            resp.headers_mut().insert(
+                header::ACCESS_CONTROL_ALLOW_CREDENTIALS,
+                HeaderValue::from_static("true"),
+            );
+        }
+        if self.inner.vary_header {
+            let value = if let Some(hdr) = resp.headers_mut().get(header::VARY) {
+                let mut val: Vec<u8> = Vec::with_capacity(hdr.as_bytes().len() + 8);
+                val.extend(hdr.as_bytes());
+                val.extend(b", Origin");
+                HeaderValue::try_from(&val[..]).unwrap()
+            } else {
+                HeaderValue::from_static("Origin")
+            };
+            resp.headers_mut().insert(header::VARY, value);
+        }
+        Ok(Response::Done(resp))
+    }
+}
+
+/// Structure that follows the builder pattern for building `Cors` middleware
+/// structs.
+///
+/// To construct a cors:
+///
+///   1. Call [`Cors::build`](struct.Cors.html#method.build) to start building.
+///   2. Use any of the builder methods to set fields in the backend.
+/// 3. Call [finish](struct.Cors.html#method.finish) to retrieve the
+/// constructed backend.
+///
+/// # Example
+///
+/// ```rust
+/// # extern crate http;
+/// # extern crate actix_web;
+/// use actix_web::middleware::cors;
+/// use http::header;
+///
+/// # fn main() {
+/// let cors = cors::Cors::build()
+///     .allowed_origin("https://www.rust-lang.org/")
+///     .allowed_methods(vec!["GET", "POST"])
+///     .allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
+///     .allowed_header(header::CONTENT_TYPE)
+///     .max_age(3600)
+///     .finish();
+/// # }
+/// ```
+pub struct CorsBuilder<S = ()> {
+    cors: Option<Inner>,
+    methods: bool,
+    error: Option<http::Error>,
+    expose_hdrs: HashSet<HeaderName>,
+    resources: Vec<Resource<S>>,
+    app: Option<App<S>>,
+}
+
+fn cors<'a>(
+    parts: &'a mut Option<Inner>, err: &Option<http::Error>,
+) -> Option<&'a mut Inner> {
+    if err.is_some() {
+        return None;
+    }
+    parts.as_mut()
+}
+
+impl<S: 'static> CorsBuilder<S> {
+    /// Add an origin that are allowed to make requests.
+    /// Will be verified against the `Origin` request header.
+    ///
+    /// When `All` is set, and `send_wildcard` is set, "*" will be sent in
+    /// the `Access-Control-Allow-Origin` response header. Otherwise, the
+    /// client's `Origin` request header will be echoed back in the
+    /// `Access-Control-Allow-Origin` response header.
+    ///
+    /// When `Some` is set, the client's `Origin` request header will be
+    /// checked in a case-sensitive manner.
+    ///
+    /// This is the `list of origins` in the
+    /// [Resource Processing Model](https://www.w3.org/TR/cors/#resource-processing-model).
+    ///
+    /// Defaults to `All`.
+    ///
+    /// Builder panics if supplied origin is not valid uri.
+    pub fn allowed_origin(&mut self, origin: &str) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            match Uri::try_from(origin) {
+                Ok(_) => {
+                    if cors.origins.is_all() {
+                        cors.origins = AllOrSome::Some(HashSet::new());
+                    }
+                    if let AllOrSome::Some(ref mut origins) = cors.origins {
+                        origins.insert(origin.to_owned());
+                    }
+                }
+                Err(e) => {
+                    self.error = Some(e.into());
+                }
+            }
+        }
+        self
+    }
+
+    /// Set a list of methods which the allowed origins are allowed to access
+    /// for requests.
+    ///
+    /// This is the `list of methods` in the
+    /// [Resource Processing Model](https://www.w3.org/TR/cors/#resource-processing-model).
+    ///
+    /// Defaults to `[GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]`
+    pub fn allowed_methods<U, M>(&mut self, methods: U) -> &mut CorsBuilder<S>
+    where
+        U: IntoIterator<Item = M>,
+        Method: HttpTryFrom<M>,
+    {
+        self.methods = true;
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            for m in methods {
+                match Method::try_from(m) {
+                    Ok(method) => {
+                        cors.methods.insert(method);
+                    }
+                    Err(e) => {
+                        self.error = Some(e.into());
+                        break;
+                    }
+                }
+            }
+        }
+        self
+    }
+
+    /// Set an allowed header
+    pub fn allowed_header<H>(&mut self, header: H) -> &mut CorsBuilder<S>
+    where
+        HeaderName: HttpTryFrom<H>,
+    {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            match HeaderName::try_from(header) {
+                Ok(method) => {
+                    if cors.headers.is_all() {
+                        cors.headers = AllOrSome::Some(HashSet::new());
+                    }
+                    if let AllOrSome::Some(ref mut headers) = cors.headers {
+                        headers.insert(method);
+                    }
+                }
+                Err(e) => self.error = Some(e.into()),
+            }
+        }
+        self
+    }
+
+    /// Set a list of header field names which can be used when
+    /// this resource is accessed by allowed origins.
+    ///
+    /// If `All` is set, whatever is requested by the client in
+    /// `Access-Control-Request-Headers` will be echoed back in the
+    /// `Access-Control-Allow-Headers` header.
+    ///
+    /// This is the `list of headers` in the
+    /// [Resource Processing Model](https://www.w3.org/TR/cors/#resource-processing-model).
+    ///
+    /// Defaults to `All`.
+    pub fn allowed_headers<U, H>(&mut self, headers: U) -> &mut CorsBuilder<S>
+    where
+        U: IntoIterator<Item = H>,
+        HeaderName: HttpTryFrom<H>,
+    {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            for h in headers {
+                match HeaderName::try_from(h) {
+                    Ok(method) => {
+                        if cors.headers.is_all() {
+                            cors.headers = AllOrSome::Some(HashSet::new());
+                        }
+                        if let AllOrSome::Some(ref mut headers) = cors.headers {
+                            headers.insert(method);
+                        }
+                    }
+                    Err(e) => {
+                        self.error = Some(e.into());
+                        break;
+                    }
+                }
+            }
+        }
+        self
+    }
+
+    /// Set a list of headers which are safe to expose to the API of a CORS API
+    /// specification. This corresponds to the
+    /// `Access-Control-Expose-Headers` response header.
+    ///
+    /// This is the `list of exposed headers` in the
+    /// [Resource Processing Model](https://www.w3.org/TR/cors/#resource-processing-model).
+    ///
+    /// This defaults to an empty set.
+    pub fn expose_headers<U, H>(&mut self, headers: U) -> &mut CorsBuilder<S>
+    where
+        U: IntoIterator<Item = H>,
+        HeaderName: HttpTryFrom<H>,
+    {
+        for h in headers {
+            match HeaderName::try_from(h) {
+                Ok(method) => {
+                    self.expose_hdrs.insert(method);
+                }
+                Err(e) => {
+                    self.error = Some(e.into());
+                    break;
+                }
+            }
+        }
+        self
+    }
+
+    /// Set a maximum time for which this CORS request maybe cached.
+    /// This value is set as the `Access-Control-Max-Age` header.
+    ///
+    /// This defaults to `None` (unset).
+    pub fn max_age(&mut self, max_age: usize) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            cors.max_age = Some(max_age)
+        }
+        self
+    }
+
+    /// Set a wildcard origins
+    ///
+    /// If send wildcard is set and the `allowed_origins` parameter is `All`, a
+    /// wildcard `Access-Control-Allow-Origin` response header is sent,
+    /// rather than the request’s `Origin` header.
+    ///
+    /// This is the `supports credentials flag` in the
+    /// [Resource Processing Model](https://www.w3.org/TR/cors/#resource-processing-model).
+    ///
+    /// This **CANNOT** be used in conjunction with `allowed_origins` set to
+    /// `All` and `allow_credentials` set to `true`. Depending on the mode
+    /// of usage, this will either result in an `Error::
+    /// CredentialsWithWildcardOrigin` error during actix launch or runtime.
+    ///
+    /// Defaults to `false`.
+    pub fn send_wildcard(&mut self) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            cors.send_wildcard = true
+        }
+        self
+    }
+
+    /// Allows users to make authenticated requests
+    ///
+    /// If true, injects the `Access-Control-Allow-Credentials` header in
+    /// responses. This allows cookies and credentials to be submitted
+    /// across domains.
+    ///
+    /// This option cannot be used in conjunction with an `allowed_origin` set
+    /// to `All` and `send_wildcards` set to `true`.
+    ///
+    /// Defaults to `false`.
+    ///
+    /// Builder panics if credentials are allowed, but the Origin is set to "*".
+    /// This is not allowed by W3C
+    pub fn supports_credentials(&mut self) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            cors.supports_credentials = true
+        }
+        self
+    }
+
+    /// Disable `Vary` header support.
+    ///
+    /// When enabled the header `Vary: Origin` will be returned as per the W3
+    /// implementation guidelines.
+    ///
+    /// Setting this header when the `Access-Control-Allow-Origin` is
+    /// dynamically generated (e.g. when there is more than one allowed
+    /// origin, and an Origin than '*' is returned) informs CDNs and other
+    /// caches that the CORS headers are dynamic, and cannot be cached.
+    ///
+    /// By default `vary` header support is enabled.
+    pub fn disable_vary_header(&mut self) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            cors.vary_header = false
+        }
+        self
+    }
+
+    /// Disable *preflight* request support.
+    ///
+    /// When enabled cors middleware automatically handles *OPTIONS* request.
+    /// This is useful application level middleware.
+    ///
+    /// By default *preflight* support is enabled.
+    pub fn disable_preflight(&mut self) -> &mut CorsBuilder<S> {
+        if let Some(cors) = cors(&mut self.cors, &self.error) {
+            cors.preflight = false
+        }
+        self
+    }
+
+    /// Configure resource for a specific path.
+    ///
+    /// This is similar to a `App::resource()` method. Except, cors middleware
+    /// get registered for the resource.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::middleware::cors::Cors;
+    /// use actix_web::{http, App, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let app = App::new().configure(
+    ///         |app| {
+    ///             Cors::for_app(app)   // <- Construct CORS builder
+    ///             .allowed_origin("https://www.rust-lang.org/")
+    ///             .allowed_methods(vec!["GET", "POST"])
+    ///             .allowed_header(http::header::CONTENT_TYPE)
+    ///             .max_age(3600)
+    ///             .resource("/resource1", |r| {       // register resource
+    ///                  r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+    ///             })
+    ///             .resource("/resource2", |r| {       // register another resource
+    ///                  r.method(http::Method::HEAD)
+    ///                      .f(|_| HttpResponse::MethodNotAllowed());
+    ///             })
+    ///             .register()
+    ///         }, // construct CORS and return application instance
+    ///     );
+    /// }
+    /// ```
+    pub fn resource<F, R>(&mut self, path: &str, f: F) -> &mut CorsBuilder<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        // add resource handler
+        let mut resource = Resource::new(ResourceDef::new(path));
+        f(&mut resource);
+
+        self.resources.push(resource);
+        self
+    }
+
+    fn construct(&mut self) -> Cors {
+        if !self.methods {
+            self.allowed_methods(vec![
+                Method::GET,
+                Method::HEAD,
+                Method::POST,
+                Method::OPTIONS,
+                Method::PUT,
+                Method::PATCH,
+                Method::DELETE,
+            ]);
+        }
+
+        if let Some(e) = self.error.take() {
+            panic!("{}", e);
+        }
+
+        let mut cors = self.cors.take().expect("cannot reuse CorsBuilder");
+
+        if cors.supports_credentials && cors.send_wildcard && cors.origins.is_all() {
+            panic!("Credentials are allowed, but the Origin is set to \"*\"");
+        }
+
+        if let AllOrSome::Some(ref origins) = cors.origins {
+            let s = origins
+                .iter()
+                .fold(String::new(), |s, v| s + &v.to_string());
+            cors.origins_str = Some(HeaderValue::try_from(s.as_str()).unwrap());
+        }
+
+        if !self.expose_hdrs.is_empty() {
+            cors.expose_hdrs = Some(
+                self.expose_hdrs
+                    .iter()
+                    .fold(String::new(), |s, v| s + v.as_str())[1..]
+                    .to_owned(),
+            );
+        }
+        Cors {
+            inner: Rc::new(cors),
+        }
+    }
+
+    /// Finishes building and returns the built `Cors` instance.
+    ///
+    /// This method panics in case of any configuration error.
+    pub fn finish(&mut self) -> Cors {
+        if !self.resources.is_empty() {
+            panic!(
+                "CorsBuilder::resource() was used,
+                    to construct CORS `.register(app)` method should be used"
+            );
+        }
+        self.construct()
+    }
+
+    /// Finishes building Cors middleware and register middleware for
+    /// application
+    ///
+    /// This method panics in case of any configuration error or if non of
+    /// resources are registered.
+    pub fn register(&mut self) -> App<S> {
+        if self.resources.is_empty() {
+            panic!("No resources are registered.");
+        }
+
+        let cors = self.construct();
+        let mut app = self
+            .app
+            .take()
+            .expect("CorsBuilder has to be constructed with Cors::for_app(app)");
+
+        // register resources
+        for mut resource in self.resources.drain(..) {
+            cors.clone().register(&mut resource);
+            app.register_resource(resource);
+        }
+
+        app
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use test::{self, TestRequest};
+
+    impl Started {
+        fn is_done(&self) -> bool {
+            match *self {
+                Started::Done => true,
+                _ => false,
+            }
+        }
+        fn response(self) -> HttpResponse {
+            match self {
+                Started::Response(resp) => resp,
+                _ => panic!(),
+            }
+        }
+    }
+    impl Response {
+        fn response(self) -> HttpResponse {
+            match self {
+                Response::Done(resp) => resp,
+                _ => panic!(),
+            }
+        }
+    }
+
+    #[test]
+    #[should_panic(expected = "Credentials are allowed, but the Origin is set to")]
+    fn cors_validates_illegal_allow_credentials() {
+        Cors::build()
+            .supports_credentials()
+            .send_wildcard()
+            .finish();
+    }
+
+    #[test]
+    #[should_panic(expected = "No resources are registered")]
+    fn no_resource() {
+        Cors::build()
+            .supports_credentials()
+            .send_wildcard()
+            .register();
+    }
+
+    #[test]
+    #[should_panic(expected = "Cors::for_app(app)")]
+    fn no_resource2() {
+        Cors::build()
+            .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
+            .register();
+    }
+
+    #[test]
+    fn validate_origin_allows_all_origins() {
+        let cors = Cors::default();
+        let req = TestRequest::with_header("Origin", "https://www.example.com").finish();
+
+        assert!(cors.start(&req).ok().unwrap().is_done())
+    }
+
+    #[test]
+    fn test_preflight() {
+        let mut cors = Cors::build()
+            .send_wildcard()
+            .max_age(3600)
+            .allowed_methods(vec![Method::GET, Method::OPTIONS, Method::POST])
+            .allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
+            .allowed_header(header::CONTENT_TYPE)
+            .finish();
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .method(Method::OPTIONS)
+            .finish();
+
+        assert!(cors.start(&req).is_err());
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .header(header::ACCESS_CONTROL_REQUEST_METHOD, "put")
+            .method(Method::OPTIONS)
+            .finish();
+
+        assert!(cors.start(&req).is_err());
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .header(header::ACCESS_CONTROL_REQUEST_METHOD, "POST")
+            .header(
+                header::ACCESS_CONTROL_REQUEST_HEADERS,
+                "AUTHORIZATION,ACCEPT",
+            )
+            .method(Method::OPTIONS)
+            .finish();
+
+        let resp = cors.start(&req).unwrap().response();
+        assert_eq!(
+            &b"*"[..],
+            resp.headers()
+                .get(header::ACCESS_CONTROL_ALLOW_ORIGIN)
+                .unwrap()
+                .as_bytes()
+        );
+        assert_eq!(
+            &b"3600"[..],
+            resp.headers()
+                .get(header::ACCESS_CONTROL_MAX_AGE)
+                .unwrap()
+                .as_bytes()
+        );
+        //assert_eq!(
+        //    &b"authorization,accept,content-type"[..],
+        // resp.headers().get(header::ACCESS_CONTROL_ALLOW_HEADERS).unwrap().
+        // as_bytes()); assert_eq!(
+        //    &b"POST,GET,OPTIONS"[..],
+        // resp.headers().get(header::ACCESS_CONTROL_ALLOW_METHODS).unwrap().
+        // as_bytes());
+
+        Rc::get_mut(&mut cors.inner).unwrap().preflight = false;
+        assert!(cors.start(&req).unwrap().is_done());
+    }
+
+    // #[test]
+    // #[should_panic(expected = "MissingOrigin")]
+    // fn test_validate_missing_origin() {
+    //    let cors = Cors::build()
+    //        .allowed_origin("https://www.example.com")
+    //        .finish();
+    //    let mut req = HttpRequest::default();
+    //    cors.start(&req).unwrap();
+    // }
+
+    #[test]
+    #[should_panic(expected = "OriginNotAllowed")]
+    fn test_validate_not_allowed_origin() {
+        let cors = Cors::build()
+            .allowed_origin("https://www.example.com")
+            .finish();
+
+        let req = TestRequest::with_header("Origin", "https://www.unknown.com")
+            .method(Method::GET)
+            .finish();
+        cors.start(&req).unwrap();
+    }
+
+    #[test]
+    fn test_validate_origin() {
+        let cors = Cors::build()
+            .allowed_origin("https://www.example.com")
+            .finish();
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .method(Method::GET)
+            .finish();
+
+        assert!(cors.start(&req).unwrap().is_done());
+    }
+
+    #[test]
+    fn test_no_origin_response() {
+        let cors = Cors::build().finish();
+
+        let req = TestRequest::default().method(Method::GET).finish();
+        let resp: HttpResponse = HttpResponse::Ok().into();
+        let resp = cors.response(&req, resp).unwrap().response();
+        assert!(
+            resp.headers()
+                .get(header::ACCESS_CONTROL_ALLOW_ORIGIN)
+                .is_none()
+        );
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .method(Method::OPTIONS)
+            .finish();
+        let resp = cors.response(&req, resp).unwrap().response();
+        assert_eq!(
+            &b"https://www.example.com"[..],
+            resp.headers()
+                .get(header::ACCESS_CONTROL_ALLOW_ORIGIN)
+                .unwrap()
+                .as_bytes()
+        );
+    }
+
+    #[test]
+    fn test_response() {
+        let cors = Cors::build()
+            .send_wildcard()
+            .disable_preflight()
+            .max_age(3600)
+            .allowed_methods(vec![Method::GET, Method::OPTIONS, Method::POST])
+            .allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
+            .allowed_header(header::CONTENT_TYPE)
+            .finish();
+
+        let req = TestRequest::with_header("Origin", "https://www.example.com")
+            .method(Method::OPTIONS)
+            .finish();
+
+        let resp: HttpResponse = HttpResponse::Ok().into();
+        let resp = cors.response(&req, resp).unwrap().response();
+        assert_eq!(
+            &b"*"[..],
+            resp.headers()
+                .get(header::ACCESS_CONTROL_ALLOW_ORIGIN)
+                .unwrap()
+                .as_bytes()
+        );
+        assert_eq!(
+            &b"Origin"[..],
+            resp.headers().get(header::VARY).unwrap().as_bytes()
+        );
+
+        let resp: HttpResponse =
+            HttpResponse::Ok().header(header::VARY, "Accept").finish();
+        let resp = cors.response(&req, resp).unwrap().response();
+        assert_eq!(
+            &b"Accept, Origin"[..],
+            resp.headers().get(header::VARY).unwrap().as_bytes()
+        );
+
+        let cors = Cors::build()
+            .disable_vary_header()
+            .allowed_origin("https://www.example.com")
+            .finish();
+        let resp: HttpResponse = HttpResponse::Ok().into();
+        let resp = cors.response(&req, resp).unwrap().response();
+        assert_eq!(
+            &b"https://www.example.com"[..],
+            resp.headers()
+                .get(header::ACCESS_CONTROL_ALLOW_ORIGIN)
+                .unwrap()
+                .as_bytes()
+        );
+    }
+
+    #[test]
+    fn cors_resource() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new().configure(|app| {
+                Cors::for_app(app)
+                    .allowed_origin("https://www.example.com")
+                    .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
+                    .register()
+            })
+        });
+
+        let request = srv
+            .get()
+            .uri(srv.url("/test"))
+            .header("ORIGIN", "https://www.example2.com")
+            .finish()
+            .unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::BAD_REQUEST);
+
+        let request = srv.get().uri(srv.url("/test")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::OK);
+
+        let request = srv
+            .get()
+            .uri(srv.url("/test"))
+            .header("ORIGIN", "https://www.example.com")
+            .finish()
+            .unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.status(), StatusCode::OK);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/csrf.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/csrf.rs.html new file mode 100644 index 0000000..486aef9 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/csrf.rs.html @@ -0,0 +1,555 @@ +csrf.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+
+//! A filter for cross-site request forgery (CSRF).
+//!
+//! This middleware is stateless and [based on request
+//! headers](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Verifying_Same_Origin_with_Standard_Headers).
+//!
+//! By default requests are allowed only if one of these is true:
+//!
+//! * The request method is safe (`GET`, `HEAD`, `OPTIONS`). It is the
+//!   applications responsibility to ensure these methods cannot be used to
+//!   execute unwanted actions. Note that upgrade requests for websockets are
+//!   also considered safe.
+//! * The `Origin` header (added automatically by the browser) matches one
+//!   of the allowed origins.
+//! * There is no `Origin` header but the `Referer` header matches one of
+//!   the allowed origins.
+//!
+//! Use [`CsrfFilter::allow_xhr()`](struct.CsrfFilter.html#method.allow_xhr)
+//! if you want to allow requests with unprotected methods via
+//! [CORS](../cors/struct.Cors.html).
+//!
+//! # Example
+//!
+//! ```
+//! # extern crate actix_web;
+//! use actix_web::middleware::csrf;
+//! use actix_web::{http, App, HttpRequest, HttpResponse};
+//!
+//! fn handle_post(_: &HttpRequest) -> &'static str {
+//!     "This action should only be triggered with requests from the same site"
+//! }
+//!
+//! fn main() {
+//!     let app = App::new()
+//!         .middleware(
+//!             csrf::CsrfFilter::new().allowed_origin("https://www.example.com"),
+//!         )
+//!         .resource("/", |r| {
+//!             r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+//!             r.method(http::Method::POST).f(handle_post);
+//!         })
+//!         .finish();
+//! }
+//! ```
+//!
+//! In this example the entire application is protected from CSRF.
+
+use std::borrow::Cow;
+use std::collections::HashSet;
+
+use bytes::Bytes;
+use error::{ResponseError, Result};
+use http::{header, HeaderMap, HttpTryFrom, Uri};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Started};
+use server::Request;
+
+/// Potential cross-site request forgery detected.
+#[derive(Debug, Fail)]
+pub enum CsrfError {
+    /// The HTTP request header `Origin` was required but not provided.
+    #[fail(display = "Origin header required")]
+    MissingOrigin,
+    /// The HTTP request header `Origin` could not be parsed correctly.
+    #[fail(display = "Could not parse Origin header")]
+    BadOrigin,
+    /// The cross-site request was denied.
+    #[fail(display = "Cross-site request denied")]
+    CsrDenied,
+}
+
+impl ResponseError for CsrfError {
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::Forbidden().body(self.to_string())
+    }
+}
+
+fn uri_origin(uri: &Uri) -> Option<String> {
+    match (uri.scheme_part(), uri.host(), uri.port()) {
+        (Some(scheme), Some(host), Some(port)) => {
+            Some(format!("{}://{}:{}", scheme, host, port))
+        }
+        (Some(scheme), Some(host), None) => Some(format!("{}://{}", scheme, host)),
+        _ => None,
+    }
+}
+
+fn origin(headers: &HeaderMap) -> Option<Result<Cow<str>, CsrfError>> {
+    headers
+        .get(header::ORIGIN)
+        .map(|origin| {
+            origin
+                .to_str()
+                .map_err(|_| CsrfError::BadOrigin)
+                .map(|o| o.into())
+        })
+        .or_else(|| {
+            headers.get(header::REFERER).map(|referer| {
+                Uri::try_from(Bytes::from(referer.as_bytes()))
+                    .ok()
+                    .as_ref()
+                    .and_then(uri_origin)
+                    .ok_or(CsrfError::BadOrigin)
+                    .map(|o| o.into())
+            })
+        })
+}
+
+/// A middleware that filters cross-site requests.
+///
+/// To construct a CSRF filter:
+///
+/// 1. Call [`CsrfFilter::build`](struct.CsrfFilter.html#method.build) to
+///    start building.
+/// 2. [Add](struct.CsrfFilterBuilder.html#method.allowed_origin) allowed
+///    origins.
+/// 3. Call [finish](struct.CsrfFilterBuilder.html#method.finish) to retrieve
+///    the constructed filter.
+///
+/// # Example
+///
+/// ```
+/// use actix_web::middleware::csrf;
+/// use actix_web::App;
+///
+/// # fn main() {
+/// let app = App::new()
+///     .middleware(csrf::CsrfFilter::new().allowed_origin("https://www.example.com"));
+/// # }
+/// ```
+#[derive(Default)]
+pub struct CsrfFilter {
+    origins: HashSet<String>,
+    allow_xhr: bool,
+    allow_missing_origin: bool,
+    allow_upgrade: bool,
+}
+
+impl CsrfFilter {
+    /// Start building a `CsrfFilter`.
+    pub fn new() -> CsrfFilter {
+        CsrfFilter {
+            origins: HashSet::new(),
+            allow_xhr: false,
+            allow_missing_origin: false,
+            allow_upgrade: false,
+        }
+    }
+
+    /// Add an origin that is allowed to make requests. Will be verified
+    /// against the `Origin` request header.
+    pub fn allowed_origin<T: Into<String>>(mut self, origin: T) -> CsrfFilter {
+        self.origins.insert(origin.into());
+        self
+    }
+
+    /// Allow all requests with an `X-Requested-With` header.
+    ///
+    /// A cross-site attacker should not be able to send requests with custom
+    /// headers unless a CORS policy whitelists them. Therefore it should be
+    /// safe to allow requests with an `X-Requested-With` header (added
+    /// automatically by many JavaScript libraries).
+    ///
+    /// This is disabled by default, because in Safari it is possible to
+    /// circumvent this using redirects and Flash.
+    ///
+    /// Use this method to enable more lax filtering.
+    pub fn allow_xhr(mut self) -> CsrfFilter {
+        self.allow_xhr = true;
+        self
+    }
+
+    /// Allow requests if the expected `Origin` header is missing (and
+    /// there is no `Referer` to fall back on).
+    ///
+    /// The filter is conservative by default, but it should be safe to allow
+    /// missing `Origin` headers because a cross-site attacker cannot prevent
+    /// the browser from sending `Origin` on unprotected requests.
+    pub fn allow_missing_origin(mut self) -> CsrfFilter {
+        self.allow_missing_origin = true;
+        self
+    }
+
+    /// Allow cross-site upgrade requests (for example to open a WebSocket).
+    pub fn allow_upgrade(mut self) -> CsrfFilter {
+        self.allow_upgrade = true;
+        self
+    }
+
+    fn validate(&self, req: &Request) -> Result<(), CsrfError> {
+        let is_upgrade = req.headers().contains_key(header::UPGRADE);
+        let is_safe = req.method().is_safe() && (self.allow_upgrade || !is_upgrade);
+
+        if is_safe || (self.allow_xhr && req.headers().contains_key("x-requested-with"))
+        {
+            Ok(())
+        } else if let Some(header) = origin(req.headers()) {
+            match header {
+                Ok(ref origin) if self.origins.contains(origin.as_ref()) => Ok(()),
+                Ok(_) => Err(CsrfError::CsrDenied),
+                Err(err) => Err(err),
+            }
+        } else if self.allow_missing_origin {
+            Ok(())
+        } else {
+            Err(CsrfError::MissingOrigin)
+        }
+    }
+}
+
+impl<S> Middleware<S> for CsrfFilter {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        self.validate(req)?;
+        Ok(Started::Done)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use http::Method;
+    use test::TestRequest;
+
+    #[test]
+    fn test_safe() {
+        let csrf = CsrfFilter::new().allowed_origin("https://www.example.com");
+
+        let req = TestRequest::with_header("Origin", "https://www.w3.org")
+            .method(Method::HEAD)
+            .finish();
+
+        assert!(csrf.start(&req).is_ok());
+    }
+
+    #[test]
+    fn test_csrf() {
+        let csrf = CsrfFilter::new().allowed_origin("https://www.example.com");
+
+        let req = TestRequest::with_header("Origin", "https://www.w3.org")
+            .method(Method::POST)
+            .finish();
+
+        assert!(csrf.start(&req).is_err());
+    }
+
+    #[test]
+    fn test_referer() {
+        let csrf = CsrfFilter::new().allowed_origin("https://www.example.com");
+
+        let req = TestRequest::with_header(
+            "Referer",
+            "https://www.example.com/some/path?query=param",
+        ).method(Method::POST)
+            .finish();
+
+        assert!(csrf.start(&req).is_ok());
+    }
+
+    #[test]
+    fn test_upgrade() {
+        let strict_csrf = CsrfFilter::new().allowed_origin("https://www.example.com");
+
+        let lax_csrf = CsrfFilter::new()
+            .allowed_origin("https://www.example.com")
+            .allow_upgrade();
+
+        let req = TestRequest::with_header("Origin", "https://cswsh.com")
+            .header("Connection", "Upgrade")
+            .header("Upgrade", "websocket")
+            .method(Method::GET)
+            .finish();
+
+        assert!(strict_csrf.start(&req).is_err());
+        assert!(lax_csrf.start(&req).is_ok());
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/defaultheaders.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/defaultheaders.rs.html new file mode 100644 index 0000000..456d9a2 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/defaultheaders.rs.html @@ -0,0 +1,243 @@ +defaultheaders.rs.html -- source
  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
+
+//! Default response headers
+use http::header::{HeaderName, HeaderValue, CONTENT_TYPE};
+use http::{HeaderMap, HttpTryFrom};
+
+use error::Result;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Response};
+
+/// `Middleware` for setting default response headers.
+///
+/// This middleware does not set header if response headers already contains it.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{http, middleware, App, HttpResponse};
+///
+/// fn main() {
+///     let app = App::new()
+///         .middleware(middleware::DefaultHeaders::new().header("X-Version", "0.2"))
+///         .resource("/test", |r| {
+///             r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+///             r.method(http::Method::HEAD)
+///                 .f(|_| HttpResponse::MethodNotAllowed());
+///         })
+///         .finish();
+/// }
+/// ```
+pub struct DefaultHeaders {
+    ct: bool,
+    headers: HeaderMap,
+}
+
+impl Default for DefaultHeaders {
+    fn default() -> Self {
+        DefaultHeaders {
+            ct: false,
+            headers: HeaderMap::new(),
+        }
+    }
+}
+
+impl DefaultHeaders {
+    /// Construct `DefaultHeaders` middleware.
+    pub fn new() -> DefaultHeaders {
+        DefaultHeaders::default()
+    }
+
+    /// Set a header.
+    #[inline]
+    #[cfg_attr(feature = "cargo-clippy", allow(match_wild_err_arm))]
+    pub fn header<K, V>(mut self, key: K, value: V) -> Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        HeaderValue: HttpTryFrom<V>,
+    {
+        match HeaderName::try_from(key) {
+            Ok(key) => match HeaderValue::try_from(value) {
+                Ok(value) => {
+                    self.headers.append(key, value);
+                }
+                Err(_) => panic!("Can not create header value"),
+            },
+            Err(_) => panic!("Can not create header name"),
+        }
+        self
+    }
+
+    /// Set *CONTENT-TYPE* header if response does not contain this header.
+    pub fn content_type(mut self) -> Self {
+        self.ct = true;
+        self
+    }
+}
+
+impl<S> Middleware<S> for DefaultHeaders {
+    fn response(&self, _: &HttpRequest<S>, mut resp: HttpResponse) -> Result<Response> {
+        for (key, value) in self.headers.iter() {
+            if !resp.headers().contains_key(key) {
+                resp.headers_mut().insert(key, value.clone());
+            }
+        }
+        // default content-type
+        if self.ct && !resp.headers().contains_key(CONTENT_TYPE) {
+            resp.headers_mut().insert(
+                CONTENT_TYPE,
+                HeaderValue::from_static("application/octet-stream"),
+            );
+        }
+        Ok(Response::Done(resp))
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use http::header::CONTENT_TYPE;
+    use test::TestRequest;
+
+    #[test]
+    fn test_default_headers() {
+        let mw = DefaultHeaders::new().header(CONTENT_TYPE, "0001");
+
+        let req = TestRequest::default().finish();
+
+        let resp = HttpResponse::Ok().finish();
+        let resp = match mw.response(&req, resp) {
+            Ok(Response::Done(resp)) => resp,
+            _ => panic!(),
+        };
+        assert_eq!(resp.headers().get(CONTENT_TYPE).unwrap(), "0001");
+
+        let resp = HttpResponse::Ok().header(CONTENT_TYPE, "0002").finish();
+        let resp = match mw.response(&req, resp) {
+            Ok(Response::Done(resp)) => resp,
+            _ => panic!(),
+        };
+        assert_eq!(resp.headers().get(CONTENT_TYPE).unwrap(), "0002");
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/errhandlers.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/errhandlers.rs.html new file mode 100644 index 0000000..6a4db10 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/errhandlers.rs.html @@ -0,0 +1,285 @@ +errhandlers.rs.html -- source
  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
+
+use std::collections::HashMap;
+
+use error::Result;
+use http::StatusCode;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Response};
+
+type ErrorHandler<S> = Fn(&HttpRequest<S>, HttpResponse) -> Result<Response>;
+
+/// `Middleware` for allowing custom handlers for responses.
+///
+/// You can use `ErrorHandlers::handler()` method  to register a custom error
+/// handler for specific status code. You can modify existing response or
+/// create completely new one.
+///
+/// ## Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::middleware::{ErrorHandlers, Response};
+/// use actix_web::{http, App, HttpRequest, HttpResponse, Result};
+///
+/// fn render_500<S>(_: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+///     let mut builder = resp.into_builder();
+///     builder.header(http::header::CONTENT_TYPE, "application/json");
+///     Ok(Response::Done(builder.into()))
+/// }
+///
+/// fn main() {
+///     let app = App::new()
+///         .middleware(
+///             ErrorHandlers::new()
+///                 .handler(http::StatusCode::INTERNAL_SERVER_ERROR, render_500),
+///         )
+///         .resource("/test", |r| {
+///             r.method(http::Method::GET).f(|_| HttpResponse::Ok());
+///             r.method(http::Method::HEAD)
+///                 .f(|_| HttpResponse::MethodNotAllowed());
+///         })
+///         .finish();
+/// }
+/// ```
+pub struct ErrorHandlers<S> {
+    handlers: HashMap<StatusCode, Box<ErrorHandler<S>>>,
+}
+
+impl<S> Default for ErrorHandlers<S> {
+    fn default() -> Self {
+        ErrorHandlers {
+            handlers: HashMap::new(),
+        }
+    }
+}
+
+impl<S> ErrorHandlers<S> {
+    /// Construct new `ErrorHandlers` instance
+    pub fn new() -> Self {
+        ErrorHandlers::default()
+    }
+
+    /// Register error handler for specified status code
+    pub fn handler<F>(mut self, status: StatusCode, handler: F) -> Self
+    where
+        F: Fn(&HttpRequest<S>, HttpResponse) -> Result<Response> + 'static,
+    {
+        self.handlers.insert(status, Box::new(handler));
+        self
+    }
+}
+
+impl<S: 'static> Middleware<S> for ErrorHandlers<S> {
+    fn response(&self, req: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+        if let Some(handler) = self.handlers.get(&resp.status()) {
+            handler(req, resp)
+        } else {
+            Ok(Response::Done(resp))
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use error::{Error, ErrorInternalServerError};
+    use http::header::CONTENT_TYPE;
+    use http::StatusCode;
+    use httpmessage::HttpMessage;
+    use middleware::Started;
+    use test::{self, TestRequest};
+
+    fn render_500<S>(_: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+        let mut builder = resp.into_builder();
+        builder.header(CONTENT_TYPE, "0001");
+        Ok(Response::Done(builder.into()))
+    }
+
+    #[test]
+    fn test_handler() {
+        let mw =
+            ErrorHandlers::new().handler(StatusCode::INTERNAL_SERVER_ERROR, render_500);
+
+        let mut req = TestRequest::default().finish();
+        let resp = HttpResponse::InternalServerError().finish();
+        let resp = match mw.response(&mut req, resp) {
+            Ok(Response::Done(resp)) => resp,
+            _ => panic!(),
+        };
+        assert_eq!(resp.headers().get(CONTENT_TYPE).unwrap(), "0001");
+
+        let resp = HttpResponse::Ok().finish();
+        let resp = match mw.response(&mut req, resp) {
+            Ok(Response::Done(resp)) => resp,
+            _ => panic!(),
+        };
+        assert!(!resp.headers().contains_key(CONTENT_TYPE));
+    }
+
+    struct MiddlewareOne;
+
+    impl<S> Middleware<S> for MiddlewareOne {
+        fn start(&self, _: &HttpRequest<S>) -> Result<Started, Error> {
+            Err(ErrorInternalServerError("middleware error"))
+        }
+    }
+
+    #[test]
+    fn test_middleware_start_error() {
+        let mut srv = test::TestServer::new(move |app| {
+            app.middleware(
+                ErrorHandlers::new()
+                    .handler(StatusCode::INTERNAL_SERVER_ERROR, render_500),
+            ).middleware(MiddlewareOne)
+                .handler(|_| HttpResponse::Ok())
+        });
+
+        let request = srv.get().finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert_eq!(response.headers().get(CONTENT_TYPE).unwrap(), "0001");
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/identity.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/identity.rs.html new file mode 100644 index 0000000..b8f1ee3 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/identity.rs.html @@ -0,0 +1,777 @@ +identity.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+
+//! Request identity service for Actix applications.
+//!
+//! [**IdentityService**](struct.IdentityService.html) middleware can be
+//! used with different policies types to store identity information.
+//!
+//! By default, only cookie identity policy is implemented. Other backend
+//! implementations can be added separately.
+//!
+//! [**CookieIdentityPolicy**](struct.CookieIdentityPolicy.html)
+//! uses cookies as identity storage.
+//!
+//! To access current request identity
+//! [**RequestIdentity**](trait.RequestIdentity.html) should be used.
+//! *HttpRequest* implements *RequestIdentity* trait.
+//!
+//! ```rust
+//! use actix_web::middleware::identity::RequestIdentity;
+//! use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+//! use actix_web::*;
+//!
+//! fn index(req: HttpRequest) -> Result<String> {
+//!     // access request identity
+//!     if let Some(id) = req.identity() {
+//!         Ok(format!("Welcome! {}", id))
+//!     } else {
+//!         Ok("Welcome Anonymous!".to_owned())
+//!     }
+//! }
+//!
+//! fn login(mut req: HttpRequest) -> HttpResponse {
+//!     req.remember("User1".to_owned()); // <- remember identity
+//!     HttpResponse::Ok().finish()
+//! }
+//!
+//! fn logout(mut req: HttpRequest) -> HttpResponse {
+//!     req.forget(); // <- remove identity
+//!     HttpResponse::Ok().finish()
+//! }
+//!
+//! fn main() {
+//!     let app = App::new().middleware(IdentityService::new(
+//!         // <- create identity middleware
+//!         CookieIdentityPolicy::new(&[0; 32])    // <- create cookie session backend
+//!               .name("auth-cookie")
+//!               .secure(false),
+//!     ));
+//! }
+//! ```
+use std::rc::Rc;
+
+use cookie::{Cookie, CookieJar, Key};
+use futures::future::{err as FutErr, ok as FutOk, FutureResult};
+use futures::Future;
+use time::Duration;
+
+use error::{Error, Result};
+use http::header::{self, HeaderValue};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Response, Started};
+
+/// The helper trait to obtain your identity from a request.
+///
+/// ```rust
+/// use actix_web::middleware::identity::RequestIdentity;
+/// use actix_web::*;
+///
+/// fn index(req: HttpRequest) -> Result<String> {
+///     // access request identity
+///     if let Some(id) = req.identity() {
+///         Ok(format!("Welcome! {}", id))
+///     } else {
+///         Ok("Welcome Anonymous!".to_owned())
+///     }
+/// }
+///
+/// fn login(mut req: HttpRequest) -> HttpResponse {
+///     req.remember("User1".to_owned()); // <- remember identity
+///     HttpResponse::Ok().finish()
+/// }
+///
+/// fn logout(mut req: HttpRequest) -> HttpResponse {
+///     req.forget(); // <- remove identity
+///     HttpResponse::Ok().finish()
+/// }
+/// # fn main() {}
+/// ```
+pub trait RequestIdentity {
+    /// Return the claimed identity of the user associated request or
+    /// ``None`` if no identity can be found associated with the request.
+    fn identity(&self) -> Option<String>;
+
+    /// Remember identity.
+    fn remember(&self, identity: String);
+
+    /// This method is used to 'forget' the current identity on subsequent
+    /// requests.
+    fn forget(&self);
+}
+
+impl<S> RequestIdentity for HttpRequest<S> {
+    fn identity(&self) -> Option<String> {
+        if let Some(id) = self.extensions().get::<IdentityBox>() {
+            return id.0.identity().map(|s| s.to_owned());
+        }
+        None
+    }
+
+    fn remember(&self, identity: String) {
+        if let Some(id) = self.extensions_mut().get_mut::<IdentityBox>() {
+            return id.0.as_mut().remember(identity);
+        }
+    }
+
+    fn forget(&self) {
+        if let Some(id) = self.extensions_mut().get_mut::<IdentityBox>() {
+            return id.0.forget();
+        }
+    }
+}
+
+/// An identity
+pub trait Identity: 'static {
+    /// Return the claimed identity of the user associated request or
+    /// ``None`` if no identity can be found associated with the request.
+    fn identity(&self) -> Option<&str>;
+
+    /// Remember identity.
+    fn remember(&mut self, key: String);
+
+    /// This method is used to 'forget' the current identity on subsequent
+    /// requests.
+    fn forget(&mut self);
+
+    /// Write session to storage backend.
+    fn write(&mut self, resp: HttpResponse) -> Result<Response>;
+}
+
+/// Identity policy definition.
+pub trait IdentityPolicy<S>: Sized + 'static {
+    /// The associated identity
+    type Identity: Identity;
+
+    /// The return type of the middleware
+    type Future: Future<Item = Self::Identity, Error = Error>;
+
+    /// Parse the session from request and load data from a service identity.
+    fn from_request(&self, request: &HttpRequest<S>) -> Self::Future;
+}
+
+/// Request identity middleware
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+/// use actix_web::App;
+///
+/// fn main() {
+///     let app = App::new().middleware(IdentityService::new(
+///         // <- create identity middleware
+///         CookieIdentityPolicy::new(&[0; 32])    // <- create cookie session backend
+///               .name("auth-cookie")
+///               .secure(false),
+///     ));
+/// }
+/// ```
+pub struct IdentityService<T> {
+    backend: T,
+}
+
+impl<T> IdentityService<T> {
+    /// Create new identity service with specified backend.
+    pub fn new(backend: T) -> Self {
+        IdentityService { backend }
+    }
+}
+
+struct IdentityBox(Box<Identity>);
+
+impl<S: 'static, T: IdentityPolicy<S>> Middleware<S> for IdentityService<T> {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        let req = req.clone();
+        let fut = self.backend.from_request(&req).then(move |res| match res {
+            Ok(id) => {
+                req.extensions_mut().insert(IdentityBox(Box::new(id)));
+                FutOk(None)
+            }
+            Err(err) => FutErr(err),
+        });
+        Ok(Started::Future(Box::new(fut)))
+    }
+
+    fn response(&self, req: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+        if let Some(ref mut id) = req.extensions_mut().get_mut::<IdentityBox>() {
+            id.0.as_mut().write(resp)
+        } else {
+            Ok(Response::Done(resp))
+        }
+    }
+}
+
+#[doc(hidden)]
+/// Identity that uses private cookies as identity storage.
+pub struct CookieIdentity {
+    changed: bool,
+    identity: Option<String>,
+    inner: Rc<CookieIdentityInner>,
+}
+
+impl Identity for CookieIdentity {
+    fn identity(&self) -> Option<&str> {
+        self.identity.as_ref().map(|s| s.as_ref())
+    }
+
+    fn remember(&mut self, value: String) {
+        self.changed = true;
+        self.identity = Some(value);
+    }
+
+    fn forget(&mut self) {
+        self.changed = true;
+        self.identity = None;
+    }
+
+    fn write(&mut self, mut resp: HttpResponse) -> Result<Response> {
+        if self.changed {
+            let _ = self.inner.set_cookie(&mut resp, self.identity.take());
+        }
+        Ok(Response::Done(resp))
+    }
+}
+
+struct CookieIdentityInner {
+    key: Key,
+    name: String,
+    path: String,
+    domain: Option<String>,
+    secure: bool,
+    max_age: Option<Duration>,
+}
+
+impl CookieIdentityInner {
+    fn new(key: &[u8]) -> CookieIdentityInner {
+        CookieIdentityInner {
+            key: Key::from_master(key),
+            name: "actix-identity".to_owned(),
+            path: "/".to_owned(),
+            domain: None,
+            secure: true,
+            max_age: None,
+        }
+    }
+
+    fn set_cookie(&self, resp: &mut HttpResponse, id: Option<String>) -> Result<()> {
+        let some = id.is_some();
+        {
+            let id = id.unwrap_or_else(String::new);
+            let mut cookie = Cookie::new(self.name.clone(), id);
+            cookie.set_path(self.path.clone());
+            cookie.set_secure(self.secure);
+            cookie.set_http_only(true);
+
+            if let Some(ref domain) = self.domain {
+                cookie.set_domain(domain.clone());
+            }
+
+            if let Some(max_age) = self.max_age {
+                cookie.set_max_age(max_age);
+            }
+
+            let mut jar = CookieJar::new();
+            if some {
+                jar.private(&self.key).add(cookie);
+            } else {
+                jar.add_original(cookie.clone());
+                jar.private(&self.key).remove(cookie);
+            }
+
+            for cookie in jar.delta() {
+                let val = HeaderValue::from_str(&cookie.to_string())?;
+                resp.headers_mut().append(header::SET_COOKIE, val);
+            }
+        }
+
+        Ok(())
+    }
+
+    fn load<S>(&self, req: &HttpRequest<S>) -> Option<String> {
+        if let Ok(cookies) = req.cookies() {
+            for cookie in cookies.iter() {
+                if cookie.name() == self.name {
+                    let mut jar = CookieJar::new();
+                    jar.add_original(cookie.clone());
+
+                    let cookie_opt = jar.private(&self.key).get(&self.name);
+                    if let Some(cookie) = cookie_opt {
+                        return Some(cookie.value().into());
+                    }
+                }
+            }
+        }
+        None
+    }
+}
+
+/// Use cookies for request identity storage.
+///
+/// The constructors take a key as an argument.
+/// This is the private key for cookie - when this value is changed,
+/// all identities are lost. The constructors will panic if the key is less
+/// than 32 bytes in length.
+///
+/// # Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::middleware::identity::{CookieIdentityPolicy, IdentityService};
+/// use actix_web::App;
+///
+/// fn main() {
+///     let app = App::new().middleware(IdentityService::new(
+///         // <- create identity middleware
+///         CookieIdentityPolicy::new(&[0; 32])  // <- construct cookie policy
+///                .domain("www.rust-lang.org")
+///                .name("actix_auth")
+///                .path("/")
+///                .secure(true),
+///     ));
+/// }
+/// ```
+pub struct CookieIdentityPolicy(Rc<CookieIdentityInner>);
+
+impl CookieIdentityPolicy {
+    /// Construct new `CookieIdentityPolicy` instance.
+    ///
+    /// Panics if key length is less than 32 bytes.
+    pub fn new(key: &[u8]) -> CookieIdentityPolicy {
+        CookieIdentityPolicy(Rc::new(CookieIdentityInner::new(key)))
+    }
+
+    /// Sets the `path` field in the session cookie being built.
+    pub fn path<S: Into<String>>(mut self, value: S) -> CookieIdentityPolicy {
+        Rc::get_mut(&mut self.0).unwrap().path = value.into();
+        self
+    }
+
+    /// Sets the `name` field in the session cookie being built.
+    pub fn name<S: Into<String>>(mut self, value: S) -> CookieIdentityPolicy {
+        Rc::get_mut(&mut self.0).unwrap().name = value.into();
+        self
+    }
+
+    /// Sets the `domain` field in the session cookie being built.
+    pub fn domain<S: Into<String>>(mut self, value: S) -> CookieIdentityPolicy {
+        Rc::get_mut(&mut self.0).unwrap().domain = Some(value.into());
+        self
+    }
+
+    /// Sets the `secure` field in the session cookie being built.
+    ///
+    /// If the `secure` field is set, a cookie will only be transmitted when the
+    /// connection is secure - i.e. `https`
+    pub fn secure(mut self, value: bool) -> CookieIdentityPolicy {
+        Rc::get_mut(&mut self.0).unwrap().secure = value;
+        self
+    }
+
+    /// Sets the `max-age` field in the session cookie being built.
+    pub fn max_age(mut self, value: Duration) -> CookieIdentityPolicy {
+        Rc::get_mut(&mut self.0).unwrap().max_age = Some(value);
+        self
+    }
+}
+
+impl<S> IdentityPolicy<S> for CookieIdentityPolicy {
+    type Identity = CookieIdentity;
+    type Future = FutureResult<CookieIdentity, Error>;
+
+    fn from_request(&self, req: &HttpRequest<S>) -> Self::Future {
+        let identity = self.0.load(req);
+        FutOk(CookieIdentity {
+            identity,
+            changed: false,
+            inner: Rc::clone(&self.0),
+        })
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/logger.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/logger.rs.html new file mode 100644 index 0000000..62a8ded --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/logger.rs.html @@ -0,0 +1,771 @@ +logger.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+
+//! Request logging middleware
+use std::collections::HashSet;
+use std::env;
+use std::fmt::{self, Display, Formatter};
+
+use regex::Regex;
+use time;
+
+use error::Result;
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Finished, Middleware, Started};
+
+/// `Middleware` for logging request and response info to the terminal.
+///
+/// `Logger` middleware uses standard log crate to log information. You should
+/// enable logger for `actix_web` package to see access log.
+/// ([`env_logger`](https://docs.rs/env_logger/*/env_logger/) or similar)
+///
+/// ## Usage
+///
+/// Create `Logger` middleware with the specified `format`.
+/// Default `Logger` could be created with `default` method, it uses the
+/// default format:
+///
+/// ```ignore
+///  %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
+/// ```
+/// ```rust
+/// # extern crate actix_web;
+/// extern crate env_logger;
+/// use actix_web::middleware::Logger;
+/// use actix_web::App;
+///
+/// fn main() {
+///     std::env::set_var("RUST_LOG", "actix_web=info");
+///     env_logger::init();
+///
+///     let app = App::new()
+///         .middleware(Logger::default())
+///         .middleware(Logger::new("%a %{User-Agent}i"))
+///         .finish();
+/// }
+/// ```
+///
+/// ## Format
+///
+/// `%%`  The percent sign
+///
+/// `%a`  Remote IP-address (IP-address of proxy if using reverse proxy)
+///
+/// `%t`  Time when the request was started to process
+///
+/// `%r`  First line of request
+///
+/// `%s`  Response status code
+///
+/// `%b`  Size of response in bytes, including HTTP headers
+///
+/// `%T` Time taken to serve the request, in seconds with floating fraction in
+/// .06f format
+///
+/// `%D`  Time taken to serve the request, in milliseconds
+///
+/// `%{FOO}i`  request.headers['FOO']
+///
+/// `%{FOO}o`  response.headers['FOO']
+///
+/// `%{FOO}e`  os.environ['FOO']
+///
+pub struct Logger {
+    format: Format,
+    exclude: HashSet<String>,
+}
+
+impl Logger {
+    /// Create `Logger` middleware with the specified `format`.
+    pub fn new(format: &str) -> Logger {
+        Logger {
+            format: Format::new(format),
+            exclude: HashSet::new(),
+        }
+    }
+
+    /// Ignore and do not log access info for specified path.
+    pub fn exclude<T: Into<String>>(mut self, path: T) -> Self {
+        self.exclude.insert(path.into());
+        self
+    }
+}
+
+impl Default for Logger {
+    /// Create `Logger` middleware with format:
+    ///
+    /// ```ignore
+    /// %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
+    /// ```
+    fn default() -> Logger {
+        Logger {
+            format: Format::default(),
+            exclude: HashSet::new(),
+        }
+    }
+}
+
+struct StartTime(time::Tm);
+
+impl Logger {
+    fn log<S>(&self, req: &HttpRequest<S>, resp: &HttpResponse) {
+        if let Some(entry_time) = req.extensions().get::<StartTime>() {
+            let render = |fmt: &mut Formatter| {
+                for unit in &self.format.0 {
+                    unit.render(fmt, req, resp, entry_time.0)?;
+                }
+                Ok(())
+            };
+            info!("{}", FormatDisplay(&render));
+        }
+    }
+}
+
+impl<S> Middleware<S> for Logger {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        if !self.exclude.contains(req.path()) {
+            req.extensions_mut().insert(StartTime(time::now()));
+        }
+        Ok(Started::Done)
+    }
+
+    fn finish(&self, req: &HttpRequest<S>, resp: &HttpResponse) -> Finished {
+        self.log(req, resp);
+        Finished::Done
+    }
+}
+
+/// A formatting style for the `Logger`, consisting of multiple
+/// `FormatText`s concatenated into one line.
+#[derive(Clone)]
+#[doc(hidden)]
+struct Format(Vec<FormatText>);
+
+impl Default for Format {
+    /// Return the default formatting style for the `Logger`:
+    fn default() -> Format {
+        Format::new(r#"%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T"#)
+    }
+}
+
+impl Format {
+    /// Create a `Format` from a format string.
+    ///
+    /// Returns `None` if the format string syntax is incorrect.
+    pub fn new(s: &str) -> Format {
+        trace!("Access log format: {}", s);
+        let fmt = Regex::new(r"%(\{([A-Za-z0-9\-_]+)\}([ioe])|[atPrsbTD]?)").unwrap();
+
+        let mut idx = 0;
+        let mut results = Vec::new();
+        for cap in fmt.captures_iter(s) {
+            let m = cap.get(0).unwrap();
+            let pos = m.start();
+            if idx != pos {
+                results.push(FormatText::Str(s[idx..pos].to_owned()));
+            }
+            idx = m.end();
+
+            if let Some(key) = cap.get(2) {
+                results.push(match cap.get(3).unwrap().as_str() {
+                    "i" => FormatText::RequestHeader(key.as_str().to_owned()),
+                    "o" => FormatText::ResponseHeader(key.as_str().to_owned()),
+                    "e" => FormatText::EnvironHeader(key.as_str().to_owned()),
+                    _ => unreachable!(),
+                })
+            } else {
+                let m = cap.get(1).unwrap();
+                results.push(match m.as_str() {
+                    "%" => FormatText::Percent,
+                    "a" => FormatText::RemoteAddr,
+                    "t" => FormatText::RequestTime,
+                    "r" => FormatText::RequestLine,
+                    "s" => FormatText::ResponseStatus,
+                    "b" => FormatText::ResponseSize,
+                    "T" => FormatText::Time,
+                    "D" => FormatText::TimeMillis,
+                    _ => FormatText::Str(m.as_str().to_owned()),
+                });
+            }
+        }
+        if idx != s.len() {
+            results.push(FormatText::Str(s[idx..].to_owned()));
+        }
+
+        Format(results)
+    }
+}
+
+/// A string of text to be logged. This is either one of the data
+/// fields supported by the `Logger`, or a custom `String`.
+#[doc(hidden)]
+#[derive(Debug, Clone)]
+pub enum FormatText {
+    Str(String),
+    Percent,
+    RequestLine,
+    RequestTime,
+    ResponseStatus,
+    ResponseSize,
+    Time,
+    TimeMillis,
+    RemoteAddr,
+    RequestHeader(String),
+    ResponseHeader(String),
+    EnvironHeader(String),
+}
+
+impl FormatText {
+    fn render<S>(
+        &self, fmt: &mut Formatter, req: &HttpRequest<S>, resp: &HttpResponse,
+        entry_time: time::Tm,
+    ) -> Result<(), fmt::Error> {
+        match *self {
+            FormatText::Str(ref string) => fmt.write_str(string),
+            FormatText::Percent => "%".fmt(fmt),
+            FormatText::RequestLine => {
+                if req.query_string().is_empty() {
+                    fmt.write_fmt(format_args!(
+                        "{} {} {:?}",
+                        req.method(),
+                        req.path(),
+                        req.version()
+                    ))
+                } else {
+                    fmt.write_fmt(format_args!(
+                        "{} {}?{} {:?}",
+                        req.method(),
+                        req.path(),
+                        req.query_string(),
+                        req.version()
+                    ))
+                }
+            }
+            FormatText::ResponseStatus => resp.status().as_u16().fmt(fmt),
+            FormatText::ResponseSize => resp.response_size().fmt(fmt),
+            FormatText::Time => {
+                let rt = time::now() - entry_time;
+                let rt = (rt.num_nanoseconds().unwrap_or(0) as f64) / 1_000_000_000.0;
+                fmt.write_fmt(format_args!("{:.6}", rt))
+            }
+            FormatText::TimeMillis => {
+                let rt = time::now() - entry_time;
+                let rt = (rt.num_nanoseconds().unwrap_or(0) as f64) / 1_000_000.0;
+                fmt.write_fmt(format_args!("{:.6}", rt))
+            }
+            FormatText::RemoteAddr => {
+                if let Some(remote) = req.connection_info().remote() {
+                    return remote.fmt(fmt);
+                } else {
+                    "-".fmt(fmt)
+                }
+            }
+            FormatText::RequestTime => entry_time
+                .strftime("[%d/%b/%Y:%H:%M:%S %z]")
+                .unwrap()
+                .fmt(fmt),
+            FormatText::RequestHeader(ref name) => {
+                let s = if let Some(val) = req.headers().get(name) {
+                    if let Ok(s) = val.to_str() {
+                        s
+                    } else {
+                        "-"
+                    }
+                } else {
+                    "-"
+                };
+                fmt.write_fmt(format_args!("{}", s))
+            }
+            FormatText::ResponseHeader(ref name) => {
+                let s = if let Some(val) = resp.headers().get(name) {
+                    if let Ok(s) = val.to_str() {
+                        s
+                    } else {
+                        "-"
+                    }
+                } else {
+                    "-"
+                };
+                fmt.write_fmt(format_args!("{}", s))
+            }
+            FormatText::EnvironHeader(ref name) => {
+                if let Ok(val) = env::var(name) {
+                    fmt.write_fmt(format_args!("{}", val))
+                } else {
+                    "-".fmt(fmt)
+                }
+            }
+        }
+    }
+}
+
+pub(crate) struct FormatDisplay<'a>(&'a Fn(&mut Formatter) -> Result<(), fmt::Error>);
+
+impl<'a> fmt::Display for FormatDisplay<'a> {
+    fn fmt(&self, fmt: &mut Formatter) -> Result<(), fmt::Error> {
+        (self.0)(fmt)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use time;
+
+    use super::*;
+    use http::{header, StatusCode};
+    use test::TestRequest;
+
+    #[test]
+    fn test_logger() {
+        let logger = Logger::new("%% %{User-Agent}i %{X-Test}o %{HOME}e %D test");
+
+        let req = TestRequest::with_header(
+            header::USER_AGENT,
+            header::HeaderValue::from_static("ACTIX-WEB"),
+        ).finish();
+        let resp = HttpResponse::build(StatusCode::OK)
+            .header("X-Test", "ttt")
+            .force_close()
+            .finish();
+
+        match logger.start(&req) {
+            Ok(Started::Done) => (),
+            _ => panic!(),
+        };
+        match logger.finish(&req, &resp) {
+            Finished::Done => (),
+            _ => panic!(),
+        }
+        let entry_time = time::now();
+        let render = |fmt: &mut Formatter| {
+            for unit in &logger.format.0 {
+                unit.render(fmt, &req, &resp, entry_time)?;
+            }
+            Ok(())
+        };
+        let s = format!("{}", FormatDisplay(&render));
+        assert!(s.contains("ACTIX-WEB ttt"));
+    }
+
+    #[test]
+    fn test_default_format() {
+        let format = Format::default();
+
+        let req = TestRequest::with_header(
+            header::USER_AGENT,
+            header::HeaderValue::from_static("ACTIX-WEB"),
+        ).finish();
+        let resp = HttpResponse::build(StatusCode::OK).force_close().finish();
+        let entry_time = time::now();
+
+        let render = |fmt: &mut Formatter| {
+            for unit in &format.0 {
+                unit.render(fmt, &req, &resp, entry_time)?;
+            }
+            Ok(())
+        };
+        let s = format!("{}", FormatDisplay(&render));
+        assert!(s.contains("GET / HTTP/1.1"));
+        assert!(s.contains("200 0"));
+        assert!(s.contains("ACTIX-WEB"));
+
+        let req = TestRequest::with_uri("/?test").finish();
+        let resp = HttpResponse::build(StatusCode::OK).force_close().finish();
+        let entry_time = time::now();
+
+        let render = |fmt: &mut Formatter| {
+            for unit in &format.0 {
+                unit.render(fmt, &req, &resp, entry_time)?;
+            }
+            Ok(())
+        };
+        let s = format!("{}", FormatDisplay(&render));
+        assert!(s.contains("GET /?test HTTP/1.1"));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/mod.rs.html new file mode 100644 index 0000000..893bb7b --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/mod.rs.html @@ -0,0 +1,139 @@ +mod.rs.html -- source
 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
+
+//! Middlewares
+use futures::Future;
+
+use error::{Error, Result};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+
+mod logger;
+
+pub mod cors;
+pub mod csrf;
+mod defaultheaders;
+mod errhandlers;
+#[cfg(feature = "session")]
+pub mod identity;
+#[cfg(feature = "session")]
+pub mod session;
+pub use self::defaultheaders::DefaultHeaders;
+pub use self::errhandlers::ErrorHandlers;
+pub use self::logger::Logger;
+
+/// Middleware start result
+pub enum Started {
+    /// Middleware is completed, continue to next middleware
+    Done,
+    /// New http response got generated. If middleware generates response
+    /// handler execution halts.
+    Response(HttpResponse),
+    /// Execution completed, runs future to completion.
+    Future(Box<Future<Item = Option<HttpResponse>, Error = Error>>),
+}
+
+/// Middleware execution result
+pub enum Response {
+    /// New http response got generated
+    Done(HttpResponse),
+    /// Result is a future that resolves to a new http response
+    Future(Box<Future<Item = HttpResponse, Error = Error>>),
+}
+
+/// Middleware finish result
+pub enum Finished {
+    /// Execution completed
+    Done,
+    /// Execution completed, but run future to completion
+    Future(Box<Future<Item = (), Error = Error>>),
+}
+
+/// Middleware definition
+#[allow(unused_variables)]
+pub trait Middleware<S>: 'static {
+    /// Method is called when request is ready. It may return
+    /// future, which should resolve before next middleware get called.
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        Ok(Started::Done)
+    }
+
+    /// Method is called when handler returns response,
+    /// but before sending http message to peer.
+    fn response(&self, req: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+        Ok(Response::Done(resp))
+    }
+
+    /// Method is called after body stream get sent to peer.
+    fn finish(&self, req: &HttpRequest<S>, resp: &HttpResponse) -> Finished {
+        Finished::Done
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/middleware/session.rs.html b/static/api/actix-web/0.7.2/src/actix_web/middleware/session.rs.html new file mode 100644 index 0000000..529c20a --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/middleware/session.rs.html @@ -0,0 +1,1233 @@ +session.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+
+//! User sessions.
+//!
+//! Actix provides a general solution for session management. The
+//! [**SessionStorage**](struct.SessionStorage.html)
+//! middleware can be used with different backend types to store session
+//! data in different backends.
+//!
+//! By default, only cookie session backend is implemented. Other
+//! backend implementations can be added.
+//!
+//! [**CookieSessionBackend**](struct.CookieSessionBackend.html)
+//! uses cookies as session storage. `CookieSessionBackend` creates sessions
+//! which are limited to storing fewer than 4000 bytes of data, as the payload
+//! must fit into a single cookie. An internal server error is generated if a
+//! session contains more than 4000 bytes.
+//!
+//! A cookie may have a security policy of *signed* or *private*. Each has
+//! a respective `CookieSessionBackend` constructor.
+//!
+//! A *signed* cookie may be viewed but not modified by the client. A *private*
+//! cookie may neither be viewed nor modified by the client.
+//!
+//! The constructors take a key as an argument. This is the private key
+//! for cookie session - when this value is changed, all session data is lost.
+//!
+//! In general, you create a `SessionStorage` middleware and initialize it
+//! with specific backend implementation, such as a `CookieSessionBackend`.
+//! To access session data,
+//! [*HttpRequest::session()*](trait.RequestSession.html#tymethod.session)
+//! must be used. This method returns a
+//! [*Session*](struct.Session.html) object, which allows us to get or set
+//! session data.
+//!
+//! ```rust
+//! # extern crate actix_web;
+//! use actix_web::{actix, server, App, HttpRequest, Result};
+//! use actix_web::middleware::session::{RequestSession, SessionStorage, CookieSessionBackend};
+//!
+//! fn index(req: HttpRequest) -> Result<&'static str> {
+//!     // access session data
+//!     if let Some(count) = req.session().get::<i32>("counter")? {
+//!         println!("SESSION value: {}", count);
+//!         req.session().set("counter", count+1)?;
+//!     } else {
+//!         req.session().set("counter", 1)?;
+//!     }
+//!
+//!     Ok("Welcome!")
+//! }
+//!
+//! fn main() {
+//!     actix::System::run(|| {
+//!         server::new(
+//!           || App::new().middleware(
+//!               SessionStorage::new(          // <- create session middleware
+//!                 CookieSessionBackend::signed(&[0; 32]) // <- create signed cookie session backend
+//!                     .secure(false)
+//!              )))
+//!             .bind("127.0.0.1:59880").unwrap()
+//!             .start();
+//! #         actix::System::current().stop();
+//!     });
+//! }
+//! ```
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::marker::PhantomData;
+use std::rc::Rc;
+use std::sync::Arc;
+
+use cookie::{Cookie, CookieJar, Key, SameSite};
+use futures::future::{err as FutErr, ok as FutOk, FutureResult};
+use futures::Future;
+use http::header::{self, HeaderValue};
+use serde::de::DeserializeOwned;
+use serde::Serialize;
+use serde_json;
+use serde_json::error::Error as JsonError;
+use time::Duration;
+
+use error::{Error, ResponseError, Result};
+use handler::FromRequest;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Middleware, Response, Started};
+
+/// The helper trait to obtain your session data from a request.
+///
+/// ```rust
+/// use actix_web::middleware::session::RequestSession;
+/// use actix_web::*;
+///
+/// fn index(mut req: HttpRequest) -> Result<&'static str> {
+///     // access session data
+///     if let Some(count) = req.session().get::<i32>("counter")? {
+///         req.session().set("counter", count + 1)?;
+///     } else {
+///         req.session().set("counter", 1)?;
+///     }
+///
+///     Ok("Welcome!")
+/// }
+/// # fn main() {}
+/// ```
+pub trait RequestSession {
+    /// Get the session from the request
+    fn session(&self) -> Session;
+}
+
+impl<S> RequestSession for HttpRequest<S> {
+    fn session(&self) -> Session {
+        if let Some(s_impl) = self.extensions().get::<Arc<SessionImplCell>>() {
+            return Session(SessionInner::Session(Arc::clone(&s_impl)));
+        }
+        Session(SessionInner::None)
+    }
+}
+
+/// The high-level interface you use to modify session data.
+///
+/// Session object could be obtained with
+/// [`RequestSession::session`](trait.RequestSession.html#tymethod.session)
+/// method. `RequestSession` trait is implemented for `HttpRequest`.
+///
+/// ```rust
+/// use actix_web::middleware::session::RequestSession;
+/// use actix_web::*;
+///
+/// fn index(mut req: HttpRequest) -> Result<&'static str> {
+///     // access session data
+///     if let Some(count) = req.session().get::<i32>("counter")? {
+///         req.session().set("counter", count + 1)?;
+///     } else {
+///         req.session().set("counter", 1)?;
+///     }
+///
+///     Ok("Welcome!")
+/// }
+/// # fn main() {}
+/// ```
+pub struct Session(SessionInner);
+
+enum SessionInner {
+    Session(Arc<SessionImplCell>),
+    None,
+}
+
+impl Session {
+    /// Get a `value` from the session.
+    pub fn get<T: DeserializeOwned>(&self, key: &str) -> Result<Option<T>> {
+        match self.0 {
+            SessionInner::Session(ref sess) => {
+                if let Some(s) = sess.as_ref().0.borrow().get(key) {
+                    Ok(Some(serde_json::from_str(s)?))
+                } else {
+                    Ok(None)
+                }
+            }
+            SessionInner::None => Ok(None),
+        }
+    }
+
+    /// Set a `value` from the session.
+    pub fn set<T: Serialize>(&self, key: &str, value: T) -> Result<()> {
+        match self.0 {
+            SessionInner::Session(ref sess) => {
+                sess.as_ref()
+                    .0
+                    .borrow_mut()
+                    .set(key, serde_json::to_string(&value)?);
+                Ok(())
+            }
+            SessionInner::None => Ok(()),
+        }
+    }
+
+    /// Remove value from the session.
+    pub fn remove(&self, key: &str) {
+        match self.0 {
+            SessionInner::Session(ref sess) => sess.as_ref().0.borrow_mut().remove(key),
+            SessionInner::None => (),
+        }
+    }
+
+    /// Clear the session.
+    pub fn clear(&self) {
+        match self.0 {
+            SessionInner::Session(ref sess) => sess.as_ref().0.borrow_mut().clear(),
+            SessionInner::None => (),
+        }
+    }
+}
+
+/// Extractor implementation for Session type.
+///
+/// ```rust
+/// # use actix_web::*;
+/// use actix_web::middleware::session::Session;
+///
+/// fn index(session: Session) -> Result<&'static str> {
+///     // access session data
+///     if let Some(count) = session.get::<i32>("counter")? {
+///         session.set("counter", count + 1)?;
+///     } else {
+///         session.set("counter", 1)?;
+///     }
+///
+///     Ok("Welcome!")
+/// }
+/// # fn main() {}
+/// ```
+impl<S> FromRequest<S> for Session {
+    type Config = ();
+    type Result = Session;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _: &Self::Config) -> Self::Result {
+        req.session()
+    }
+}
+
+struct SessionImplCell(RefCell<Box<SessionImpl>>);
+
+/// Session storage middleware
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::middleware::session::{CookieSessionBackend, SessionStorage};
+/// use actix_web::App;
+///
+/// fn main() {
+///     let app = App::new().middleware(SessionStorage::new(
+///         // <- create session middleware
+///         CookieSessionBackend::signed(&[0; 32]) // <- create cookie session backend
+///               .secure(false),
+///     ));
+/// }
+/// ```
+pub struct SessionStorage<T, S>(T, PhantomData<S>);
+
+impl<S, T: SessionBackend<S>> SessionStorage<T, S> {
+    /// Create session storage
+    pub fn new(backend: T) -> SessionStorage<T, S> {
+        SessionStorage(backend, PhantomData)
+    }
+}
+
+impl<S: 'static, T: SessionBackend<S>> Middleware<S> for SessionStorage<T, S> {
+    fn start(&self, req: &HttpRequest<S>) -> Result<Started> {
+        let mut req = req.clone();
+
+        let fut = self.0.from_request(&mut req).then(move |res| match res {
+            Ok(sess) => {
+                req.extensions_mut()
+                    .insert(Arc::new(SessionImplCell(RefCell::new(Box::new(sess)))));
+                FutOk(None)
+            }
+            Err(err) => FutErr(err),
+        });
+        Ok(Started::Future(Box::new(fut)))
+    }
+
+    fn response(&self, req: &HttpRequest<S>, resp: HttpResponse) -> Result<Response> {
+        if let Some(s_box) = req.extensions().get::<Arc<SessionImplCell>>() {
+            s_box.0.borrow_mut().write(resp)
+        } else {
+            Ok(Response::Done(resp))
+        }
+    }
+}
+
+/// A simple key-value storage interface that is internally used by `Session`.
+#[doc(hidden)]
+pub trait SessionImpl: 'static {
+    fn get(&self, key: &str) -> Option<&str>;
+
+    fn set(&mut self, key: &str, value: String);
+
+    fn remove(&mut self, key: &str);
+
+    fn clear(&mut self);
+
+    /// Write session to storage backend.
+    fn write(&self, resp: HttpResponse) -> Result<Response>;
+}
+
+/// Session's storage backend trait definition.
+#[doc(hidden)]
+pub trait SessionBackend<S>: Sized + 'static {
+    type Session: SessionImpl;
+    type ReadFuture: Future<Item = Self::Session, Error = Error>;
+
+    /// Parse the session from request and load data from a storage backend.
+    fn from_request(&self, request: &mut HttpRequest<S>) -> Self::ReadFuture;
+}
+
+/// Session that uses signed cookies as session storage
+pub struct CookieSession {
+    changed: bool,
+    state: HashMap<String, String>,
+    inner: Rc<CookieSessionInner>,
+}
+
+/// Errors that can occur during handling cookie session
+#[derive(Fail, Debug)]
+pub enum CookieSessionError {
+    /// Size of the serialized session is greater than 4000 bytes.
+    #[fail(display = "Size of the serialized session is greater than 4000 bytes.")]
+    Overflow,
+    /// Fail to serialize session.
+    #[fail(display = "Fail to serialize session")]
+    Serialize(JsonError),
+}
+
+impl ResponseError for CookieSessionError {}
+
+impl SessionImpl for CookieSession {
+    fn get(&self, key: &str) -> Option<&str> {
+        if let Some(s) = self.state.get(key) {
+            Some(s)
+        } else {
+            None
+        }
+    }
+
+    fn set(&mut self, key: &str, value: String) {
+        self.changed = true;
+        self.state.insert(key.to_owned(), value);
+    }
+
+    fn remove(&mut self, key: &str) {
+        self.changed = true;
+        self.state.remove(key);
+    }
+
+    fn clear(&mut self) {
+        self.changed = true;
+        self.state.clear()
+    }
+
+    fn write(&self, mut resp: HttpResponse) -> Result<Response> {
+        if self.changed {
+            let _ = self.inner.set_cookie(&mut resp, &self.state);
+        }
+        Ok(Response::Done(resp))
+    }
+}
+
+enum CookieSecurity {
+    Signed,
+    Private,
+}
+
+struct CookieSessionInner {
+    key: Key,
+    security: CookieSecurity,
+    name: String,
+    path: String,
+    domain: Option<String>,
+    secure: bool,
+    http_only: bool,
+    max_age: Option<Duration>,
+    same_site: Option<SameSite>,
+}
+
+impl CookieSessionInner {
+    fn new(key: &[u8], security: CookieSecurity) -> CookieSessionInner {
+        CookieSessionInner {
+            security,
+            key: Key::from_master(key),
+            name: "actix-session".to_owned(),
+            path: "/".to_owned(),
+            domain: None,
+            secure: true,
+            http_only: true,
+            max_age: None,
+            same_site: None,
+        }
+    }
+
+    fn set_cookie(
+        &self, resp: &mut HttpResponse, state: &HashMap<String, String>,
+    ) -> Result<()> {
+        let value =
+            serde_json::to_string(&state).map_err(CookieSessionError::Serialize)?;
+        if value.len() > 4064 {
+            return Err(CookieSessionError::Overflow.into());
+        }
+
+        let mut cookie = Cookie::new(self.name.clone(), value);
+        cookie.set_path(self.path.clone());
+        cookie.set_secure(self.secure);
+        cookie.set_http_only(self.http_only);
+
+        if let Some(ref domain) = self.domain {
+            cookie.set_domain(domain.clone());
+        }
+
+        if let Some(max_age) = self.max_age {
+            cookie.set_max_age(max_age);
+        }
+
+        if let Some(same_site) = self.same_site {
+            cookie.set_same_site(same_site);
+        }
+
+        let mut jar = CookieJar::new();
+
+        match self.security {
+            CookieSecurity::Signed => jar.signed(&self.key).add(cookie),
+            CookieSecurity::Private => jar.private(&self.key).add(cookie),
+        }
+
+        for cookie in jar.delta() {
+            let val = HeaderValue::from_str(&cookie.encoded().to_string())?;
+            resp.headers_mut().append(header::SET_COOKIE, val);
+        }
+
+        Ok(())
+    }
+
+    fn load<S>(&self, req: &mut HttpRequest<S>) -> HashMap<String, String> {
+        if let Ok(cookies) = req.cookies() {
+            for cookie in cookies.iter() {
+                if cookie.name() == self.name {
+                    let mut jar = CookieJar::new();
+                    jar.add_original(cookie.clone());
+
+                    let cookie_opt = match self.security {
+                        CookieSecurity::Signed => jar.signed(&self.key).get(&self.name),
+                        CookieSecurity::Private => {
+                            jar.private(&self.key).get(&self.name)
+                        }
+                    };
+                    if let Some(cookie) = cookie_opt {
+                        if let Ok(val) = serde_json::from_str(cookie.value()) {
+                            return val;
+                        }
+                    }
+                }
+            }
+        }
+        HashMap::new()
+    }
+}
+
+/// Use cookies for session storage.
+///
+/// `CookieSessionBackend` creates sessions which are limited to storing
+/// fewer than 4000 bytes of data (as the payload must fit into a single
+/// cookie). An Internal Server Error is generated if the session contains more
+/// than 4000 bytes.
+///
+/// A cookie may have a security policy of *signed* or *private*. Each has a
+/// respective `CookieSessionBackend` constructor.
+///
+/// A *signed* cookie is stored on the client as plaintext alongside
+/// a signature such that the cookie may be viewed but not modified by the
+/// client.
+///
+/// A *private* cookie is stored on the client as encrypted text
+/// such that it may neither be viewed nor modified by the client.
+///
+/// The constructors take a key as an argument.
+/// This is the private key for cookie session - when this value is changed,
+/// all session data is lost. The constructors will panic if the key is less
+/// than 32 bytes in length.
+///
+/// The backend relies on `cookie` crate to create and read cookies.
+/// By default all cookies are percent encoded, but certain symbols may
+/// cause troubles when reading cookie, if they are not properly percent encoded.
+///
+/// # Example
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::middleware::session::CookieSessionBackend;
+///
+/// # fn main() {
+/// let backend: CookieSessionBackend = CookieSessionBackend::signed(&[0; 32])
+///     .domain("www.rust-lang.org")
+///     .name("actix_session")
+///     .path("/")
+///     .secure(true);
+/// # }
+/// ```
+pub struct CookieSessionBackend(Rc<CookieSessionInner>);
+
+impl CookieSessionBackend {
+    /// Construct new *signed* `CookieSessionBackend` instance.
+    ///
+    /// Panics if key length is less than 32 bytes.
+    pub fn signed(key: &[u8]) -> CookieSessionBackend {
+        CookieSessionBackend(Rc::new(CookieSessionInner::new(
+            key,
+            CookieSecurity::Signed,
+        )))
+    }
+
+    /// Construct new *private* `CookieSessionBackend` instance.
+    ///
+    /// Panics if key length is less than 32 bytes.
+    pub fn private(key: &[u8]) -> CookieSessionBackend {
+        CookieSessionBackend(Rc::new(CookieSessionInner::new(
+            key,
+            CookieSecurity::Private,
+        )))
+    }
+
+    /// Sets the `path` field in the session cookie being built.
+    pub fn path<S: Into<String>>(mut self, value: S) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().path = value.into();
+        self
+    }
+
+    /// Sets the `name` field in the session cookie being built.
+    pub fn name<S: Into<String>>(mut self, value: S) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().name = value.into();
+        self
+    }
+
+    /// Sets the `domain` field in the session cookie being built.
+    pub fn domain<S: Into<String>>(mut self, value: S) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().domain = Some(value.into());
+        self
+    }
+
+    /// Sets the `secure` field in the session cookie being built.
+    ///
+    /// If the `secure` field is set, a cookie will only be transmitted when the
+    /// connection is secure - i.e. `https`
+    pub fn secure(mut self, value: bool) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().secure = value;
+        self
+    }
+
+    /// Sets the `http_only` field in the session cookie being built.
+    pub fn http_only(mut self, value: bool) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().http_only = value;
+        self
+    }
+
+    /// Sets the `same_site` field in the session cookie being built.
+    pub fn same_site(mut self, value: SameSite) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().same_site = Some(value);
+        self
+    }
+
+    /// Sets the `max-age` field in the session cookie being built.
+    pub fn max_age(mut self, value: Duration) -> CookieSessionBackend {
+        Rc::get_mut(&mut self.0).unwrap().max_age = Some(value);
+        self
+    }
+}
+
+impl<S> SessionBackend<S> for CookieSessionBackend {
+    type Session = CookieSession;
+    type ReadFuture = FutureResult<CookieSession, Error>;
+
+    fn from_request(&self, req: &mut HttpRequest<S>) -> Self::ReadFuture {
+        let state = self.0.load(req);
+        FutOk(CookieSession {
+            changed: false,
+            inner: Rc::clone(&self.0),
+            state,
+        })
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use application::App;
+    use test;
+
+    #[test]
+    fn cookie_session() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new()
+                .middleware(SessionStorage::new(
+                    CookieSessionBackend::signed(&[0; 32]).secure(false),
+                ))
+                .resource("/", |r| {
+                    r.f(|req| {
+                        let _ = req.session().set("counter", 100);
+                        "test"
+                    })
+                })
+        });
+
+        let request = srv.get().uri(srv.url("/")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert!(response.cookie("actix-session").is_some());
+    }
+
+    #[test]
+    fn cookie_session_extractor() {
+        let mut srv = test::TestServer::with_factory(|| {
+            App::new()
+                .middleware(SessionStorage::new(
+                    CookieSessionBackend::signed(&[0; 32]).secure(false),
+                ))
+                .resource("/", |r| {
+                    r.with(|ses: Session| {
+                        let _ = ses.set("counter", 100);
+                        "test"
+                    })
+                })
+        });
+
+        let request = srv.get().uri(srv.url("/")).finish().unwrap();
+        let response = srv.execute(request.send()).unwrap();
+        assert!(response.cookie("actix-session").is_some());
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/multipart.rs.html b/static/api/actix-web/0.7.2/src/actix_web/multipart.rs.html new file mode 100644 index 0000000..708e737 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/multipart.rs.html @@ -0,0 +1,1641 @@ +multipart.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+
+//! Multipart requests support
+use std::cell::{RefCell, UnsafeCell};
+use std::marker::PhantomData;
+use std::rc::Rc;
+use std::{cmp, fmt};
+
+use bytes::Bytes;
+use futures::task::{current as current_task, Task};
+use futures::{Async, Poll, Stream};
+use http::header::{self, ContentDisposition, HeaderMap, HeaderName, HeaderValue};
+use http::HttpTryFrom;
+use httparse;
+use mime;
+
+use error::{MultipartError, ParseError, PayloadError};
+use payload::PayloadBuffer;
+
+const MAX_HEADERS: usize = 32;
+
+/// The server-side implementation of `multipart/form-data` requests.
+///
+/// This will parse the incoming stream into `MultipartItem` instances via its
+/// Stream implementation.
+/// `MultipartItem::Field` contains multipart field. `MultipartItem::Multipart`
+/// is used for nested multipart streams.
+pub struct Multipart<S> {
+    safety: Safety,
+    error: Option<MultipartError>,
+    inner: Option<Rc<RefCell<InnerMultipart<S>>>>,
+}
+
+///
+pub enum MultipartItem<S> {
+    /// Multipart field
+    Field(Field<S>),
+    /// Nested multipart stream
+    Nested(Multipart<S>),
+}
+
+enum InnerMultipartItem<S> {
+    None,
+    Field(Rc<RefCell<InnerField<S>>>),
+    Multipart(Rc<RefCell<InnerMultipart<S>>>),
+}
+
+#[derive(PartialEq, Debug)]
+enum InnerState {
+    /// Stream eof
+    Eof,
+    /// Skip data until first boundary
+    FirstBoundary,
+    /// Reading boundary
+    Boundary,
+    /// Reading Headers,
+    Headers,
+}
+
+struct InnerMultipart<S> {
+    payload: PayloadRef<S>,
+    boundary: String,
+    state: InnerState,
+    item: InnerMultipartItem<S>,
+}
+
+impl Multipart<()> {
+    /// Extract boundary info from headers.
+    pub fn boundary(headers: &HeaderMap) -> Result<String, MultipartError> {
+        if let Some(content_type) = headers.get(header::CONTENT_TYPE) {
+            if let Ok(content_type) = content_type.to_str() {
+                if let Ok(ct) = content_type.parse::<mime::Mime>() {
+                    if let Some(boundary) = ct.get_param(mime::BOUNDARY) {
+                        Ok(boundary.as_str().to_owned())
+                    } else {
+                        Err(MultipartError::Boundary)
+                    }
+                } else {
+                    Err(MultipartError::ParseContentType)
+                }
+            } else {
+                Err(MultipartError::ParseContentType)
+            }
+        } else {
+            Err(MultipartError::NoContentType)
+        }
+    }
+}
+
+impl<S> Multipart<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    /// Create multipart instance for boundary.
+    pub fn new(boundary: Result<String, MultipartError>, stream: S) -> Multipart<S> {
+        match boundary {
+            Ok(boundary) => Multipart {
+                error: None,
+                safety: Safety::new(),
+                inner: Some(Rc::new(RefCell::new(InnerMultipart {
+                    boundary,
+                    payload: PayloadRef::new(PayloadBuffer::new(stream)),
+                    state: InnerState::FirstBoundary,
+                    item: InnerMultipartItem::None,
+                }))),
+            },
+            Err(err) => Multipart {
+                error: Some(err),
+                safety: Safety::new(),
+                inner: None,
+            },
+        }
+    }
+}
+
+impl<S> Stream for Multipart<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    type Item = MultipartItem<S>;
+    type Error = MultipartError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        if let Some(err) = self.error.take() {
+            Err(err)
+        } else if self.safety.current() {
+            self.inner.as_mut().unwrap().borrow_mut().poll(&self.safety)
+        } else {
+            Ok(Async::NotReady)
+        }
+    }
+}
+
+impl<S> InnerMultipart<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    fn read_headers(payload: &mut PayloadBuffer<S>) -> Poll<HeaderMap, MultipartError> {
+        match payload.read_until(b"\r\n\r\n")? {
+            Async::NotReady => Ok(Async::NotReady),
+            Async::Ready(None) => Err(MultipartError::Incomplete),
+            Async::Ready(Some(bytes)) => {
+                let mut hdrs = [httparse::EMPTY_HEADER; MAX_HEADERS];
+                match httparse::parse_headers(&bytes, &mut hdrs) {
+                    Ok(httparse::Status::Complete((_, hdrs))) => {
+                        // convert headers
+                        let mut headers = HeaderMap::with_capacity(hdrs.len());
+                        for h in hdrs {
+                            if let Ok(name) = HeaderName::try_from(h.name) {
+                                if let Ok(value) = HeaderValue::try_from(h.value) {
+                                    headers.append(name, value);
+                                } else {
+                                    return Err(ParseError::Header.into());
+                                }
+                            } else {
+                                return Err(ParseError::Header.into());
+                            }
+                        }
+                        Ok(Async::Ready(headers))
+                    }
+                    Ok(httparse::Status::Partial) => Err(ParseError::Header.into()),
+                    Err(err) => Err(ParseError::from(err).into()),
+                }
+            }
+        }
+    }
+
+    fn read_boundary(
+        payload: &mut PayloadBuffer<S>, boundary: &str,
+    ) -> Poll<bool, MultipartError> {
+        // TODO: need to read epilogue
+        match payload.readline()? {
+            Async::NotReady => Ok(Async::NotReady),
+            Async::Ready(None) => Err(MultipartError::Incomplete),
+            Async::Ready(Some(chunk)) => {
+                if chunk.len() == boundary.len() + 4
+                    && &chunk[..2] == b"--"
+                    && &chunk[2..boundary.len() + 2] == boundary.as_bytes()
+                {
+                    Ok(Async::Ready(false))
+                } else if chunk.len() == boundary.len() + 6
+                    && &chunk[..2] == b"--"
+                    && &chunk[2..boundary.len() + 2] == boundary.as_bytes()
+                    && &chunk[boundary.len() + 2..boundary.len() + 4] == b"--"
+                {
+                    Ok(Async::Ready(true))
+                } else {
+                    Err(MultipartError::Boundary)
+                }
+            }
+        }
+    }
+
+    fn skip_until_boundary(
+        payload: &mut PayloadBuffer<S>, boundary: &str,
+    ) -> Poll<bool, MultipartError> {
+        let mut eof = false;
+        loop {
+            match payload.readline()? {
+                Async::Ready(Some(chunk)) => {
+                    if chunk.is_empty() {
+                        //ValueError("Could not find starting boundary %r"
+                        //% (self._boundary))
+                    }
+                    if chunk.len() < boundary.len() {
+                        continue;
+                    }
+                    if &chunk[..2] == b"--"
+                        && &chunk[2..chunk.len() - 2] == boundary.as_bytes()
+                    {
+                        break;
+                    } else {
+                        if chunk.len() < boundary.len() + 2 {
+                            continue;
+                        }
+                        let b: &[u8] = boundary.as_ref();
+                        if &chunk[..boundary.len()] == b
+                            && &chunk[boundary.len()..boundary.len() + 2] == b"--"
+                        {
+                            eof = true;
+                            break;
+                        }
+                    }
+                }
+                Async::NotReady => return Ok(Async::NotReady),
+                Async::Ready(None) => return Err(MultipartError::Incomplete),
+            }
+        }
+        Ok(Async::Ready(eof))
+    }
+
+    fn poll(
+        &mut self, safety: &Safety,
+    ) -> Poll<Option<MultipartItem<S>>, MultipartError> {
+        if self.state == InnerState::Eof {
+            Ok(Async::Ready(None))
+        } else {
+            // release field
+            loop {
+                // Nested multipart streams of fields has to be consumed
+                // before switching to next
+                if safety.current() {
+                    let stop = match self.item {
+                        InnerMultipartItem::Field(ref mut field) => {
+                            match field.borrow_mut().poll(safety)? {
+                                Async::NotReady => return Ok(Async::NotReady),
+                                Async::Ready(Some(_)) => continue,
+                                Async::Ready(None) => true,
+                            }
+                        }
+                        InnerMultipartItem::Multipart(ref mut multipart) => {
+                            match multipart.borrow_mut().poll(safety)? {
+                                Async::NotReady => return Ok(Async::NotReady),
+                                Async::Ready(Some(_)) => continue,
+                                Async::Ready(None) => true,
+                            }
+                        }
+                        _ => false,
+                    };
+                    if stop {
+                        self.item = InnerMultipartItem::None;
+                    }
+                    if let InnerMultipartItem::None = self.item {
+                        break;
+                    }
+                }
+            }
+
+            let headers = if let Some(payload) = self.payload.get_mut(safety) {
+                match self.state {
+                    // read until first boundary
+                    InnerState::FirstBoundary => {
+                        match InnerMultipart::skip_until_boundary(
+                            payload,
+                            &self.boundary,
+                        )? {
+                            Async::Ready(eof) => {
+                                if eof {
+                                    self.state = InnerState::Eof;
+                                    return Ok(Async::Ready(None));
+                                } else {
+                                    self.state = InnerState::Headers;
+                                }
+                            }
+                            Async::NotReady => return Ok(Async::NotReady),
+                        }
+                    }
+                    // read boundary
+                    InnerState::Boundary => {
+                        match InnerMultipart::read_boundary(payload, &self.boundary)? {
+                            Async::NotReady => return Ok(Async::NotReady),
+                            Async::Ready(eof) => {
+                                if eof {
+                                    self.state = InnerState::Eof;
+                                    return Ok(Async::Ready(None));
+                                } else {
+                                    self.state = InnerState::Headers;
+                                }
+                            }
+                        }
+                    }
+                    _ => (),
+                }
+
+                // read field headers for next field
+                if self.state == InnerState::Headers {
+                    if let Async::Ready(headers) = InnerMultipart::read_headers(payload)?
+                    {
+                        self.state = InnerState::Boundary;
+                        headers
+                    } else {
+                        return Ok(Async::NotReady);
+                    }
+                } else {
+                    unreachable!()
+                }
+            } else {
+                debug!("NotReady: field is in flight");
+                return Ok(Async::NotReady);
+            };
+
+            // content type
+            let mut mt = mime::APPLICATION_OCTET_STREAM;
+            if let Some(content_type) = headers.get(header::CONTENT_TYPE) {
+                if let Ok(content_type) = content_type.to_str() {
+                    if let Ok(ct) = content_type.parse::<mime::Mime>() {
+                        mt = ct;
+                    }
+                }
+            }
+
+            self.state = InnerState::Boundary;
+
+            // nested multipart stream
+            if mt.type_() == mime::MULTIPART {
+                let inner = if let Some(boundary) = mt.get_param(mime::BOUNDARY) {
+                    Rc::new(RefCell::new(InnerMultipart {
+                        payload: self.payload.clone(),
+                        boundary: boundary.as_str().to_owned(),
+                        state: InnerState::FirstBoundary,
+                        item: InnerMultipartItem::None,
+                    }))
+                } else {
+                    return Err(MultipartError::Boundary);
+                };
+
+                self.item = InnerMultipartItem::Multipart(Rc::clone(&inner));
+
+                Ok(Async::Ready(Some(MultipartItem::Nested(Multipart {
+                    safety: safety.clone(),
+                    error: None,
+                    inner: Some(inner),
+                }))))
+            } else {
+                let field = Rc::new(RefCell::new(InnerField::new(
+                    self.payload.clone(),
+                    self.boundary.clone(),
+                    &headers,
+                )?));
+                self.item = InnerMultipartItem::Field(Rc::clone(&field));
+
+                Ok(Async::Ready(Some(MultipartItem::Field(Field::new(
+                    safety.clone(),
+                    headers,
+                    mt,
+                    field,
+                )))))
+            }
+        }
+    }
+}
+
+impl<S> Drop for InnerMultipart<S> {
+    fn drop(&mut self) {
+        // InnerMultipartItem::Field has to be dropped first because of Safety.
+        self.item = InnerMultipartItem::None;
+    }
+}
+
+/// A single field in a multipart stream
+pub struct Field<S> {
+    ct: mime::Mime,
+    headers: HeaderMap,
+    inner: Rc<RefCell<InnerField<S>>>,
+    safety: Safety,
+}
+
+impl<S> Field<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    fn new(
+        safety: Safety, headers: HeaderMap, ct: mime::Mime,
+        inner: Rc<RefCell<InnerField<S>>>,
+    ) -> Self {
+        Field {
+            ct,
+            headers,
+            inner,
+            safety,
+        }
+    }
+
+    /// Get a map of headers
+    pub fn headers(&self) -> &HeaderMap {
+        &self.headers
+    }
+
+    /// Get the content type of the field
+    pub fn content_type(&self) -> &mime::Mime {
+        &self.ct
+    }
+
+    /// Get the content disposition of the field, if it exists
+    pub fn content_disposition(&self) -> Option<ContentDisposition> {
+        // RFC 7578: 'Each part MUST contain a Content-Disposition header field
+        // where the disposition type is "form-data".'
+        if let Some(content_disposition) =
+            self.headers.get(::http::header::CONTENT_DISPOSITION)
+        {
+            ContentDisposition::from_raw(content_disposition).ok()
+        } else {
+            None
+        }
+    }
+}
+
+impl<S> Stream for Field<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    type Item = Bytes;
+    type Error = MultipartError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        if self.safety.current() {
+            self.inner.borrow_mut().poll(&self.safety)
+        } else {
+            Ok(Async::NotReady)
+        }
+    }
+}
+
+impl<S> fmt::Debug for Field<S> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let res = writeln!(f, "\nMultipartField: {}", self.ct);
+        let _ = writeln!(f, "  boundary: {}", self.inner.borrow().boundary);
+        let _ = writeln!(f, "  headers:");
+        for (key, val) in self.headers.iter() {
+            let _ = writeln!(f, "    {:?}: {:?}", key, val);
+        }
+        res
+    }
+}
+
+struct InnerField<S> {
+    payload: Option<PayloadRef<S>>,
+    boundary: String,
+    eof: bool,
+    length: Option<u64>,
+}
+
+impl<S> InnerField<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    fn new(
+        payload: PayloadRef<S>, boundary: String, headers: &HeaderMap,
+    ) -> Result<InnerField<S>, PayloadError> {
+        let len = if let Some(len) = headers.get(header::CONTENT_LENGTH) {
+            if let Ok(s) = len.to_str() {
+                if let Ok(len) = s.parse::<u64>() {
+                    Some(len)
+                } else {
+                    return Err(PayloadError::Incomplete);
+                }
+            } else {
+                return Err(PayloadError::Incomplete);
+            }
+        } else {
+            None
+        };
+
+        Ok(InnerField {
+            boundary,
+            payload: Some(payload),
+            eof: false,
+            length: len,
+        })
+    }
+
+    /// Reads body part content chunk of the specified size.
+    /// The body part must has `Content-Length` header with proper value.
+    fn read_len(
+        payload: &mut PayloadBuffer<S>, size: &mut u64,
+    ) -> Poll<Option<Bytes>, MultipartError> {
+        if *size == 0 {
+            Ok(Async::Ready(None))
+        } else {
+            match payload.readany() {
+                Ok(Async::NotReady) => Ok(Async::NotReady),
+                Ok(Async::Ready(None)) => Err(MultipartError::Incomplete),
+                Ok(Async::Ready(Some(mut chunk))) => {
+                    let len = cmp::min(chunk.len() as u64, *size);
+                    *size -= len;
+                    let ch = chunk.split_to(len as usize);
+                    if !chunk.is_empty() {
+                        payload.unprocessed(chunk);
+                    }
+                    Ok(Async::Ready(Some(ch)))
+                }
+                Err(err) => Err(err.into()),
+            }
+        }
+    }
+
+    /// Reads content chunk of body part with unknown length.
+    /// The `Content-Length` header for body part is not necessary.
+    fn read_stream(
+        payload: &mut PayloadBuffer<S>, boundary: &str,
+    ) -> Poll<Option<Bytes>, MultipartError> {
+        match payload.read_until(b"\r")? {
+            Async::NotReady => Ok(Async::NotReady),
+            Async::Ready(None) => Err(MultipartError::Incomplete),
+            Async::Ready(Some(mut chunk)) => {
+                if chunk.len() == 1 {
+                    payload.unprocessed(chunk);
+                    match payload.read_exact(boundary.len() + 4)? {
+                        Async::NotReady => Ok(Async::NotReady),
+                        Async::Ready(None) => Err(MultipartError::Incomplete),
+                        Async::Ready(Some(mut chunk)) => {
+                            if &chunk[..2] == b"\r\n"
+                                && &chunk[2..4] == b"--"
+                                && &chunk[4..] == boundary.as_bytes()
+                            {
+                                payload.unprocessed(chunk);
+                                Ok(Async::Ready(None))
+                            } else {
+                                // \r might be part of data stream
+                                let ch = chunk.split_to(1);
+                                payload.unprocessed(chunk);
+                                Ok(Async::Ready(Some(ch)))
+                            }
+                        }
+                    }
+                } else {
+                    let to = chunk.len() - 1;
+                    let ch = chunk.split_to(to);
+                    payload.unprocessed(chunk);
+                    Ok(Async::Ready(Some(ch)))
+                }
+            }
+        }
+    }
+
+    fn poll(&mut self, s: &Safety) -> Poll<Option<Bytes>, MultipartError> {
+        if self.payload.is_none() {
+            return Ok(Async::Ready(None));
+        }
+
+        let result = if let Some(payload) = self.payload.as_ref().unwrap().get_mut(s) {
+            let res = if let Some(ref mut len) = self.length {
+                InnerField::read_len(payload, len)?
+            } else {
+                InnerField::read_stream(payload, &self.boundary)?
+            };
+
+            match res {
+                Async::NotReady => Async::NotReady,
+                Async::Ready(Some(bytes)) => Async::Ready(Some(bytes)),
+                Async::Ready(None) => {
+                    self.eof = true;
+                    match payload.readline()? {
+                        Async::NotReady => Async::NotReady,
+                        Async::Ready(None) => Async::Ready(None),
+                        Async::Ready(Some(line)) => {
+                            if line.as_ref() != b"\r\n" {
+                                warn!("multipart field did not read all the data or it is malformed");
+                            }
+                            Async::Ready(None)
+                        }
+                    }
+                }
+            }
+        } else {
+            Async::NotReady
+        };
+
+        if Async::Ready(None) == result {
+            self.payload.take();
+        }
+        Ok(result)
+    }
+}
+
+struct PayloadRef<S> {
+    payload: Rc<UnsafeCell<PayloadBuffer<S>>>,
+}
+
+impl<S> PayloadRef<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    fn new(payload: PayloadBuffer<S>) -> PayloadRef<S> {
+        PayloadRef {
+            payload: Rc::new(payload.into()),
+        }
+    }
+
+    fn get_mut<'a, 'b>(&'a self, s: &'b Safety) -> Option<&'a mut PayloadBuffer<S>>
+    where
+        'a: 'b,
+    {
+        // Unsafe: Invariant is inforced by Safety Safety is used as ref counter,
+        // only top most ref can have mutable access to payload.
+        if s.current() {
+            let payload: &mut PayloadBuffer<S> = unsafe { &mut *self.payload.get() };
+            Some(payload)
+        } else {
+            None
+        }
+    }
+}
+
+impl<S> Clone for PayloadRef<S> {
+    fn clone(&self) -> PayloadRef<S> {
+        PayloadRef {
+            payload: Rc::clone(&self.payload),
+        }
+    }
+}
+
+/// Counter. It tracks of number of clones of payloads and give access to
+/// payload only to top most task panics if Safety get destroyed and it not top
+/// most task.
+#[derive(Debug)]
+struct Safety {
+    task: Option<Task>,
+    level: usize,
+    payload: Rc<PhantomData<bool>>,
+}
+
+impl Safety {
+    fn new() -> Safety {
+        let payload = Rc::new(PhantomData);
+        Safety {
+            task: None,
+            level: Rc::strong_count(&payload),
+            payload,
+        }
+    }
+
+    fn current(&self) -> bool {
+        Rc::strong_count(&self.payload) == self.level
+    }
+}
+
+impl Clone for Safety {
+    fn clone(&self) -> Safety {
+        let payload = Rc::clone(&self.payload);
+        Safety {
+            task: Some(current_task()),
+            level: Rc::strong_count(&payload),
+            payload,
+        }
+    }
+}
+
+impl Drop for Safety {
+    fn drop(&mut self) {
+        // parent task is dead
+        if Rc::strong_count(&self.payload) != self.level {
+            panic!("Safety get dropped but it is not from top-most task");
+        }
+        if let Some(task) = self.task.take() {
+            task.notify()
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use bytes::Bytes;
+    use futures::future::{lazy, result};
+    use payload::{Payload, PayloadWriter};
+    use tokio::runtime::current_thread::Runtime;
+
+    #[test]
+    fn test_boundary() {
+        let headers = HeaderMap::new();
+        match Multipart::boundary(&headers) {
+            Err(MultipartError::NoContentType) => (),
+            _ => unreachable!("should not happen"),
+        }
+
+        let mut headers = HeaderMap::new();
+        headers.insert(
+            header::CONTENT_TYPE,
+            header::HeaderValue::from_static("test"),
+        );
+
+        match Multipart::boundary(&headers) {
+            Err(MultipartError::ParseContentType) => (),
+            _ => unreachable!("should not happen"),
+        }
+
+        let mut headers = HeaderMap::new();
+        headers.insert(
+            header::CONTENT_TYPE,
+            header::HeaderValue::from_static("multipart/mixed"),
+        );
+        match Multipart::boundary(&headers) {
+            Err(MultipartError::Boundary) => (),
+            _ => unreachable!("should not happen"),
+        }
+
+        let mut headers = HeaderMap::new();
+        headers.insert(
+            header::CONTENT_TYPE,
+            header::HeaderValue::from_static(
+                "multipart/mixed; boundary=\"5c02368e880e436dab70ed54e1c58209\"",
+            ),
+        );
+
+        assert_eq!(
+            Multipart::boundary(&headers).unwrap(),
+            "5c02368e880e436dab70ed54e1c58209"
+        );
+    }
+
+    #[test]
+    fn test_multipart() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+
+                let bytes = Bytes::from(
+                "testasdadsad\r\n\
+                 --abbc761f78ff4d7cb7573b5a23f96ef0\r\n\
+                 Content-Disposition: form-data; name=\"file\"; filename=\"fn.txt\"\r\n\
+                 Content-Type: text/plain; charset=utf-8\r\nContent-Length: 4\r\n\r\n\
+                 test\r\n\
+                 --abbc761f78ff4d7cb7573b5a23f96ef0\r\n\
+                 Content-Type: text/plain; charset=utf-8\r\nContent-Length: 4\r\n\r\n\
+                 data\r\n\
+                 --abbc761f78ff4d7cb7573b5a23f96ef0--\r\n");
+                sender.feed_data(bytes);
+
+                let mut multipart = Multipart::new(
+                    Ok("abbc761f78ff4d7cb7573b5a23f96ef0".to_owned()),
+                    payload,
+                );
+                match multipart.poll() {
+                    Ok(Async::Ready(Some(item))) => match item {
+                        MultipartItem::Field(mut field) => {
+                            {
+                                use http::header::{DispositionParam, DispositionType};
+                                let cd = field.content_disposition().unwrap();
+                                assert_eq!(
+                                    cd.disposition,
+                                    DispositionType::Ext("form-data".into())
+                                );
+                                assert_eq!(
+                                    cd.parameters[0],
+                                    DispositionParam::Ext("name".into(), "file".into())
+                                );
+                            }
+                            assert_eq!(field.content_type().type_(), mime::TEXT);
+                            assert_eq!(field.content_type().subtype(), mime::PLAIN);
+
+                            match field.poll() {
+                                Ok(Async::Ready(Some(chunk))) => {
+                                    assert_eq!(chunk, "test")
+                                }
+                                _ => unreachable!(),
+                            }
+                            match field.poll() {
+                                Ok(Async::Ready(None)) => (),
+                                _ => unreachable!(),
+                            }
+                        }
+                        _ => unreachable!(),
+                    },
+                    _ => unreachable!(),
+                }
+
+                match multipart.poll() {
+                    Ok(Async::Ready(Some(item))) => match item {
+                        MultipartItem::Field(mut field) => {
+                            assert_eq!(field.content_type().type_(), mime::TEXT);
+                            assert_eq!(field.content_type().subtype(), mime::PLAIN);
+
+                            match field.poll() {
+                                Ok(Async::Ready(Some(chunk))) => {
+                                    assert_eq!(chunk, "data")
+                                }
+                                _ => unreachable!(),
+                            }
+                            match field.poll() {
+                                Ok(Async::Ready(None)) => (),
+                                _ => unreachable!(),
+                            }
+                        }
+                        _ => unreachable!(),
+                    },
+                    _ => unreachable!(),
+                }
+
+                match multipart.poll() {
+                    Ok(Async::Ready(None)) => (),
+                    _ => unreachable!(),
+                }
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/param.rs.html b/static/api/actix-web/0.7.2/src/actix_web/param.rs.html new file mode 100644 index 0000000..21785f8 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/param.rs.html @@ -0,0 +1,611 @@ +param.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+
+use std;
+use std::ops::Index;
+use std::path::PathBuf;
+use std::rc::Rc;
+use std::str::FromStr;
+
+use http::StatusCode;
+use smallvec::SmallVec;
+
+use error::{InternalError, ResponseError, UriSegmentError};
+use uri::Url;
+
+/// A trait to abstract the idea of creating a new instance of a type from a
+/// path parameter.
+pub trait FromParam: Sized {
+    /// The associated error which can be returned from parsing.
+    type Err: ResponseError;
+
+    /// Parses a string `s` to return a value of this type.
+    fn from_param(s: &str) -> Result<Self, Self::Err>;
+}
+
+#[derive(Debug, Clone)]
+pub(crate) enum ParamItem {
+    Static(&'static str),
+    UrlSegment(u16, u16),
+}
+
+/// Route match information
+///
+/// If resource path contains variable patterns, `Params` stores this variables.
+#[derive(Debug, Clone)]
+pub struct Params {
+    url: Url,
+    pub(crate) tail: u16,
+    pub(crate) segments: SmallVec<[(Rc<String>, ParamItem); 3]>,
+}
+
+impl Params {
+    pub(crate) fn new() -> Params {
+        Params {
+            url: Url::default(),
+            tail: 0,
+            segments: SmallVec::new(),
+        }
+    }
+
+    pub(crate) fn with_url(url: &Url) -> Params {
+        Params {
+            url: url.clone(),
+            tail: 0,
+            segments: SmallVec::new(),
+        }
+    }
+
+    pub(crate) fn clear(&mut self) {
+        self.segments.clear();
+    }
+
+    pub(crate) fn set_tail(&mut self, tail: u16) {
+        self.tail = tail;
+    }
+
+    pub(crate) fn set_url(&mut self, url: Url) {
+        self.url = url;
+    }
+
+    pub(crate) fn add(&mut self, name: Rc<String>, value: ParamItem) {
+        self.segments.push((name, value));
+    }
+
+    pub(crate) fn add_static(&mut self, name: &str, value: &'static str) {
+        self.segments
+            .push((Rc::new(name.to_string()), ParamItem::Static(value)));
+    }
+
+    /// Check if there are any matched patterns
+    pub fn is_empty(&self) -> bool {
+        self.segments.is_empty()
+    }
+
+    /// Check number of extracted parameters
+    pub fn len(&self) -> usize {
+        self.segments.len()
+    }
+
+    /// Get matched parameter by name without type conversion
+    pub fn get(&self, key: &str) -> Option<&str> {
+        for item in self.segments.iter() {
+            if key == item.0.as_str() {
+                return match item.1 {
+                    ParamItem::Static(ref s) => Some(&s),
+                    ParamItem::UrlSegment(s, e) => {
+                        Some(&self.url.path()[(s as usize)..(e as usize)])
+                    }
+                };
+            }
+        }
+        if key == "tail" {
+            Some(&self.url.path()[(self.tail as usize)..])
+        } else {
+            None
+        }
+    }
+
+    /// Get unprocessed part of path
+    pub fn unprocessed(&self) -> &str {
+        &self.url.path()[(self.tail as usize)..]
+    }
+
+    /// Get matched `FromParam` compatible parameter by name.
+    ///
+    /// If keyed parameter is not available empty string is used as default
+    /// value.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// fn index(req: HttpRequest) -> Result<String> {
+    ///     let ivalue: isize = req.match_info().query("val")?;
+    ///     Ok(format!("isuze value: {:?}", ivalue))
+    /// }
+    /// # fn main() {}
+    /// ```
+    pub fn query<T: FromParam>(&self, key: &str) -> Result<T, <T as FromParam>::Err> {
+        if let Some(s) = self.get(key) {
+            T::from_param(s)
+        } else {
+            T::from_param("")
+        }
+    }
+
+    /// Return iterator to items in parameter container
+    pub fn iter(&self) -> ParamsIter {
+        ParamsIter {
+            idx: 0,
+            params: self,
+        }
+    }
+}
+
+#[derive(Debug)]
+pub struct ParamsIter<'a> {
+    idx: usize,
+    params: &'a Params,
+}
+
+impl<'a> Iterator for ParamsIter<'a> {
+    type Item = (&'a str, &'a str);
+
+    #[inline]
+    fn next(&mut self) -> Option<(&'a str, &'a str)> {
+        if self.idx < self.params.len() {
+            let idx = self.idx;
+            let res = match self.params.segments[idx].1 {
+                ParamItem::Static(ref s) => &s,
+                ParamItem::UrlSegment(s, e) => {
+                    &self.params.url.path()[(s as usize)..(e as usize)]
+                }
+            };
+            self.idx += 1;
+            return Some((&self.params.segments[idx].0, res));
+        }
+        None
+    }
+}
+
+impl<'a> Index<&'a str> for Params {
+    type Output = str;
+
+    fn index(&self, name: &'a str) -> &str {
+        self.get(name)
+            .expect("Value for parameter is not available")
+    }
+}
+
+impl Index<usize> for Params {
+    type Output = str;
+
+    fn index(&self, idx: usize) -> &str {
+        match self.segments[idx].1 {
+            ParamItem::Static(ref s) => &s,
+            ParamItem::UrlSegment(s, e) => &self.url.path()[(s as usize)..(e as usize)],
+        }
+    }
+}
+
+/// Creates a `PathBuf` from a path parameter. The returned `PathBuf` is
+/// percent-decoded. If a segment is equal to "..", the previous segment (if
+/// any) is skipped.
+///
+/// For security purposes, if a segment meets any of the following conditions,
+/// an `Err` is returned indicating the condition met:
+///
+///   * Decoded segment starts with any of: `.` (except `..`), `*`
+///   * Decoded segment ends with any of: `:`, `>`, `<`
+///   * Decoded segment contains any of: `/`
+///   * On Windows, decoded segment contains any of: '\'
+///   * Percent-encoding results in invalid UTF8.
+///
+/// As a result of these conditions, a `PathBuf` parsed from request path
+/// parameter is safe to interpolate within, or use as a suffix of, a path
+/// without additional checks.
+impl FromParam for PathBuf {
+    type Err = UriSegmentError;
+
+    fn from_param(val: &str) -> Result<PathBuf, UriSegmentError> {
+        let mut buf = PathBuf::new();
+        for segment in val.split('/') {
+            if segment == ".." {
+                buf.pop();
+            } else if segment.starts_with('.') {
+                return Err(UriSegmentError::BadStart('.'));
+            } else if segment.starts_with('*') {
+                return Err(UriSegmentError::BadStart('*'));
+            } else if segment.ends_with(':') {
+                return Err(UriSegmentError::BadEnd(':'));
+            } else if segment.ends_with('>') {
+                return Err(UriSegmentError::BadEnd('>'));
+            } else if segment.ends_with('<') {
+                return Err(UriSegmentError::BadEnd('<'));
+            } else if segment.is_empty() {
+                continue;
+            } else if cfg!(windows) && segment.contains('\\') {
+                return Err(UriSegmentError::BadChar('\\'));
+            } else {
+                buf.push(segment)
+            }
+        }
+
+        Ok(buf)
+    }
+}
+
+macro_rules! FROM_STR {
+    ($type:ty) => {
+        impl FromParam for $type {
+            type Err = InternalError<<$type as FromStr>::Err>;
+
+            fn from_param(val: &str) -> Result<Self, Self::Err> {
+                <$type as FromStr>::from_str(val)
+                    .map_err(|e| InternalError::new(e, StatusCode::BAD_REQUEST))
+            }
+        }
+    };
+}
+
+FROM_STR!(u8);
+FROM_STR!(u16);
+FROM_STR!(u32);
+FROM_STR!(u64);
+FROM_STR!(usize);
+FROM_STR!(i8);
+FROM_STR!(i16);
+FROM_STR!(i32);
+FROM_STR!(i64);
+FROM_STR!(isize);
+FROM_STR!(f32);
+FROM_STR!(f64);
+FROM_STR!(String);
+FROM_STR!(std::net::IpAddr);
+FROM_STR!(std::net::Ipv4Addr);
+FROM_STR!(std::net::Ipv6Addr);
+FROM_STR!(std::net::SocketAddr);
+FROM_STR!(std::net::SocketAddrV4);
+FROM_STR!(std::net::SocketAddrV6);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use std::iter::FromIterator;
+
+    #[test]
+    fn test_path_buf() {
+        assert_eq!(
+            PathBuf::from_param("/test/.tt"),
+            Err(UriSegmentError::BadStart('.'))
+        );
+        assert_eq!(
+            PathBuf::from_param("/test/*tt"),
+            Err(UriSegmentError::BadStart('*'))
+        );
+        assert_eq!(
+            PathBuf::from_param("/test/tt:"),
+            Err(UriSegmentError::BadEnd(':'))
+        );
+        assert_eq!(
+            PathBuf::from_param("/test/tt<"),
+            Err(UriSegmentError::BadEnd('<'))
+        );
+        assert_eq!(
+            PathBuf::from_param("/test/tt>"),
+            Err(UriSegmentError::BadEnd('>'))
+        );
+        assert_eq!(
+            PathBuf::from_param("/seg1/seg2/"),
+            Ok(PathBuf::from_iter(vec!["seg1", "seg2"]))
+        );
+        assert_eq!(
+            PathBuf::from_param("/seg1/../seg2/"),
+            Ok(PathBuf::from_iter(vec!["seg2"]))
+        );
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/payload.rs.html b/static/api/actix-web/0.7.2/src/actix_web/payload.rs.html new file mode 100644 index 0000000..adc767b --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/payload.rs.html @@ -0,0 +1,1445 @@ +payload.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+
+//! Payload stream
+use bytes::{Bytes, BytesMut};
+use futures::task::{current as current_task, Task};
+use futures::{Async, Poll, Stream};
+use std::cell::RefCell;
+use std::cmp;
+use std::collections::VecDeque;
+use std::rc::{Rc, Weak};
+
+use error::PayloadError;
+
+/// max buffer size 32k
+pub(crate) const MAX_BUFFER_SIZE: usize = 32_768;
+
+#[derive(Debug, PartialEq)]
+pub(crate) enum PayloadStatus {
+    Read,
+    Pause,
+    Dropped,
+}
+
+/// Buffered stream of bytes chunks
+///
+/// Payload stores chunks in a vector. First chunk can be received with
+/// `.readany()` method. Payload stream is not thread safe. Payload does not
+/// notify current task when new data is available.
+///
+/// Payload stream can be used as `HttpResponse` body stream.
+#[derive(Debug)]
+pub struct Payload {
+    inner: Rc<RefCell<Inner>>,
+}
+
+impl Payload {
+    /// Create payload stream.
+    ///
+    /// This method construct two objects responsible for bytes stream
+    /// generation.
+    ///
+    /// * `PayloadSender` - *Sender* side of the stream
+    ///
+    /// * `Payload` - *Receiver* side of the stream
+    pub fn new(eof: bool) -> (PayloadSender, Payload) {
+        let shared = Rc::new(RefCell::new(Inner::new(eof)));
+
+        (
+            PayloadSender {
+                inner: Rc::downgrade(&shared),
+            },
+            Payload { inner: shared },
+        )
+    }
+
+    /// Create empty payload
+    #[doc(hidden)]
+    pub fn empty() -> Payload {
+        Payload {
+            inner: Rc::new(RefCell::new(Inner::new(true))),
+        }
+    }
+
+    /// Length of the data in this payload
+    #[cfg(test)]
+    pub fn len(&self) -> usize {
+        self.inner.borrow().len()
+    }
+
+    /// Is payload empty
+    #[cfg(test)]
+    pub fn is_empty(&self) -> bool {
+        self.inner.borrow().len() == 0
+    }
+
+    /// Put unused data back to payload
+    #[inline]
+    pub fn unread_data(&mut self, data: Bytes) {
+        self.inner.borrow_mut().unread_data(data);
+    }
+
+    #[cfg(test)]
+    pub(crate) fn readall(&self) -> Option<Bytes> {
+        self.inner.borrow_mut().readall()
+    }
+
+    #[inline]
+    /// Set read buffer capacity
+    ///
+    /// Default buffer capacity is 32Kb.
+    pub fn set_read_buffer_capacity(&mut self, cap: usize) {
+        self.inner.borrow_mut().capacity = cap;
+    }
+}
+
+impl Stream for Payload {
+    type Item = Bytes;
+    type Error = PayloadError;
+
+    #[inline]
+    fn poll(&mut self) -> Poll<Option<Bytes>, PayloadError> {
+        self.inner.borrow_mut().readany()
+    }
+}
+
+impl Clone for Payload {
+    fn clone(&self) -> Payload {
+        Payload {
+            inner: Rc::clone(&self.inner),
+        }
+    }
+}
+
+/// Payload writer interface.
+pub(crate) trait PayloadWriter {
+    /// Set stream error.
+    fn set_error(&mut self, err: PayloadError);
+
+    /// Write eof into a stream which closes reading side of a stream.
+    fn feed_eof(&mut self);
+
+    /// Feed bytes into a payload stream
+    fn feed_data(&mut self, data: Bytes);
+
+    /// Need read data
+    fn need_read(&self) -> PayloadStatus;
+}
+
+/// Sender part of the payload stream
+pub struct PayloadSender {
+    inner: Weak<RefCell<Inner>>,
+}
+
+impl PayloadWriter for PayloadSender {
+    #[inline]
+    fn set_error(&mut self, err: PayloadError) {
+        if let Some(shared) = self.inner.upgrade() {
+            shared.borrow_mut().set_error(err)
+        }
+    }
+
+    #[inline]
+    fn feed_eof(&mut self) {
+        if let Some(shared) = self.inner.upgrade() {
+            shared.borrow_mut().feed_eof()
+        }
+    }
+
+    #[inline]
+    fn feed_data(&mut self, data: Bytes) {
+        if let Some(shared) = self.inner.upgrade() {
+            shared.borrow_mut().feed_data(data)
+        }
+    }
+
+    #[inline]
+    fn need_read(&self) -> PayloadStatus {
+        // we check need_read only if Payload (other side) is alive,
+        // otherwise always return true (consume payload)
+        if let Some(shared) = self.inner.upgrade() {
+            if shared.borrow().need_read {
+                PayloadStatus::Read
+            } else {
+                #[cfg(not(test))]
+                {
+                    if shared.borrow_mut().io_task.is_none() {
+                        shared.borrow_mut().io_task = Some(current_task());
+                    }
+                }
+                PayloadStatus::Pause
+            }
+        } else {
+            PayloadStatus::Dropped
+        }
+    }
+}
+
+#[derive(Debug)]
+struct Inner {
+    len: usize,
+    eof: bool,
+    err: Option<PayloadError>,
+    need_read: bool,
+    items: VecDeque<Bytes>,
+    capacity: usize,
+    task: Option<Task>,
+    io_task: Option<Task>,
+}
+
+impl Inner {
+    fn new(eof: bool) -> Self {
+        Inner {
+            eof,
+            len: 0,
+            err: None,
+            items: VecDeque::new(),
+            need_read: true,
+            capacity: MAX_BUFFER_SIZE,
+            task: None,
+            io_task: None,
+        }
+    }
+
+    #[inline]
+    fn set_error(&mut self, err: PayloadError) {
+        self.err = Some(err);
+    }
+
+    #[inline]
+    fn feed_eof(&mut self) {
+        self.eof = true;
+    }
+
+    #[inline]
+    fn feed_data(&mut self, data: Bytes) {
+        self.len += data.len();
+        self.items.push_back(data);
+        self.need_read = self.len < self.capacity;
+        if let Some(task) = self.task.take() {
+            task.notify()
+        }
+    }
+
+    #[cfg(test)]
+    fn len(&self) -> usize {
+        self.len
+    }
+
+    #[cfg(test)]
+    pub(crate) fn readall(&mut self) -> Option<Bytes> {
+        let len = self.items.iter().map(|b| b.len()).sum();
+        if len > 0 {
+            let mut buf = BytesMut::with_capacity(len);
+            for item in &self.items {
+                buf.extend_from_slice(item);
+            }
+            self.items = VecDeque::new();
+            self.len = 0;
+            Some(buf.take().freeze())
+        } else {
+            self.need_read = true;
+            None
+        }
+    }
+
+    fn readany(&mut self) -> Poll<Option<Bytes>, PayloadError> {
+        if let Some(data) = self.items.pop_front() {
+            self.len -= data.len();
+            self.need_read = self.len < self.capacity;
+            #[cfg(not(test))]
+            {
+                if self.need_read && self.task.is_none() {
+                    self.task = Some(current_task());
+                }
+                if let Some(task) = self.io_task.take() {
+                    task.notify()
+                }
+            }
+            Ok(Async::Ready(Some(data)))
+        } else if let Some(err) = self.err.take() {
+            Err(err)
+        } else if self.eof {
+            Ok(Async::Ready(None))
+        } else {
+            self.need_read = true;
+            #[cfg(not(test))]
+            {
+                if self.task.is_none() {
+                    self.task = Some(current_task());
+                }
+                if let Some(task) = self.io_task.take() {
+                    task.notify()
+                }
+            }
+            Ok(Async::NotReady)
+        }
+    }
+
+    fn unread_data(&mut self, data: Bytes) {
+        self.len += data.len();
+        self.items.push_front(data);
+    }
+}
+
+/// Payload buffer
+pub struct PayloadBuffer<S> {
+    len: usize,
+    items: VecDeque<Bytes>,
+    stream: S,
+}
+
+impl<S> PayloadBuffer<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    /// Create new `PayloadBuffer` instance
+    pub fn new(stream: S) -> Self {
+        PayloadBuffer {
+            len: 0,
+            items: VecDeque::new(),
+            stream,
+        }
+    }
+
+    /// Get mutable reference to an inner stream.
+    pub fn get_mut(&mut self) -> &mut S {
+        &mut self.stream
+    }
+
+    #[inline]
+    fn poll_stream(&mut self) -> Poll<bool, PayloadError> {
+        self.stream.poll().map(|res| match res {
+            Async::Ready(Some(data)) => {
+                self.len += data.len();
+                self.items.push_back(data);
+                Async::Ready(true)
+            }
+            Async::Ready(None) => Async::Ready(false),
+            Async::NotReady => Async::NotReady,
+        })
+    }
+
+    /// Read first available chunk of bytes
+    #[inline]
+    pub fn readany(&mut self) -> Poll<Option<Bytes>, PayloadError> {
+        if let Some(data) = self.items.pop_front() {
+            self.len -= data.len();
+            Ok(Async::Ready(Some(data)))
+        } else {
+            match self.poll_stream()? {
+                Async::Ready(true) => self.readany(),
+                Async::Ready(false) => Ok(Async::Ready(None)),
+                Async::NotReady => Ok(Async::NotReady),
+            }
+        }
+    }
+
+    /// Check if buffer contains enough bytes
+    #[inline]
+    pub fn can_read(&mut self, size: usize) -> Poll<Option<bool>, PayloadError> {
+        if size <= self.len {
+            Ok(Async::Ready(Some(true)))
+        } else {
+            match self.poll_stream()? {
+                Async::Ready(true) => self.can_read(size),
+                Async::Ready(false) => Ok(Async::Ready(None)),
+                Async::NotReady => Ok(Async::NotReady),
+            }
+        }
+    }
+
+    /// Return reference to the first chunk of data
+    #[inline]
+    pub fn get_chunk(&mut self) -> Poll<Option<&[u8]>, PayloadError> {
+        if self.items.is_empty() {
+            match self.poll_stream()? {
+                Async::Ready(true) => (),
+                Async::Ready(false) => return Ok(Async::Ready(None)),
+                Async::NotReady => return Ok(Async::NotReady),
+            }
+        }
+        match self.items.front().map(|c| c.as_ref()) {
+            Some(chunk) => Ok(Async::Ready(Some(chunk))),
+            None => Ok(Async::NotReady),
+        }
+    }
+
+    /// Read exact number of bytes
+    #[inline]
+    pub fn read_exact(&mut self, size: usize) -> Poll<Option<Bytes>, PayloadError> {
+        if size <= self.len {
+            self.len -= size;
+            let mut chunk = self.items.pop_front().unwrap();
+            if size < chunk.len() {
+                let buf = chunk.split_to(size);
+                self.items.push_front(chunk);
+                Ok(Async::Ready(Some(buf)))
+            } else if size == chunk.len() {
+                Ok(Async::Ready(Some(chunk)))
+            } else {
+                let mut buf = BytesMut::with_capacity(size);
+                buf.extend_from_slice(&chunk);
+
+                while buf.len() < size {
+                    let mut chunk = self.items.pop_front().unwrap();
+                    let rem = cmp::min(size - buf.len(), chunk.len());
+                    buf.extend_from_slice(&chunk.split_to(rem));
+                    if !chunk.is_empty() {
+                        self.items.push_front(chunk);
+                    }
+                }
+                Ok(Async::Ready(Some(buf.freeze())))
+            }
+        } else {
+            match self.poll_stream()? {
+                Async::Ready(true) => self.read_exact(size),
+                Async::Ready(false) => Ok(Async::Ready(None)),
+                Async::NotReady => Ok(Async::NotReady),
+            }
+        }
+    }
+
+    /// Remove specified amount if bytes from buffer
+    #[inline]
+    pub fn drop_bytes(&mut self, size: usize) {
+        if size <= self.len {
+            self.len -= size;
+
+            let mut len = 0;
+            while len < size {
+                let mut chunk = self.items.pop_front().unwrap();
+                let rem = cmp::min(size - len, chunk.len());
+                len += rem;
+                if rem < chunk.len() {
+                    chunk.split_to(rem);
+                    self.items.push_front(chunk);
+                }
+            }
+        }
+    }
+
+    /// Copy buffered data
+    pub fn copy(&mut self, size: usize) -> Poll<Option<BytesMut>, PayloadError> {
+        if size <= self.len {
+            let mut buf = BytesMut::with_capacity(size);
+            for chunk in &self.items {
+                if buf.len() < size {
+                    let rem = cmp::min(size - buf.len(), chunk.len());
+                    buf.extend_from_slice(&chunk[..rem]);
+                }
+                if buf.len() == size {
+                    return Ok(Async::Ready(Some(buf)));
+                }
+            }
+        }
+
+        match self.poll_stream()? {
+            Async::Ready(true) => self.copy(size),
+            Async::Ready(false) => Ok(Async::Ready(None)),
+            Async::NotReady => Ok(Async::NotReady),
+        }
+    }
+
+    /// Read until specified ending
+    pub fn read_until(&mut self, line: &[u8]) -> Poll<Option<Bytes>, PayloadError> {
+        let mut idx = 0;
+        let mut num = 0;
+        let mut offset = 0;
+        let mut found = false;
+        let mut length = 0;
+
+        for no in 0..self.items.len() {
+            {
+                let chunk = &self.items[no];
+                for (pos, ch) in chunk.iter().enumerate() {
+                    if *ch == line[idx] {
+                        idx += 1;
+                        if idx == line.len() {
+                            num = no;
+                            offset = pos + 1;
+                            length += pos + 1;
+                            found = true;
+                            break;
+                        }
+                    } else {
+                        idx = 0
+                    }
+                }
+                if !found {
+                    length += chunk.len()
+                }
+            }
+
+            if found {
+                let mut buf = BytesMut::with_capacity(length);
+                if num > 0 {
+                    for _ in 0..num {
+                        buf.extend_from_slice(&self.items.pop_front().unwrap());
+                    }
+                }
+                if offset > 0 {
+                    let mut chunk = self.items.pop_front().unwrap();
+                    buf.extend_from_slice(&chunk.split_to(offset));
+                    if !chunk.is_empty() {
+                        self.items.push_front(chunk)
+                    }
+                }
+                self.len -= length;
+                return Ok(Async::Ready(Some(buf.freeze())));
+            }
+        }
+
+        match self.poll_stream()? {
+            Async::Ready(true) => self.read_until(line),
+            Async::Ready(false) => Ok(Async::Ready(None)),
+            Async::NotReady => Ok(Async::NotReady),
+        }
+    }
+
+    /// Read bytes until new line delimiter
+    pub fn readline(&mut self) -> Poll<Option<Bytes>, PayloadError> {
+        self.read_until(b"\n")
+    }
+
+    /// Put unprocessed data back to the buffer
+    pub fn unprocessed(&mut self, data: Bytes) {
+        self.len += data.len();
+        self.items.push_front(data);
+    }
+
+    /// Get remaining data from the buffer
+    pub fn remaining(&mut self) -> Bytes {
+        self.items
+            .iter_mut()
+            .fold(BytesMut::new(), |mut b, c| {
+                b.extend_from_slice(c);
+                b
+            })
+            .freeze()
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use failure::Fail;
+    use futures::future::{lazy, result};
+    use std::io;
+    use tokio::runtime::current_thread::Runtime;
+
+    #[test]
+    fn test_error() {
+        let err: PayloadError =
+            io::Error::new(io::ErrorKind::Other, "ParseError").into();
+        assert_eq!(format!("{}", err), "ParseError");
+        assert_eq!(format!("{}", err.cause().unwrap()), "ParseError");
+
+        let err = PayloadError::Incomplete;
+        assert_eq!(
+            format!("{}", err),
+            "A payload reached EOF, but is not complete."
+        );
+    }
+
+    #[test]
+    fn test_basic() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (_, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                assert_eq!(payload.len, 0);
+                assert_eq!(Async::NotReady, payload.readany().ok().unwrap());
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_eof() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                assert_eq!(Async::NotReady, payload.readany().ok().unwrap());
+                sender.feed_data(Bytes::from("data"));
+                sender.feed_eof();
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("data"))),
+                    payload.readany().ok().unwrap()
+                );
+                assert_eq!(payload.len, 0);
+                assert_eq!(Async::Ready(None), payload.readany().ok().unwrap());
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_err() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                assert_eq!(Async::NotReady, payload.readany().ok().unwrap());
+
+                sender.set_error(PayloadError::Incomplete);
+                payload.readany().err().unwrap();
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_readany() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                sender.feed_data(Bytes::from("line1"));
+                sender.feed_data(Bytes::from("line2"));
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("line1"))),
+                    payload.readany().ok().unwrap()
+                );
+                assert_eq!(payload.len, 0);
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("line2"))),
+                    payload.readany().ok().unwrap()
+                );
+                assert_eq!(payload.len, 0);
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_readexactly() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                assert_eq!(Async::NotReady, payload.read_exact(2).ok().unwrap());
+
+                sender.feed_data(Bytes::from("line1"));
+                sender.feed_data(Bytes::from("line2"));
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from_static(b"li"))),
+                    payload.read_exact(2).ok().unwrap()
+                );
+                assert_eq!(payload.len, 3);
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from_static(b"ne1l"))),
+                    payload.read_exact(4).ok().unwrap()
+                );
+                assert_eq!(payload.len, 4);
+
+                sender.set_error(PayloadError::Incomplete);
+                payload.read_exact(10).err().unwrap();
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_readuntil() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (mut sender, payload) = Payload::new(false);
+                let mut payload = PayloadBuffer::new(payload);
+
+                assert_eq!(Async::NotReady, payload.read_until(b"ne").ok().unwrap());
+
+                sender.feed_data(Bytes::from("line1"));
+                sender.feed_data(Bytes::from("line2"));
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("line"))),
+                    payload.read_until(b"ne").ok().unwrap()
+                );
+                assert_eq!(payload.len, 1);
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("1line2"))),
+                    payload.read_until(b"2").ok().unwrap()
+                );
+                assert_eq!(payload.len, 0);
+
+                sender.set_error(PayloadError::Incomplete);
+                payload.read_until(b"b").err().unwrap();
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+
+    #[test]
+    fn test_unread_data() {
+        Runtime::new()
+            .unwrap()
+            .block_on(lazy(|| {
+                let (_, mut payload) = Payload::new(false);
+
+                payload.unread_data(Bytes::from("data"));
+                assert!(!payload.is_empty());
+                assert_eq!(payload.len(), 4);
+
+                assert_eq!(
+                    Async::Ready(Some(Bytes::from("data"))),
+                    payload.poll().ok().unwrap()
+                );
+
+                let res: Result<(), ()> = Ok(());
+                result(res)
+            }))
+            .unwrap();
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/pipeline.rs.html b/static/api/actix-web/0.7.2/src/actix_web/pipeline.rs.html new file mode 100644 index 0000000..5ca5b46 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/pipeline.rs.html @@ -0,0 +1,1547 @@ +pipeline.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+
+use std::marker::PhantomData;
+use std::rc::Rc;
+use std::{io, mem};
+
+use futures::sync::oneshot;
+use futures::{Async, Future, Poll, Stream};
+use log::Level::Debug;
+
+use body::{Body, BodyStream};
+use context::{ActorHttpContext, Frame};
+use error::Error;
+use handler::{AsyncResult, AsyncResultItem};
+use header::ContentEncoding;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{Finished, Middleware, Response, Started};
+use server::{HttpHandlerTask, Writer, WriterState};
+
+#[doc(hidden)]
+pub trait PipelineHandler<S> {
+    fn encoding(&self) -> ContentEncoding;
+
+    fn handle(&self, &HttpRequest<S>) -> AsyncResult<HttpResponse>;
+}
+
+#[doc(hidden)]
+pub struct Pipeline<S: 'static, H>(
+    PipelineInfo<S>,
+    PipelineState<S, H>,
+    Rc<Vec<Box<Middleware<S>>>>,
+);
+
+enum PipelineState<S, H> {
+    None,
+    Error,
+    Starting(StartMiddlewares<S, H>),
+    Handler(WaitingResponse<S, H>),
+    RunMiddlewares(RunMiddlewares<S, H>),
+    Response(ProcessResponse<S, H>),
+    Finishing(FinishingMiddlewares<S, H>),
+    Completed(Completed<S, H>),
+}
+
+impl<S: 'static, H: PipelineHandler<S>> PipelineState<S, H> {
+    fn is_response(&self) -> bool {
+        match *self {
+            PipelineState::Response(_) => true,
+            _ => false,
+        }
+    }
+
+    fn poll(
+        &mut self, info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+    ) -> Option<PipelineState<S, H>> {
+        match *self {
+            PipelineState::Starting(ref mut state) => state.poll(info, mws),
+            PipelineState::Handler(ref mut state) => state.poll(info, mws),
+            PipelineState::RunMiddlewares(ref mut state) => state.poll(info, mws),
+            PipelineState::Finishing(ref mut state) => state.poll(info, mws),
+            PipelineState::Completed(ref mut state) => state.poll(info),
+            PipelineState::Response(_) | PipelineState::None | PipelineState::Error => {
+                None
+            }
+        }
+    }
+}
+
+struct PipelineInfo<S: 'static> {
+    req: HttpRequest<S>,
+    count: u16,
+    context: Option<Box<ActorHttpContext>>,
+    error: Option<Error>,
+    disconnected: Option<bool>,
+    encoding: ContentEncoding,
+}
+
+impl<S: 'static> PipelineInfo<S> {
+    fn poll_context(&mut self) -> Poll<(), Error> {
+        if let Some(ref mut context) = self.context {
+            match context.poll() {
+                Err(err) => Err(err),
+                Ok(Async::NotReady) => Ok(Async::NotReady),
+                Ok(Async::Ready(_)) => Ok(Async::Ready(())),
+            }
+        } else {
+            Ok(Async::Ready(()))
+        }
+    }
+}
+
+impl<S: 'static, H: PipelineHandler<S>> Pipeline<S, H> {
+    pub fn new(
+        req: HttpRequest<S>, mws: Rc<Vec<Box<Middleware<S>>>>, handler: Rc<H>,
+    ) -> Pipeline<S, H> {
+        let mut info = PipelineInfo {
+            req,
+            count: 0,
+            error: None,
+            context: None,
+            disconnected: None,
+            encoding: handler.encoding(),
+        };
+        let state = StartMiddlewares::init(&mut info, &mws, handler);
+
+        Pipeline(info, state, mws)
+    }
+}
+
+impl<S: 'static, H> Pipeline<S, H> {
+    #[inline]
+    fn is_done(&self) -> bool {
+        match self.1 {
+            PipelineState::None
+            | PipelineState::Error
+            | PipelineState::Starting(_)
+            | PipelineState::Handler(_)
+            | PipelineState::RunMiddlewares(_)
+            | PipelineState::Response(_) => true,
+            PipelineState::Finishing(_) | PipelineState::Completed(_) => false,
+        }
+    }
+}
+
+impl<S: 'static, H: PipelineHandler<S>> HttpHandlerTask for Pipeline<S, H> {
+    fn disconnected(&mut self) {
+        self.0.disconnected = Some(true);
+    }
+
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error> {
+        let mut state = mem::replace(&mut self.1, PipelineState::None);
+
+        loop {
+            if state.is_response() {
+                if let PipelineState::Response(st) = state {
+                    match st.poll_io(io, &mut self.0, &self.2) {
+                        Ok(state) => {
+                            self.1 = state;
+                            if let Some(error) = self.0.error.take() {
+                                return Err(error);
+                            } else {
+                                return Ok(Async::Ready(self.is_done()));
+                            }
+                        }
+                        Err(state) => {
+                            self.1 = state;
+                            return Ok(Async::NotReady);
+                        }
+                    }
+                }
+            }
+            match state {
+                PipelineState::None => return Ok(Async::Ready(true)),
+                PipelineState::Error => {
+                    return Err(
+                        io::Error::new(io::ErrorKind::Other, "Internal error").into()
+                    )
+                }
+                _ => (),
+            }
+
+            match state.poll(&mut self.0, &self.2) {
+                Some(st) => state = st,
+                None => {
+                    return {
+                        self.1 = state;
+                        Ok(Async::NotReady)
+                    }
+                }
+            }
+        }
+    }
+
+    fn poll_completed(&mut self) -> Poll<(), Error> {
+        let mut state = mem::replace(&mut self.1, PipelineState::None);
+        loop {
+            match state {
+                PipelineState::None | PipelineState::Error => {
+                    return Ok(Async::Ready(()))
+                }
+                _ => (),
+            }
+
+            if let Some(st) = state.poll(&mut self.0, &self.2) {
+                state = st;
+            } else {
+                self.1 = state;
+                return Ok(Async::NotReady);
+            }
+        }
+    }
+}
+
+type Fut = Box<Future<Item = Option<HttpResponse>, Error = Error>>;
+
+/// Middlewares start executor
+struct StartMiddlewares<S, H> {
+    hnd: Rc<H>,
+    fut: Option<Fut>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static, H: PipelineHandler<S>> StartMiddlewares<S, H> {
+    fn init(
+        info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>], hnd: Rc<H>,
+    ) -> PipelineState<S, H> {
+        // execute middlewares, we need this stage because middlewares could be
+        // non-async and we can move to next state immediately
+        let len = mws.len() as u16;
+
+        loop {
+            if info.count == len {
+                let reply = hnd.handle(&info.req);
+                return WaitingResponse::init(info, mws, reply);
+            } else {
+                match mws[info.count as usize].start(&info.req) {
+                    Ok(Started::Done) => info.count += 1,
+                    Ok(Started::Response(resp)) => {
+                        return RunMiddlewares::init(info, mws, resp);
+                    }
+                    Ok(Started::Future(fut)) => {
+                        return PipelineState::Starting(StartMiddlewares {
+                            hnd,
+                            fut: Some(fut),
+                            _s: PhantomData,
+                        })
+                    }
+                    Err(err) => {
+                        return RunMiddlewares::init(info, mws, err.into());
+                    }
+                }
+            }
+        }
+    }
+
+    fn poll(
+        &mut self, info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+    ) -> Option<PipelineState<S, H>> {
+        let len = mws.len() as u16;
+
+        'outer: loop {
+            match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => {
+                    return None;
+                }
+                Ok(Async::Ready(resp)) => {
+                    info.count += 1;
+                    if let Some(resp) = resp {
+                        return Some(RunMiddlewares::init(info, mws, resp));
+                    }
+                    loop {
+                        if info.count == len {
+                            let reply = self.hnd.handle(&info.req);
+                            return Some(WaitingResponse::init(info, mws, reply));
+                        } else {
+                            let res = mws[info.count as usize].start(&info.req);
+                            match res {
+                                Ok(Started::Done) => info.count += 1,
+                                Ok(Started::Response(resp)) => {
+                                    return Some(RunMiddlewares::init(info, mws, resp));
+                                }
+                                Ok(Started::Future(fut)) => {
+                                    self.fut = Some(fut);
+                                    continue 'outer;
+                                }
+                                Err(err) => {
+                                    return Some(RunMiddlewares::init(
+                                        info,
+                                        mws,
+                                        err.into(),
+                                    ));
+                                }
+                            }
+                        }
+                    }
+                }
+                Err(err) => {
+                    return Some(RunMiddlewares::init(info, mws, err.into()));
+                }
+            }
+        }
+    }
+}
+
+// waiting for response
+struct WaitingResponse<S, H> {
+    fut: Box<Future<Item = HttpResponse, Error = Error>>,
+    _s: PhantomData<S>,
+    _h: PhantomData<H>,
+}
+
+impl<S: 'static, H> WaitingResponse<S, H> {
+    #[inline]
+    fn init(
+        info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+        reply: AsyncResult<HttpResponse>,
+    ) -> PipelineState<S, H> {
+        match reply.into() {
+            AsyncResultItem::Ok(resp) => RunMiddlewares::init(info, mws, resp),
+            AsyncResultItem::Err(err) => RunMiddlewares::init(info, mws, err.into()),
+            AsyncResultItem::Future(fut) => PipelineState::Handler(WaitingResponse {
+                fut,
+                _s: PhantomData,
+                _h: PhantomData,
+            }),
+        }
+    }
+
+    fn poll(
+        &mut self, info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+    ) -> Option<PipelineState<S, H>> {
+        match self.fut.poll() {
+            Ok(Async::NotReady) => None,
+            Ok(Async::Ready(resp)) => Some(RunMiddlewares::init(info, mws, resp)),
+            Err(err) => Some(RunMiddlewares::init(info, mws, err.into())),
+        }
+    }
+}
+
+/// Middlewares response executor
+struct RunMiddlewares<S, H> {
+    curr: usize,
+    fut: Option<Box<Future<Item = HttpResponse, Error = Error>>>,
+    _s: PhantomData<S>,
+    _h: PhantomData<H>,
+}
+
+impl<S: 'static, H> RunMiddlewares<S, H> {
+    #[inline]
+    fn init(
+        info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>], mut resp: HttpResponse,
+    ) -> PipelineState<S, H> {
+        if info.count == 0 {
+            return ProcessResponse::init(resp);
+        }
+        let mut curr = 0;
+        let len = mws.len();
+
+        loop {
+            let state = mws[curr].response(&info.req, resp);
+            resp = match state {
+                Err(err) => {
+                    info.count = (curr + 1) as u16;
+                    return ProcessResponse::init(err.into());
+                }
+                Ok(Response::Done(r)) => {
+                    curr += 1;
+                    if curr == len {
+                        return ProcessResponse::init(r);
+                    } else {
+                        r
+                    }
+                }
+                Ok(Response::Future(fut)) => {
+                    return PipelineState::RunMiddlewares(RunMiddlewares {
+                        curr,
+                        fut: Some(fut),
+                        _s: PhantomData,
+                        _h: PhantomData,
+                    });
+                }
+            };
+        }
+    }
+
+    fn poll(
+        &mut self, info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+    ) -> Option<PipelineState<S, H>> {
+        let len = mws.len();
+
+        loop {
+            // poll latest fut
+            let mut resp = match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => return None,
+                Ok(Async::Ready(resp)) => {
+                    self.curr += 1;
+                    resp
+                }
+                Err(err) => return Some(ProcessResponse::init(err.into())),
+            };
+
+            loop {
+                if self.curr == len {
+                    return Some(ProcessResponse::init(resp));
+                } else {
+                    let state = mws[self.curr].response(&info.req, resp);
+                    match state {
+                        Err(err) => return Some(ProcessResponse::init(err.into())),
+                        Ok(Response::Done(r)) => {
+                            self.curr += 1;
+                            resp = r
+                        }
+                        Ok(Response::Future(fut)) => {
+                            self.fut = Some(fut);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+struct ProcessResponse<S, H> {
+    resp: HttpResponse,
+    iostate: IOState,
+    running: RunningState,
+    drain: Option<oneshot::Sender<()>>,
+    _s: PhantomData<S>,
+    _h: PhantomData<H>,
+}
+
+#[derive(PartialEq, Debug)]
+enum RunningState {
+    Running,
+    Paused,
+    Done,
+}
+
+impl RunningState {
+    #[inline]
+    fn pause(&mut self) {
+        if *self != RunningState::Done {
+            *self = RunningState::Paused
+        }
+    }
+    #[inline]
+    fn resume(&mut self) {
+        if *self != RunningState::Done {
+            *self = RunningState::Running
+        }
+    }
+}
+
+enum IOState {
+    Response,
+    Payload(BodyStream),
+    Actor(Box<ActorHttpContext>),
+    Done,
+}
+
+impl<S: 'static, H> ProcessResponse<S, H> {
+    #[inline]
+    fn init(resp: HttpResponse) -> PipelineState<S, H> {
+        PipelineState::Response(ProcessResponse {
+            resp,
+            iostate: IOState::Response,
+            running: RunningState::Running,
+            drain: None,
+            _s: PhantomData,
+            _h: PhantomData,
+        })
+    }
+
+    fn poll_io(
+        mut self, io: &mut Writer, info: &mut PipelineInfo<S>,
+        mws: &[Box<Middleware<S>>],
+    ) -> Result<PipelineState<S, H>, PipelineState<S, H>> {
+        loop {
+            if self.drain.is_none() && self.running != RunningState::Paused {
+                // if task is paused, write buffer is probably full
+                'inner: loop {
+                    let result = match mem::replace(&mut self.iostate, IOState::Done) {
+                        IOState::Response => {
+                            let encoding =
+                                self.resp.content_encoding().unwrap_or(info.encoding);
+
+                            let result =
+                                match io.start(&info.req, &mut self.resp, encoding) {
+                                    Ok(res) => res,
+                                    Err(err) => {
+                                        info.error = Some(err.into());
+                                        return Ok(FinishingMiddlewares::init(
+                                            info, mws, self.resp,
+                                        ));
+                                    }
+                                };
+
+                            if let Some(err) = self.resp.error() {
+                                if self.resp.status().is_server_error() {
+                                    error!(
+                                        "Error occured during request handling, status: {} {}",
+                                        self.resp.status(), err
+                                    );
+                                } else {
+                                    warn!(
+                                        "Error occured during request handling: {}",
+                                        err
+                                    );
+                                }
+                                if log_enabled!(Debug) {
+                                    debug!("{:?}", err);
+                                }
+                            }
+
+                            // always poll stream or actor for the first time
+                            match self.resp.replace_body(Body::Empty) {
+                                Body::Streaming(stream) => {
+                                    self.iostate = IOState::Payload(stream);
+                                    continue 'inner;
+                                }
+                                Body::Actor(ctx) => {
+                                    self.iostate = IOState::Actor(ctx);
+                                    continue 'inner;
+                                }
+                                _ => (),
+                            }
+
+                            result
+                        }
+                        IOState::Payload(mut body) => match body.poll() {
+                            Ok(Async::Ready(None)) => {
+                                if let Err(err) = io.write_eof() {
+                                    info.error = Some(err.into());
+                                    return Ok(FinishingMiddlewares::init(
+                                        info, mws, self.resp,
+                                    ));
+                                }
+                                break;
+                            }
+                            Ok(Async::Ready(Some(chunk))) => {
+                                self.iostate = IOState::Payload(body);
+                                match io.write(&chunk.into()) {
+                                    Err(err) => {
+                                        info.error = Some(err.into());
+                                        return Ok(FinishingMiddlewares::init(
+                                            info, mws, self.resp,
+                                        ));
+                                    }
+                                    Ok(result) => result,
+                                }
+                            }
+                            Ok(Async::NotReady) => {
+                                self.iostate = IOState::Payload(body);
+                                break;
+                            }
+                            Err(err) => {
+                                info.error = Some(err);
+                                return Ok(FinishingMiddlewares::init(
+                                    info, mws, self.resp,
+                                ));
+                            }
+                        },
+                        IOState::Actor(mut ctx) => {
+                            if info.disconnected.take().is_some() {
+                                ctx.disconnected();
+                            }
+                            match ctx.poll() {
+                                Ok(Async::Ready(Some(vec))) => {
+                                    if vec.is_empty() {
+                                        self.iostate = IOState::Actor(ctx);
+                                        break;
+                                    }
+                                    let mut res = None;
+                                    for frame in vec {
+                                        match frame {
+                                            Frame::Chunk(None) => {
+                                                info.context = Some(ctx);
+                                                if let Err(err) = io.write_eof() {
+                                                    info.error = Some(err.into());
+                                                    return Ok(
+                                                        FinishingMiddlewares::init(
+                                                            info, mws, self.resp,
+                                                        ),
+                                                    );
+                                                }
+                                                break 'inner;
+                                            }
+                                            Frame::Chunk(Some(chunk)) => {
+                                                match io.write(&chunk) {
+                                                    Err(err) => {
+                                                        info.context = Some(ctx);
+                                                        info.error = Some(err.into());
+                                                        return Ok(
+                                                            FinishingMiddlewares::init(
+                                                                info, mws, self.resp,
+                                                            ),
+                                                        );
+                                                    }
+                                                    Ok(result) => res = Some(result),
+                                                }
+                                            }
+                                            Frame::Drain(fut) => self.drain = Some(fut),
+                                        }
+                                    }
+                                    self.iostate = IOState::Actor(ctx);
+                                    if self.drain.is_some() {
+                                        self.running.resume();
+                                        break 'inner;
+                                    }
+                                    res.unwrap()
+                                }
+                                Ok(Async::Ready(None)) => break,
+                                Ok(Async::NotReady) => {
+                                    self.iostate = IOState::Actor(ctx);
+                                    break;
+                                }
+                                Err(err) => {
+                                    info.context = Some(ctx);
+                                    info.error = Some(err);
+                                    return Ok(FinishingMiddlewares::init(
+                                        info, mws, self.resp,
+                                    ));
+                                }
+                            }
+                        }
+                        IOState::Done => break,
+                    };
+
+                    match result {
+                        WriterState::Pause => {
+                            self.running.pause();
+                            break;
+                        }
+                        WriterState::Done => self.running.resume(),
+                    }
+                }
+            }
+
+            // flush io but only if we need to
+            if self.running == RunningState::Paused || self.drain.is_some() {
+                match io.poll_completed(false) {
+                    Ok(Async::Ready(_)) => {
+                        self.running.resume();
+
+                        // resolve drain futures
+                        if let Some(tx) = self.drain.take() {
+                            let _ = tx.send(());
+                        }
+                        // restart io processing
+                        continue;
+                    }
+                    Ok(Async::NotReady) => return Err(PipelineState::Response(self)),
+                    Err(err) => {
+                        if let IOState::Actor(mut ctx) =
+                            mem::replace(&mut self.iostate, IOState::Done)
+                        {
+                            ctx.disconnected();
+                            info.context = Some(ctx);
+                        }
+                        info.error = Some(err.into());
+                        return Ok(FinishingMiddlewares::init(info, mws, self.resp));
+                    }
+                }
+            }
+            break;
+        }
+
+        // response is completed
+        match self.iostate {
+            IOState::Done => {
+                match io.write_eof() {
+                    Ok(_) => (),
+                    Err(err) => {
+                        info.error = Some(err.into());
+                        return Ok(FinishingMiddlewares::init(info, mws, self.resp));
+                    }
+                }
+                self.resp.set_response_size(io.written());
+                Ok(FinishingMiddlewares::init(info, mws, self.resp))
+            }
+            _ => Err(PipelineState::Response(self)),
+        }
+    }
+}
+
+/// Middlewares start executor
+struct FinishingMiddlewares<S, H> {
+    resp: Option<HttpResponse>,
+    fut: Option<Box<Future<Item = (), Error = Error>>>,
+    _s: PhantomData<S>,
+    _h: PhantomData<H>,
+}
+
+impl<S: 'static, H> FinishingMiddlewares<S, H> {
+    #[inline]
+    fn init(
+        info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>], resp: HttpResponse,
+    ) -> PipelineState<S, H> {
+        if info.count == 0 {
+            resp.release();
+            Completed::init(info)
+        } else {
+            let mut state = FinishingMiddlewares {
+                resp: Some(resp),
+                fut: None,
+                _s: PhantomData,
+                _h: PhantomData,
+            };
+            if let Some(st) = state.poll(info, mws) {
+                st
+            } else {
+                PipelineState::Finishing(state)
+            }
+        }
+    }
+
+    fn poll(
+        &mut self, info: &mut PipelineInfo<S>, mws: &[Box<Middleware<S>>],
+    ) -> Option<PipelineState<S, H>> {
+        loop {
+            // poll latest fut
+            let not_ready = if let Some(ref mut fut) = self.fut {
+                match fut.poll() {
+                    Ok(Async::NotReady) => true,
+                    Ok(Async::Ready(())) => false,
+                    Err(err) => {
+                        error!("Middleware finish error: {}", err);
+                        false
+                    }
+                }
+            } else {
+                false
+            };
+            if not_ready {
+                return None;
+            }
+            self.fut = None;
+            if info.count == 0 {
+                self.resp.take().unwrap().release();
+                return Some(Completed::init(info));
+            }
+
+            info.count -= 1;
+            let state =
+                mws[info.count as usize].finish(&info.req, self.resp.as_ref().unwrap());
+            match state {
+                Finished::Done => {
+                    if info.count == 0 {
+                        self.resp.take().unwrap().release();
+                        return Some(Completed::init(info));
+                    }
+                }
+                Finished::Future(fut) => {
+                    self.fut = Some(fut);
+                }
+            }
+        }
+    }
+}
+
+#[derive(Debug)]
+struct Completed<S, H>(PhantomData<S>, PhantomData<H>);
+
+impl<S, H> Completed<S, H> {
+    #[inline]
+    fn init(info: &mut PipelineInfo<S>) -> PipelineState<S, H> {
+        if let Some(ref err) = info.error {
+            error!("Error occurred during request handling: {}", err);
+        }
+
+        if info.context.is_none() {
+            PipelineState::None
+        } else {
+            match info.poll_context() {
+                Ok(Async::NotReady) => {
+                    PipelineState::Completed(Completed(PhantomData, PhantomData))
+                }
+                Ok(Async::Ready(())) => PipelineState::None,
+                Err(_) => PipelineState::Error,
+            }
+        }
+    }
+
+    #[inline]
+    fn poll(&mut self, info: &mut PipelineInfo<S>) -> Option<PipelineState<S, H>> {
+        match info.poll_context() {
+            Ok(Async::NotReady) => None,
+            Ok(Async::Ready(())) => Some(PipelineState::None),
+            Err(_) => Some(PipelineState::Error),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/pred.rs.html b/static/api/actix-web/0.7.2/src/actix_web/pred.rs.html new file mode 100644 index 0000000..9e09f9f --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/pred.rs.html @@ -0,0 +1,661 @@ +pred.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+
+//! Route match predicates
+#![allow(non_snake_case)]
+use std::marker::PhantomData;
+
+use http;
+use http::{header, HttpTryFrom};
+use server::message::Request;
+
+/// Trait defines resource route predicate.
+/// Predicate can modify request object. It is also possible to
+/// to store extra attributes on request by using `Extensions` container,
+/// Extensions container available via `HttpRequest::extensions()` method.
+pub trait Predicate<S> {
+    /// Check if request matches predicate
+    fn check(&self, &Request, &S) -> bool;
+}
+
+/// Return predicate that matches if any of supplied predicate matches.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{pred, App, HttpResponse};
+///
+/// fn main() {
+///     App::new().resource("/index.html", |r| {
+///         r.route()
+///             .filter(pred::Any(pred::Get()).or(pred::Post()))
+///             .f(|r| HttpResponse::MethodNotAllowed())
+///     });
+/// }
+/// ```
+pub fn Any<S: 'static, P: Predicate<S> + 'static>(pred: P) -> AnyPredicate<S> {
+    AnyPredicate(vec![Box::new(pred)])
+}
+
+/// Matches if any of supplied predicate matches.
+pub struct AnyPredicate<S>(Vec<Box<Predicate<S>>>);
+
+impl<S> AnyPredicate<S> {
+    /// Add new predicate to list of predicates to check
+    pub fn or<P: Predicate<S> + 'static>(mut self, pred: P) -> Self {
+        self.0.push(Box::new(pred));
+        self
+    }
+}
+
+impl<S: 'static> Predicate<S> for AnyPredicate<S> {
+    fn check(&self, req: &Request, state: &S) -> bool {
+        for p in &self.0 {
+            if p.check(req, state) {
+                return true;
+            }
+        }
+        false
+    }
+}
+
+/// Return predicate that matches if all of supplied predicate matches.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{pred, App, HttpResponse};
+///
+/// fn main() {
+///     App::new().resource("/index.html", |r| {
+///         r.route()
+///             .filter(
+///                 pred::All(pred::Get())
+///                     .and(pred::Header("content-type", "text/plain")),
+///             )
+///             .f(|_| HttpResponse::MethodNotAllowed())
+///     });
+/// }
+/// ```
+pub fn All<S: 'static, P: Predicate<S> + 'static>(pred: P) -> AllPredicate<S> {
+    AllPredicate(vec![Box::new(pred)])
+}
+
+/// Matches if all of supplied predicate matches.
+pub struct AllPredicate<S>(Vec<Box<Predicate<S>>>);
+
+impl<S> AllPredicate<S> {
+    /// Add new predicate to list of predicates to check
+    pub fn and<P: Predicate<S> + 'static>(mut self, pred: P) -> Self {
+        self.0.push(Box::new(pred));
+        self
+    }
+}
+
+impl<S: 'static> Predicate<S> for AllPredicate<S> {
+    fn check(&self, req: &Request, state: &S) -> bool {
+        for p in &self.0 {
+            if !p.check(req, state) {
+                return false;
+            }
+        }
+        true
+    }
+}
+
+/// Return predicate that matches if supplied predicate does not match.
+pub fn Not<S: 'static, P: Predicate<S> + 'static>(pred: P) -> NotPredicate<S> {
+    NotPredicate(Box::new(pred))
+}
+
+#[doc(hidden)]
+pub struct NotPredicate<S>(Box<Predicate<S>>);
+
+impl<S: 'static> Predicate<S> for NotPredicate<S> {
+    fn check(&self, req: &Request, state: &S) -> bool {
+        !self.0.check(req, state)
+    }
+}
+
+/// Http method predicate
+#[doc(hidden)]
+pub struct MethodPredicate<S>(http::Method, PhantomData<S>);
+
+impl<S: 'static> Predicate<S> for MethodPredicate<S> {
+    fn check(&self, req: &Request, _: &S) -> bool {
+        *req.method() == self.0
+    }
+}
+
+/// Predicate to match *GET* http method
+pub fn Get<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::GET, PhantomData)
+}
+
+/// Predicate to match *POST* http method
+pub fn Post<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::POST, PhantomData)
+}
+
+/// Predicate to match *PUT* http method
+pub fn Put<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::PUT, PhantomData)
+}
+
+/// Predicate to match *DELETE* http method
+pub fn Delete<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::DELETE, PhantomData)
+}
+
+/// Predicate to match *HEAD* http method
+pub fn Head<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::HEAD, PhantomData)
+}
+
+/// Predicate to match *OPTIONS* http method
+pub fn Options<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::OPTIONS, PhantomData)
+}
+
+/// Predicate to match *CONNECT* http method
+pub fn Connect<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::CONNECT, PhantomData)
+}
+
+/// Predicate to match *PATCH* http method
+pub fn Patch<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::PATCH, PhantomData)
+}
+
+/// Predicate to match *TRACE* http method
+pub fn Trace<S: 'static>() -> MethodPredicate<S> {
+    MethodPredicate(http::Method::TRACE, PhantomData)
+}
+
+/// Predicate to match specified http method
+pub fn Method<S: 'static>(method: http::Method) -> MethodPredicate<S> {
+    MethodPredicate(method, PhantomData)
+}
+
+/// Return predicate that matches if request contains specified header and
+/// value.
+pub fn Header<S: 'static>(
+    name: &'static str, value: &'static str,
+) -> HeaderPredicate<S> {
+    HeaderPredicate(
+        header::HeaderName::try_from(name).unwrap(),
+        header::HeaderValue::from_static(value),
+        PhantomData,
+    )
+}
+
+#[doc(hidden)]
+pub struct HeaderPredicate<S>(header::HeaderName, header::HeaderValue, PhantomData<S>);
+
+impl<S: 'static> Predicate<S> for HeaderPredicate<S> {
+    fn check(&self, req: &Request, _: &S) -> bool {
+        if let Some(val) = req.headers().get(&self.0) {
+            return val == self.1;
+        }
+        false
+    }
+}
+
+/// Return predicate that matches if request contains specified Host name.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{pred, App, HttpResponse};
+///
+/// fn main() {
+///     App::new().resource("/index.html", |r| {
+///         r.route()
+///             .filter(pred::Host("www.rust-lang.org"))
+///             .f(|_| HttpResponse::MethodNotAllowed())
+///     });
+/// }
+/// ```
+pub fn Host<S: 'static, H: AsRef<str>>(host: H) -> HostPredicate<S> {
+    HostPredicate(host.as_ref().to_string(), None, PhantomData)
+}
+
+#[doc(hidden)]
+pub struct HostPredicate<S>(String, Option<String>, PhantomData<S>);
+
+impl<S> HostPredicate<S> {
+    /// Set reuest scheme to match
+    pub fn scheme<H: AsRef<str>>(&mut self, scheme: H) {
+        self.1 = Some(scheme.as_ref().to_string())
+    }
+}
+
+impl<S: 'static> Predicate<S> for HostPredicate<S> {
+    fn check(&self, req: &Request, _: &S) -> bool {
+        let info = req.connection_info();
+        if let Some(ref scheme) = self.1 {
+            self.0 == info.host() && scheme == info.scheme()
+        } else {
+            self.0 == info.host()
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use http::{header, Method};
+    use test::TestRequest;
+
+    #[test]
+    fn test_header() {
+        let req = TestRequest::with_header(
+            header::TRANSFER_ENCODING,
+            header::HeaderValue::from_static("chunked"),
+        ).finish();
+
+        let pred = Header("transfer-encoding", "chunked");
+        assert!(pred.check(&req, req.state()));
+
+        let pred = Header("transfer-encoding", "other");
+        assert!(!pred.check(&req, req.state()));
+
+        let pred = Header("content-type", "other");
+        assert!(!pred.check(&req, req.state()));
+    }
+
+    #[test]
+    fn test_host() {
+        let req = TestRequest::default()
+            .header(
+                header::HOST,
+                header::HeaderValue::from_static("www.rust-lang.org"),
+            )
+            .finish();
+
+        let pred = Host("www.rust-lang.org");
+        assert!(pred.check(&req, req.state()));
+
+        let pred = Host("localhost");
+        assert!(!pred.check(&req, req.state()));
+    }
+
+    #[test]
+    fn test_methods() {
+        let req = TestRequest::default().finish();
+        let req2 = TestRequest::default().method(Method::POST).finish();
+
+        assert!(Get().check(&req, req.state()));
+        assert!(!Get().check(&req2, req2.state()));
+        assert!(Post().check(&req2, req2.state()));
+        assert!(!Post().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::PUT).finish();
+        assert!(Put().check(&r, r.state()));
+        assert!(!Put().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::DELETE).finish();
+        assert!(Delete().check(&r, r.state()));
+        assert!(!Delete().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::HEAD).finish();
+        assert!(Head().check(&r, r.state()));
+        assert!(!Head().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::OPTIONS).finish();
+        assert!(Options().check(&r, r.state()));
+        assert!(!Options().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::CONNECT).finish();
+        assert!(Connect().check(&r, r.state()));
+        assert!(!Connect().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::PATCH).finish();
+        assert!(Patch().check(&r, r.state()));
+        assert!(!Patch().check(&req, req.state()));
+
+        let r = TestRequest::default().method(Method::TRACE).finish();
+        assert!(Trace().check(&r, r.state()));
+        assert!(!Trace().check(&req, req.state()));
+    }
+
+    #[test]
+    fn test_preds() {
+        let r = TestRequest::default().method(Method::TRACE).finish();
+
+        assert!(Not(Get()).check(&r, r.state()));
+        assert!(!Not(Trace()).check(&r, r.state()));
+
+        assert!(All(Trace()).and(Trace()).check(&r, r.state()));
+        assert!(!All(Get()).and(Trace()).check(&r, r.state()));
+
+        assert!(Any(Get()).or(Trace()).check(&r, r.state()));
+        assert!(!Any(Get()).or(Get()).check(&r, r.state()));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/resource.rs.html b/static/api/actix-web/0.7.2/src/actix_web/resource.rs.html new file mode 100644 index 0000000..d0cc6f2 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/resource.rs.html @@ -0,0 +1,649 @@ +resource.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+
+use std::ops::Deref;
+use std::rc::Rc;
+
+use futures::Future;
+use http::Method;
+use smallvec::SmallVec;
+
+use error::Error;
+use handler::{AsyncResult, FromRequest, Handler, Responder};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::Middleware;
+use pred;
+use route::Route;
+use router::ResourceDef;
+
+#[derive(Copy, Clone)]
+pub(crate) struct RouteId(usize);
+
+/// *Resource* is an entry in route table which corresponds to requested URL.
+///
+/// Resource in turn has at least one route.
+/// Route consists of an object that implements `Handler` trait (handler)
+/// and list of predicates (objects that implement `Predicate` trait).
+/// Route uses builder-like pattern for configuration.
+/// During request handling, resource object iterate through all routes
+/// and check all predicates for specific route, if request matches all
+/// predicates route route considered matched and route handler get called.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{App, HttpResponse, http};
+///
+/// fn main() {
+///     let app = App::new()
+///         .resource(
+///             "/", |r| r.method(http::Method::GET).f(|r| HttpResponse::Ok()))
+///         .finish();
+/// }
+pub struct Resource<S = ()> {
+    rdef: ResourceDef,
+    routes: SmallVec<[Route<S>; 3]>,
+    middlewares: Rc<Vec<Box<Middleware<S>>>>,
+}
+
+impl<S> Resource<S> {
+    /// Create new resource with specified resource definition
+    pub fn new(rdef: ResourceDef) -> Self {
+        Resource {
+            rdef,
+            routes: SmallVec::new(),
+            middlewares: Rc::new(Vec::new()),
+        }
+    }
+
+    /// Name of the resource
+    pub(crate) fn get_name(&self) -> &str {
+        self.rdef.name()
+    }
+
+    /// Set resource name
+    pub fn name(&mut self, name: &str) {
+        self.rdef.set_name(name);
+    }
+
+    /// Resource definition
+    pub fn rdef(&self) -> &ResourceDef {
+        &self.rdef
+    }
+}
+
+impl<S: 'static> Resource<S> {
+    /// Register a new route and return mutable reference to *Route* object.
+    /// *Route* is used for route configuration, i.e. adding predicates,
+    /// setting up handler.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    ///
+    /// fn main() {
+    ///     let app = App::new()
+    ///         .resource("/", |r| {
+    ///             r.route()
+    ///                 .filter(pred::Any(pred::Get()).or(pred::Put()))
+    ///                 .filter(pred::Header("Content-Type", "text/plain"))
+    ///                 .f(|r| HttpResponse::Ok())
+    ///         })
+    ///         .finish();
+    /// }
+    /// ```
+    pub fn route(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap()
+    }
+
+    /// Register a new `GET` route.
+    pub fn get(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Get())
+    }
+
+    /// Register a new `POST` route.
+    pub fn post(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Post())
+    }
+
+    /// Register a new `PUT` route.
+    pub fn put(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Put())
+    }
+
+    /// Register a new `DELETE` route.
+    pub fn delete(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Delete())
+    }
+
+    /// Register a new `HEAD` route.
+    pub fn head(&mut self) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Head())
+    }
+
+    /// Register a new route and add method check to route.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    /// fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    ///
+    /// App::new().resource("/", |r| r.method(http::Method::GET).f(index));
+    /// ```
+    ///
+    /// This is shortcut for:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    /// App::new().resource("/", |r| r.route().filter(pred::Get()).f(index));
+    /// ```
+    pub fn method(&mut self, method: Method) -> &mut Route<S> {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().filter(pred::Method(method))
+    }
+
+    /// Register a new route and add handler object.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    /// fn handler(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    ///
+    /// App::new().resource("/", |r| r.h(handler));
+    /// ```
+    ///
+    /// This is shortcut for:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn handler(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    /// App::new().resource("/", |r| r.route().h(handler));
+    /// ```
+    pub fn h<H: Handler<S>>(&mut self, handler: H) {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().h(handler)
+    }
+
+    /// Register a new route and add handler function.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    /// fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    ///
+    /// App::new().resource("/", |r| r.f(index));
+    /// ```
+    ///
+    /// This is shortcut for:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn index(req: &HttpRequest) -> HttpResponse { unimplemented!() }
+    /// App::new().resource("/", |r| r.route().f(index));
+    /// ```
+    pub fn f<F, R>(&mut self, handler: F)
+    where
+        F: Fn(&HttpRequest<S>) -> R + 'static,
+        R: Responder + 'static,
+    {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().f(handler)
+    }
+
+    /// Register a new route and add handler.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    /// fn index(req: HttpRequest) -> HttpResponse { unimplemented!() }
+    ///
+    /// App::new().resource("/", |r| r.with(index));
+    /// ```
+    ///
+    /// This is shortcut for:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn index(req: HttpRequest) -> HttpResponse { unimplemented!() }
+    /// App::new().resource("/", |r| r.route().with(index));
+    /// ```
+    pub fn with<T, F, R>(&mut self, handler: F)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().with(handler);
+    }
+
+    /// Register a new route and add async handler.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// use actix_web::*;
+    /// use futures::future::Future;
+    ///
+    /// fn index(req: HttpRequest) -> Box<Future<Item=HttpResponse, Error=Error>> {
+    ///     unimplemented!()
+    /// }
+    ///
+    /// App::new().resource("/", |r| r.with_async(index));
+    /// ```
+    ///
+    /// This is shortcut for:
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// # use actix_web::*;
+    /// # use futures::future::Future;
+    /// # fn index(req: HttpRequest) -> Box<Future<Item=HttpResponse, Error=Error>> {
+    /// #     unimplemented!()
+    /// # }
+    /// App::new().resource("/", |r| r.route().with_async(index));
+    /// ```
+    pub fn with_async<T, F, R, I, E>(&mut self, handler: F)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Future<Item = I, Error = E> + 'static,
+        I: Responder + 'static,
+        E: Into<Error> + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        self.routes.push(Route::default());
+        self.routes.last_mut().unwrap().with_async(handler);
+    }
+
+    /// Register a resource middleware
+    ///
+    /// This is similar to `App's` middlewares, but
+    /// middlewares get invoked on resource level.
+    ///
+    /// *Note* `Middleware::finish()` fires right after response get
+    /// prepared. It does not wait until body get sent to peer.
+    pub fn middleware<M: Middleware<S>>(&mut self, mw: M) {
+        Rc::get_mut(&mut self.middlewares)
+            .unwrap()
+            .push(Box::new(mw));
+    }
+
+    #[inline]
+    pub(crate) fn get_route_id(&self, req: &HttpRequest<S>) -> Option<RouteId> {
+        for idx in 0..self.routes.len() {
+            if (&self.routes[idx]).check(req) {
+                return Some(RouteId(idx));
+            }
+        }
+        None
+    }
+
+    #[inline]
+    pub(crate) fn handle(
+        &self, id: RouteId, req: &HttpRequest<S>,
+    ) -> AsyncResult<HttpResponse> {
+        if self.middlewares.is_empty() {
+            (&self.routes[id.0]).handle(req)
+        } else {
+            (&self.routes[id.0]).compose(req.clone(), Rc::clone(&self.middlewares))
+        }
+    }
+}
+
+/// Default resource
+pub struct DefaultResource<S>(Rc<Resource<S>>);
+
+impl<S> Deref for DefaultResource<S> {
+    type Target = Resource<S>;
+
+    fn deref(&self) -> &Resource<S> {
+        self.0.as_ref()
+    }
+}
+
+impl<S> Clone for DefaultResource<S> {
+    fn clone(&self) -> Self {
+        DefaultResource(self.0.clone())
+    }
+}
+
+impl<S> From<Resource<S>> for DefaultResource<S> {
+    fn from(res: Resource<S>) -> Self {
+        DefaultResource(Rc::new(res))
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/route.rs.html b/static/api/actix-web/0.7.2/src/actix_web/route.rs.html new file mode 100644 index 0000000..186647a --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/route.rs.html @@ -0,0 +1,1335 @@ +route.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+
+use std::marker::PhantomData;
+use std::rc::Rc;
+
+use futures::{Async, Future, Poll};
+
+use error::Error;
+use handler::{
+    AsyncHandler, AsyncResult, AsyncResultItem, FromRequest, Handler, Responder,
+    RouteHandler, WrapHandler,
+};
+use http::StatusCode;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{
+    Finished as MiddlewareFinished, Middleware, Response as MiddlewareResponse,
+    Started as MiddlewareStarted,
+};
+use pred::Predicate;
+use with::{With, WithAsync};
+
+/// Resource route definition
+///
+/// Route uses builder-like pattern for configuration.
+/// If handler is not explicitly set, default *404 Not Found* handler is used.
+pub struct Route<S> {
+    preds: Vec<Box<Predicate<S>>>,
+    handler: InnerHandler<S>,
+}
+
+impl<S: 'static> Default for Route<S> {
+    fn default() -> Route<S> {
+        Route {
+            preds: Vec::new(),
+            handler: InnerHandler::new(|_: &_| HttpResponse::new(StatusCode::NOT_FOUND)),
+        }
+    }
+}
+
+impl<S: 'static> Route<S> {
+    #[inline]
+    pub(crate) fn check(&self, req: &HttpRequest<S>) -> bool {
+        let state = req.state();
+        for pred in &self.preds {
+            if !pred.check(req, state) {
+                return false;
+            }
+        }
+        true
+    }
+
+    #[inline]
+    pub(crate) fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        self.handler.handle(req)
+    }
+
+    #[inline]
+    pub(crate) fn compose(
+        &self, req: HttpRequest<S>, mws: Rc<Vec<Box<Middleware<S>>>>,
+    ) -> AsyncResult<HttpResponse> {
+        AsyncResult::async(Box::new(Compose::new(req, mws, self.handler.clone())))
+    }
+
+    /// Add match predicate to route.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// # use actix_web::*;
+    /// # fn main() {
+    /// App::new().resource("/path", |r| {
+    ///     r.route()
+    ///         .filter(pred::Get())
+    ///         .filter(pred::Header("content-type", "text/plain"))
+    ///         .f(|req| HttpResponse::Ok())
+    /// })
+    /// #      .finish();
+    /// # }
+    /// ```
+    pub fn filter<T: Predicate<S> + 'static>(&mut self, p: T) -> &mut Self {
+        self.preds.push(Box::new(p));
+        self
+    }
+
+    /// Set handler object. Usually call to this method is last call
+    /// during route configuration, so it does not return reference to self.
+    pub fn h<H: Handler<S>>(&mut self, handler: H) {
+        self.handler = InnerHandler::new(handler);
+    }
+
+    /// Set handler function. Usually call to this method is last call
+    /// during route configuration, so it does not return reference to self.
+    pub fn f<F, R>(&mut self, handler: F)
+    where
+        F: Fn(&HttpRequest<S>) -> R + 'static,
+        R: Responder + 'static,
+    {
+        self.handler = InnerHandler::new(handler);
+    }
+
+    /// Set async handler function.
+    pub fn a<H, R, F, E>(&mut self, handler: H)
+    where
+        H: Fn(&HttpRequest<S>) -> F + 'static,
+        F: Future<Item = R, Error = E> + 'static,
+        R: Responder + 'static,
+        E: Into<Error> + 'static,
+    {
+        self.handler = InnerHandler::async(handler);
+    }
+
+    /// Set handler function, use request extractor for parameters.
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// #[macro_use] extern crate serde_derive;
+    /// use actix_web::{http, App, Path, Result};
+    ///
+    /// #[derive(Deserialize)]
+    /// struct Info {
+    ///     username: String,
+    /// }
+    ///
+    /// /// extract path info using serde
+    /// fn index(info: Path<Info>) -> Result<String> {
+    ///     Ok(format!("Welcome {}!", info.username))
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource(
+    ///         "/{username}/index.html", // <- define path parameters
+    ///         |r| r.method(http::Method::GET).with(index),
+    ///     ); // <- use `with` extractor
+    /// }
+    /// ```
+    ///
+    /// It is possible to use tuples for specifing multiple extractors for one
+    /// handler function.
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// #[macro_use] extern crate serde_derive;
+    /// # use std::collections::HashMap;
+    /// use actix_web::{http, App, Json, Path, Query, Result};
+    ///
+    /// #[derive(Deserialize)]
+    /// struct Info {
+    ///     username: String,
+    /// }
+    ///
+    /// /// extract path info using serde
+    /// fn index(
+    ///     info: (Path<Info>, Query<HashMap<String, String>>, Json<Info>),
+    /// ) -> Result<String> {
+    ///     Ok(format!("Welcome {}!", info.0.username))
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource(
+    ///         "/{username}/index.html", // <- define path parameters
+    ///         |r| r.method(http::Method::GET).with(index),
+    ///     ); // <- use `with` extractor
+    /// }
+    /// ```
+    pub fn with<T, F, R>(&mut self, handler: F)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        self.h(With::new(handler, <T::Config as Default>::default()));
+    }
+
+    /// Set handler function. Same as `.with()` but it allows to configure
+    /// extractor.
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// #[macro_use] extern crate serde_derive;
+    /// use actix_web::{http, App, Path, Result};
+    ///
+    /// /// extract text data from request
+    /// fn index(body: String) -> Result<String> {
+    ///     Ok(format!("Body {}!", body))
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource("/index.html", |r| {
+    ///         r.method(http::Method::GET)
+    ///                .with_config(index, |cfg| { // <- register handler
+    ///                   cfg.limit(4096);  // <- limit size of the payload
+    ///                 })
+    ///     });
+    /// }
+    /// ```
+    pub fn with_config<T, F, R, C>(&mut self, handler: F, cfg_f: C)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+        C: FnOnce(&mut T::Config),
+    {
+        let mut cfg = <T::Config as Default>::default();
+        cfg_f(&mut cfg);
+        self.h(With::new(handler, cfg));
+    }
+
+    /// Set async handler function, use request extractor for parameters.
+    /// Also this method needs to be used if your handler function returns
+    /// `impl Future<>`
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// #[macro_use] extern crate serde_derive;
+    /// use actix_web::{http, App, Error, Path};
+    /// use futures::Future;
+    ///
+    /// #[derive(Deserialize)]
+    /// struct Info {
+    ///     username: String,
+    /// }
+    ///
+    /// /// extract path info using serde
+    /// fn index(info: Path<Info>) -> Box<Future<Item = &'static str, Error = Error>> {
+    ///     unimplemented!()
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource(
+    ///         "/{username}/index.html", // <- define path parameters
+    ///         |r| r.method(http::Method::GET).with_async(index),
+    ///     ); // <- use `with` extractor
+    /// }
+    /// ```
+    pub fn with_async<T, F, R, I, E>(&mut self, handler: F)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Future<Item = I, Error = E> + 'static,
+        I: Responder + 'static,
+        E: Into<Error> + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        self.h(WithAsync::new(handler, <T::Config as Default>::default()));
+    }
+
+    /// Set async handler function, use request extractor for parameters.
+    /// This method allows to configure extractor.
+    ///
+    /// ```rust
+    /// # extern crate bytes;
+    /// # extern crate actix_web;
+    /// # extern crate futures;
+    /// #[macro_use] extern crate serde_derive;
+    /// use actix_web::{http, App, Error, Form};
+    /// use futures::Future;
+    ///
+    /// #[derive(Deserialize)]
+    /// struct Info {
+    ///     username: String,
+    /// }
+    ///
+    /// /// extract path info using serde
+    /// fn index(info: Form<Info>) -> Box<Future<Item = &'static str, Error = Error>> {
+    ///     unimplemented!()
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().resource(
+    ///         "/{username}/index.html", // <- define path parameters
+    ///         |r| r.method(http::Method::GET)
+    ///            .with_async_config(index, |cfg| {
+    ///                cfg.limit(4096);
+    ///            }),
+    ///     ); // <- use `with` extractor
+    /// }
+    /// ```
+    pub fn with_async_config<T, F, R, I, E, C>(&mut self, handler: F, cfg: C)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Future<Item = I, Error = E> + 'static,
+        I: Responder + 'static,
+        E: Into<Error> + 'static,
+        T: FromRequest<S> + 'static,
+        C: FnOnce(&mut T::Config),
+    {
+        let mut extractor_cfg = <T::Config as Default>::default();
+        cfg(&mut extractor_cfg);
+        self.h(WithAsync::new(handler, extractor_cfg));
+    }
+}
+
+/// `RouteHandler` wrapper. This struct is required because it needs to be
+/// shared for resource level middlewares.
+struct InnerHandler<S>(Rc<Box<RouteHandler<S>>>);
+
+impl<S: 'static> InnerHandler<S> {
+    #[inline]
+    fn new<H: Handler<S>>(h: H) -> Self {
+        InnerHandler(Rc::new(Box::new(WrapHandler::new(h))))
+    }
+
+    #[inline]
+    fn async<H, R, F, E>(h: H) -> Self
+    where
+        H: Fn(&HttpRequest<S>) -> F + 'static,
+        F: Future<Item = R, Error = E> + 'static,
+        R: Responder + 'static,
+        E: Into<Error> + 'static,
+    {
+        InnerHandler(Rc::new(Box::new(AsyncHandler::new(h))))
+    }
+
+    #[inline]
+    pub fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        self.0.handle(req)
+    }
+}
+
+impl<S> Clone for InnerHandler<S> {
+    #[inline]
+    fn clone(&self) -> Self {
+        InnerHandler(Rc::clone(&self.0))
+    }
+}
+
+/// Compose resource level middlewares with route handler.
+struct Compose<S: 'static> {
+    info: ComposeInfo<S>,
+    state: ComposeState<S>,
+}
+
+struct ComposeInfo<S: 'static> {
+    count: usize,
+    req: HttpRequest<S>,
+    mws: Rc<Vec<Box<Middleware<S>>>>,
+    handler: InnerHandler<S>,
+}
+
+enum ComposeState<S: 'static> {
+    Starting(StartMiddlewares<S>),
+    Handler(WaitingResponse<S>),
+    RunMiddlewares(RunMiddlewares<S>),
+    Finishing(FinishingMiddlewares<S>),
+    Completed(Response<S>),
+}
+
+impl<S: 'static> ComposeState<S> {
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        match *self {
+            ComposeState::Starting(ref mut state) => state.poll(info),
+            ComposeState::Handler(ref mut state) => state.poll(info),
+            ComposeState::RunMiddlewares(ref mut state) => state.poll(info),
+            ComposeState::Finishing(ref mut state) => state.poll(info),
+            ComposeState::Completed(_) => None,
+        }
+    }
+}
+
+impl<S: 'static> Compose<S> {
+    fn new(
+        req: HttpRequest<S>, mws: Rc<Vec<Box<Middleware<S>>>>, handler: InnerHandler<S>,
+    ) -> Self {
+        let mut info = ComposeInfo {
+            count: 0,
+            req,
+            mws,
+            handler,
+        };
+        let state = StartMiddlewares::init(&mut info);
+
+        Compose { state, info }
+    }
+}
+
+impl<S> Future for Compose<S> {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        loop {
+            if let ComposeState::Completed(ref mut resp) = self.state {
+                let resp = resp.resp.take().unwrap();
+                return Ok(Async::Ready(resp));
+            }
+            if let Some(state) = self.state.poll(&mut self.info) {
+                self.state = state;
+            } else {
+                return Ok(Async::NotReady);
+            }
+        }
+    }
+}
+
+/// Middlewares start executor
+struct StartMiddlewares<S> {
+    fut: Option<Fut>,
+    _s: PhantomData<S>,
+}
+
+type Fut = Box<Future<Item = Option<HttpResponse>, Error = Error>>;
+
+impl<S: 'static> StartMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>) -> ComposeState<S> {
+        let len = info.mws.len();
+
+        loop {
+            if info.count == len {
+                let reply = info.handler.handle(&info.req);
+                return WaitingResponse::init(info, reply);
+            } else {
+                let result = info.mws[info.count].start(&info.req);
+                match result {
+                    Ok(MiddlewareStarted::Done) => info.count += 1,
+                    Ok(MiddlewareStarted::Response(resp)) => {
+                        return RunMiddlewares::init(info, resp);
+                    }
+                    Ok(MiddlewareStarted::Future(fut)) => {
+                        return ComposeState::Starting(StartMiddlewares {
+                            fut: Some(fut),
+                            _s: PhantomData,
+                        });
+                    }
+                    Err(err) => {
+                        return RunMiddlewares::init(info, err.into());
+                    }
+                }
+            }
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        let len = info.mws.len();
+
+        'outer: loop {
+            match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => {
+                    return None;
+                }
+                Ok(Async::Ready(resp)) => {
+                    info.count += 1;
+                    if let Some(resp) = resp {
+                        return Some(RunMiddlewares::init(info, resp));
+                    }
+                    loop {
+                        if info.count == len {
+                            let reply = info.handler.handle(&info.req);
+                            return Some(WaitingResponse::init(info, reply));
+                        } else {
+                            let result = info.mws[info.count].start(&info.req);
+                            match result {
+                                Ok(MiddlewareStarted::Done) => info.count += 1,
+                                Ok(MiddlewareStarted::Response(resp)) => {
+                                    return Some(RunMiddlewares::init(info, resp));
+                                }
+                                Ok(MiddlewareStarted::Future(fut)) => {
+                                    self.fut = Some(fut);
+                                    continue 'outer;
+                                }
+                                Err(err) => {
+                                    return Some(RunMiddlewares::init(info, err.into()));
+                                }
+                            }
+                        }
+                    }
+                }
+                Err(err) => {
+                    return Some(RunMiddlewares::init(info, err.into()));
+                }
+            }
+        }
+    }
+}
+
+type HandlerFuture = Future<Item = HttpResponse, Error = Error>;
+
+// waiting for response
+struct WaitingResponse<S> {
+    fut: Box<HandlerFuture>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> WaitingResponse<S> {
+    #[inline]
+    fn init(
+        info: &mut ComposeInfo<S>, reply: AsyncResult<HttpResponse>,
+    ) -> ComposeState<S> {
+        match reply.into() {
+            AsyncResultItem::Ok(resp) => RunMiddlewares::init(info, resp),
+            AsyncResultItem::Err(err) => RunMiddlewares::init(info, err.into()),
+            AsyncResultItem::Future(fut) => ComposeState::Handler(WaitingResponse {
+                fut,
+                _s: PhantomData,
+            }),
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        match self.fut.poll() {
+            Ok(Async::NotReady) => None,
+            Ok(Async::Ready(resp)) => Some(RunMiddlewares::init(info, resp)),
+            Err(err) => Some(RunMiddlewares::init(info, err.into())),
+        }
+    }
+}
+
+/// Middlewares response executor
+struct RunMiddlewares<S> {
+    curr: usize,
+    fut: Option<Box<Future<Item = HttpResponse, Error = Error>>>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> RunMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>, mut resp: HttpResponse) -> ComposeState<S> {
+        let mut curr = 0;
+        let len = info.mws.len();
+
+        loop {
+            let state = info.mws[curr].response(&info.req, resp);
+            resp = match state {
+                Err(err) => {
+                    info.count = curr + 1;
+                    return FinishingMiddlewares::init(info, err.into());
+                }
+                Ok(MiddlewareResponse::Done(r)) => {
+                    curr += 1;
+                    if curr == len {
+                        return FinishingMiddlewares::init(info, r);
+                    } else {
+                        r
+                    }
+                }
+                Ok(MiddlewareResponse::Future(fut)) => {
+                    return ComposeState::RunMiddlewares(RunMiddlewares {
+                        curr,
+                        fut: Some(fut),
+                        _s: PhantomData,
+                    });
+                }
+            };
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        let len = info.mws.len();
+
+        loop {
+            // poll latest fut
+            let mut resp = match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => return None,
+                Ok(Async::Ready(resp)) => {
+                    self.curr += 1;
+                    resp
+                }
+                Err(err) => return Some(FinishingMiddlewares::init(info, err.into())),
+            };
+
+            loop {
+                if self.curr == len {
+                    return Some(FinishingMiddlewares::init(info, resp));
+                } else {
+                    let state = info.mws[self.curr].response(&info.req, resp);
+                    match state {
+                        Err(err) => {
+                            return Some(FinishingMiddlewares::init(info, err.into()))
+                        }
+                        Ok(MiddlewareResponse::Done(r)) => {
+                            self.curr += 1;
+                            resp = r
+                        }
+                        Ok(MiddlewareResponse::Future(fut)) => {
+                            self.fut = Some(fut);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+/// Middlewares start executor
+struct FinishingMiddlewares<S> {
+    resp: Option<HttpResponse>,
+    fut: Option<Box<Future<Item = (), Error = Error>>>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> FinishingMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>, resp: HttpResponse) -> ComposeState<S> {
+        if info.count == 0 {
+            Response::init(resp)
+        } else {
+            let mut state = FinishingMiddlewares {
+                resp: Some(resp),
+                fut: None,
+                _s: PhantomData,
+            };
+            if let Some(st) = state.poll(info) {
+                st
+            } else {
+                ComposeState::Finishing(state)
+            }
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        loop {
+            // poll latest fut
+            let not_ready = if let Some(ref mut fut) = self.fut {
+                match fut.poll() {
+                    Ok(Async::NotReady) => true,
+                    Ok(Async::Ready(())) => false,
+                    Err(err) => {
+                        error!("Middleware finish error: {}", err);
+                        false
+                    }
+                }
+            } else {
+                false
+            };
+            if not_ready {
+                return None;
+            }
+            self.fut = None;
+            if info.count == 0 {
+                return Some(Response::init(self.resp.take().unwrap()));
+            }
+
+            info.count -= 1;
+
+            let state = info.mws[info.count as usize]
+                .finish(&info.req, self.resp.as_ref().unwrap());
+            match state {
+                MiddlewareFinished::Done => {
+                    if info.count == 0 {
+                        return Some(Response::init(self.resp.take().unwrap()));
+                    }
+                }
+                MiddlewareFinished::Future(fut) => {
+                    self.fut = Some(fut);
+                }
+            }
+        }
+    }
+}
+
+struct Response<S> {
+    resp: Option<HttpResponse>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> Response<S> {
+    fn init(resp: HttpResponse) -> ComposeState<S> {
+        ComposeState::Completed(Response {
+            resp: Some(resp),
+            _s: PhantomData,
+        })
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/router.rs.html b/static/api/actix-web/0.7.2/src/actix_web/router.rs.html new file mode 100644 index 0000000..c70df9d --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/router.rs.html @@ -0,0 +1,2185 @@ +router.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+
+use std::cmp::min;
+use std::collections::HashMap;
+use std::hash::{Hash, Hasher};
+use std::rc::Rc;
+
+use regex::{escape, Regex};
+use url::Url;
+
+use error::UrlGenerationError;
+use handler::{AsyncResult, FromRequest, Responder, RouteHandler};
+use http::{Method, StatusCode};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use param::{ParamItem, Params};
+use pred::Predicate;
+use resource::{DefaultResource, Resource};
+use scope::Scope;
+use server::Request;
+
+#[derive(Debug, Copy, Clone, PartialEq)]
+pub(crate) enum ResourceId {
+    Default,
+    Normal(u16),
+}
+
+enum ResourcePattern<S> {
+    Resource(ResourceDef),
+    Handler(ResourceDef, Option<Vec<Box<Predicate<S>>>>),
+    Scope(ResourceDef, Vec<Box<Predicate<S>>>),
+}
+
+enum ResourceItem<S> {
+    Resource(Resource<S>),
+    Handler(Box<RouteHandler<S>>),
+    Scope(Scope<S>),
+}
+
+/// Interface for application router.
+pub struct Router<S> {
+    rmap: Rc<ResourceMap>,
+    patterns: Vec<ResourcePattern<S>>,
+    resources: Vec<ResourceItem<S>>,
+    default: Option<DefaultResource<S>>,
+}
+
+/// Information about current resource
+#[derive(Clone)]
+pub struct ResourceInfo {
+    rmap: Rc<ResourceMap>,
+    resource: ResourceId,
+    params: Params,
+    prefix: u16,
+}
+
+impl ResourceInfo {
+    /// Name os the resource
+    #[inline]
+    pub fn name(&self) -> &str {
+        if let ResourceId::Normal(idx) = self.resource {
+            self.rmap.patterns[idx as usize].0.name()
+        } else {
+            ""
+        }
+    }
+
+    /// This method returns reference to matched `ResourceDef` object.
+    #[inline]
+    pub fn rdef(&self) -> Option<&ResourceDef> {
+        if let ResourceId::Normal(idx) = self.resource {
+            Some(&self.rmap.patterns[idx as usize].0)
+        } else {
+            None
+        }
+    }
+
+    pub(crate) fn set_prefix(&mut self, prefix: u16) {
+        self.prefix = prefix;
+    }
+
+    /// Get a reference to the Params object.
+    ///
+    /// Params is a container for url parameters.
+    /// A variable segment is specified in the form `{identifier}`,
+    /// where the identifier can be used later in a request handler to
+    /// access the matched value for that segment.
+    #[inline]
+    pub fn match_info(&self) -> &Params {
+        &self.params
+    }
+
+    #[inline]
+    pub(crate) fn merge(&mut self, info: &ResourceInfo) {
+        let mut p = info.params.clone();
+        p.set_tail(self.params.tail);
+        for item in &self.params.segments {
+            p.add(item.0.clone(), item.1.clone());
+        }
+
+        self.prefix = info.params.tail;
+        self.params = p;
+    }
+
+    /// Generate url for named resource
+    ///
+    /// Check [`HttpRequest::url_for()`](../struct.HttpRequest.html#method.
+    /// url_for) for detailed information.
+    pub fn url_for<U, I>(
+        &self, req: &Request, name: &str, elements: U,
+    ) -> Result<Url, UrlGenerationError>
+    where
+        U: IntoIterator<Item = I>,
+        I: AsRef<str>,
+    {
+        if let Some(pattern) = self.rmap.named.get(name) {
+            let path =
+                pattern.resource_path(elements, &req.path()[..(self.prefix as usize)])?;
+            if path.starts_with('/') {
+                let conn = req.connection_info();
+                Ok(Url::parse(&format!(
+                    "{}://{}{}",
+                    conn.scheme(),
+                    conn.host(),
+                    path
+                ))?)
+            } else {
+                Ok(Url::parse(&path)?)
+            }
+        } else {
+            Err(UrlGenerationError::ResourceNotFound)
+        }
+    }
+
+    /// Check if application contains matching resource.
+    ///
+    /// This method does not take `prefix` into account.
+    /// For example if prefix is `/test` and router contains route `/name`,
+    /// following path would be recognizable `/test/name` but `has_resource()` call
+    /// would return `false`.
+    pub fn has_resource(&self, path: &str) -> bool {
+        self.rmap.has_resource(path)
+    }
+
+    /// Check if application contains matching resource.
+    ///
+    /// This method does take `prefix` into account
+    /// but behaves like `has_route` in case `prefix` is not set in the router.
+    ///
+    /// For example if prefix is `/test` and router contains route `/name`, the
+    /// following path would be recognizable `/test/name` and `has_prefixed_route()` call
+    /// would return `true`.
+    /// It will not match against prefix in case it's not given. For example for `/name`
+    /// with a `/test` prefix would return `false`
+    pub fn has_prefixed_resource(&self, path: &str) -> bool {
+        let prefix = self.prefix as usize;
+        if prefix >= path.len() {
+            return false;
+        }
+        self.rmap.has_resource(&path[prefix..])
+    }
+}
+
+pub(crate) struct ResourceMap {
+    named: HashMap<String, ResourceDef>,
+    patterns: Vec<(ResourceDef, Option<Rc<ResourceMap>>)>,
+}
+
+impl ResourceMap {
+    pub fn has_resource(&self, path: &str) -> bool {
+        let path = if path.is_empty() { "/" } else { path };
+
+        for (pattern, rmap) in &self.patterns {
+            if let Some(ref rmap) = rmap {
+                if let Some(plen) = pattern.is_prefix_match(path) {
+                    return rmap.has_resource(&path[plen..]);
+                }
+            } else if pattern.is_match(path) {
+                return true;
+            }
+        }
+        false
+    }
+}
+
+impl<S: 'static> Default for Router<S> {
+    fn default() -> Self {
+        Router::new()
+    }
+}
+
+impl<S: 'static> Router<S> {
+    pub(crate) fn new() -> Self {
+        Router {
+            rmap: Rc::new(ResourceMap {
+                named: HashMap::new(),
+                patterns: Vec::new(),
+            }),
+            resources: Vec::new(),
+            patterns: Vec::new(),
+            default: None,
+        }
+    }
+
+    #[inline]
+    pub(crate) fn route_info_params(&self, idx: u16, params: Params) -> ResourceInfo {
+        ResourceInfo {
+            params,
+            prefix: 0,
+            rmap: self.rmap.clone(),
+            resource: ResourceId::Normal(idx),
+        }
+    }
+
+    #[cfg(test)]
+    pub(crate) fn route_info(&self, req: &Request, prefix: u16) -> ResourceInfo {
+        let mut params = Params::with_url(req.url());
+        params.set_tail(prefix);
+
+        ResourceInfo {
+            params,
+            prefix: 0,
+            rmap: self.rmap.clone(),
+            resource: ResourceId::Default,
+        }
+    }
+
+    #[cfg(test)]
+    pub(crate) fn default_route_info(&self) -> ResourceInfo {
+        ResourceInfo {
+            params: Params::new(),
+            rmap: self.rmap.clone(),
+            resource: ResourceId::Default,
+            prefix: 0,
+        }
+    }
+
+    pub(crate) fn register_resource(&mut self, resource: Resource<S>) {
+        {
+            let rmap = Rc::get_mut(&mut self.rmap).unwrap();
+
+            let name = resource.get_name();
+            if !name.is_empty() {
+                assert!(
+                    !rmap.named.contains_key(name),
+                    "Named resource {:?} is registered.",
+                    name
+                );
+                rmap.named.insert(name.to_owned(), resource.rdef().clone());
+            }
+            rmap.patterns.push((resource.rdef().clone(), None));
+        }
+        self.patterns
+            .push(ResourcePattern::Resource(resource.rdef().clone()));
+        self.resources.push(ResourceItem::Resource(resource));
+    }
+
+    pub(crate) fn register_scope(&mut self, mut scope: Scope<S>) {
+        Rc::get_mut(&mut self.rmap)
+            .unwrap()
+            .patterns
+            .push((scope.rdef().clone(), Some(scope.router().rmap.clone())));
+        let filters = scope.take_filters();
+        self.patterns
+            .push(ResourcePattern::Scope(scope.rdef().clone(), filters));
+        self.resources.push(ResourceItem::Scope(scope));
+    }
+
+    pub(crate) fn register_handler(
+        &mut self, path: &str, hnd: Box<RouteHandler<S>>,
+        filters: Option<Vec<Box<Predicate<S>>>>,
+    ) {
+        let rdef = ResourceDef::prefix(path);
+        Rc::get_mut(&mut self.rmap)
+            .unwrap()
+            .patterns
+            .push((rdef.clone(), None));
+        self.resources.push(ResourceItem::Handler(hnd));
+        self.patterns.push(ResourcePattern::Handler(rdef, filters));
+    }
+
+    pub(crate) fn has_default_resource(&self) -> bool {
+        self.default.is_some()
+    }
+
+    pub(crate) fn register_default_resource(&mut self, resource: DefaultResource<S>) {
+        self.default = Some(resource);
+    }
+
+    pub(crate) fn finish(&mut self) {
+        if let Some(ref default) = self.default {
+            for resource in &mut self.resources {
+                match resource {
+                    ResourceItem::Resource(_) => (),
+                    ResourceItem::Scope(scope) => {
+                        if !scope.has_default_resource() {
+                            scope.default_resource(default.clone());
+                        }
+                        scope.finish()
+                    }
+                    ResourceItem::Handler(hnd) => {
+                        if !hnd.has_default_resource() {
+                            hnd.default_resource(default.clone());
+                        }
+                        hnd.finish()
+                    }
+                }
+            }
+        }
+    }
+
+    pub(crate) fn register_external(&mut self, name: &str, rdef: ResourceDef) {
+        let rmap = Rc::get_mut(&mut self.rmap).unwrap();
+        assert!(
+            !rmap.named.contains_key(name),
+            "Named resource {:?} is registered.",
+            name
+        );
+        rmap.named.insert(name.to_owned(), rdef);
+    }
+
+    pub(crate) fn register_route<T, F, R>(&mut self, path: &str, method: Method, f: F)
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        let out = {
+            // get resource handler
+            let mut iterator = self.resources.iter_mut();
+
+            loop {
+                if let Some(ref mut resource) = iterator.next() {
+                    if let ResourceItem::Resource(ref mut resource) = resource {
+                        if resource.rdef().pattern() == path {
+                            resource.method(method).with(f);
+                            break None;
+                        }
+                    }
+                } else {
+                    let mut resource = Resource::new(ResourceDef::new(path));
+                    resource.method(method).with(f);
+                    break Some(resource);
+                }
+            }
+        };
+        if let Some(out) = out {
+            self.register_resource(out);
+        }
+    }
+
+    /// Handle request
+    pub fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        let resource = match req.resource().resource {
+            ResourceId::Normal(idx) => &self.resources[idx as usize],
+            ResourceId::Default => {
+                if let Some(ref default) = self.default {
+                    if let Some(id) = default.get_route_id(req) {
+                        return default.handle(id, req);
+                    }
+                }
+                return AsyncResult::ok(HttpResponse::new(StatusCode::NOT_FOUND));
+            }
+        };
+        match resource {
+            ResourceItem::Resource(ref resource) => {
+                if let Some(id) = resource.get_route_id(req) {
+                    return resource.handle(id, req);
+                }
+
+                if let Some(ref default) = self.default {
+                    if let Some(id) = default.get_route_id(req) {
+                        return default.handle(id, req);
+                    }
+                }
+            }
+            ResourceItem::Handler(hnd) => return hnd.handle(req),
+            ResourceItem::Scope(hnd) => return hnd.handle(req),
+        }
+        AsyncResult::ok(HttpResponse::new(StatusCode::NOT_FOUND))
+    }
+
+    /// Query for matched resource
+    pub fn recognize(&self, req: &Request, state: &S, tail: usize) -> ResourceInfo {
+        if tail <= req.path().len() {
+            'outer: for (idx, resource) in self.patterns.iter().enumerate() {
+                match resource {
+                    ResourcePattern::Resource(rdef) => {
+                        if let Some(params) = rdef.match_with_params(req, tail) {
+                            return self.route_info_params(idx as u16, params);
+                        }
+                    }
+                    ResourcePattern::Handler(rdef, filters) => {
+                        if let Some(params) = rdef.match_prefix_with_params(req, tail) {
+                            if let Some(ref filters) = filters {
+                                for filter in filters {
+                                    if !filter.check(req, state) {
+                                        continue 'outer;
+                                    }
+                                }
+                            }
+                            return self.route_info_params(idx as u16, params);
+                        }
+                    }
+                    ResourcePattern::Scope(rdef, filters) => {
+                        if let Some(params) = rdef.match_prefix_with_params(req, tail) {
+                            for filter in filters {
+                                if !filter.check(req, state) {
+                                    continue 'outer;
+                                }
+                            }
+                            return self.route_info_params(idx as u16, params);
+                        }
+                    }
+                }
+            }
+        }
+        ResourceInfo {
+            prefix: tail as u16,
+            params: Params::new(),
+            rmap: self.rmap.clone(),
+            resource: ResourceId::Default,
+        }
+    }
+}
+
+#[derive(Debug, Clone, PartialEq)]
+enum PatternElement {
+    Str(String),
+    Var(String),
+}
+
+#[derive(Clone, Debug)]
+enum PatternType {
+    Static(String),
+    Prefix(String),
+    Dynamic(Regex, Vec<Rc<String>>, usize),
+}
+
+#[derive(Debug, Copy, Clone, PartialEq)]
+/// Resource type
+pub enum ResourceType {
+    /// Normal resource
+    Normal,
+    /// Resource for application default handler
+    Default,
+    /// External resource
+    External,
+    /// Unknown resource type
+    Unset,
+}
+
+/// Resource type describes an entry in resources table
+#[derive(Clone, Debug)]
+pub struct ResourceDef {
+    tp: PatternType,
+    rtp: ResourceType,
+    name: String,
+    pattern: String,
+    elements: Vec<PatternElement>,
+}
+
+impl ResourceDef {
+    /// Parse path pattern and create new `Resource` instance.
+    ///
+    /// Panics if path pattern is wrong.
+    pub fn new(path: &str) -> Self {
+        ResourceDef::with_prefix(path, if path.is_empty() { "" } else { "/" }, false)
+    }
+
+    /// Parse path pattern and create new `Resource` instance.
+    ///
+    /// Use `prefix` type instead of `static`.
+    ///
+    /// Panics if path regex pattern is wrong.
+    pub fn prefix(path: &str) -> Self {
+        ResourceDef::with_prefix(path, "/", true)
+    }
+
+    /// Construct external resource
+    ///
+    /// Panics if path pattern is wrong.
+    pub fn external(path: &str) -> Self {
+        let mut resource = ResourceDef::with_prefix(path, "/", false);
+        resource.rtp = ResourceType::External;
+        resource
+    }
+
+    /// Parse path pattern and create new `Resource` instance with custom prefix
+    pub fn with_prefix(path: &str, prefix: &str, for_prefix: bool) -> Self {
+        let (pattern, elements, is_dynamic, len) =
+            ResourceDef::parse(path, prefix, for_prefix);
+
+        let tp = if is_dynamic {
+            let re = match Regex::new(&pattern) {
+                Ok(re) => re,
+                Err(err) => panic!("Wrong path pattern: \"{}\" {}", path, err),
+            };
+            // actix creates one router per thread
+            let names = re
+                .capture_names()
+                .filter_map(|name| name.map(|name| Rc::new(name.to_owned())))
+                .collect();
+            PatternType::Dynamic(re, names, len)
+        } else if for_prefix {
+            PatternType::Prefix(pattern.clone())
+        } else {
+            PatternType::Static(pattern.clone())
+        };
+
+        ResourceDef {
+            tp,
+            elements,
+            name: "".to_string(),
+            rtp: ResourceType::Normal,
+            pattern: path.to_owned(),
+        }
+    }
+
+    /// Resource type
+    pub fn rtype(&self) -> ResourceType {
+        self.rtp
+    }
+
+    /// Resource name
+    pub fn name(&self) -> &str {
+        &self.name
+    }
+
+    /// Resource name
+    pub(crate) fn set_name(&mut self, name: &str) {
+        self.name = name.to_owned();
+    }
+
+    /// Path pattern of the resource
+    pub fn pattern(&self) -> &str {
+        &self.pattern
+    }
+
+    /// Is this path a match against this resource?
+    pub fn is_match(&self, path: &str) -> bool {
+        match self.tp {
+            PatternType::Static(ref s) => s == path,
+            PatternType::Dynamic(ref re, _, _) => re.is_match(path),
+            PatternType::Prefix(ref s) => path.starts_with(s),
+        }
+    }
+
+    fn is_prefix_match(&self, path: &str) -> Option<usize> {
+        let plen = path.len();
+        let path = if path.is_empty() { "/" } else { path };
+
+        match self.tp {
+            PatternType::Static(ref s) => if s == path {
+                Some(plen)
+            } else {
+                None
+            },
+            PatternType::Dynamic(ref re, _, len) => {
+                if let Some(captures) = re.captures(path) {
+                    let mut pos = 0;
+                    let mut passed = false;
+                    for capture in captures.iter() {
+                        if let Some(ref m) = capture {
+                            if !passed {
+                                passed = true;
+                                continue;
+                            }
+
+                            pos = m.end();
+                        }
+                    }
+                    Some(plen + pos + len)
+                } else {
+                    None
+                }
+            }
+            PatternType::Prefix(ref s) => {
+                let len = if path == s {
+                    s.len()
+                } else if path.starts_with(s)
+                    && (s.ends_with('/') || path.split_at(s.len()).1.starts_with('/'))
+                {
+                    if s.ends_with('/') {
+                        s.len() - 1
+                    } else {
+                        s.len()
+                    }
+                } else {
+                    return None;
+                };
+                Some(min(plen, len))
+            }
+        }
+    }
+
+    /// Are the given path and parameters a match against this resource?
+    pub fn match_with_params(&self, req: &Request, plen: usize) -> Option<Params> {
+        let path = &req.path()[plen..];
+
+        match self.tp {
+            PatternType::Static(ref s) => if s != path {
+                None
+            } else {
+                Some(Params::with_url(req.url()))
+            },
+            PatternType::Dynamic(ref re, ref names, _) => {
+                if let Some(captures) = re.captures(path) {
+                    let mut params = Params::with_url(req.url());
+                    let mut idx = 0;
+                    let mut passed = false;
+                    for capture in captures.iter() {
+                        if let Some(ref m) = capture {
+                            if !passed {
+                                passed = true;
+                                continue;
+                            }
+                            params.add(
+                                names[idx].clone(),
+                                ParamItem::UrlSegment(
+                                    (plen + m.start()) as u16,
+                                    (plen + m.end()) as u16,
+                                ),
+                            );
+                            idx += 1;
+                        }
+                    }
+                    params.set_tail(req.path().len() as u16);
+                    Some(params)
+                } else {
+                    None
+                }
+            }
+            PatternType::Prefix(ref s) => if !path.starts_with(s) {
+                None
+            } else {
+                Some(Params::with_url(req.url()))
+            },
+        }
+    }
+
+    /// Is the given path a prefix match and do the parameters match against this resource?
+    pub fn match_prefix_with_params(
+        &self, req: &Request, plen: usize,
+    ) -> Option<Params> {
+        let path = &req.path()[plen..];
+        let path = if path.is_empty() { "/" } else { path };
+
+        match self.tp {
+            PatternType::Static(ref s) => if s == path {
+                let mut params = Params::with_url(req.url());
+                params.set_tail(req.path().len() as u16);
+                Some(params)
+            } else {
+                None
+            },
+            PatternType::Dynamic(ref re, ref names, len) => {
+                if let Some(captures) = re.captures(path) {
+                    let mut params = Params::with_url(req.url());
+                    let mut pos = 0;
+                    let mut passed = false;
+                    let mut idx = 0;
+                    for capture in captures.iter() {
+                        if let Some(ref m) = capture {
+                            if !passed {
+                                passed = true;
+                                continue;
+                            }
+
+                            params.add(
+                                names[idx].clone(),
+                                ParamItem::UrlSegment(
+                                    (plen + m.start()) as u16,
+                                    (plen + m.end()) as u16,
+                                ),
+                            );
+                            idx += 1;
+                            pos = m.end();
+                        }
+                    }
+                    params.set_tail((plen + pos + len) as u16);
+                    Some(params)
+                } else {
+                    None
+                }
+            }
+            PatternType::Prefix(ref s) => {
+                let len = if path == s {
+                    s.len()
+                } else if path.starts_with(s)
+                    && (s.ends_with('/') || path.split_at(s.len()).1.starts_with('/'))
+                {
+                    if s.ends_with('/') {
+                        s.len() - 1
+                    } else {
+                        s.len()
+                    }
+                } else {
+                    return None;
+                };
+                let mut params = Params::with_url(req.url());
+                params.set_tail(min(req.path().len(), plen + len) as u16);
+                Some(params)
+            }
+        }
+    }
+
+    /// Build resource path.
+    pub fn resource_path<U, I>(
+        &self, elements: U, prefix: &str,
+    ) -> Result<String, UrlGenerationError>
+    where
+        U: IntoIterator<Item = I>,
+        I: AsRef<str>,
+    {
+        let mut path = match self.tp {
+            PatternType::Prefix(ref p) => p.to_owned(),
+            PatternType::Static(ref p) => p.to_owned(),
+            PatternType::Dynamic(..) => {
+                let mut path = String::new();
+                let mut iter = elements.into_iter();
+                for el in &self.elements {
+                    match *el {
+                        PatternElement::Str(ref s) => path.push_str(s),
+                        PatternElement::Var(_) => {
+                            if let Some(val) = iter.next() {
+                                path.push_str(val.as_ref())
+                            } else {
+                                return Err(UrlGenerationError::NotEnoughElements);
+                            }
+                        }
+                    }
+                }
+                path
+            }
+        };
+
+        if self.rtp != ResourceType::External {
+            if prefix.ends_with('/') {
+                if path.starts_with('/') {
+                    path.insert_str(0, &prefix[..prefix.len() - 1]);
+                } else {
+                    path.insert_str(0, prefix);
+                }
+            } else {
+                if !path.starts_with('/') {
+                    path.insert(0, '/');
+                }
+                path.insert_str(0, prefix);
+            }
+        }
+        Ok(path)
+    }
+
+    fn parse(
+        pattern: &str, prefix: &str, for_prefix: bool,
+    ) -> (String, Vec<PatternElement>, bool, usize) {
+        const DEFAULT_PATTERN: &str = "[^/]+";
+
+        let mut re1 = String::from("^") + prefix;
+        let mut re2 = String::from(prefix);
+        let mut el = String::new();
+        let mut in_param = false;
+        let mut in_param_pattern = false;
+        let mut param_name = String::new();
+        let mut param_pattern = String::from(DEFAULT_PATTERN);
+        let mut is_dynamic = false;
+        let mut elems = Vec::new();
+        let mut len = 0;
+
+        for (index, ch) in pattern.chars().enumerate() {
+            // All routes must have a leading slash so its optional to have one
+            if index == 0 && ch == '/' {
+                continue;
+            }
+
+            if in_param {
+                // In parameter segment: `{....}`
+                if ch == '}' {
+                    elems.push(PatternElement::Var(param_name.clone()));
+                    re1.push_str(&format!(r"(?P<{}>{})", &param_name, &param_pattern));
+
+                    param_name.clear();
+                    param_pattern = String::from(DEFAULT_PATTERN);
+
+                    len = 0;
+                    in_param_pattern = false;
+                    in_param = false;
+                } else if ch == ':' {
+                    // The parameter name has been determined; custom pattern land
+                    in_param_pattern = true;
+                    param_pattern.clear();
+                } else if in_param_pattern {
+                    // Ignore leading whitespace for pattern
+                    if !(ch == ' ' && param_pattern.is_empty()) {
+                        param_pattern.push(ch);
+                    }
+                } else {
+                    param_name.push(ch);
+                }
+            } else if ch == '{' {
+                in_param = true;
+                is_dynamic = true;
+                elems.push(PatternElement::Str(el.clone()));
+                el.clear();
+            } else {
+                re1.push_str(escape(&ch.to_string()).as_str());
+                re2.push(ch);
+                el.push(ch);
+                len += 1;
+            }
+        }
+
+        if !el.is_empty() {
+            elems.push(PatternElement::Str(el.clone()));
+        }
+
+        let re = if is_dynamic {
+            if !for_prefix {
+                re1.push('$');
+            }
+            re1
+        } else {
+            re2
+        };
+        (re, elems, is_dynamic, len)
+    }
+}
+
+impl PartialEq for ResourceDef {
+    fn eq(&self, other: &ResourceDef) -> bool {
+        self.pattern == other.pattern
+    }
+}
+
+impl Eq for ResourceDef {}
+
+impl Hash for ResourceDef {
+    fn hash<H: Hasher>(&self, state: &mut H) {
+        self.pattern.hash(state);
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use test::TestRequest;
+
+    #[test]
+    fn test_recognizer10() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/name")));
+        router.register_resource(Resource::new(ResourceDef::new("/name/{val}")));
+        router.register_resource(Resource::new(ResourceDef::new(
+            "/name/{val}/index.html",
+        )));
+        router.register_resource(Resource::new(ResourceDef::new("/file/{file}.{ext}")));
+        router.register_resource(Resource::new(ResourceDef::new(
+            "/v{val}/{val2}/index.html",
+        )));
+        router.register_resource(Resource::new(ResourceDef::new("/v/{tail:.*}")));
+        router.register_resource(Resource::new(ResourceDef::new("/test2/{test}.html")));
+        router.register_resource(Resource::new(ResourceDef::new("{test}/index.html")));
+
+        let req = TestRequest::with_uri("/name").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(0));
+        assert!(info.match_info().is_empty());
+
+        let req = TestRequest::with_uri("/name/value").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(1));
+        assert_eq!(info.match_info().get("val").unwrap(), "value");
+        assert_eq!(&info.match_info()["val"], "value");
+
+        let req = TestRequest::with_uri("/name/value2/index.html").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(2));
+        assert_eq!(info.match_info().get("val").unwrap(), "value2");
+
+        let req = TestRequest::with_uri("/file/file.gz").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(3));
+        assert_eq!(info.match_info().get("file").unwrap(), "file");
+        assert_eq!(info.match_info().get("ext").unwrap(), "gz");
+
+        let req = TestRequest::with_uri("/vtest/ttt/index.html").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(4));
+        assert_eq!(info.match_info().get("val").unwrap(), "test");
+        assert_eq!(info.match_info().get("val2").unwrap(), "ttt");
+
+        let req = TestRequest::with_uri("/v/blah-blah/index.html").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(5));
+        assert_eq!(
+            info.match_info().get("tail").unwrap(),
+            "blah-blah/index.html"
+        );
+
+        let req = TestRequest::with_uri("/test2/index.html").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(6));
+        assert_eq!(info.match_info().get("test").unwrap(), "index");
+
+        let req = TestRequest::with_uri("/bbb/index.html").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(7));
+        assert_eq!(info.match_info().get("test").unwrap(), "bbb");
+    }
+
+    #[test]
+    fn test_recognizer_2() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/index.json")));
+        router.register_resource(Resource::new(ResourceDef::new("/{source}.json")));
+
+        let req = TestRequest::with_uri("/index.json").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(0));
+
+        let req = TestRequest::with_uri("/test.json").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(1));
+    }
+
+    #[test]
+    fn test_recognizer_with_prefix() {
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/name")));
+        router.register_resource(Resource::new(ResourceDef::new("/name/{val}")));
+
+        let req = TestRequest::with_uri("/name").finish();
+        let info = router.recognize(&req, &(), 5);
+        assert_eq!(info.resource, ResourceId::Default);
+
+        let req = TestRequest::with_uri("/test/name").finish();
+        let info = router.recognize(&req, &(), 5);
+        assert_eq!(info.resource, ResourceId::Normal(0));
+
+        let req = TestRequest::with_uri("/test/name/value").finish();
+        let info = router.recognize(&req, &(), 5);
+        assert_eq!(info.resource, ResourceId::Normal(1));
+        assert_eq!(info.match_info().get("val").unwrap(), "value");
+        assert_eq!(&info.match_info()["val"], "value");
+
+        // same patterns
+        let mut router = Router::<()>::new();
+        router.register_resource(Resource::new(ResourceDef::new("/name")));
+        router.register_resource(Resource::new(ResourceDef::new("/name/{val}")));
+
+        let req = TestRequest::with_uri("/name").finish();
+        let info = router.recognize(&req, &(), 6);
+        assert_eq!(info.resource, ResourceId::Default);
+
+        let req = TestRequest::with_uri("/test2/name").finish();
+        let info = router.recognize(&req, &(), 6);
+        assert_eq!(info.resource, ResourceId::Normal(0));
+
+        let req = TestRequest::with_uri("/test2/name-test").finish();
+        let info = router.recognize(&req, &(), 6);
+        assert_eq!(info.resource, ResourceId::Default);
+
+        let req = TestRequest::with_uri("/test2/name/ttt").finish();
+        let info = router.recognize(&req, &(), 6);
+        assert_eq!(info.resource, ResourceId::Normal(1));
+        assert_eq!(&info.match_info()["val"], "ttt");
+    }
+
+    #[test]
+    fn test_parse_static() {
+        let re = ResourceDef::new("/");
+        assert!(re.is_match("/"));
+        assert!(!re.is_match("/a"));
+
+        let re = ResourceDef::new("/name");
+        assert!(re.is_match("/name"));
+        assert!(!re.is_match("/name1"));
+        assert!(!re.is_match("/name/"));
+        assert!(!re.is_match("/name~"));
+
+        let re = ResourceDef::new("/name/");
+        assert!(re.is_match("/name/"));
+        assert!(!re.is_match("/name"));
+        assert!(!re.is_match("/name/gs"));
+
+        let re = ResourceDef::new("/user/profile");
+        assert!(re.is_match("/user/profile"));
+        assert!(!re.is_match("/user/profile/profile"));
+    }
+
+    #[test]
+    fn test_parse_param() {
+        let re = ResourceDef::new("/user/{id}");
+        assert!(re.is_match("/user/profile"));
+        assert!(re.is_match("/user/2345"));
+        assert!(!re.is_match("/user/2345/"));
+        assert!(!re.is_match("/user/2345/sdg"));
+
+        let req = TestRequest::with_uri("/user/profile").finish();
+        let info = re.match_with_params(&req, 0).unwrap();
+        assert_eq!(info.get("id").unwrap(), "profile");
+
+        let req = TestRequest::with_uri("/user/1245125").finish();
+        let info = re.match_with_params(&req, 0).unwrap();
+        assert_eq!(info.get("id").unwrap(), "1245125");
+
+        let re = ResourceDef::new("/v{version}/resource/{id}");
+        assert!(re.is_match("/v1/resource/320120"));
+        assert!(!re.is_match("/v/resource/1"));
+        assert!(!re.is_match("/resource"));
+
+        let req = TestRequest::with_uri("/v151/resource/adahg32").finish();
+        let info = re.match_with_params(&req, 0).unwrap();
+        assert_eq!(info.get("version").unwrap(), "151");
+        assert_eq!(info.get("id").unwrap(), "adahg32");
+    }
+
+    #[test]
+    fn test_resource_prefix() {
+        let re = ResourceDef::prefix("/name");
+        assert!(re.is_match("/name"));
+        assert!(re.is_match("/name/"));
+        assert!(re.is_match("/name/test/test"));
+        assert!(re.is_match("/name1"));
+        assert!(re.is_match("/name~"));
+
+        let re = ResourceDef::prefix("/name/");
+        assert!(re.is_match("/name/"));
+        assert!(re.is_match("/name/gs"));
+        assert!(!re.is_match("/name"));
+    }
+
+    #[test]
+    fn test_reousrce_prefix_dynamic() {
+        let re = ResourceDef::prefix("/{name}/");
+        assert!(re.is_match("/name/"));
+        assert!(re.is_match("/name/gs"));
+        assert!(!re.is_match("/name"));
+
+        let req = TestRequest::with_uri("/test2/").finish();
+        let info = re.match_with_params(&req, 0).unwrap();
+        assert_eq!(&info["name"], "test2");
+        assert_eq!(&info[0], "test2");
+
+        let req = TestRequest::with_uri("/test2/subpath1/subpath2/index.html").finish();
+        let info = re.match_with_params(&req, 0).unwrap();
+        assert_eq!(&info["name"], "test2");
+        assert_eq!(&info[0], "test2");
+    }
+
+    #[test]
+    fn test_request_resource() {
+        let mut router = Router::<()>::new();
+        let mut resource = Resource::new(ResourceDef::new("/index.json"));
+        resource.name("r1");
+        router.register_resource(resource);
+        let mut resource = Resource::new(ResourceDef::new("/test.json"));
+        resource.name("r2");
+        router.register_resource(resource);
+
+        let req = TestRequest::with_uri("/index.json").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(0));
+
+        assert_eq!(info.name(), "r1");
+
+        let req = TestRequest::with_uri("/test.json").finish();
+        let info = router.recognize(&req, &(), 0);
+        assert_eq!(info.resource, ResourceId::Normal(1));
+        assert_eq!(info.name(), "r2");
+    }
+
+    #[test]
+    fn test_has_resource() {
+        let mut router = Router::<()>::new();
+        let scope = Scope::new("/test").resource("/name", |_| "done");
+        router.register_scope(scope);
+
+        {
+            let info = router.default_route_info();
+            assert!(!info.has_resource("/test"));
+            assert!(info.has_resource("/test/name"));
+        }
+
+        let scope =
+            Scope::new("/test2").nested("/test10", |s| s.resource("/name", |_| "done"));
+        router.register_scope(scope);
+
+        let info = router.default_route_info();
+        assert!(info.has_resource("/test2/test10/name"));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/scope.rs.html b/static/api/actix-web/0.7.2/src/actix_web/scope.rs.html new file mode 100644 index 0000000..3f068b6 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/scope.rs.html @@ -0,0 +1,2289 @@ +scope.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+
+use std::marker::PhantomData;
+use std::mem;
+use std::rc::Rc;
+
+use futures::{Async, Future, Poll};
+
+use error::Error;
+use handler::{AsyncResult, AsyncResultItem, FromRequest, Responder, RouteHandler};
+use http::Method;
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::{
+    Finished as MiddlewareFinished, Middleware, Response as MiddlewareResponse,
+    Started as MiddlewareStarted,
+};
+use pred::Predicate;
+use resource::{DefaultResource, Resource};
+use router::{ResourceDef, Router};
+use server::Request;
+
+/// Resources scope
+///
+/// Scope is a set of resources with common root path.
+/// Scopes collect multiple paths under a common path prefix.
+/// Scope path can contain variable path segments as resources.
+/// Scope prefix is always complete path segment, i.e `/app` would
+/// be converted to a `/app/` and it would not match `/app` path.
+///
+/// You can get variable path segments from `HttpRequest::match_info()`.
+/// `Path` extractor also is able to extract scope level variable segments.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{http, App, HttpRequest, HttpResponse};
+///
+/// fn main() {
+///     let app = App::new().scope("/{project_id}/", |scope| {
+///         scope
+///             .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+///             .resource("/path2", |r| r.f(|_| HttpResponse::Ok()))
+///             .resource("/path3", |r| r.f(|_| HttpResponse::MethodNotAllowed()))
+///     });
+/// }
+/// ```
+///
+/// In the above example three routes get registered:
+///  * /{project_id}/path1 - reponds to all http method
+///  * /{project_id}/path2 - `GET` requests
+///  * /{project_id}/path3 - `HEAD` requests
+///
+pub struct Scope<S> {
+    rdef: ResourceDef,
+    router: Rc<Router<S>>,
+    filters: Vec<Box<Predicate<S>>>,
+    middlewares: Rc<Vec<Box<Middleware<S>>>>,
+}
+
+#[cfg_attr(feature = "cargo-clippy", allow(new_without_default_derive))]
+impl<S: 'static> Scope<S> {
+    /// Create a new scope
+    // TODO: Why is this not exactly the default impl?
+    pub fn new(path: &str) -> Scope<S> {
+        Scope {
+            rdef: ResourceDef::prefix(path),
+            router: Rc::new(Router::new()),
+            filters: Vec::new(),
+            middlewares: Rc::new(Vec::new()),
+        }
+    }
+
+    #[inline]
+    pub(crate) fn rdef(&self) -> &ResourceDef {
+        &self.rdef
+    }
+
+    pub(crate) fn router(&self) -> &Router<S> {
+        self.router.as_ref()
+    }
+
+    #[inline]
+    pub(crate) fn take_filters(&mut self) -> Vec<Box<Predicate<S>>> {
+        mem::replace(&mut self.filters, Vec::new())
+    }
+
+    /// Add match predicate to scope.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, pred, App, HttpRequest, HttpResponse, Path};
+    ///
+    /// fn index(data: Path<(String, String)>) -> &'static str {
+    ///     "Welcome!"
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().scope("/app", |scope| {
+    ///         scope
+    ///             .filter(pred::Header("content-type", "text/plain"))
+    ///             .route("/test1", http::Method::GET, index)
+    ///             .route("/test2", http::Method::POST, |_: HttpRequest| {
+    ///                 HttpResponse::MethodNotAllowed()
+    ///             })
+    ///     });
+    /// }
+    /// ```
+    pub fn filter<T: Predicate<S> + 'static>(mut self, p: T) -> Self {
+        self.filters.push(Box::new(p));
+        self
+    }
+
+    /// Create nested scope with new state.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{App, HttpRequest};
+    ///
+    /// struct AppState;
+    ///
+    /// fn index(req: &HttpRequest<AppState>) -> &'static str {
+    ///     "Welcome!"
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().scope("/app", |scope| {
+    ///         scope.with_state("/state2", AppState, |scope| {
+    ///             scope.resource("/test1", |r| r.f(index))
+    ///         })
+    ///     });
+    /// }
+    /// ```
+    pub fn with_state<F, T: 'static>(mut self, path: &str, state: T, f: F) -> Scope<S>
+    where
+        F: FnOnce(Scope<T>) -> Scope<T>,
+    {
+        let scope = Scope {
+            rdef: ResourceDef::prefix(path),
+            filters: Vec::new(),
+            router: Rc::new(Router::new()),
+            middlewares: Rc::new(Vec::new()),
+        };
+        let mut scope = f(scope);
+
+        let state = Rc::new(state);
+        let filters: Vec<Box<Predicate<S>>> = vec![Box::new(FiltersWrapper {
+            state: Rc::clone(&state),
+            filters: scope.take_filters(),
+        })];
+        let handler = Box::new(Wrapper { scope, state });
+
+        Rc::get_mut(&mut self.router).unwrap().register_handler(
+            path,
+            handler,
+            Some(filters),
+        );
+
+        self
+    }
+
+    /// Create nested scope.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{App, HttpRequest};
+    ///
+    /// struct AppState;
+    ///
+    /// fn index(req: &HttpRequest<AppState>) -> &'static str {
+    ///     "Welcome!"
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::with_state(AppState).scope("/app", |scope| {
+    ///         scope.nested("/v1", |scope| scope.resource("/test1", |r| r.f(index)))
+    ///     });
+    /// }
+    /// ```
+    pub fn nested<F>(mut self, path: &str, f: F) -> Scope<S>
+    where
+        F: FnOnce(Scope<S>) -> Scope<S>,
+    {
+        let scope = Scope {
+            rdef: ResourceDef::prefix(&path),
+            filters: Vec::new(),
+            router: Rc::new(Router::new()),
+            middlewares: Rc::new(Vec::new()),
+        };
+        Rc::get_mut(&mut self.router)
+            .unwrap()
+            .register_scope(f(scope));
+
+        self
+    }
+
+    /// Configure route for a specific path.
+    ///
+    /// This is a simplified version of the `Scope::resource()` method.
+    /// Handler functions need to accept one request extractor
+    /// argument.
+    ///
+    /// This method could be called multiple times, in that case
+    /// multiple routes would be registered for same resource path.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::{http, App, HttpRequest, HttpResponse, Path};
+    ///
+    /// fn index(data: Path<(String, String)>) -> &'static str {
+    ///     "Welcome!"
+    /// }
+    ///
+    /// fn main() {
+    ///     let app = App::new().scope("/app", |scope| {
+    ///         scope.route("/test1", http::Method::GET, index).route(
+    ///             "/test2",
+    ///             http::Method::POST,
+    ///             |_: HttpRequest| HttpResponse::MethodNotAllowed(),
+    ///         )
+    ///     });
+    /// }
+    /// ```
+    pub fn route<T, F, R>(mut self, path: &str, method: Method, f: F) -> Scope<S>
+    where
+        F: Fn(T) -> R + 'static,
+        R: Responder + 'static,
+        T: FromRequest<S> + 'static,
+    {
+        Rc::get_mut(&mut self.router)
+            .unwrap()
+            .register_route(path, method, f);
+        self
+    }
+
+    /// Configure resource for a specific path.
+    ///
+    /// This method is similar to an `App::resource()` method.
+    /// Resources may have variable path segments. Resource path uses scope
+    /// path as a path prefix.
+    ///
+    /// ```rust
+    /// # extern crate actix_web;
+    /// use actix_web::*;
+    ///
+    /// fn main() {
+    ///     let app = App::new().scope("/api", |scope| {
+    ///         scope.resource("/users/{userid}/{friend}", |r| {
+    ///             r.get().f(|_| HttpResponse::Ok());
+    ///             r.head().f(|_| HttpResponse::MethodNotAllowed());
+    ///             r.route()
+    ///                 .filter(pred::Any(pred::Get()).or(pred::Put()))
+    ///                 .filter(pred::Header("Content-Type", "text/plain"))
+    ///                 .f(|_| HttpResponse::Ok())
+    ///         })
+    ///     });
+    /// }
+    /// ```
+    pub fn resource<F, R>(mut self, path: &str, f: F) -> Scope<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        // add resource
+        let pattern = ResourceDef::with_prefix(
+            path,
+            if path.is_empty() { "" } else { "/" },
+            false,
+        );
+        let mut resource = Resource::new(pattern);
+        f(&mut resource);
+
+        Rc::get_mut(&mut self.router)
+            .unwrap()
+            .register_resource(resource);
+        self
+    }
+
+    /// Default resource to be used if no matching route could be found.
+    pub fn default_resource<F, R>(mut self, f: F) -> Scope<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        // create and configure default resource
+        let mut resource = Resource::new(ResourceDef::new(""));
+        f(&mut resource);
+
+        Rc::get_mut(&mut self.router)
+            .expect("Multiple copies of scope router")
+            .register_default_resource(resource.into());
+
+        self
+    }
+
+    /// Register a scope middleware
+    ///
+    /// This is similar to `App's` middlewares, but
+    /// middlewares get invoked on scope level.
+    ///
+    /// *Note* `Middleware::finish()` fires right after response get
+    /// prepared. It does not wait until body get sent to the peer.
+    pub fn middleware<M: Middleware<S>>(mut self, mw: M) -> Scope<S> {
+        Rc::get_mut(&mut self.middlewares)
+            .expect("Can not use after configuration")
+            .push(Box::new(mw));
+        self
+    }
+}
+
+impl<S: 'static> RouteHandler<S> for Scope<S> {
+    fn handle(&self, req: &HttpRequest<S>) -> AsyncResult<HttpResponse> {
+        let tail = req.match_info().tail as usize;
+
+        // recognize resources
+        let info = self.router.recognize(req, req.state(), tail);
+        let req2 = req.with_route_info(info);
+        if self.middlewares.is_empty() {
+            self.router.handle(&req2)
+        } else {
+            AsyncResult::async(Box::new(Compose::new(
+                req2,
+                Rc::clone(&self.router),
+                Rc::clone(&self.middlewares),
+            )))
+        }
+    }
+
+    fn has_default_resource(&self) -> bool {
+        self.router.has_default_resource()
+    }
+
+    fn default_resource(&mut self, default: DefaultResource<S>) {
+        Rc::get_mut(&mut self.router)
+            .expect("Can not use after configuration")
+            .register_default_resource(default);
+    }
+
+    fn finish(&mut self) {
+        Rc::get_mut(&mut self.router)
+            .expect("Can not use after configuration")
+            .finish();
+    }
+}
+
+struct Wrapper<S: 'static> {
+    state: Rc<S>,
+    scope: Scope<S>,
+}
+
+impl<S: 'static, S2: 'static> RouteHandler<S2> for Wrapper<S> {
+    fn handle(&self, req: &HttpRequest<S2>) -> AsyncResult<HttpResponse> {
+        let req = req.with_state(Rc::clone(&self.state));
+        self.scope.handle(&req)
+    }
+}
+
+struct FiltersWrapper<S: 'static> {
+    state: Rc<S>,
+    filters: Vec<Box<Predicate<S>>>,
+}
+
+impl<S: 'static, S2: 'static> Predicate<S2> for FiltersWrapper<S> {
+    fn check(&self, req: &Request, _: &S2) -> bool {
+        for filter in &self.filters {
+            if !filter.check(&req, &self.state) {
+                return false;
+            }
+        }
+        true
+    }
+}
+
+/// Compose resource level middlewares with route handler.
+struct Compose<S: 'static> {
+    info: ComposeInfo<S>,
+    state: ComposeState<S>,
+}
+
+struct ComposeInfo<S: 'static> {
+    count: usize,
+    req: HttpRequest<S>,
+    router: Rc<Router<S>>,
+    mws: Rc<Vec<Box<Middleware<S>>>>,
+}
+
+enum ComposeState<S: 'static> {
+    Starting(StartMiddlewares<S>),
+    Handler(WaitingResponse<S>),
+    RunMiddlewares(RunMiddlewares<S>),
+    Finishing(FinishingMiddlewares<S>),
+    Completed(Response<S>),
+}
+
+impl<S: 'static> ComposeState<S> {
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        match *self {
+            ComposeState::Starting(ref mut state) => state.poll(info),
+            ComposeState::Handler(ref mut state) => state.poll(info),
+            ComposeState::RunMiddlewares(ref mut state) => state.poll(info),
+            ComposeState::Finishing(ref mut state) => state.poll(info),
+            ComposeState::Completed(_) => None,
+        }
+    }
+}
+
+impl<S: 'static> Compose<S> {
+    fn new(
+        req: HttpRequest<S>, router: Rc<Router<S>>, mws: Rc<Vec<Box<Middleware<S>>>>,
+    ) -> Self {
+        let mut info = ComposeInfo {
+            mws,
+            req,
+            router,
+            count: 0,
+        };
+        let state = StartMiddlewares::init(&mut info);
+
+        Compose { state, info }
+    }
+}
+
+impl<S> Future for Compose<S> {
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        loop {
+            if let ComposeState::Completed(ref mut resp) = self.state {
+                let resp = resp.resp.take().unwrap();
+                return Ok(Async::Ready(resp));
+            }
+            if let Some(state) = self.state.poll(&mut self.info) {
+                self.state = state;
+            } else {
+                return Ok(Async::NotReady);
+            }
+        }
+    }
+}
+
+/// Middlewares start executor
+struct StartMiddlewares<S> {
+    fut: Option<Fut>,
+    _s: PhantomData<S>,
+}
+
+type Fut = Box<Future<Item = Option<HttpResponse>, Error = Error>>;
+
+impl<S: 'static> StartMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>) -> ComposeState<S> {
+        let len = info.mws.len();
+
+        loop {
+            if info.count == len {
+                let reply = info.router.handle(&info.req);
+                return WaitingResponse::init(info, reply);
+            } else {
+                let result = info.mws[info.count].start(&info.req);
+                match result {
+                    Ok(MiddlewareStarted::Done) => info.count += 1,
+                    Ok(MiddlewareStarted::Response(resp)) => {
+                        return RunMiddlewares::init(info, resp);
+                    }
+                    Ok(MiddlewareStarted::Future(fut)) => {
+                        return ComposeState::Starting(StartMiddlewares {
+                            fut: Some(fut),
+                            _s: PhantomData,
+                        });
+                    }
+                    Err(err) => {
+                        return RunMiddlewares::init(info, err.into());
+                    }
+                }
+            }
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        let len = info.mws.len();
+
+        'outer: loop {
+            match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => {
+                    return None;
+                }
+                Ok(Async::Ready(resp)) => {
+                    info.count += 1;
+
+                    if let Some(resp) = resp {
+                        return Some(RunMiddlewares::init(info, resp));
+                    }
+                    loop {
+                        if info.count == len {
+                            let reply = info.router.handle(&info.req);
+                            return Some(WaitingResponse::init(info, reply));
+                        } else {
+                            let result = info.mws[info.count].start(&info.req);
+                            match result {
+                                Ok(MiddlewareStarted::Done) => info.count += 1,
+                                Ok(MiddlewareStarted::Response(resp)) => {
+                                    return Some(RunMiddlewares::init(info, resp));
+                                }
+                                Ok(MiddlewareStarted::Future(fut)) => {
+                                    self.fut = Some(fut);
+                                    continue 'outer;
+                                }
+                                Err(err) => {
+                                    return Some(RunMiddlewares::init(info, err.into()));
+                                }
+                            }
+                        }
+                    }
+                }
+                Err(err) => {
+                    return Some(RunMiddlewares::init(info, err.into()));
+                }
+            }
+        }
+    }
+}
+
+// waiting for response
+struct WaitingResponse<S> {
+    fut: Box<Future<Item = HttpResponse, Error = Error>>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> WaitingResponse<S> {
+    #[inline]
+    fn init(
+        info: &mut ComposeInfo<S>, reply: AsyncResult<HttpResponse>,
+    ) -> ComposeState<S> {
+        match reply.into() {
+            AsyncResultItem::Ok(resp) => RunMiddlewares::init(info, resp),
+            AsyncResultItem::Err(err) => RunMiddlewares::init(info, err.into()),
+            AsyncResultItem::Future(fut) => ComposeState::Handler(WaitingResponse {
+                fut,
+                _s: PhantomData,
+            }),
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        match self.fut.poll() {
+            Ok(Async::NotReady) => None,
+            Ok(Async::Ready(resp)) => Some(RunMiddlewares::init(info, resp)),
+            Err(err) => Some(RunMiddlewares::init(info, err.into())),
+        }
+    }
+}
+
+/// Middlewares response executor
+struct RunMiddlewares<S> {
+    curr: usize,
+    fut: Option<Box<Future<Item = HttpResponse, Error = Error>>>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> RunMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>, mut resp: HttpResponse) -> ComposeState<S> {
+        let mut curr = 0;
+        let len = info.mws.len();
+
+        loop {
+            let state = info.mws[curr].response(&info.req, resp);
+            resp = match state {
+                Err(err) => {
+                    info.count = curr + 1;
+                    return FinishingMiddlewares::init(info, err.into());
+                }
+                Ok(MiddlewareResponse::Done(r)) => {
+                    curr += 1;
+                    if curr == len {
+                        return FinishingMiddlewares::init(info, r);
+                    } else {
+                        r
+                    }
+                }
+                Ok(MiddlewareResponse::Future(fut)) => {
+                    return ComposeState::RunMiddlewares(RunMiddlewares {
+                        curr,
+                        fut: Some(fut),
+                        _s: PhantomData,
+                    });
+                }
+            };
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        let len = info.mws.len();
+
+        loop {
+            // poll latest fut
+            let mut resp = match self.fut.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => return None,
+                Ok(Async::Ready(resp)) => {
+                    self.curr += 1;
+                    resp
+                }
+                Err(err) => return Some(FinishingMiddlewares::init(info, err.into())),
+            };
+
+            loop {
+                if self.curr == len {
+                    return Some(FinishingMiddlewares::init(info, resp));
+                } else {
+                    let state = info.mws[self.curr].response(&info.req, resp);
+                    match state {
+                        Err(err) => {
+                            return Some(FinishingMiddlewares::init(info, err.into()))
+                        }
+                        Ok(MiddlewareResponse::Done(r)) => {
+                            self.curr += 1;
+                            resp = r
+                        }
+                        Ok(MiddlewareResponse::Future(fut)) => {
+                            self.fut = Some(fut);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+/// Middlewares start executor
+struct FinishingMiddlewares<S> {
+    resp: Option<HttpResponse>,
+    fut: Option<Box<Future<Item = (), Error = Error>>>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> FinishingMiddlewares<S> {
+    fn init(info: &mut ComposeInfo<S>, resp: HttpResponse) -> ComposeState<S> {
+        if info.count == 0 {
+            Response::init(resp)
+        } else {
+            let mut state = FinishingMiddlewares {
+                resp: Some(resp),
+                fut: None,
+                _s: PhantomData,
+            };
+            if let Some(st) = state.poll(info) {
+                st
+            } else {
+                ComposeState::Finishing(state)
+            }
+        }
+    }
+
+    fn poll(&mut self, info: &mut ComposeInfo<S>) -> Option<ComposeState<S>> {
+        loop {
+            // poll latest fut
+            let not_ready = if let Some(ref mut fut) = self.fut {
+                match fut.poll() {
+                    Ok(Async::NotReady) => true,
+                    Ok(Async::Ready(())) => false,
+                    Err(err) => {
+                        error!("Middleware finish error: {}", err);
+                        false
+                    }
+                }
+            } else {
+                false
+            };
+            if not_ready {
+                return None;
+            }
+            self.fut = None;
+            if info.count == 0 {
+                return Some(Response::init(self.resp.take().unwrap()));
+            }
+
+            info.count -= 1;
+            let state = info.mws[info.count as usize]
+                .finish(&info.req, self.resp.as_ref().unwrap());
+            match state {
+                MiddlewareFinished::Done => {
+                    if info.count == 0 {
+                        return Some(Response::init(self.resp.take().unwrap()));
+                    }
+                }
+                MiddlewareFinished::Future(fut) => {
+                    self.fut = Some(fut);
+                }
+            }
+        }
+    }
+}
+
+struct Response<S> {
+    resp: Option<HttpResponse>,
+    _s: PhantomData<S>,
+}
+
+impl<S: 'static> Response<S> {
+    fn init(resp: HttpResponse) -> ComposeState<S> {
+        ComposeState::Completed(Response {
+            resp: Some(resp),
+            _s: PhantomData,
+        })
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use bytes::Bytes;
+
+    use application::App;
+    use body::Body;
+    use http::{Method, StatusCode};
+    use httprequest::HttpRequest;
+    use httpresponse::HttpResponse;
+    use pred;
+    use test::TestRequest;
+
+    #[test]
+    fn test_scope() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_scope_root() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope
+                    .resource("", |r| r.f(|_| HttpResponse::Ok()))
+                    .resource("/", |r| r.f(|_| HttpResponse::Created()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+    }
+
+    #[test]
+    fn test_scope_root2() {
+        let app = App::new()
+            .scope("/app/", |scope| {
+                scope.resource("", |r| r.f(|_| HttpResponse::Ok()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_scope_root3() {
+        let app = App::new()
+            .scope("/app/", |scope| {
+                scope.resource("/", |r| r.f(|_| HttpResponse::Ok()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_scope_route() {
+        let app = App::new()
+            .scope("app", |scope| {
+                scope
+                    .route("/path1", Method::GET, |_: HttpRequest<_>| {
+                        HttpResponse::Ok()
+                    })
+                    .route("/path1", Method::DELETE, |_: HttpRequest<_>| {
+                        HttpResponse::Ok()
+                    })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/path1")
+            .method(Method::DELETE)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/path1")
+            .method(Method::POST)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_scope_filter() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope
+                    .filter(pred::Get())
+                    .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/path1")
+            .method(Method::POST)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/path1")
+            .method(Method::GET)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_scope_variable_segment() {
+        let app = App::new()
+            .scope("/ab-{project}", |scope| {
+                scope.resource("/path1", |r| {
+                    r.f(|r| {
+                        HttpResponse::Ok()
+                            .body(format!("project: {}", &r.match_info()["project"]))
+                    })
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/ab-project1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        match resp.as_msg().body() {
+            &Body::Binary(ref b) => {
+                let bytes: Bytes = b.clone().into();
+                assert_eq!(bytes, Bytes::from_static(b"project: project1"));
+            }
+            _ => panic!(),
+        }
+
+        let req = TestRequest::with_uri("/aa-project1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_scope_with_state() {
+        struct State;
+
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.with_state("/t1", State, |scope| {
+                    scope.resource("/path1", |r| r.f(|_| HttpResponse::Created()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+    }
+
+    #[test]
+    fn test_scope_with_state_root() {
+        struct State;
+
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.with_state("/t1", State, |scope| {
+                    scope
+                        .resource("", |r| r.f(|_| HttpResponse::Ok()))
+                        .resource("/", |r| r.f(|_| HttpResponse::Created()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/t1/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+    }
+
+    #[test]
+    fn test_scope_with_state_root2() {
+        struct State;
+
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.with_state("/t1/", State, |scope| {
+                    scope.resource("", |r| r.f(|_| HttpResponse::Ok()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/t1/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_scope_with_state_root3() {
+        struct State;
+
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.with_state("/t1/", State, |scope| {
+                    scope.resource("/", |r| r.f(|_| HttpResponse::Ok()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/t1/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_scope_with_state_filter() {
+        struct State;
+
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.with_state("/t1", State, |scope| {
+                    scope
+                        .filter(pred::Get())
+                        .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1/path1")
+            .method(Method::POST)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/t1/path1")
+            .method(Method::GET)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_nested_scope() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.nested("/t1", |scope| {
+                    scope.resource("/path1", |r| r.f(|_| HttpResponse::Created()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+    }
+
+    #[test]
+    fn test_nested_scope_root() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.nested("/t1", |scope| {
+                    scope
+                        .resource("", |r| r.f(|_| HttpResponse::Ok()))
+                        .resource("/", |r| r.f(|_| HttpResponse::Created()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+
+        let req = TestRequest::with_uri("/app/t1/").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+    }
+
+    #[test]
+    fn test_nested_scope_filter() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.nested("/t1", |scope| {
+                    scope
+                        .filter(pred::Get())
+                        .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/t1/path1")
+            .method(Method::POST)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+
+        let req = TestRequest::with_uri("/app/t1/path1")
+            .method(Method::GET)
+            .request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::OK);
+    }
+
+    #[test]
+    fn test_nested_scope_with_variable_segment() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.nested("/{project_id}", |scope| {
+                    scope.resource("/path1", |r| {
+                        r.f(|r| {
+                            HttpResponse::Created().body(format!(
+                                "project: {}",
+                                &r.match_info()["project_id"]
+                            ))
+                        })
+                    })
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/project_1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+
+        match resp.as_msg().body() {
+            &Body::Binary(ref b) => {
+                let bytes: Bytes = b.clone().into();
+                assert_eq!(bytes, Bytes::from_static(b"project: project_1"));
+            }
+            _ => panic!(),
+        }
+    }
+
+    #[test]
+    fn test_nested2_scope_with_variable_segment() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope.nested("/{project}", |scope| {
+                    scope.nested("/{id}", |scope| {
+                        scope.resource("/path1", |r| {
+                            r.f(|r| {
+                                HttpResponse::Created().body(format!(
+                                    "project: {} - {}",
+                                    &r.match_info()["project"],
+                                    &r.match_info()["id"],
+                                ))
+                            })
+                        })
+                    })
+                })
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/test/1/path1").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::CREATED);
+
+        match resp.as_msg().body() {
+            &Body::Binary(ref b) => {
+                let bytes: Bytes = b.clone().into();
+                assert_eq!(bytes, Bytes::from_static(b"project: test - 1"));
+            }
+            _ => panic!(),
+        }
+
+        let req = TestRequest::with_uri("/app/test/1/path2").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_default_resource() {
+        let app = App::new()
+            .scope("/app", |scope| {
+                scope
+                    .resource("/path1", |r| r.f(|_| HttpResponse::Ok()))
+                    .default_resource(|r| r.f(|_| HttpResponse::BadRequest()))
+            })
+            .finish();
+
+        let req = TestRequest::with_uri("/app/path2").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::BAD_REQUEST);
+
+        let req = TestRequest::with_uri("/path2").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
+    }
+
+    #[test]
+    fn test_default_resource_propagation() {
+        let app = App::new()
+            .scope("/app1", |scope| {
+                scope.default_resource(|r| r.f(|_| HttpResponse::BadRequest()))
+            })
+            .scope("/app2", |scope| scope)
+            .default_resource(|r| r.f(|_| HttpResponse::MethodNotAllowed()))
+            .finish();
+
+        let req = TestRequest::with_uri("/non-exist").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::METHOD_NOT_ALLOWED);
+
+        let req = TestRequest::with_uri("/app1/non-exist").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::BAD_REQUEST);
+
+        let req = TestRequest::with_uri("/app2/non-exist").request();
+        let resp = app.run(req);
+        assert_eq!(resp.as_msg().status(), StatusCode::METHOD_NOT_ALLOWED);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/de.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/de.rs.html new file mode 100644 index 0000000..bb8450f --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/de.rs.html @@ -0,0 +1,613 @@ +de.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+
+//! Deserialization support for the `application/x-www-form-urlencoded` format.
+
+use serde::de::Error as de_Error;
+use serde::de::{
+    self, DeserializeSeed, EnumAccess, IntoDeserializer, VariantAccess, Visitor,
+};
+
+use serde::de::value::MapDeserializer;
+use std::borrow::Cow;
+use std::io::Read;
+use url::form_urlencoded::parse;
+use url::form_urlencoded::Parse as UrlEncodedParse;
+
+#[doc(inline)]
+pub use serde::de::value::Error;
+
+/// Deserializes a `application/x-wwww-url-encoded` value from a `&[u8]`.
+///
+/// ```ignore
+/// let meal = vec![
+///     ("bread".to_owned(), "baguette".to_owned()),
+///     ("cheese".to_owned(), "comté".to_owned()),
+///     ("meat".to_owned(), "ham".to_owned()),
+///     ("fat".to_owned(), "butter".to_owned()),
+/// ];
+///
+/// assert_eq!(
+///     serde_urlencoded::from_bytes::<Vec<(String, String)>>(
+///         b"bread=baguette&cheese=comt%C3%A9&meat=ham&fat=butter"),
+///     Ok(meal));
+/// ```
+pub fn from_bytes<'de, T>(input: &'de [u8]) -> Result<T, Error>
+where
+    T: de::Deserialize<'de>,
+{
+    T::deserialize(Deserializer::new(parse(input)))
+}
+
+/// Deserializes a `application/x-wwww-url-encoded` value from a `&str`.
+///
+/// ```ignore
+/// let meal = vec![
+///     ("bread".to_owned(), "baguette".to_owned()),
+///     ("cheese".to_owned(), "comté".to_owned()),
+///     ("meat".to_owned(), "ham".to_owned()),
+///     ("fat".to_owned(), "butter".to_owned()),
+/// ];
+///
+/// assert_eq!(
+///     serde_urlencoded::from_str::<Vec<(String, String)>>(
+///         "bread=baguette&cheese=comt%C3%A9&meat=ham&fat=butter"),
+///     Ok(meal));
+/// ```
+pub fn from_str<'de, T>(input: &'de str) -> Result<T, Error>
+where
+    T: de::Deserialize<'de>,
+{
+    from_bytes(input.as_bytes())
+}
+
+#[allow(dead_code)]
+/// Convenience function that reads all bytes from `reader` and deserializes
+/// them with `from_bytes`.
+pub fn from_reader<T, R>(mut reader: R) -> Result<T, Error>
+where
+    T: de::DeserializeOwned,
+    R: Read,
+{
+    let mut buf = vec![];
+    reader
+        .read_to_end(&mut buf)
+        .map_err(|e| de::Error::custom(format_args!("could not read input: {}", e)))?;
+    from_bytes(&buf)
+}
+
+/// A deserializer for the `application/x-www-form-urlencoded` format.
+///
+/// * Supported top-level outputs are structs, maps and sequences of pairs,
+///   with or without a given length.
+///
+/// * Main `deserialize` methods defers to `deserialize_map`.
+///
+/// * Everything else but `deserialize_seq` and `deserialize_seq_fixed_size`
+///   defers to `deserialize`.
+pub struct Deserializer<'de> {
+    inner: MapDeserializer<'de, PartIterator<'de>, Error>,
+}
+
+impl<'de> Deserializer<'de> {
+    /// Returns a new `Deserializer`.
+    pub fn new(parser: UrlEncodedParse<'de>) -> Self {
+        Deserializer {
+            inner: MapDeserializer::new(PartIterator(parser)),
+        }
+    }
+}
+
+impl<'de> de::Deserializer<'de> for Deserializer<'de> {
+    type Error = Error;
+
+    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        self.deserialize_map(visitor)
+    }
+
+    fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        visitor.visit_map(self.inner)
+    }
+
+    fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        visitor.visit_seq(self.inner)
+    }
+
+    fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        self.inner.end()?;
+        visitor.visit_unit()
+    }
+
+    forward_to_deserialize_any! {
+        bool
+        u8
+        u16
+        u32
+        u64
+        i8
+        i16
+        i32
+        i64
+        f32
+        f64
+        char
+        str
+        string
+        option
+        bytes
+        byte_buf
+        unit_struct
+        newtype_struct
+        tuple_struct
+        struct
+        identifier
+        tuple
+        enum
+        ignored_any
+    }
+}
+
+struct PartIterator<'de>(UrlEncodedParse<'de>);
+
+impl<'de> Iterator for PartIterator<'de> {
+    type Item = (Part<'de>, Part<'de>);
+
+    fn next(&mut self) -> Option<Self::Item> {
+        self.0.next().map(|(k, v)| (Part(k), Part(v)))
+    }
+}
+
+struct Part<'de>(Cow<'de, str>);
+
+impl<'de> IntoDeserializer<'de> for Part<'de> {
+    type Deserializer = Self;
+
+    fn into_deserializer(self) -> Self::Deserializer {
+        self
+    }
+}
+
+macro_rules! forward_parsed_value {
+    ($($ty:ident => $method:ident,)*) => {
+        $(
+            fn $method<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+                where V: de::Visitor<'de>
+            {
+                match self.0.parse::<$ty>() {
+                    Ok(val) => val.into_deserializer().$method(visitor),
+                    Err(e) => Err(de::Error::custom(e))
+                }
+            }
+        )*
+    }
+}
+
+impl<'de> de::Deserializer<'de> for Part<'de> {
+    type Error = Error;
+
+    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        self.0.into_deserializer().deserialize_any(visitor)
+    }
+
+    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        visitor.visit_some(self)
+    }
+
+    fn deserialize_enum<V>(
+        self, _name: &'static str, _variants: &'static [&'static str], visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: de::Visitor<'de>,
+    {
+        visitor.visit_enum(ValueEnumAccess { value: self.0 })
+    }
+
+    forward_to_deserialize_any! {
+        char
+        str
+        string
+        unit
+        bytes
+        byte_buf
+        unit_struct
+        newtype_struct
+        tuple_struct
+        struct
+        identifier
+        tuple
+        ignored_any
+        seq
+        map
+    }
+
+    forward_parsed_value! {
+        bool => deserialize_bool,
+        u8 => deserialize_u8,
+        u16 => deserialize_u16,
+        u32 => deserialize_u32,
+        u64 => deserialize_u64,
+        i8 => deserialize_i8,
+        i16 => deserialize_i16,
+        i32 => deserialize_i32,
+        i64 => deserialize_i64,
+        f32 => deserialize_f32,
+        f64 => deserialize_f64,
+    }
+}
+
+/// Provides access to a keyword which can be deserialized into an enum variant. The enum variant
+/// must be a unit variant, otherwise deserialization will fail.
+struct ValueEnumAccess<'de> {
+    value: Cow<'de, str>,
+}
+
+impl<'de> EnumAccess<'de> for ValueEnumAccess<'de> {
+    type Error = Error;
+    type Variant = UnitOnlyVariantAccess;
+
+    fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
+    where
+        V: DeserializeSeed<'de>,
+    {
+        let variant = seed.deserialize(self.value.into_deserializer())?;
+        Ok((variant, UnitOnlyVariantAccess))
+    }
+}
+
+/// A visitor for deserializing the contents of the enum variant. As we only support
+/// `unit_variant`, all other variant types will return an error.
+struct UnitOnlyVariantAccess;
+
+impl<'de> VariantAccess<'de> for UnitOnlyVariantAccess {
+    type Error = Error;
+
+    fn unit_variant(self) -> Result<(), Self::Error> {
+        Ok(())
+    }
+
+    fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value, Self::Error>
+    where
+        T: DeserializeSeed<'de>,
+    {
+        Err(Error::custom("expected unit variant"))
+    }
+
+    fn tuple_variant<V>(self, _len: usize, _visitor: V) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(Error::custom("expected unit variant"))
+    }
+
+    fn struct_variant<V>(
+        self, _fields: &'static [&'static str], _visitor: V,
+    ) -> Result<V::Value, Self::Error>
+    where
+        V: Visitor<'de>,
+    {
+        Err(Error::custom("expected unit variant"))
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/mod.rs.html new file mode 100644 index 0000000..f1a7e52 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/mod.rs.html @@ -0,0 +1,245 @@ +mod.rs.html -- source
  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
+
+//! `x-www-form-urlencoded` meets Serde
+
+extern crate dtoa;
+extern crate itoa;
+
+pub mod de;
+pub mod ser;
+
+#[doc(inline)]
+pub use self::de::{from_bytes, from_reader, from_str, Deserializer};
+#[doc(inline)]
+pub use self::ser::{to_string, Serializer};
+
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn deserialize_bytes() {
+        let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
+
+        assert_eq!(super::from_bytes(b"first=23&last=42"), Ok(result));
+    }
+
+    #[test]
+    fn deserialize_str() {
+        let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
+
+        assert_eq!(super::from_str("first=23&last=42"), Ok(result));
+    }
+
+    #[test]
+    fn deserialize_reader() {
+        let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
+
+        assert_eq!(super::from_reader(b"first=23&last=42" as &[_]), Ok(result));
+    }
+
+    #[test]
+    fn deserialize_option() {
+        let result = vec![
+            ("first".to_owned(), Some(23)),
+            ("last".to_owned(), Some(42)),
+        ];
+        assert_eq!(super::from_str("first=23&last=42"), Ok(result));
+    }
+
+    #[test]
+    fn deserialize_unit() {
+        assert_eq!(super::from_str(""), Ok(()));
+        assert_eq!(super::from_str("&"), Ok(()));
+        assert_eq!(super::from_str("&&"), Ok(()));
+        assert!(super::from_str::<()>("first=23").is_err());
+    }
+
+    #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
+    enum X {
+        A,
+        B,
+        C,
+    }
+
+    #[test]
+    fn deserialize_unit_enum() {
+        let result = vec![
+            ("one".to_owned(), X::A),
+            ("two".to_owned(), X::B),
+            ("three".to_owned(), X::C),
+        ];
+
+        assert_eq!(super::from_str("one=A&two=B&three=C"), Ok(result));
+    }
+
+    #[test]
+    fn serialize_option_map_int() {
+        let params = &[("first", Some(23)), ("middle", None), ("last", Some(42))];
+
+        assert_eq!(super::to_string(params), Ok("first=23&last=42".to_owned()));
+    }
+
+    #[test]
+    fn serialize_option_map_string() {
+        let params = &[
+            ("first", Some("hello")),
+            ("middle", None),
+            ("last", Some("world")),
+        ];
+
+        assert_eq!(
+            super::to_string(params),
+            Ok("first=hello&last=world".to_owned())
+        );
+    }
+
+    #[test]
+    fn serialize_option_map_bool() {
+        let params = &[("one", Some(true)), ("two", Some(false))];
+
+        assert_eq!(
+            super::to_string(params),
+            Ok("one=true&two=false".to_owned())
+        );
+    }
+
+    #[test]
+    fn serialize_map_bool() {
+        let params = &[("one", true), ("two", false)];
+
+        assert_eq!(
+            super::to_string(params),
+            Ok("one=true&two=false".to_owned())
+        );
+    }
+
+    #[test]
+    fn serialize_unit_enum() {
+        let params = &[("one", X::A), ("two", X::B), ("three", X::C)];
+        assert_eq!(
+            super::to_string(params),
+            Ok("one=A&two=B&three=C".to_owned())
+        );
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/key.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/key.rs.html new file mode 100644 index 0000000..8be1d18 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/key.rs.html @@ -0,0 +1,151 @@ +key.rs.html -- source
 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
+
+use super::super::ser::part::Sink;
+use super::super::ser::Error;
+use serde::Serialize;
+use std::borrow::Cow;
+use std::ops::Deref;
+
+pub enum Key<'key> {
+    Static(&'static str),
+    Dynamic(Cow<'key, str>),
+}
+
+impl<'key> Deref for Key<'key> {
+    type Target = str;
+
+    fn deref(&self) -> &str {
+        match *self {
+            Key::Static(key) => key,
+            Key::Dynamic(ref key) => key,
+        }
+    }
+}
+
+impl<'key> From<Key<'key>> for Cow<'static, str> {
+    fn from(key: Key<'key>) -> Self {
+        match key {
+            Key::Static(key) => key.into(),
+            Key::Dynamic(key) => key.into_owned().into(),
+        }
+    }
+}
+
+pub struct KeySink<End> {
+    end: End,
+}
+
+impl<End, Ok> KeySink<End>
+where
+    End: for<'key> FnOnce(Key<'key>) -> Result<Ok, Error>,
+{
+    pub fn new(end: End) -> Self {
+        KeySink { end }
+    }
+}
+
+impl<End, Ok> Sink for KeySink<End>
+where
+    End: for<'key> FnOnce(Key<'key>) -> Result<Ok, Error>,
+{
+    type Ok = Ok;
+
+    fn serialize_static_str(self, value: &'static str) -> Result<Ok, Error> {
+        (self.end)(Key::Static(value))
+    }
+
+    fn serialize_str(self, value: &str) -> Result<Ok, Error> {
+        (self.end)(Key::Dynamic(value.into()))
+    }
+
+    fn serialize_string(self, value: String) -> Result<Ok, Error> {
+        (self.end)(Key::Dynamic(value.into()))
+    }
+
+    fn serialize_none(self) -> Result<Ok, Error> {
+        Err(self.unsupported())
+    }
+
+    fn serialize_some<T: ?Sized + Serialize>(self, _value: &T) -> Result<Ok, Error> {
+        Err(self.unsupported())
+    }
+
+    fn unsupported(self) -> Error {
+        Error::Custom("unsupported key".into())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/mod.rs.html new file mode 100644 index 0000000..c1e4c99 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/mod.rs.html @@ -0,0 +1,983 @@ +mod.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+
+//! Serialization support for the `application/x-www-form-urlencoded` format.
+
+mod key;
+mod pair;
+mod part;
+mod value;
+
+use serde::ser;
+use std::borrow::Cow;
+use std::error;
+use std::fmt;
+use std::str;
+use url::form_urlencoded::Serializer as UrlEncodedSerializer;
+use url::form_urlencoded::Target as UrlEncodedTarget;
+
+/// Serializes a value into a `application/x-wwww-url-encoded` `String` buffer.
+///
+/// ```ignore
+/// let meal = &[
+///     ("bread", "baguette"),
+///     ("cheese", "comté"),
+///     ("meat", "ham"),
+///     ("fat", "butter"),
+/// ];
+///
+/// assert_eq!(
+///     serde_urlencoded::to_string(meal),
+///     Ok("bread=baguette&cheese=comt%C3%A9&meat=ham&fat=butter".to_owned()));
+/// ```
+pub fn to_string<T: ser::Serialize>(input: T) -> Result<String, Error> {
+    let mut urlencoder = UrlEncodedSerializer::new("".to_owned());
+    input.serialize(Serializer::new(&mut urlencoder))?;
+    Ok(urlencoder.finish())
+}
+
+/// A serializer for the `application/x-www-form-urlencoded` format.
+///
+/// * Supported top-level inputs are structs, maps and sequences of pairs,
+///   with or without a given length.
+///
+/// * Supported keys and values are integers, bytes (if convertible to strings),
+///   unit structs and unit variants.
+///
+/// * Newtype structs defer to their inner values.
+pub struct Serializer<'output, Target: 'output + UrlEncodedTarget> {
+    urlencoder: &'output mut UrlEncodedSerializer<Target>,
+}
+
+impl<'output, Target: 'output + UrlEncodedTarget> Serializer<'output, Target> {
+    /// Returns a new `Serializer`.
+    pub fn new(urlencoder: &'output mut UrlEncodedSerializer<Target>) -> Self {
+        Serializer { urlencoder }
+    }
+}
+
+/// Errors returned during serializing to `application/x-www-form-urlencoded`.
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum Error {
+    Custom(Cow<'static, str>),
+    Utf8(str::Utf8Error),
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            Error::Custom(ref msg) => msg.fmt(f),
+            Error::Utf8(ref err) => write!(f, "invalid UTF-8: {}", err),
+        }
+    }
+}
+
+impl error::Error for Error {
+    fn description(&self) -> &str {
+        match *self {
+            Error::Custom(ref msg) => msg,
+            Error::Utf8(ref err) => error::Error::description(err),
+        }
+    }
+
+    /// The lower-level cause of this error, in the case of a `Utf8` error.
+    fn cause(&self) -> Option<&error::Error> {
+        match *self {
+            Error::Custom(_) => None,
+            Error::Utf8(ref err) => Some(err),
+        }
+    }
+}
+
+impl ser::Error for Error {
+    fn custom<T: fmt::Display>(msg: T) -> Self {
+        Error::Custom(format!("{}", msg).into())
+    }
+}
+
+/// Sequence serializer.
+pub struct SeqSerializer<'output, Target: 'output + UrlEncodedTarget> {
+    urlencoder: &'output mut UrlEncodedSerializer<Target>,
+}
+
+/// Tuple serializer.
+///
+/// Mostly used for arrays.
+pub struct TupleSerializer<'output, Target: 'output + UrlEncodedTarget> {
+    urlencoder: &'output mut UrlEncodedSerializer<Target>,
+}
+
+/// Tuple struct serializer.
+///
+/// Never instantiated, tuple structs are not supported.
+pub struct TupleStructSerializer<'output, T: 'output + UrlEncodedTarget> {
+    inner: ser::Impossible<&'output mut UrlEncodedSerializer<T>, Error>,
+}
+
+/// Tuple variant serializer.
+///
+/// Never instantiated, tuple variants are not supported.
+pub struct TupleVariantSerializer<'output, T: 'output + UrlEncodedTarget> {
+    inner: ser::Impossible<&'output mut UrlEncodedSerializer<T>, Error>,
+}
+
+/// Map serializer.
+pub struct MapSerializer<'output, Target: 'output + UrlEncodedTarget> {
+    urlencoder: &'output mut UrlEncodedSerializer<Target>,
+    key: Option<Cow<'static, str>>,
+}
+
+/// Struct serializer.
+pub struct StructSerializer<'output, Target: 'output + UrlEncodedTarget> {
+    urlencoder: &'output mut UrlEncodedSerializer<Target>,
+}
+
+/// Struct variant serializer.
+///
+/// Never instantiated, struct variants are not supported.
+pub struct StructVariantSerializer<'output, T: 'output + UrlEncodedTarget> {
+    inner: ser::Impossible<&'output mut UrlEncodedSerializer<T>, Error>,
+}
+
+impl<'output, Target> ser::Serializer for Serializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+    type SerializeSeq = SeqSerializer<'output, Target>;
+    type SerializeTuple = TupleSerializer<'output, Target>;
+    type SerializeTupleStruct = TupleStructSerializer<'output, Target>;
+    type SerializeTupleVariant = TupleVariantSerializer<'output, Target>;
+    type SerializeMap = MapSerializer<'output, Target>;
+    type SerializeStruct = StructSerializer<'output, Target>;
+    type SerializeStructVariant = StructVariantSerializer<'output, Target>;
+
+    /// Returns an error.
+    fn serialize_bool(self, _v: bool) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_i8(self, _v: i8) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_i16(self, _v: i16) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_i32(self, _v: i32) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_i64(self, _v: i64) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_u8(self, _v: u8) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_u16(self, _v: u16) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_u32(self, _v: u32) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_u64(self, _v: u64) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_f32(self, _v: f32) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_f64(self, _v: f64) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_char(self, _v: char) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_str(self, _value: &str) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_bytes(self, _value: &[u8]) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_unit(self) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_unit_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+    ) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Serializes the inner value, ignoring the newtype name.
+    fn serialize_newtype_struct<T: ?Sized + ser::Serialize>(
+        self, _name: &'static str, value: &T,
+    ) -> Result<Self::Ok, Error> {
+        value.serialize(self)
+    }
+
+    /// Returns an error.
+    fn serialize_newtype_variant<T: ?Sized + ser::Serialize>(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _value: &T,
+    ) -> Result<Self::Ok, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns `Ok`.
+    fn serialize_none(self) -> Result<Self::Ok, Error> {
+        Ok(self.urlencoder)
+    }
+
+    /// Serializes the given value.
+    fn serialize_some<T: ?Sized + ser::Serialize>(
+        self, value: &T,
+    ) -> Result<Self::Ok, Error> {
+        value.serialize(self)
+    }
+
+    /// Serialize a sequence, given length (if any) is ignored.
+    fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Error> {
+        Ok(SeqSerializer {
+            urlencoder: self.urlencoder,
+        })
+    }
+
+    /// Returns an error.
+    fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Error> {
+        Ok(TupleSerializer {
+            urlencoder: self.urlencoder,
+        })
+    }
+
+    /// Returns an error.
+    fn serialize_tuple_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeTupleStruct, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Returns an error.
+    fn serialize_tuple_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeTupleVariant, Error> {
+        Err(Error::top_level())
+    }
+
+    /// Serializes a map, given length is ignored.
+    fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Error> {
+        Ok(MapSerializer {
+            urlencoder: self.urlencoder,
+            key: None,
+        })
+    }
+
+    /// Serializes a struct, given length is ignored.
+    fn serialize_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeStruct, Error> {
+        Ok(StructSerializer {
+            urlencoder: self.urlencoder,
+        })
+    }
+
+    /// Returns an error.
+    fn serialize_struct_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeStructVariant, Error> {
+        Err(Error::top_level())
+    }
+}
+
+impl<'output, Target> ser::SerializeSeq for SeqSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_element<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        value.serialize(pair::PairSerializer::new(self.urlencoder))
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        Ok(self.urlencoder)
+    }
+}
+
+impl<'output, Target> ser::SerializeTuple for TupleSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_element<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        value.serialize(pair::PairSerializer::new(self.urlencoder))
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        Ok(self.urlencoder)
+    }
+}
+
+impl<'output, Target> ser::SerializeTupleStruct
+    for TupleStructSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_field<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        self.inner.serialize_field(value)
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        self.inner.end()
+    }
+}
+
+impl<'output, Target> ser::SerializeTupleVariant
+    for TupleVariantSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_field<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        self.inner.serialize_field(value)
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        self.inner.end()
+    }
+}
+
+impl<'output, Target> ser::SerializeMap for MapSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_entry<K: ?Sized + ser::Serialize, V: ?Sized + ser::Serialize>(
+        &mut self, key: &K, value: &V,
+    ) -> Result<(), Error> {
+        let key_sink = key::KeySink::new(|key| {
+            let value_sink = value::ValueSink::new(self.urlencoder, &key);
+            value.serialize(part::PartSerializer::new(value_sink))?;
+            self.key = None;
+            Ok(())
+        });
+        let entry_serializer = part::PartSerializer::new(key_sink);
+        key.serialize(entry_serializer)
+    }
+
+    fn serialize_key<T: ?Sized + ser::Serialize>(
+        &mut self, key: &T,
+    ) -> Result<(), Error> {
+        let key_sink = key::KeySink::new(|key| Ok(key.into()));
+        let key_serializer = part::PartSerializer::new(key_sink);
+        self.key = Some(key.serialize(key_serializer)?);
+        Ok(())
+    }
+
+    fn serialize_value<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        {
+            let key = self.key.as_ref().ok_or_else(Error::no_key)?;
+            let value_sink = value::ValueSink::new(self.urlencoder, &key);
+            value.serialize(part::PartSerializer::new(value_sink))?;
+        }
+        self.key = None;
+        Ok(())
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        Ok(self.urlencoder)
+    }
+}
+
+impl<'output, Target> ser::SerializeStruct for StructSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_field<T: ?Sized + ser::Serialize>(
+        &mut self, key: &'static str, value: &T,
+    ) -> Result<(), Error> {
+        let value_sink = value::ValueSink::new(self.urlencoder, key);
+        value.serialize(part::PartSerializer::new(value_sink))
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        Ok(self.urlencoder)
+    }
+}
+
+impl<'output, Target> ser::SerializeStructVariant
+    for StructVariantSerializer<'output, Target>
+where
+    Target: 'output + UrlEncodedTarget,
+{
+    type Ok = &'output mut UrlEncodedSerializer<Target>;
+    type Error = Error;
+
+    fn serialize_field<T: ?Sized + ser::Serialize>(
+        &mut self, key: &'static str, value: &T,
+    ) -> Result<(), Error> {
+        self.inner.serialize_field(key, value)
+    }
+
+    fn end(self) -> Result<Self::Ok, Error> {
+        self.inner.end()
+    }
+}
+
+impl Error {
+    fn top_level() -> Self {
+        let msg = "top-level serializer supports only maps and structs";
+        Error::Custom(msg.into())
+    }
+
+    fn no_key() -> Self {
+        let msg = "tried to serialize a value before serializing key";
+        Error::Custom(msg.into())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/pair.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/pair.rs.html new file mode 100644 index 0000000..9cbc3ab --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/pair.rs.html @@ -0,0 +1,481 @@ +pair.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+
+use super::super::ser::key::KeySink;
+use super::super::ser::part::PartSerializer;
+use super::super::ser::value::ValueSink;
+use super::super::ser::Error;
+use serde::ser;
+use std::borrow::Cow;
+use std::mem;
+use url::form_urlencoded::Serializer as UrlEncodedSerializer;
+use url::form_urlencoded::Target as UrlEncodedTarget;
+
+pub struct PairSerializer<'target, Target: 'target + UrlEncodedTarget> {
+    urlencoder: &'target mut UrlEncodedSerializer<Target>,
+    state: PairState,
+}
+
+impl<'target, Target> PairSerializer<'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    pub fn new(urlencoder: &'target mut UrlEncodedSerializer<Target>) -> Self {
+        PairSerializer {
+            urlencoder,
+            state: PairState::WaitingForKey,
+        }
+    }
+}
+
+impl<'target, Target> ser::Serializer for PairSerializer<'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    type Ok = ();
+    type Error = Error;
+    type SerializeSeq = ser::Impossible<(), Error>;
+    type SerializeTuple = Self;
+    type SerializeTupleStruct = ser::Impossible<(), Error>;
+    type SerializeTupleVariant = ser::Impossible<(), Error>;
+    type SerializeMap = ser::Impossible<(), Error>;
+    type SerializeStruct = ser::Impossible<(), Error>;
+    type SerializeStructVariant = ser::Impossible<(), Error>;
+
+    fn serialize_bool(self, _v: bool) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_i8(self, _v: i8) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_i16(self, _v: i16) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_i32(self, _v: i32) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_i64(self, _v: i64) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_u8(self, _v: u8) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_u16(self, _v: u16) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_u32(self, _v: u32) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_u64(self, _v: u64) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_f32(self, _v: f32) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_f64(self, _v: f64) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_char(self, _v: char) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_str(self, _value: &str) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_bytes(self, _value: &[u8]) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_unit(self) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_unit_struct(self, _name: &'static str) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_unit_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+    ) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_newtype_struct<T: ?Sized + ser::Serialize>(
+        self, _name: &'static str, value: &T,
+    ) -> Result<(), Error> {
+        value.serialize(self)
+    }
+
+    fn serialize_newtype_variant<T: ?Sized + ser::Serialize>(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _value: &T,
+    ) -> Result<(), Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_none(self) -> Result<(), Error> {
+        Ok(())
+    }
+
+    fn serialize_some<T: ?Sized + ser::Serialize>(self, value: &T) -> Result<(), Error> {
+        value.serialize(self)
+    }
+
+    fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_tuple(self, len: usize) -> Result<Self, Error> {
+        if len == 2 {
+            Ok(self)
+        } else {
+            Err(Error::unsupported_pair())
+        }
+    }
+
+    fn serialize_tuple_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeTupleStruct, Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_tuple_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeTupleVariant, Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeStruct, Error> {
+        Err(Error::unsupported_pair())
+    }
+
+    fn serialize_struct_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeStructVariant, Error> {
+        Err(Error::unsupported_pair())
+    }
+}
+
+impl<'target, Target> ser::SerializeTuple for PairSerializer<'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    type Ok = ();
+    type Error = Error;
+
+    fn serialize_element<T: ?Sized + ser::Serialize>(
+        &mut self, value: &T,
+    ) -> Result<(), Error> {
+        match mem::replace(&mut self.state, PairState::Done) {
+            PairState::WaitingForKey => {
+                let key_sink = KeySink::new(|key| Ok(key.into()));
+                let key_serializer = PartSerializer::new(key_sink);
+                self.state = PairState::WaitingForValue {
+                    key: value.serialize(key_serializer)?,
+                };
+                Ok(())
+            }
+            PairState::WaitingForValue { key } => {
+                let result = {
+                    let value_sink = ValueSink::new(self.urlencoder, &key);
+                    let value_serializer = PartSerializer::new(value_sink);
+                    value.serialize(value_serializer)
+                };
+                if result.is_ok() {
+                    self.state = PairState::Done;
+                } else {
+                    self.state = PairState::WaitingForValue { key };
+                }
+                result
+            }
+            PairState::Done => Err(Error::done()),
+        }
+    }
+
+    fn end(self) -> Result<(), Error> {
+        if let PairState::Done = self.state {
+            Ok(())
+        } else {
+            Err(Error::not_done())
+        }
+    }
+}
+
+enum PairState {
+    WaitingForKey,
+    WaitingForValue { key: Cow<'static, str> },
+    Done,
+}
+
+impl Error {
+    fn done() -> Self {
+        Error::Custom("this pair has already been serialized".into())
+    }
+
+    fn not_done() -> Self {
+        Error::Custom("this pair has not yet been serialized".into())
+    }
+
+    fn unsupported_pair() -> Self {
+        Error::Custom("unsupported pair".into())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/part.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/part.rs.html new file mode 100644 index 0000000..4c3d613 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/part.rs.html @@ -0,0 +1,405 @@ +part.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+
+use serde;
+
+use super::super::dtoa;
+use super::super::itoa;
+use super::super::ser::Error;
+use std::str;
+
+pub struct PartSerializer<S> {
+    sink: S,
+}
+
+impl<S: Sink> PartSerializer<S> {
+    pub fn new(sink: S) -> Self {
+        PartSerializer { sink }
+    }
+}
+
+pub trait Sink: Sized {
+    type Ok;
+
+    fn serialize_static_str(self, value: &'static str) -> Result<Self::Ok, Error>;
+
+    fn serialize_str(self, value: &str) -> Result<Self::Ok, Error>;
+    fn serialize_string(self, value: String) -> Result<Self::Ok, Error>;
+    fn serialize_none(self) -> Result<Self::Ok, Error>;
+
+    fn serialize_some<T: ?Sized + serde::ser::Serialize>(
+        self, value: &T,
+    ) -> Result<Self::Ok, Error>;
+
+    fn unsupported(self) -> Error;
+}
+
+impl<S: Sink> serde::ser::Serializer for PartSerializer<S> {
+    type Ok = S::Ok;
+    type Error = Error;
+    type SerializeSeq = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeTuple = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeTupleStruct = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeTupleVariant = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeMap = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeStruct = serde::ser::Impossible<S::Ok, Error>;
+    type SerializeStructVariant = serde::ser::Impossible<S::Ok, Error>;
+
+    fn serialize_bool(self, v: bool) -> Result<S::Ok, Error> {
+        self.sink
+            .serialize_static_str(if v { "true" } else { "false" })
+    }
+
+    fn serialize_i8(self, v: i8) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_i16(self, v: i16) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_i32(self, v: i32) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_i64(self, v: i64) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_u8(self, v: u8) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_u16(self, v: u16) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_u32(self, v: u32) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_u64(self, v: u64) -> Result<S::Ok, Error> {
+        self.serialize_integer(v)
+    }
+
+    fn serialize_f32(self, v: f32) -> Result<S::Ok, Error> {
+        self.serialize_floating(v)
+    }
+
+    fn serialize_f64(self, v: f64) -> Result<S::Ok, Error> {
+        self.serialize_floating(v)
+    }
+
+    fn serialize_char(self, v: char) -> Result<S::Ok, Error> {
+        self.sink.serialize_string(v.to_string())
+    }
+
+    fn serialize_str(self, value: &str) -> Result<S::Ok, Error> {
+        self.sink.serialize_str(value)
+    }
+
+    fn serialize_bytes(self, value: &[u8]) -> Result<S::Ok, Error> {
+        match str::from_utf8(value) {
+            Ok(value) => self.sink.serialize_str(value),
+            Err(err) => Err(Error::Utf8(err)),
+        }
+    }
+
+    fn serialize_unit(self) -> Result<S::Ok, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_unit_struct(self, name: &'static str) -> Result<S::Ok, Error> {
+        self.sink.serialize_static_str(name)
+    }
+
+    fn serialize_unit_variant(
+        self, _name: &'static str, _variant_index: u32, variant: &'static str,
+    ) -> Result<S::Ok, Error> {
+        self.sink.serialize_static_str(variant)
+    }
+
+    fn serialize_newtype_struct<T: ?Sized + serde::ser::Serialize>(
+        self, _name: &'static str, value: &T,
+    ) -> Result<S::Ok, Error> {
+        value.serialize(self)
+    }
+
+    fn serialize_newtype_variant<T: ?Sized + serde::ser::Serialize>(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _value: &T,
+    ) -> Result<S::Ok, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_none(self) -> Result<S::Ok, Error> {
+        self.sink.serialize_none()
+    }
+
+    fn serialize_some<T: ?Sized + serde::ser::Serialize>(
+        self, value: &T,
+    ) -> Result<S::Ok, Error> {
+        self.sink.serialize_some(value)
+    }
+
+    fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_tuple_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeTuple, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_tuple_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeTupleVariant, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_struct(
+        self, _name: &'static str, _len: usize,
+    ) -> Result<Self::SerializeStruct, Error> {
+        Err(self.sink.unsupported())
+    }
+
+    fn serialize_struct_variant(
+        self, _name: &'static str, _variant_index: u32, _variant: &'static str,
+        _len: usize,
+    ) -> Result<Self::SerializeStructVariant, Error> {
+        Err(self.sink.unsupported())
+    }
+}
+
+impl<S: Sink> PartSerializer<S> {
+    fn serialize_integer<I>(self, value: I) -> Result<S::Ok, Error>
+    where
+        I: itoa::Integer,
+    {
+        let mut buf = [b'\0'; 20];
+        let len = itoa::write(&mut buf[..], value).unwrap();
+        let part = unsafe { str::from_utf8_unchecked(&buf[0..len]) };
+        serde::ser::Serializer::serialize_str(self, part)
+    }
+
+    fn serialize_floating<F>(self, value: F) -> Result<S::Ok, Error>
+    where
+        F: dtoa::Floating,
+    {
+        let mut buf = [b'\0'; 24];
+        let len = dtoa::write(&mut buf[..], value).unwrap();
+        let part = unsafe { str::from_utf8_unchecked(&buf[0..len]) };
+        serde::ser::Serializer::serialize_str(self, part)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/value.rs.html b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/value.rs.html new file mode 100644 index 0000000..6be9c60 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/serde_urlencoded/ser/value.rs.html @@ -0,0 +1,121 @@ +value.rs.html -- source
 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
+
+use super::super::ser::part::{PartSerializer, Sink};
+use super::super::ser::Error;
+use serde::ser::Serialize;
+use std::str;
+use url::form_urlencoded::Serializer as UrlEncodedSerializer;
+use url::form_urlencoded::Target as UrlEncodedTarget;
+
+pub struct ValueSink<'key, 'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    urlencoder: &'target mut UrlEncodedSerializer<Target>,
+    key: &'key str,
+}
+
+impl<'key, 'target, Target> ValueSink<'key, 'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    pub fn new(
+        urlencoder: &'target mut UrlEncodedSerializer<Target>, key: &'key str,
+    ) -> Self {
+        ValueSink { urlencoder, key }
+    }
+}
+
+impl<'key, 'target, Target> Sink for ValueSink<'key, 'target, Target>
+where
+    Target: 'target + UrlEncodedTarget,
+{
+    type Ok = ();
+
+    fn serialize_str(self, value: &str) -> Result<(), Error> {
+        self.urlencoder.append_pair(self.key, value);
+        Ok(())
+    }
+
+    fn serialize_static_str(self, value: &'static str) -> Result<(), Error> {
+        self.serialize_str(value)
+    }
+
+    fn serialize_string(self, value: String) -> Result<(), Error> {
+        self.serialize_str(&value)
+    }
+
+    fn serialize_none(self) -> Result<Self::Ok, Error> {
+        Ok(())
+    }
+
+    fn serialize_some<T: ?Sized + Serialize>(
+        self, value: &T,
+    ) -> Result<Self::Ok, Error> {
+        value.serialize(PartSerializer::new(self))
+    }
+
+    fn unsupported(self) -> Error {
+        Error::Custom("unsupported value".into())
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/channel.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/channel.rs.html new file mode 100644 index 0000000..0e8f2a1 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/channel.rs.html @@ -0,0 +1,699 @@ +channel.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+
+use std::net::{Shutdown, SocketAddr};
+use std::rc::Rc;
+use std::{io, ptr, time};
+
+use bytes::{Buf, BufMut, Bytes, BytesMut};
+use futures::{Async, Future, Poll};
+use tokio_io::{AsyncRead, AsyncWrite};
+
+use super::settings::WorkerSettings;
+use super::{h1, h2, HttpHandler, IoStream};
+
+const HTTP2_PREFACE: [u8; 14] = *b"PRI * HTTP/2.0";
+
+enum HttpProtocol<T: IoStream, H: HttpHandler + 'static> {
+    H1(h1::Http1<T, H>),
+    H2(h2::Http2<T, H>),
+    Unknown(Rc<WorkerSettings<H>>, Option<SocketAddr>, T, BytesMut),
+}
+
+enum ProtocolKind {
+    Http1,
+    Http2,
+}
+
+#[doc(hidden)]
+pub struct HttpChannel<T, H>
+where
+    T: IoStream,
+    H: HttpHandler + 'static,
+{
+    proto: Option<HttpProtocol<T, H>>,
+    node: Option<Node<HttpChannel<T, H>>>,
+}
+
+impl<T, H> HttpChannel<T, H>
+where
+    T: IoStream,
+    H: HttpHandler + 'static,
+{
+    pub(crate) fn new(
+        settings: Rc<WorkerSettings<H>>, mut io: T, peer: Option<SocketAddr>,
+        http2: bool,
+    ) -> HttpChannel<T, H> {
+        settings.add_channel();
+        let _ = io.set_nodelay(true);
+
+        if http2 {
+            HttpChannel {
+                node: None,
+                proto: Some(HttpProtocol::H2(h2::Http2::new(
+                    settings,
+                    io,
+                    peer,
+                    Bytes::new(),
+                ))),
+            }
+        } else {
+            HttpChannel {
+                node: None,
+                proto: Some(HttpProtocol::Unknown(
+                    settings,
+                    peer,
+                    io,
+                    BytesMut::with_capacity(8192),
+                )),
+            }
+        }
+    }
+
+    fn shutdown(&mut self) {
+        match self.proto {
+            Some(HttpProtocol::H1(ref mut h1)) => {
+                let io = h1.io();
+                let _ = IoStream::set_linger(io, Some(time::Duration::new(0, 0)));
+                let _ = IoStream::shutdown(io, Shutdown::Both);
+            }
+            Some(HttpProtocol::H2(ref mut h2)) => h2.shutdown(),
+            _ => (),
+        }
+    }
+}
+
+impl<T, H> Future for HttpChannel<T, H>
+where
+    T: IoStream,
+    H: HttpHandler + 'static,
+{
+    type Item = ();
+    type Error = ();
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if self.node.is_some() {
+            let el = self as *mut _;
+            self.node = Some(Node::new(el));
+            let _ = match self.proto {
+                Some(HttpProtocol::H1(ref mut h1)) => {
+                    self.node.as_mut().map(|n| h1.settings().head().insert(n))
+                }
+                Some(HttpProtocol::H2(ref mut h2)) => {
+                    self.node.as_mut().map(|n| h2.settings().head().insert(n))
+                }
+                Some(HttpProtocol::Unknown(ref mut settings, _, _, _)) => {
+                    self.node.as_mut().map(|n| settings.head().insert(n))
+                }
+                None => unreachable!(),
+            };
+        }
+
+        let kind = match self.proto {
+            Some(HttpProtocol::H1(ref mut h1)) => {
+                let result = h1.poll();
+                match result {
+                    Ok(Async::Ready(())) | Err(_) => {
+                        h1.settings().remove_channel();
+                        if let Some(n) = self.node.as_mut() {
+                            n.remove()
+                        };
+                    }
+                    _ => (),
+                }
+                return result;
+            }
+            Some(HttpProtocol::H2(ref mut h2)) => {
+                let result = h2.poll();
+                match result {
+                    Ok(Async::Ready(())) | Err(_) => {
+                        h2.settings().remove_channel();
+                        if let Some(n) = self.node.as_mut() {
+                            n.remove()
+                        };
+                    }
+                    _ => (),
+                }
+                return result;
+            }
+            Some(HttpProtocol::Unknown(
+                ref mut settings,
+                _,
+                ref mut io,
+                ref mut buf,
+            )) => {
+                match io.read_available(buf) {
+                    Ok(Async::Ready(true)) | Err(_) => {
+                        debug!("Ignored premature client disconnection");
+                        settings.remove_channel();
+                        if let Some(n) = self.node.as_mut() {
+                            n.remove()
+                        };
+                        return Err(());
+                    }
+                    _ => (),
+                }
+
+                if buf.len() >= 14 {
+                    if buf[..14] == HTTP2_PREFACE[..] {
+                        ProtocolKind::Http2
+                    } else {
+                        ProtocolKind::Http1
+                    }
+                } else {
+                    return Ok(Async::NotReady);
+                }
+            }
+            None => unreachable!(),
+        };
+
+        // upgrade to specific http protocol
+        if let Some(HttpProtocol::Unknown(settings, addr, io, buf)) = self.proto.take() {
+            match kind {
+                ProtocolKind::Http1 => {
+                    self.proto =
+                        Some(HttpProtocol::H1(h1::Http1::new(settings, io, addr, buf)));
+                    return self.poll();
+                }
+                ProtocolKind::Http2 => {
+                    self.proto = Some(HttpProtocol::H2(h2::Http2::new(
+                        settings,
+                        io,
+                        addr,
+                        buf.freeze(),
+                    )));
+                    return self.poll();
+                }
+            }
+        }
+        unreachable!()
+    }
+}
+
+pub(crate) struct Node<T> {
+    next: Option<*mut Node<T>>,
+    prev: Option<*mut Node<T>>,
+    element: *mut T,
+}
+
+impl<T> Node<T> {
+    fn new(el: *mut T) -> Self {
+        Node {
+            next: None,
+            prev: None,
+            element: el,
+        }
+    }
+
+    fn insert<I>(&mut self, next: &mut Node<I>) {
+        unsafe {
+            let next: *mut Node<T> = next as *const _ as *mut _;
+
+            if let Some(ref mut next2) = self.next {
+                let n = next2.as_mut().unwrap();
+                n.prev = Some(next);
+            }
+            self.next = Some(next);
+
+            let next: &mut Node<T> = &mut *next;
+            next.prev = Some(self as *mut _);
+        }
+    }
+
+    fn remove(&mut self) {
+        unsafe {
+            self.element = ptr::null_mut();
+            let next = self.next.take();
+            let mut prev = self.prev.take();
+
+            if let Some(ref mut prev) = prev {
+                prev.as_mut().unwrap().next = next;
+            }
+        }
+    }
+}
+
+impl Node<()> {
+    pub(crate) fn head() -> Self {
+        Node {
+            next: None,
+            prev: None,
+            element: ptr::null_mut(),
+        }
+    }
+
+    pub(crate) fn traverse<T, H>(&self)
+    where
+        T: IoStream,
+        H: HttpHandler + 'static,
+    {
+        let mut next = self.next.as_ref();
+        loop {
+            if let Some(n) = next {
+                unsafe {
+                    let n: &Node<()> = &*(n.as_ref().unwrap() as *const _);
+                    next = n.next.as_ref();
+
+                    if !n.element.is_null() {
+                        let ch: &mut HttpChannel<T, H> =
+                            &mut *(&mut *(n.element as *mut _) as *mut () as *mut _);
+                        ch.shutdown();
+                    }
+                }
+            } else {
+                return;
+            }
+        }
+    }
+}
+
+/// Wrapper for `AsyncRead + AsyncWrite` types
+pub(crate) struct WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    io: T,
+}
+
+impl<T> WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    pub fn new(io: T) -> Self {
+        WrapperStream { io }
+    }
+}
+
+impl<T> IoStream for WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    #[inline]
+    fn shutdown(&mut self, _: Shutdown) -> io::Result<()> {
+        Ok(())
+    }
+    #[inline]
+    fn set_nodelay(&mut self, _: bool) -> io::Result<()> {
+        Ok(())
+    }
+    #[inline]
+    fn set_linger(&mut self, _: Option<time::Duration>) -> io::Result<()> {
+        Ok(())
+    }
+}
+
+impl<T> io::Read for WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    #[inline]
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        self.io.read(buf)
+    }
+}
+
+impl<T> io::Write for WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    #[inline]
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.io.write(buf)
+    }
+    #[inline]
+    fn flush(&mut self) -> io::Result<()> {
+        self.io.flush()
+    }
+}
+
+impl<T> AsyncRead for WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    #[inline]
+    fn read_buf<B: BufMut>(&mut self, buf: &mut B) -> Poll<usize, io::Error> {
+        self.io.read_buf(buf)
+    }
+}
+
+impl<T> AsyncWrite for WrapperStream<T>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+{
+    #[inline]
+    fn shutdown(&mut self) -> Poll<(), io::Error> {
+        self.io.shutdown()
+    }
+    #[inline]
+    fn write_buf<B: Buf>(&mut self, buf: &mut B) -> Poll<usize, io::Error> {
+        self.io.write_buf(buf)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/error.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/error.rs.html new file mode 100644 index 0000000..ca20113 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/error.rs.html @@ -0,0 +1,51 @@ +error.rs.html -- source
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+
+use futures::{Async, Poll};
+
+use super::{helpers, HttpHandlerTask, Writer};
+use http::{StatusCode, Version};
+use Error;
+
+pub(crate) struct ServerError(Version, StatusCode);
+
+impl ServerError {
+    pub fn err(ver: Version, status: StatusCode) -> Box<HttpHandlerTask> {
+        Box::new(ServerError(ver, status))
+    }
+}
+
+impl HttpHandlerTask for ServerError {
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error> {
+        {
+            let bytes = io.buffer();
+            helpers::write_status_line(self.0, self.1.as_u16(), bytes);
+        }
+        io.set_date();
+        Ok(Async::Ready(true))
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/h1.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/h1.rs.html new file mode 100644 index 0000000..20c33cf --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/h1.rs.html @@ -0,0 +1,2475 @@ +h1.rs.html -- source
   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
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+
+use std::collections::VecDeque;
+use std::net::SocketAddr;
+use std::rc::Rc;
+use std::time::{Duration, Instant};
+
+use bytes::BytesMut;
+use futures::{Async, Future, Poll};
+use tokio_timer::Delay;
+
+use error::{Error, PayloadError};
+use http::{StatusCode, Version};
+use payload::{Payload, PayloadStatus, PayloadWriter};
+
+use super::error::ServerError;
+use super::h1decoder::{DecoderError, H1Decoder, Message};
+use super::h1writer::H1Writer;
+use super::input::PayloadType;
+use super::settings::WorkerSettings;
+use super::Writer;
+use super::{HttpHandler, HttpHandlerTask, IoStream};
+
+const MAX_PIPELINED_MESSAGES: usize = 16;
+
+bitflags! {
+    struct Flags: u8 {
+        const STARTED = 0b0000_0001;
+        const ERROR = 0b0000_0010;
+        const KEEPALIVE = 0b0000_0100;
+        const SHUTDOWN = 0b0000_1000;
+        const DISCONNECTED = 0b0001_0000;
+        const POLLED = 0b0010_0000;
+    }
+}
+
+bitflags! {
+    struct EntryFlags: u8 {
+        const EOF = 0b0000_0001;
+        const ERROR = 0b0000_0010;
+        const FINISHED = 0b0000_0100;
+    }
+}
+
+pub(crate) struct Http1<T: IoStream, H: HttpHandler + 'static> {
+    flags: Flags,
+    settings: Rc<WorkerSettings<H>>,
+    addr: Option<SocketAddr>,
+    stream: H1Writer<T, H>,
+    decoder: H1Decoder,
+    payload: Option<PayloadType>,
+    buf: BytesMut,
+    tasks: VecDeque<Entry<H>>,
+    keepalive_timer: Option<Delay>,
+}
+
+enum EntryPipe<H: HttpHandler> {
+    Task(H::Task),
+    Error(Box<HttpHandlerTask>),
+}
+
+impl<H: HttpHandler> EntryPipe<H> {
+    fn disconnected(&mut self) {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.disconnected(),
+            EntryPipe::Error(ref mut task) => task.disconnected(),
+        }
+    }
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error> {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.poll_io(io),
+            EntryPipe::Error(ref mut task) => task.poll_io(io),
+        }
+    }
+    fn poll_completed(&mut self) -> Poll<(), Error> {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.poll_completed(),
+            EntryPipe::Error(ref mut task) => task.poll_completed(),
+        }
+    }
+}
+
+struct Entry<H: HttpHandler> {
+    pipe: EntryPipe<H>,
+    flags: EntryFlags,
+}
+
+impl<T, H> Http1<T, H>
+where
+    T: IoStream,
+    H: HttpHandler + 'static,
+{
+    pub fn new(
+        settings: Rc<WorkerSettings<H>>, stream: T, addr: Option<SocketAddr>,
+        buf: BytesMut,
+    ) -> Self {
+        Http1 {
+            flags: Flags::KEEPALIVE,
+            stream: H1Writer::new(stream, Rc::clone(&settings)),
+            decoder: H1Decoder::new(),
+            payload: None,
+            tasks: VecDeque::new(),
+            keepalive_timer: None,
+            addr,
+            buf,
+            settings,
+        }
+    }
+
+    #[inline]
+    pub fn settings(&self) -> &WorkerSettings<H> {
+        self.settings.as_ref()
+    }
+
+    #[inline]
+    pub(crate) fn io(&mut self) -> &mut T {
+        self.stream.get_mut()
+    }
+
+    #[inline]
+    fn can_read(&self) -> bool {
+        if let Some(ref info) = self.payload {
+            info.need_read() == PayloadStatus::Read
+        } else {
+            true
+        }
+    }
+
+    fn notify_disconnect(&mut self) {
+        // notify all tasks
+        self.stream.disconnected();
+        for task in &mut self.tasks {
+            task.pipe.disconnected();
+        }
+    }
+
+    #[inline]
+    pub fn poll(&mut self) -> Poll<(), ()> {
+        // keep-alive timer
+        if let Some(ref mut timer) = self.keepalive_timer {
+            match timer.poll() {
+                Ok(Async::Ready(_)) => {
+                    trace!("Keep-alive timeout, close connection");
+                    self.flags.insert(Flags::SHUTDOWN);
+                }
+                Ok(Async::NotReady) => (),
+                Err(_) => unreachable!(),
+            }
+        }
+
+        // shutdown
+        if self.flags.contains(Flags::SHUTDOWN) {
+            match self.stream.poll_completed(true) {
+                Ok(Async::NotReady) => return Ok(Async::NotReady),
+                Ok(Async::Ready(_)) => return Ok(Async::Ready(())),
+                Err(err) => {
+                    debug!("Error sending data: {}", err);
+                    return Err(());
+                }
+            }
+        }
+
+        self.poll_io();
+
+        loop {
+            match self.poll_handler()? {
+                Async::Ready(true) => {
+                    self.poll_io();
+                }
+                Async::Ready(false) => {
+                    self.flags.insert(Flags::SHUTDOWN);
+                    return self.poll();
+                }
+                Async::NotReady => return Ok(Async::NotReady),
+            }
+        }
+    }
+
+    #[inline]
+    /// read data from stream
+    pub fn poll_io(&mut self) {
+        if !self.flags.contains(Flags::POLLED) {
+            self.parse();
+            self.flags.insert(Flags::POLLED);
+            return;
+        }
+        // read io from socket
+        if !self.flags.intersects(Flags::ERROR)
+            && self.tasks.len() < MAX_PIPELINED_MESSAGES
+            && self.can_read()
+        {
+            match self.stream.get_mut().read_available(&mut self.buf) {
+                Ok(Async::Ready(disconnected)) => {
+                    if disconnected {
+                        // notify all tasks
+                        self.notify_disconnect();
+                        // kill keepalive
+                        self.keepalive_timer.take();
+
+                        // on parse error, stop reading stream but tasks need to be
+                        // completed
+                        self.flags.insert(Flags::ERROR);
+
+                        if let Some(mut payload) = self.payload.take() {
+                            payload.set_error(PayloadError::Incomplete);
+                        }
+                    } else {
+                        self.parse();
+                    }
+                }
+                Ok(Async::NotReady) => (),
+                Err(_) => {
+                    // notify all tasks
+                    self.notify_disconnect();
+                    // kill keepalive
+                    self.keepalive_timer.take();
+
+                    // on parse error, stop reading stream but tasks need to be
+                    // completed
+                    self.flags.insert(Flags::ERROR);
+
+                    if let Some(mut payload) = self.payload.take() {
+                        payload.set_error(PayloadError::Incomplete);
+                    }
+                }
+            }
+        }
+    }
+
+    pub fn poll_handler(&mut self) -> Poll<bool, ()> {
+        let retry = self.can_read();
+
+        // check in-flight messages
+        let mut io = false;
+        let mut idx = 0;
+        while idx < self.tasks.len() {
+            // only one task can do io operation in http/1
+            if !io && !self.tasks[idx].flags.contains(EntryFlags::EOF) {
+                // io is corrupted, send buffer
+                if self.tasks[idx].flags.contains(EntryFlags::ERROR) {
+                    if let Ok(Async::NotReady) = self.stream.poll_completed(true) {
+                        return Ok(Async::NotReady);
+                    }
+                    self.flags.insert(Flags::ERROR);
+                    return Err(());
+                }
+
+                match self.tasks[idx].pipe.poll_io(&mut self.stream) {
+                    Ok(Async::Ready(ready)) => {
+                        // override keep-alive state
+                        if self.stream.keepalive() {
+                            self.flags.insert(Flags::KEEPALIVE);
+                        } else {
+                            self.flags.remove(Flags::KEEPALIVE);
+                        }
+                        // prepare stream for next response
+                        self.stream.reset();
+
+                        if ready {
+                            self.tasks[idx]
+                                .flags
+                                .insert(EntryFlags::EOF | EntryFlags::FINISHED);
+                        } else {
+                            self.tasks[idx].flags.insert(EntryFlags::EOF);
+                        }
+                    }
+                    // no more IO for this iteration
+                    Ok(Async::NotReady) => {
+                        // check if previously read backpressure was enabled
+                        if self.can_read() && !retry {
+                            return Ok(Async::Ready(true));
+                        }
+                        io = true;
+                    }
+                    Err(err) => {
+                        // it is not possible to recover from error
+                        // during pipe handling, so just drop connection
+                        self.notify_disconnect();
+                        self.tasks[idx].flags.insert(EntryFlags::ERROR);
+                        error!("Unhandled error1: {}", err);
+                        continue;
+                    }
+                }
+            } else if !self.tasks[idx].flags.contains(EntryFlags::FINISHED) {
+                match self.tasks[idx].pipe.poll_completed() {
+                    Ok(Async::NotReady) => (),
+                    Ok(Async::Ready(_)) => {
+                        self.tasks[idx].flags.insert(EntryFlags::FINISHED)
+                    }
+                    Err(err) => {
+                        self.notify_disconnect();
+                        self.tasks[idx].flags.insert(EntryFlags::ERROR);
+                        error!("Unhandled error: {}", err);
+                        continue;
+                    }
+                }
+            }
+            idx += 1;
+        }
+
+        // cleanup finished tasks
+        let max = self.tasks.len() >= MAX_PIPELINED_MESSAGES;
+        while !self.tasks.is_empty() {
+            if self.tasks[0]
+                .flags
+                .contains(EntryFlags::EOF | EntryFlags::FINISHED)
+            {
+                self.tasks.pop_front();
+            } else {
+                break;
+            }
+        }
+        // read more message
+        if max && self.tasks.len() >= MAX_PIPELINED_MESSAGES {
+            return Ok(Async::Ready(true));
+        }
+
+        // check stream state
+        if self.flags.contains(Flags::STARTED) {
+            match self.stream.poll_completed(false) {
+                Ok(Async::NotReady) => return Ok(Async::NotReady),
+                Err(err) => {
+                    debug!("Error sending data: {}", err);
+                    self.notify_disconnect();
+                    return Err(());
+                }
+                Ok(Async::Ready(_)) => {
+                    // non consumed payload in that case close connection
+                    if self.payload.is_some() && self.tasks.is_empty() {
+                        return Ok(Async::Ready(false));
+                    }
+                }
+            }
+        }
+
+        // deal with keep-alive
+        if self.tasks.is_empty() {
+            // no keep-alive
+            if self.flags.contains(Flags::ERROR)
+                || (!self.flags.contains(Flags::KEEPALIVE)
+                    || !self.settings.keep_alive_enabled())
+                    && self.flags.contains(Flags::STARTED)
+            {
+                return Ok(Async::Ready(false));
+            }
+
+            // start keep-alive timer
+            let keep_alive = self.settings.keep_alive();
+            if self.keepalive_timer.is_none() && keep_alive > 0 {
+                trace!("Start keep-alive timer");
+                let mut timer =
+                    Delay::new(Instant::now() + Duration::new(keep_alive, 0));
+                // register timer
+                let _ = timer.poll();
+                self.keepalive_timer = Some(timer);
+            }
+        }
+        Ok(Async::NotReady)
+    }
+
+    pub fn parse(&mut self) {
+        'outer: loop {
+            match self.decoder.decode(&mut self.buf, &self.settings) {
+                Ok(Some(Message::Message { mut msg, payload })) => {
+                    self.flags.insert(Flags::STARTED);
+
+                    if payload {
+                        let (ps, pl) = Payload::new(false);
+                        *msg.inner.payload.borrow_mut() = Some(pl);
+                        self.payload = Some(PayloadType::new(&msg.inner.headers, ps));
+                    }
+
+                    // set remote addr
+                    msg.inner_mut().addr = self.addr;
+
+                    // stop keepalive timer
+                    self.keepalive_timer.take();
+
+                    // search handler for request
+                    for h in self.settings.handlers().iter_mut() {
+                        msg = match h.handle(msg) {
+                            Ok(mut pipe) => {
+                                if self.tasks.is_empty() {
+                                    match pipe.poll_io(&mut self.stream) {
+                                        Ok(Async::Ready(ready)) => {
+                                            // override keep-alive state
+                                            if self.stream.keepalive() {
+                                                self.flags.insert(Flags::KEEPALIVE);
+                                            } else {
+                                                self.flags.remove(Flags::KEEPALIVE);
+                                            }
+                                            // prepare stream for next response
+                                            self.stream.reset();
+
+                                            if !ready {
+                                                let item = Entry {
+                                                    pipe: EntryPipe::Task(pipe),
+                                                    flags: EntryFlags::EOF,
+                                                };
+                                                self.tasks.push_back(item);
+                                            }
+                                            continue 'outer;
+                                        }
+                                        Ok(Async::NotReady) => {}
+                                        Err(err) => {
+                                            error!("Unhandled error: {}", err);
+                                            self.flags.insert(Flags::ERROR);
+                                            return;
+                                        }
+                                    }
+                                }
+                                self.tasks.push_back(Entry {
+                                    pipe: EntryPipe::Task(pipe),
+                                    flags: EntryFlags::empty(),
+                                });
+                                continue 'outer;
+                            }
+                            Err(msg) => msg,
+                        }
+                    }
+
+                    // handler is not found
+                    self.tasks.push_back(Entry {
+                        pipe: EntryPipe::Error(ServerError::err(
+                            Version::HTTP_11,
+                            StatusCode::NOT_FOUND,
+                        )),
+                        flags: EntryFlags::empty(),
+                    });
+                }
+                Ok(Some(Message::Chunk(chunk))) => {
+                    if let Some(ref mut payload) = self.payload {
+                        payload.feed_data(chunk);
+                    } else {
+                        error!("Internal server error: unexpected payload chunk");
+                        self.flags.insert(Flags::ERROR);
+                        break;
+                    }
+                }
+                Ok(Some(Message::Eof)) => {
+                    if let Some(mut payload) = self.payload.take() {
+                        payload.feed_eof();
+                    } else {
+                        error!("Internal server error: unexpected eof");
+                        self.flags.insert(Flags::ERROR);
+                        break;
+                    }
+                }
+                Ok(None) => break,
+                Err(e) => {
+                    self.flags.insert(Flags::ERROR);
+                    if let Some(mut payload) = self.payload.take() {
+                        let e = match e {
+                            DecoderError::Io(e) => PayloadError::Io(e),
+                            DecoderError::Error(_) => PayloadError::EncodingCorrupted,
+                        };
+                        payload.set_error(e);
+                    }
+                    break;
+                }
+            }
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use std::net::Shutdown;
+    use std::{cmp, io, time};
+
+    use bytes::{Buf, Bytes, BytesMut};
+    use http::{Method, Version};
+    use tokio_io::{AsyncRead, AsyncWrite};
+
+    use super::*;
+    use application::HttpApplication;
+    use httpmessage::HttpMessage;
+    use server::h1decoder::Message;
+    use server::settings::{ServerSettings, WorkerSettings};
+    use server::{KeepAlive, Request};
+
+    impl Message {
+        fn message(self) -> Request {
+            match self {
+                Message::Message { msg, payload: _ } => msg,
+                _ => panic!("error"),
+            }
+        }
+        fn is_payload(&self) -> bool {
+            match *self {
+                Message::Message { msg: _, payload } => payload,
+                _ => panic!("error"),
+            }
+        }
+        fn chunk(self) -> Bytes {
+            match self {
+                Message::Chunk(chunk) => chunk,
+                _ => panic!("error"),
+            }
+        }
+        fn eof(&self) -> bool {
+            match *self {
+                Message::Eof => true,
+                _ => false,
+            }
+        }
+    }
+
+    macro_rules! parse_ready {
+        ($e:expr) => {{
+            let settings: WorkerSettings<HttpApplication> =
+                WorkerSettings::new(Vec::new(), KeepAlive::Os, ServerSettings::default());
+            match H1Decoder::new().decode($e, &settings) {
+                Ok(Some(msg)) => msg.message(),
+                Ok(_) => unreachable!("Eof during parsing http request"),
+                Err(err) => unreachable!("Error during parsing http request: {:?}", err),
+            }
+        }};
+    }
+
+    macro_rules! expect_parse_err {
+        ($e:expr) => {{
+            let settings: WorkerSettings<HttpApplication> =
+                WorkerSettings::new(Vec::new(), KeepAlive::Os, ServerSettings::default());
+
+            match H1Decoder::new().decode($e, &settings) {
+                Err(err) => match err {
+                    DecoderError::Error(_) => (),
+                    _ => unreachable!("Parse error expected"),
+                },
+                _ => unreachable!("Error expected"),
+            }
+        }};
+    }
+
+    struct Buffer {
+        buf: Bytes,
+        err: Option<io::Error>,
+    }
+
+    impl Buffer {
+        fn new(data: &'static str) -> Buffer {
+            Buffer {
+                buf: Bytes::from(data),
+                err: None,
+            }
+        }
+    }
+
+    impl AsyncRead for Buffer {}
+    impl io::Read for Buffer {
+        fn read(&mut self, dst: &mut [u8]) -> Result<usize, io::Error> {
+            if self.buf.is_empty() {
+                if self.err.is_some() {
+                    Err(self.err.take().unwrap())
+                } else {
+                    Err(io::Error::new(io::ErrorKind::WouldBlock, ""))
+                }
+            } else {
+                let size = cmp::min(self.buf.len(), dst.len());
+                let b = self.buf.split_to(size);
+                dst[..size].copy_from_slice(&b);
+                Ok(size)
+            }
+        }
+    }
+
+    impl IoStream for Buffer {
+        fn shutdown(&mut self, _: Shutdown) -> io::Result<()> {
+            Ok(())
+        }
+        fn set_nodelay(&mut self, _: bool) -> io::Result<()> {
+            Ok(())
+        }
+        fn set_linger(&mut self, _: Option<time::Duration>) -> io::Result<()> {
+            Ok(())
+        }
+    }
+    impl io::Write for Buffer {
+        fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+            Ok(buf.len())
+        }
+        fn flush(&mut self) -> io::Result<()> {
+            Ok(())
+        }
+    }
+    impl AsyncWrite for Buffer {
+        fn shutdown(&mut self) -> Poll<(), io::Error> {
+            Ok(Async::Ready(()))
+        }
+        fn write_buf<B: Buf>(&mut self, _: &mut B) -> Poll<usize, io::Error> {
+            Ok(Async::NotReady)
+        }
+    }
+
+    #[test]
+    fn test_req_parse() {
+        let buf = Buffer::new("GET /test HTTP/1.1\r\n\r\n");
+        let readbuf = BytesMut::new();
+        let settings = Rc::new(WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        ));
+
+        let mut h1 = Http1::new(Rc::clone(&settings), buf, None, readbuf);
+        h1.poll_io();
+        h1.poll_io();
+        assert_eq!(h1.tasks.len(), 1);
+    }
+
+    #[test]
+    fn test_req_parse_err() {
+        let buf = Buffer::new("GET /test HTTP/1\r\n\r\n");
+        let readbuf = BytesMut::new();
+        let settings = Rc::new(WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        ));
+
+        let mut h1 = Http1::new(Rc::clone(&settings), buf, None, readbuf);
+        h1.poll_io();
+        h1.poll_io();
+        assert!(h1.flags.contains(Flags::ERROR));
+    }
+
+    #[test]
+    fn test_parse() {
+        let mut buf = BytesMut::from("GET /test HTTP/1.1\r\n\r\n");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::GET);
+                assert_eq!(req.path(), "/test");
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_parse_partial() {
+        let mut buf = BytesMut::from("PUT /test HTTP/1");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        match reader.decode(&mut buf, &settings) {
+            Ok(None) => (),
+            _ => unreachable!("Error"),
+        }
+
+        buf.extend(b".1\r\n\r\n");
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let mut req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::PUT);
+                assert_eq!(req.path(), "/test");
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_parse_post() {
+        let mut buf = BytesMut::from("POST /test2 HTTP/1.0\r\n\r\n");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let mut req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_10);
+                assert_eq!(*req.method(), Method::POST);
+                assert_eq!(req.path(), "/test2");
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_parse_body() {
+        let mut buf =
+            BytesMut::from("GET /test HTTP/1.1\r\nContent-Length: 4\r\n\r\nbody");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let mut req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::GET);
+                assert_eq!(req.path(), "/test");
+                assert_eq!(
+                    reader
+                        .decode(&mut buf, &settings)
+                        .unwrap()
+                        .unwrap()
+                        .chunk()
+                        .as_ref(),
+                    b"body"
+                );
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_parse_body_crlf() {
+        let mut buf =
+            BytesMut::from("\r\nGET /test HTTP/1.1\r\nContent-Length: 4\r\n\r\nbody");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let mut req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::GET);
+                assert_eq!(req.path(), "/test");
+                assert_eq!(
+                    reader
+                        .decode(&mut buf, &settings)
+                        .unwrap()
+                        .unwrap()
+                        .chunk()
+                        .as_ref(),
+                    b"body"
+                );
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_parse_partial_eof() {
+        let mut buf = BytesMut::from("GET /test HTTP/1.1\r\n");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+        let mut reader = H1Decoder::new();
+        assert!(reader.decode(&mut buf, &settings).unwrap().is_none());
+
+        buf.extend(b"\r\n");
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::GET);
+                assert_eq!(req.path(), "/test");
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_headers_split_field() {
+        let mut buf = BytesMut::from("GET /test HTTP/1.1\r\n");
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        assert!{ reader.decode(&mut buf, &settings).unwrap().is_none() }
+
+        buf.extend(b"t");
+        assert!{ reader.decode(&mut buf, &settings).unwrap().is_none() }
+
+        buf.extend(b"es");
+        assert!{ reader.decode(&mut buf, &settings).unwrap().is_none() }
+
+        buf.extend(b"t: value\r\n\r\n");
+        match reader.decode(&mut buf, &settings) {
+            Ok(Some(msg)) => {
+                let req = msg.message();
+                assert_eq!(req.version(), Version::HTTP_11);
+                assert_eq!(*req.method(), Method::GET);
+                assert_eq!(req.path(), "/test");
+                assert_eq!(req.headers().get("test").unwrap().as_bytes(), b"value");
+            }
+            Ok(_) | Err(_) => unreachable!("Error during parsing http request"),
+        }
+    }
+
+    #[test]
+    fn test_headers_multi_value() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             Set-Cookie: c1=cookie1\r\n\
+             Set-Cookie: c2=cookie2\r\n\r\n",
+        );
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        let req = msg.message();
+
+        let val: Vec<_> = req
+            .headers()
+            .get_all("Set-Cookie")
+            .iter()
+            .map(|v| v.to_str().unwrap().to_owned())
+            .collect();
+        assert_eq!(val[0], "c1=cookie1");
+        assert_eq!(val[1], "c2=cookie2");
+    }
+
+    #[test]
+    fn test_conn_default_1_0() {
+        let mut buf = BytesMut::from("GET /test HTTP/1.0\r\n\r\n");
+        let req = parse_ready!(&mut buf);
+
+        assert!(!req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_default_1_1() {
+        let mut buf = BytesMut::from("GET /test HTTP/1.1\r\n\r\n");
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_close() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             connection: close\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(!req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_close_1_0() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.0\r\n\
+             connection: close\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(!req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_keep_alive_1_0() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.0\r\n\
+             connection: keep-alive\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_keep_alive_1_1() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             connection: keep-alive\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_other_1_0() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.0\r\n\
+             connection: other\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(!req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_other_1_1() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             connection: other\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.keep_alive());
+    }
+
+    #[test]
+    fn test_conn_upgrade() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             upgrade: websockets\r\n\
+             connection: upgrade\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.upgrade());
+    }
+
+    #[test]
+    fn test_conn_upgrade_connect_method() {
+        let mut buf = BytesMut::from(
+            "CONNECT /test HTTP/1.1\r\n\
+             content-type: text/plain\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert!(req.upgrade());
+    }
+
+    #[test]
+    fn test_request_chunked() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             transfer-encoding: chunked\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        if let Ok(val) = req.chunked() {
+            assert!(val);
+        } else {
+            unreachable!("Error");
+        }
+
+        // type in chunked
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             transfer-encoding: chnked\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        if let Ok(val) = req.chunked() {
+            assert!(!val);
+        } else {
+            unreachable!("Error");
+        }
+    }
+
+    #[test]
+    fn test_headers_content_length_err_1() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             content-length: line\r\n\r\n",
+        );
+
+        expect_parse_err!(&mut buf)
+    }
+
+    #[test]
+    fn test_headers_content_length_err_2() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             content-length: -1\r\n\r\n",
+        );
+
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_invalid_header() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             test line\r\n\r\n",
+        );
+
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_invalid_name() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             test[]: line\r\n\r\n",
+        );
+
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_http_request_bad_status_line() {
+        let mut buf = BytesMut::from("getpath \r\n\r\n");
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_http_request_upgrade() {
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             connection: upgrade\r\n\
+             upgrade: websocket\r\n\r\n\
+             some raw data",
+        );
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        let req = msg.message();
+        assert!(!req.keep_alive());
+        assert!(req.upgrade());
+        assert_eq!(
+            reader
+                .decode(&mut buf, &settings)
+                .unwrap()
+                .unwrap()
+                .chunk()
+                .as_ref(),
+            b"some raw data"
+        );
+    }
+
+    #[test]
+    fn test_http_request_parser_utf8() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             x-test: тест\r\n\r\n",
+        );
+        let req = parse_ready!(&mut buf);
+
+        assert_eq!(
+            req.headers().get("x-test").unwrap().as_bytes(),
+            "тест".as_bytes()
+        );
+    }
+
+    #[test]
+    fn test_http_request_parser_two_slashes() {
+        let mut buf = BytesMut::from("GET //path HTTP/1.1\r\n\r\n");
+        let req = parse_ready!(&mut buf);
+
+        assert_eq!(req.path(), "//path");
+    }
+
+    #[test]
+    fn test_http_request_parser_bad_method() {
+        let mut buf = BytesMut::from("!12%()+=~$ /get HTTP/1.1\r\n\r\n");
+
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_http_request_parser_bad_version() {
+        let mut buf = BytesMut::from("GET //get HT/11\r\n\r\n");
+
+        expect_parse_err!(&mut buf);
+    }
+
+    #[test]
+    fn test_http_request_chunked_payload() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             transfer-encoding: chunked\r\n\r\n",
+        );
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        let req = msg.message();
+        assert!(req.chunked().unwrap());
+
+        buf.extend(b"4\r\ndata\r\n4\r\nline\r\n0\r\n\r\n");
+        assert_eq!(
+            reader
+                .decode(&mut buf, &settings)
+                .unwrap()
+                .unwrap()
+                .chunk()
+                .as_ref(),
+            b"data"
+        );
+        assert_eq!(
+            reader
+                .decode(&mut buf, &settings)
+                .unwrap()
+                .unwrap()
+                .chunk()
+                .as_ref(),
+            b"line"
+        );
+        assert!(reader.decode(&mut buf, &settings).unwrap().unwrap().eof());
+    }
+
+    #[test]
+    fn test_http_request_chunked_payload_and_next_message() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             transfer-encoding: chunked\r\n\r\n",
+        );
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        let req = msg.message();
+        assert!(req.chunked().unwrap());
+
+        buf.extend(
+            b"4\r\ndata\r\n4\r\nline\r\n0\r\n\r\n\
+              POST /test2 HTTP/1.1\r\n\
+              transfer-encoding: chunked\r\n\r\n"
+                .iter(),
+        );
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"data");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"line");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.eof());
+
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        let req2 = msg.message();
+        assert!(req2.chunked().unwrap());
+        assert_eq!(*req2.method(), Method::POST);
+        assert!(req2.chunked().unwrap());
+    }
+
+    #[test]
+    fn test_http_request_chunked_payload_chunks() {
+        let mut buf = BytesMut::from(
+            "GET /test HTTP/1.1\r\n\
+             transfer-encoding: chunked\r\n\r\n",
+        );
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        let req = msg.message();
+        assert!(req.chunked().unwrap());
+
+        buf.extend(b"4\r\n1111\r\n");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"1111");
+
+        buf.extend(b"4\r\ndata\r");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"data");
+
+        buf.extend(b"\n4");
+        assert!(reader.decode(&mut buf, &settings).unwrap().is_none());
+
+        buf.extend(b"\r");
+        assert!(reader.decode(&mut buf, &settings).unwrap().is_none());
+        buf.extend(b"\n");
+        assert!(reader.decode(&mut buf, &settings).unwrap().is_none());
+
+        buf.extend(b"li");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"li");
+
+        //trailers
+        //buf.feed_data("test: test\r\n");
+        //not_ready!(reader.parse(&mut buf, &mut readbuf));
+
+        buf.extend(b"ne\r\n0\r\n");
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert_eq!(msg.chunk().as_ref(), b"ne");
+        assert!(reader.decode(&mut buf, &settings).unwrap().is_none());
+
+        buf.extend(b"\r\n");
+        assert!(reader.decode(&mut buf, &settings).unwrap().unwrap().eof());
+    }
+
+    #[test]
+    fn test_parse_chunked_payload_chunk_extension() {
+        let mut buf = BytesMut::from(
+            &"GET /test HTTP/1.1\r\n\
+              transfer-encoding: chunked\r\n\r\n"[..],
+        );
+        let settings = WorkerSettings::<HttpApplication>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+
+        let mut reader = H1Decoder::new();
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.is_payload());
+        assert!(msg.message().chunked().unwrap());
+
+        buf.extend(b"4;test\r\ndata\r\n4\r\nline\r\n0\r\n\r\n"); // test: test\r\n\r\n")
+        let chunk = reader.decode(&mut buf, &settings).unwrap().unwrap().chunk();
+        assert_eq!(chunk, Bytes::from_static(b"data"));
+        let chunk = reader.decode(&mut buf, &settings).unwrap().unwrap().chunk();
+        assert_eq!(chunk, Bytes::from_static(b"line"));
+        let msg = reader.decode(&mut buf, &settings).unwrap().unwrap();
+        assert!(msg.eof());
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/h1decoder.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/h1decoder.rs.html new file mode 100644 index 0000000..1293c0e --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/h1decoder.rs.html @@ -0,0 +1,1019 @@ +h1decoder.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+
+use std::{io, mem};
+
+use bytes::{Bytes, BytesMut};
+use futures::{Async, Poll};
+use httparse;
+
+use super::message::{MessageFlags, Request};
+use super::settings::WorkerSettings;
+use error::ParseError;
+use http::header::{HeaderName, HeaderValue};
+use http::{header, HttpTryFrom, Method, Uri, Version};
+use uri::Url;
+
+const MAX_BUFFER_SIZE: usize = 131_072;
+const MAX_HEADERS: usize = 96;
+
+pub(crate) struct H1Decoder {
+    decoder: Option<EncodingDecoder>,
+}
+
+pub(crate) enum Message {
+    Message { msg: Request, payload: bool },
+    Chunk(Bytes),
+    Eof,
+}
+
+#[derive(Debug)]
+pub(crate) enum DecoderError {
+    Io(io::Error),
+    Error(ParseError),
+}
+
+impl From<io::Error> for DecoderError {
+    fn from(err: io::Error) -> DecoderError {
+        DecoderError::Io(err)
+    }
+}
+
+impl H1Decoder {
+    pub fn new() -> H1Decoder {
+        H1Decoder { decoder: None }
+    }
+
+    pub fn decode<H>(
+        &mut self, src: &mut BytesMut, settings: &WorkerSettings<H>,
+    ) -> Result<Option<Message>, DecoderError> {
+        // read payload
+        if self.decoder.is_some() {
+            match self.decoder.as_mut().unwrap().decode(src)? {
+                Async::Ready(Some(bytes)) => return Ok(Some(Message::Chunk(bytes))),
+                Async::Ready(None) => {
+                    self.decoder.take();
+                    return Ok(Some(Message::Eof));
+                }
+                Async::NotReady => return Ok(None),
+            }
+        }
+
+        match self
+            .parse_message(src, settings)
+            .map_err(DecoderError::Error)?
+        {
+            Async::Ready((msg, decoder)) => {
+                self.decoder = decoder;
+                Ok(Some(Message::Message {
+                    msg,
+                    payload: self.decoder.is_some(),
+                }))
+            }
+            Async::NotReady => {
+                if src.len() >= MAX_BUFFER_SIZE {
+                    error!("MAX_BUFFER_SIZE unprocessed data reached, closing");
+                    Err(DecoderError::Error(ParseError::TooLarge))
+                } else {
+                    Ok(None)
+                }
+            }
+        }
+    }
+
+    fn parse_message<H>(
+        &self, buf: &mut BytesMut, settings: &WorkerSettings<H>,
+    ) -> Poll<(Request, Option<EncodingDecoder>), ParseError> {
+        // Parse http message
+        let mut has_upgrade = false;
+        let mut chunked = false;
+        let mut content_length = None;
+
+        let msg = {
+            // Unsafe: we read only this data only after httparse parses headers into.
+            // performance bump for pipeline benchmarks.
+            let mut headers: [HeaderIndex; MAX_HEADERS] =
+                unsafe { mem::uninitialized() };
+
+            let (len, method, path, version, headers_len) = {
+                let mut parsed: [httparse::Header; MAX_HEADERS] =
+                    unsafe { mem::uninitialized() };
+
+                let mut req = httparse::Request::new(&mut parsed);
+                match req.parse(buf)? {
+                    httparse::Status::Complete(len) => {
+                        let method = Method::from_bytes(req.method.unwrap().as_bytes())
+                            .map_err(|_| ParseError::Method)?;
+                        let path = Url::new(Uri::try_from(req.path.unwrap())?);
+                        let version = if req.version.unwrap() == 1 {
+                            Version::HTTP_11
+                        } else {
+                            Version::HTTP_10
+                        };
+                        HeaderIndex::record(buf, req.headers, &mut headers);
+
+                        (len, method, path, version, req.headers.len())
+                    }
+                    httparse::Status::Partial => return Ok(Async::NotReady),
+                }
+            };
+
+            let slice = buf.split_to(len).freeze();
+
+            // convert headers
+            let mut msg = settings.get_request();
+            {
+                let inner = msg.inner_mut();
+                inner
+                    .flags
+                    .get_mut()
+                    .set(MessageFlags::KEEPALIVE, version != Version::HTTP_10);
+
+                for idx in headers[..headers_len].iter() {
+                    if let Ok(name) =
+                        HeaderName::from_bytes(&slice[idx.name.0..idx.name.1])
+                    {
+                        // Unsafe: httparse check header value for valid utf-8
+                        let value = unsafe {
+                            HeaderValue::from_shared_unchecked(
+                                slice.slice(idx.value.0, idx.value.1),
+                            )
+                        };
+                        match name {
+                            header::CONTENT_LENGTH => {
+                                if let Ok(s) = value.to_str() {
+                                    if let Ok(len) = s.parse::<u64>() {
+                                        content_length = Some(len);
+                                    } else {
+                                        debug!("illegal Content-Length: {:?}", len);
+                                        return Err(ParseError::Header);
+                                    }
+                                } else {
+                                    debug!("illegal Content-Length: {:?}", len);
+                                    return Err(ParseError::Header);
+                                }
+                            }
+                            // transfer-encoding
+                            header::TRANSFER_ENCODING => {
+                                if let Ok(s) = value.to_str() {
+                                    chunked = s.to_lowercase().contains("chunked");
+                                } else {
+                                    return Err(ParseError::Header);
+                                }
+                            }
+                            // connection keep-alive state
+                            header::CONNECTION => {
+                                let ka = if let Ok(conn) = value.to_str() {
+                                    if version == Version::HTTP_10
+                                        && conn.contains("keep-alive")
+                                    {
+                                        true
+                                    } else {
+                                        version == Version::HTTP_11
+                                            && !(conn.contains("close")
+                                                || conn.contains("upgrade"))
+                                    }
+                                } else {
+                                    false
+                                };
+                                inner.flags.get_mut().set(MessageFlags::KEEPALIVE, ka);
+                            }
+                            header::UPGRADE => {
+                                has_upgrade = true;
+                            }
+                            _ => (),
+                        }
+
+                        inner.headers.append(name, value);
+                    } else {
+                        return Err(ParseError::Header);
+                    }
+                }
+
+                inner.url = path;
+                inner.method = method;
+                inner.version = version;
+            }
+            msg
+        };
+
+        // https://tools.ietf.org/html/rfc7230#section-3.3.3
+        let decoder = if chunked {
+            // Chunked encoding
+            Some(EncodingDecoder::chunked())
+        } else if let Some(len) = content_length {
+            // Content-Length
+            Some(EncodingDecoder::length(len))
+        } else if has_upgrade || msg.inner.method == Method::CONNECT {
+            // upgrade(websocket) or connect
+            Some(EncodingDecoder::eof())
+        } else {
+            None
+        };
+
+        Ok(Async::Ready((msg, decoder)))
+    }
+}
+
+#[derive(Clone, Copy)]
+pub(crate) struct HeaderIndex {
+    pub(crate) name: (usize, usize),
+    pub(crate) value: (usize, usize),
+}
+
+impl HeaderIndex {
+    pub(crate) fn record(
+        bytes: &[u8], headers: &[httparse::Header], indices: &mut [HeaderIndex],
+    ) {
+        let bytes_ptr = bytes.as_ptr() as usize;
+        for (header, indices) in headers.iter().zip(indices.iter_mut()) {
+            let name_start = header.name.as_ptr() as usize - bytes_ptr;
+            let name_end = name_start + header.name.len();
+            indices.name = (name_start, name_end);
+            let value_start = header.value.as_ptr() as usize - bytes_ptr;
+            let value_end = value_start + header.value.len();
+            indices.value = (value_start, value_end);
+        }
+    }
+}
+
+/// Decoders to handle different Transfer-Encodings.
+///
+/// If a message body does not include a Transfer-Encoding, it *should*
+/// include a Content-Length header.
+#[derive(Debug, Clone, PartialEq)]
+pub struct EncodingDecoder {
+    kind: Kind,
+}
+
+impl EncodingDecoder {
+    pub fn length(x: u64) -> EncodingDecoder {
+        EncodingDecoder {
+            kind: Kind::Length(x),
+        }
+    }
+
+    pub fn chunked() -> EncodingDecoder {
+        EncodingDecoder {
+            kind: Kind::Chunked(ChunkedState::Size, 0),
+        }
+    }
+
+    pub fn eof() -> EncodingDecoder {
+        EncodingDecoder {
+            kind: Kind::Eof(false),
+        }
+    }
+}
+
+#[derive(Debug, Clone, PartialEq)]
+enum Kind {
+    /// A Reader used when a Content-Length header is passed with a positive
+    /// integer.
+    Length(u64),
+    /// A Reader used when Transfer-Encoding is `chunked`.
+    Chunked(ChunkedState, u64),
+    /// A Reader used for responses that don't indicate a length or chunked.
+    ///
+    /// Note: This should only used for `Response`s. It is illegal for a
+    /// `Request` to be made with both `Content-Length` and
+    /// `Transfer-Encoding: chunked` missing, as explained from the spec:
+    ///
+    /// > If a Transfer-Encoding header field is present in a response and
+    /// > the chunked transfer coding is not the final encoding, the
+    /// > message body length is determined by reading the connection until
+    /// > it is closed by the server.  If a Transfer-Encoding header field
+    /// > is present in a request and the chunked transfer coding is not
+    /// > the final encoding, the message body length cannot be determined
+    /// > reliably; the server MUST respond with the 400 (Bad Request)
+    /// > status code and then close the connection.
+    Eof(bool),
+}
+
+#[derive(Debug, PartialEq, Clone)]
+enum ChunkedState {
+    Size,
+    SizeLws,
+    Extension,
+    SizeLf,
+    Body,
+    BodyCr,
+    BodyLf,
+    EndCr,
+    EndLf,
+    End,
+}
+
+impl EncodingDecoder {
+    pub fn decode(&mut self, body: &mut BytesMut) -> Poll<Option<Bytes>, io::Error> {
+        match self.kind {
+            Kind::Length(ref mut remaining) => {
+                if *remaining == 0 {
+                    Ok(Async::Ready(None))
+                } else {
+                    if body.is_empty() {
+                        return Ok(Async::NotReady);
+                    }
+                    let len = body.len() as u64;
+                    let buf;
+                    if *remaining > len {
+                        buf = body.take().freeze();
+                        *remaining -= len;
+                    } else {
+                        buf = body.split_to(*remaining as usize).freeze();
+                        *remaining = 0;
+                    }
+                    trace!("Length read: {}", buf.len());
+                    Ok(Async::Ready(Some(buf)))
+                }
+            }
+            Kind::Chunked(ref mut state, ref mut size) => {
+                loop {
+                    let mut buf = None;
+                    // advances the chunked state
+                    *state = try_ready!(state.step(body, size, &mut buf));
+                    if *state == ChunkedState::End {
+                        trace!("End of chunked stream");
+                        return Ok(Async::Ready(None));
+                    }
+                    if let Some(buf) = buf {
+                        return Ok(Async::Ready(Some(buf)));
+                    }
+                    if body.is_empty() {
+                        return Ok(Async::NotReady);
+                    }
+                }
+            }
+            Kind::Eof(ref mut is_eof) => {
+                if *is_eof {
+                    Ok(Async::Ready(None))
+                } else if !body.is_empty() {
+                    Ok(Async::Ready(Some(body.take().freeze())))
+                } else {
+                    Ok(Async::NotReady)
+                }
+            }
+        }
+    }
+}
+
+macro_rules! byte (
+    ($rdr:ident) => ({
+        if $rdr.len() > 0 {
+            let b = $rdr[0];
+            $rdr.split_to(1);
+            b
+        } else {
+            return Ok(Async::NotReady)
+        }
+    })
+);
+
+impl ChunkedState {
+    fn step(
+        &self, body: &mut BytesMut, size: &mut u64, buf: &mut Option<Bytes>,
+    ) -> Poll<ChunkedState, io::Error> {
+        use self::ChunkedState::*;
+        match *self {
+            Size => ChunkedState::read_size(body, size),
+            SizeLws => ChunkedState::read_size_lws(body),
+            Extension => ChunkedState::read_extension(body),
+            SizeLf => ChunkedState::read_size_lf(body, size),
+            Body => ChunkedState::read_body(body, size, buf),
+            BodyCr => ChunkedState::read_body_cr(body),
+            BodyLf => ChunkedState::read_body_lf(body),
+            EndCr => ChunkedState::read_end_cr(body),
+            EndLf => ChunkedState::read_end_lf(body),
+            End => Ok(Async::Ready(ChunkedState::End)),
+        }
+    }
+    fn read_size(rdr: &mut BytesMut, size: &mut u64) -> Poll<ChunkedState, io::Error> {
+        let radix = 16;
+        match byte!(rdr) {
+            b @ b'0'...b'9' => {
+                *size *= radix;
+                *size += u64::from(b - b'0');
+            }
+            b @ b'a'...b'f' => {
+                *size *= radix;
+                *size += u64::from(b + 10 - b'a');
+            }
+            b @ b'A'...b'F' => {
+                *size *= radix;
+                *size += u64::from(b + 10 - b'A');
+            }
+            b'\t' | b' ' => return Ok(Async::Ready(ChunkedState::SizeLws)),
+            b';' => return Ok(Async::Ready(ChunkedState::Extension)),
+            b'\r' => return Ok(Async::Ready(ChunkedState::SizeLf)),
+            _ => {
+                return Err(io::Error::new(
+                    io::ErrorKind::InvalidInput,
+                    "Invalid chunk size line: Invalid Size",
+                ));
+            }
+        }
+        Ok(Async::Ready(ChunkedState::Size))
+    }
+    fn read_size_lws(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        trace!("read_size_lws");
+        match byte!(rdr) {
+            // LWS can follow the chunk size, but no more digits can come
+            b'\t' | b' ' => Ok(Async::Ready(ChunkedState::SizeLws)),
+            b';' => Ok(Async::Ready(ChunkedState::Extension)),
+            b'\r' => Ok(Async::Ready(ChunkedState::SizeLf)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk size linear white space",
+            )),
+        }
+    }
+    fn read_extension(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\r' => Ok(Async::Ready(ChunkedState::SizeLf)),
+            _ => Ok(Async::Ready(ChunkedState::Extension)), // no supported extensions
+        }
+    }
+    fn read_size_lf(
+        rdr: &mut BytesMut, size: &mut u64,
+    ) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\n' if *size > 0 => Ok(Async::Ready(ChunkedState::Body)),
+            b'\n' if *size == 0 => Ok(Async::Ready(ChunkedState::EndCr)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk size LF",
+            )),
+        }
+    }
+
+    fn read_body(
+        rdr: &mut BytesMut, rem: &mut u64, buf: &mut Option<Bytes>,
+    ) -> Poll<ChunkedState, io::Error> {
+        trace!("Chunked read, remaining={:?}", rem);
+
+        let len = rdr.len() as u64;
+        if len == 0 {
+            Ok(Async::Ready(ChunkedState::Body))
+        } else {
+            let slice;
+            if *rem > len {
+                slice = rdr.take().freeze();
+                *rem -= len;
+            } else {
+                slice = rdr.split_to(*rem as usize).freeze();
+                *rem = 0;
+            }
+            *buf = Some(slice);
+            if *rem > 0 {
+                Ok(Async::Ready(ChunkedState::Body))
+            } else {
+                Ok(Async::Ready(ChunkedState::BodyCr))
+            }
+        }
+    }
+
+    fn read_body_cr(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\r' => Ok(Async::Ready(ChunkedState::BodyLf)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk body CR",
+            )),
+        }
+    }
+    fn read_body_lf(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\n' => Ok(Async::Ready(ChunkedState::Size)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk body LF",
+            )),
+        }
+    }
+    fn read_end_cr(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\r' => Ok(Async::Ready(ChunkedState::EndLf)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk end CR",
+            )),
+        }
+    }
+    fn read_end_lf(rdr: &mut BytesMut) -> Poll<ChunkedState, io::Error> {
+        match byte!(rdr) {
+            b'\n' => Ok(Async::Ready(ChunkedState::End)),
+            _ => Err(io::Error::new(
+                io::ErrorKind::InvalidInput,
+                "Invalid chunk end LF",
+            )),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/h1writer.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/h1writer.rs.html new file mode 100644 index 0000000..245e9ba --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/h1writer.rs.html @@ -0,0 +1,693 @@ +h1writer.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+
+// #![cfg_attr(feature = "cargo-clippy", allow(redundant_field_names))]
+
+use std::io::{self, Write};
+use std::rc::Rc;
+
+use bytes::{BufMut, BytesMut};
+use futures::{Async, Poll};
+use tokio_io::AsyncWrite;
+
+use super::helpers;
+use super::output::{Output, ResponseInfo, ResponseLength};
+use super::settings::WorkerSettings;
+use super::Request;
+use super::{Writer, WriterState, MAX_WRITE_BUFFER_SIZE};
+use body::{Binary, Body};
+use header::ContentEncoding;
+use http::header::{
+    HeaderValue, CONNECTION, CONTENT_ENCODING, CONTENT_LENGTH, DATE, TRANSFER_ENCODING,
+};
+use http::{Method, Version};
+use httpresponse::HttpResponse;
+
+const AVERAGE_HEADER_SIZE: usize = 30; // totally scientific
+
+bitflags! {
+    struct Flags: u8 {
+        const STARTED = 0b0000_0001;
+        const UPGRADE = 0b0000_0010;
+        const KEEPALIVE = 0b0000_0100;
+        const DISCONNECTED = 0b0000_1000;
+    }
+}
+
+pub(crate) struct H1Writer<T: AsyncWrite, H: 'static> {
+    flags: Flags,
+    stream: T,
+    written: u64,
+    headers_size: u32,
+    buffer: Output,
+    buffer_capacity: usize,
+    settings: Rc<WorkerSettings<H>>,
+}
+
+impl<T: AsyncWrite, H: 'static> H1Writer<T, H> {
+    pub fn new(stream: T, settings: Rc<WorkerSettings<H>>) -> H1Writer<T, H> {
+        H1Writer {
+            flags: Flags::KEEPALIVE,
+            written: 0,
+            headers_size: 0,
+            buffer: Output::Buffer(settings.get_bytes()),
+            buffer_capacity: 0,
+            stream,
+            settings,
+        }
+    }
+
+    pub fn get_mut(&mut self) -> &mut T {
+        &mut self.stream
+    }
+
+    pub fn reset(&mut self) {
+        self.written = 0;
+        self.flags = Flags::KEEPALIVE;
+    }
+
+    pub fn disconnected(&mut self) {}
+
+    pub fn keepalive(&self) -> bool {
+        self.flags.contains(Flags::KEEPALIVE) && !self.flags.contains(Flags::UPGRADE)
+    }
+
+    fn write_data(stream: &mut T, data: &[u8]) -> io::Result<usize> {
+        let mut written = 0;
+        while written < data.len() {
+            match stream.write(&data[written..]) {
+                Ok(0) => {
+                    return Err(io::Error::new(io::ErrorKind::WriteZero, ""));
+                }
+                Ok(n) => {
+                    written += n;
+                }
+                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
+                    return Ok(written)
+                }
+                Err(err) => return Err(err),
+            }
+        }
+        Ok(written)
+    }
+}
+
+impl<T: AsyncWrite, H: 'static> Drop for H1Writer<T, H> {
+    fn drop(&mut self) {
+        if let Some(bytes) = self.buffer.take_option() {
+            self.settings.release_bytes(bytes);
+        }
+    }
+}
+
+impl<T: AsyncWrite, H: 'static> Writer for H1Writer<T, H> {
+    #[inline]
+    fn written(&self) -> u64 {
+        self.written
+    }
+
+    #[inline]
+    fn set_date(&mut self) {
+        self.settings.set_date(self.buffer.as_mut(), true)
+    }
+
+    #[inline]
+    fn buffer(&mut self) -> &mut BytesMut {
+        self.buffer.as_mut()
+    }
+
+    fn start(
+        &mut self, req: &Request, msg: &mut HttpResponse, encoding: ContentEncoding,
+    ) -> io::Result<WriterState> {
+        // prepare task
+        let mut info = ResponseInfo::new(req.inner.method == Method::HEAD);
+        self.buffer.for_server(&mut info, &req.inner, msg, encoding);
+        if msg.keep_alive().unwrap_or_else(|| req.keep_alive()) {
+            self.flags = Flags::STARTED | Flags::KEEPALIVE;
+        } else {
+            self.flags = Flags::STARTED;
+        }
+
+        // Connection upgrade
+        let version = msg.version().unwrap_or_else(|| req.inner.version);
+        if msg.upgrade() {
+            self.flags.insert(Flags::UPGRADE);
+            msg.headers_mut()
+                .insert(CONNECTION, HeaderValue::from_static("upgrade"));
+        }
+        // keep-alive
+        else if self.flags.contains(Flags::KEEPALIVE) {
+            if version < Version::HTTP_11 {
+                msg.headers_mut()
+                    .insert(CONNECTION, HeaderValue::from_static("keep-alive"));
+            }
+        } else if version >= Version::HTTP_11 {
+            msg.headers_mut()
+                .insert(CONNECTION, HeaderValue::from_static("close"));
+        }
+        let body = msg.replace_body(Body::Empty);
+
+        // render message
+        {
+            // output buffer
+            let mut buffer = self.buffer.as_mut();
+
+            let reason = msg.reason().as_bytes();
+            if let Body::Binary(ref bytes) = body {
+                buffer.reserve(
+                    256
+                        + msg.headers().len() * AVERAGE_HEADER_SIZE
+                        + bytes.len()
+                        + reason.len(),
+                );
+            } else {
+                buffer.reserve(
+                    256 + msg.headers().len() * AVERAGE_HEADER_SIZE + reason.len(),
+                );
+            }
+
+            // status line
+            helpers::write_status_line(version, msg.status().as_u16(), &mut buffer);
+            buffer.extend_from_slice(reason);
+
+            // content length
+            match info.length {
+                ResponseLength::Chunked => {
+                    buffer.extend_from_slice(b"\r\ntransfer-encoding: chunked\r\n")
+                }
+                ResponseLength::Zero => {
+                    buffer.extend_from_slice(b"\r\ncontent-length: 0\r\n")
+                }
+                ResponseLength::Length(len) => {
+                    helpers::write_content_length(len, &mut buffer)
+                }
+                ResponseLength::Length64(len) => {
+                    buffer.extend_from_slice(b"\r\ncontent-length: ");
+                    write!(buffer.writer(), "{}", len)?;
+                    buffer.extend_from_slice(b"\r\n");
+                }
+                ResponseLength::None => buffer.extend_from_slice(b"\r\n"),
+            }
+            if let Some(ce) = info.content_encoding {
+                buffer.extend_from_slice(b"content-encoding: ");
+                buffer.extend_from_slice(ce.as_ref());
+                buffer.extend_from_slice(b"\r\n");
+            }
+
+            // write headers
+            let mut pos = 0;
+            let mut has_date = false;
+            let mut remaining = buffer.remaining_mut();
+            unsafe {
+                let mut buf = &mut *(buffer.bytes_mut() as *mut [u8]);
+                for (key, value) in msg.headers() {
+                    match *key {
+                        TRANSFER_ENCODING => continue,
+                        CONTENT_ENCODING => if encoding != ContentEncoding::Identity {
+                            continue;
+                        },
+                        CONTENT_LENGTH => match info.length {
+                            ResponseLength::None => (),
+                            _ => continue,
+                        },
+                        DATE => {
+                            has_date = true;
+                        }
+                        _ => (),
+                    }
+
+                    let v = value.as_ref();
+                    let k = key.as_str().as_bytes();
+                    let len = k.len() + v.len() + 4;
+                    if len > remaining {
+                        buffer.advance_mut(pos);
+                        pos = 0;
+                        buffer.reserve(len);
+                        remaining = buffer.remaining_mut();
+                        buf = &mut *(buffer.bytes_mut() as *mut _);
+                    }
+
+                    buf[pos..pos + k.len()].copy_from_slice(k);
+                    pos += k.len();
+                    buf[pos..pos + 2].copy_from_slice(b": ");
+                    pos += 2;
+                    buf[pos..pos + v.len()].copy_from_slice(v);
+                    pos += v.len();
+                    buf[pos..pos + 2].copy_from_slice(b"\r\n");
+                    pos += 2;
+                    remaining -= len;
+                }
+                buffer.advance_mut(pos);
+            }
+
+            // optimized date header, set_date writes \r\n
+            if !has_date {
+                self.settings.set_date(&mut buffer, true);
+            } else {
+                // msg eof
+                buffer.extend_from_slice(b"\r\n");
+            }
+            self.headers_size = buffer.len() as u32;
+        }
+
+        if let Body::Binary(bytes) = body {
+            self.written = bytes.len() as u64;
+            self.buffer.write(bytes.as_ref())?;
+        } else {
+            // capacity, makes sense only for streaming or actor
+            self.buffer_capacity = msg.write_buffer_capacity();
+
+            msg.replace_body(body);
+        }
+        Ok(WriterState::Done)
+    }
+
+    fn write(&mut self, payload: &Binary) -> io::Result<WriterState> {
+        self.written += payload.len() as u64;
+        if !self.flags.contains(Flags::DISCONNECTED) {
+            if self.flags.contains(Flags::STARTED) {
+                // shortcut for upgraded connection
+                if self.flags.contains(Flags::UPGRADE) {
+                    if self.buffer.is_empty() {
+                        let pl: &[u8] = payload.as_ref();
+                        let n = match Self::write_data(&mut self.stream, pl) {
+                            Err(err) => {
+                                if err.kind() == io::ErrorKind::WriteZero {
+                                    self.disconnected();
+                                }
+
+                                return Err(err);
+                            }
+                            Ok(val) => val,
+                        };
+                        if n < pl.len() {
+                            self.buffer.write(&pl[n..])?;
+                            return Ok(WriterState::Done);
+                        }
+                    } else {
+                        self.buffer.write(payload.as_ref())?;
+                    }
+                } else {
+                    // TODO: add warning, write after EOF
+                    self.buffer.write(payload.as_ref())?;
+                }
+            } else {
+                // could be response to EXCEPT header
+                self.buffer.write(payload.as_ref())?;
+            }
+        }
+
+        if self.buffer.len() > self.buffer_capacity {
+            Ok(WriterState::Pause)
+        } else {
+            Ok(WriterState::Done)
+        }
+    }
+
+    fn write_eof(&mut self) -> io::Result<WriterState> {
+        if !self.buffer.write_eof()? {
+            Err(io::Error::new(
+                io::ErrorKind::Other,
+                "Last payload item, but eof is not reached",
+            ))
+        } else if self.buffer.len() > MAX_WRITE_BUFFER_SIZE {
+            Ok(WriterState::Pause)
+        } else {
+            Ok(WriterState::Done)
+        }
+    }
+
+    #[inline]
+    fn poll_completed(&mut self, shutdown: bool) -> Poll<(), io::Error> {
+        if !self.buffer.is_empty() {
+            let written = {
+                match Self::write_data(&mut self.stream, self.buffer.as_ref().as_ref()) {
+                    Err(err) => {
+                        if err.kind() == io::ErrorKind::WriteZero {
+                            self.disconnected();
+                        }
+
+                        return Err(err);
+                    }
+                    Ok(val) => val,
+                }
+            };
+            let _ = self.buffer.split_to(written);
+            if shutdown && !self.buffer.is_empty()
+                || (self.buffer.len() > self.buffer_capacity)
+            {
+                return Ok(Async::NotReady);
+            }
+        }
+        if shutdown {
+            self.stream.shutdown()
+        } else {
+            Ok(Async::Ready(()))
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/h2.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/h2.rs.html new file mode 100644 index 0000000..2c58bed --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/h2.rs.html @@ -0,0 +1,891 @@ +h2.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+
+use std::collections::VecDeque;
+use std::io::{Read, Write};
+use std::net::SocketAddr;
+use std::rc::Rc;
+use std::time::{Duration, Instant};
+use std::{cmp, io, mem};
+
+use bytes::{Buf, Bytes};
+use futures::{Async, Future, Poll, Stream};
+use http2::server::{self, Connection, Handshake, SendResponse};
+use http2::{Reason, RecvStream};
+use modhttp::request::Parts;
+use tokio_io::{AsyncRead, AsyncWrite};
+use tokio_timer::Delay;
+
+use error::{Error, PayloadError};
+use http::{StatusCode, Version};
+use payload::{Payload, PayloadStatus, PayloadWriter};
+use uri::Url;
+
+use super::error::ServerError;
+use super::h2writer::H2Writer;
+use super::input::PayloadType;
+use super::settings::WorkerSettings;
+use super::{HttpHandler, HttpHandlerTask, Writer};
+
+bitflags! {
+    struct Flags: u8 {
+        const DISCONNECTED = 0b0000_0010;
+    }
+}
+
+/// HTTP/2 Transport
+pub(crate) struct Http2<T, H>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+    H: HttpHandler + 'static,
+{
+    flags: Flags,
+    settings: Rc<WorkerSettings<H>>,
+    addr: Option<SocketAddr>,
+    state: State<IoWrapper<T>>,
+    tasks: VecDeque<Entry<H>>,
+    keepalive_timer: Option<Delay>,
+}
+
+enum State<T: AsyncRead + AsyncWrite> {
+    Handshake(Handshake<T, Bytes>),
+    Connection(Connection<T, Bytes>),
+    Empty,
+}
+
+impl<T, H> Http2<T, H>
+where
+    T: AsyncRead + AsyncWrite + 'static,
+    H: HttpHandler + 'static,
+{
+    pub fn new(
+        settings: Rc<WorkerSettings<H>>, io: T, addr: Option<SocketAddr>, buf: Bytes,
+    ) -> Self {
+        Http2 {
+            flags: Flags::empty(),
+            tasks: VecDeque::new(),
+            state: State::Handshake(server::handshake(IoWrapper {
+                unread: if buf.is_empty() { None } else { Some(buf) },
+                inner: io,
+            })),
+            keepalive_timer: None,
+            addr,
+            settings,
+        }
+    }
+
+    pub(crate) fn shutdown(&mut self) {
+        self.state = State::Empty;
+        self.tasks.clear();
+        self.keepalive_timer.take();
+    }
+
+    pub fn settings(&self) -> &WorkerSettings<H> {
+        self.settings.as_ref()
+    }
+
+    pub fn poll(&mut self) -> Poll<(), ()> {
+        // server
+        if let State::Connection(ref mut conn) = self.state {
+            // keep-alive timer
+            if let Some(ref mut timeout) = self.keepalive_timer {
+                match timeout.poll() {
+                    Ok(Async::Ready(_)) => {
+                        trace!("Keep-alive timeout, close connection");
+                        return Ok(Async::Ready(()));
+                    }
+                    Ok(Async::NotReady) => (),
+                    Err(_) => unreachable!(),
+                }
+            }
+
+            loop {
+                let mut not_ready = true;
+
+                // check in-flight connections
+                for item in &mut self.tasks {
+                    // read payload
+                    item.poll_payload();
+
+                    if !item.flags.contains(EntryFlags::EOF) {
+                        let retry = item.payload.need_read() == PayloadStatus::Read;
+                        loop {
+                            match item.task.poll_io(&mut item.stream) {
+                                Ok(Async::Ready(ready)) => {
+                                    if ready {
+                                        item.flags.insert(
+                                            EntryFlags::EOF | EntryFlags::FINISHED,
+                                        );
+                                    } else {
+                                        item.flags.insert(EntryFlags::EOF);
+                                    }
+                                    not_ready = false;
+                                }
+                                Ok(Async::NotReady) => {
+                                    if item.payload.need_read() == PayloadStatus::Read
+                                        && !retry
+                                    {
+                                        continue;
+                                    }
+                                }
+                                Err(err) => {
+                                    error!("Unhandled error: {}", err);
+                                    item.flags.insert(
+                                        EntryFlags::EOF
+                                            | EntryFlags::ERROR
+                                            | EntryFlags::WRITE_DONE,
+                                    );
+                                    item.stream.reset(Reason::INTERNAL_ERROR);
+                                }
+                            }
+                            break;
+                        }
+                    } else if !item.flags.contains(EntryFlags::FINISHED) {
+                        match item.task.poll_completed() {
+                            Ok(Async::NotReady) => (),
+                            Ok(Async::Ready(_)) => {
+                                not_ready = false;
+                                item.flags.insert(EntryFlags::FINISHED);
+                            }
+                            Err(err) => {
+                                item.flags.insert(
+                                    EntryFlags::ERROR
+                                        | EntryFlags::WRITE_DONE
+                                        | EntryFlags::FINISHED,
+                                );
+                                error!("Unhandled error: {}", err);
+                            }
+                        }
+                    }
+
+                    if item.flags.contains(EntryFlags::FINISHED)
+                        && !item.flags.contains(EntryFlags::WRITE_DONE)
+                    {
+                        match item.stream.poll_completed(false) {
+                            Ok(Async::NotReady) => (),
+                            Ok(Async::Ready(_)) => {
+                                not_ready = false;
+                                item.flags.insert(EntryFlags::WRITE_DONE);
+                            }
+                            Err(_err) => {
+                                item.flags.insert(EntryFlags::ERROR);
+                            }
+                        }
+                    }
+                }
+
+                // cleanup finished tasks
+                while !self.tasks.is_empty() {
+                    if self.tasks[0].flags.contains(EntryFlags::EOF)
+                        && self.tasks[0].flags.contains(EntryFlags::WRITE_DONE)
+                        || self.tasks[0].flags.contains(EntryFlags::ERROR)
+                    {
+                        self.tasks.pop_front();
+                    } else {
+                        break;
+                    }
+                }
+
+                // get request
+                if !self.flags.contains(Flags::DISCONNECTED) {
+                    match conn.poll() {
+                        Ok(Async::Ready(None)) => {
+                            not_ready = false;
+                            self.flags.insert(Flags::DISCONNECTED);
+                            for entry in &mut self.tasks {
+                                entry.task.disconnected()
+                            }
+                        }
+                        Ok(Async::Ready(Some((req, resp)))) => {
+                            not_ready = false;
+                            let (parts, body) = req.into_parts();
+
+                            // stop keepalive timer
+                            self.keepalive_timer.take();
+
+                            self.tasks.push_back(Entry::new(
+                                parts,
+                                body,
+                                resp,
+                                self.addr,
+                                &self.settings,
+                            ));
+                        }
+                        Ok(Async::NotReady) => {
+                            // start keep-alive timer
+                            if self.tasks.is_empty() {
+                                if self.settings.keep_alive_enabled() {
+                                    let keep_alive = self.settings.keep_alive();
+                                    if keep_alive > 0 && self.keepalive_timer.is_none() {
+                                        trace!("Start keep-alive timer");
+                                        let mut timeout = Delay::new(
+                                            Instant::now()
+                                                + Duration::new(keep_alive, 0),
+                                        );
+                                        // register timeout
+                                        let _ = timeout.poll();
+                                        self.keepalive_timer = Some(timeout);
+                                    }
+                                } else {
+                                    // keep-alive disable, drop connection
+                                    return conn.poll_close().map_err(|e| {
+                                        error!("Error during connection close: {}", e)
+                                    });
+                                }
+                            } else {
+                                // keep-alive unset, rely on operating system
+                                return Ok(Async::NotReady);
+                            }
+                        }
+                        Err(err) => {
+                            trace!("Connection error: {}", err);
+                            self.flags.insert(Flags::DISCONNECTED);
+                            for entry in &mut self.tasks {
+                                entry.task.disconnected()
+                            }
+                            self.keepalive_timer.take();
+                        }
+                    }
+                }
+
+                if not_ready {
+                    if self.tasks.is_empty() && self.flags.contains(Flags::DISCONNECTED)
+                    {
+                        return conn
+                            .poll_close()
+                            .map_err(|e| error!("Error during connection close: {}", e));
+                    } else {
+                        return Ok(Async::NotReady);
+                    }
+                }
+            }
+        }
+
+        // handshake
+        self.state = if let State::Handshake(ref mut handshake) = self.state {
+            match handshake.poll() {
+                Ok(Async::Ready(conn)) => State::Connection(conn),
+                Ok(Async::NotReady) => return Ok(Async::NotReady),
+                Err(err) => {
+                    trace!("Error handling connection: {}", err);
+                    return Err(());
+                }
+            }
+        } else {
+            mem::replace(&mut self.state, State::Empty)
+        };
+
+        self.poll()
+    }
+}
+
+bitflags! {
+    struct EntryFlags: u8 {
+        const EOF = 0b0000_0001;
+        const REOF = 0b0000_0010;
+        const ERROR = 0b0000_0100;
+        const FINISHED = 0b0000_1000;
+        const WRITE_DONE = 0b0001_0000;
+    }
+}
+
+enum EntryPipe<H: HttpHandler> {
+    Task(H::Task),
+    Error(Box<HttpHandlerTask>),
+}
+
+impl<H: HttpHandler> EntryPipe<H> {
+    fn disconnected(&mut self) {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.disconnected(),
+            EntryPipe::Error(ref mut task) => task.disconnected(),
+        }
+    }
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error> {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.poll_io(io),
+            EntryPipe::Error(ref mut task) => task.poll_io(io),
+        }
+    }
+    fn poll_completed(&mut self) -> Poll<(), Error> {
+        match *self {
+            EntryPipe::Task(ref mut task) => task.poll_completed(),
+            EntryPipe::Error(ref mut task) => task.poll_completed(),
+        }
+    }
+}
+
+struct Entry<H: HttpHandler + 'static> {
+    task: EntryPipe<H>,
+    payload: PayloadType,
+    recv: RecvStream,
+    stream: H2Writer<H>,
+    flags: EntryFlags,
+}
+
+impl<H: HttpHandler + 'static> Entry<H> {
+    fn new(
+        parts: Parts, recv: RecvStream, resp: SendResponse<Bytes>,
+        addr: Option<SocketAddr>, settings: &Rc<WorkerSettings<H>>,
+    ) -> Entry<H>
+    where
+        H: HttpHandler + 'static,
+    {
+        // Payload and Content-Encoding
+        let (psender, payload) = Payload::new(false);
+
+        let mut msg = settings.get_request();
+        {
+            let inner = msg.inner_mut();
+            inner.url = Url::new(parts.uri);
+            inner.method = parts.method;
+            inner.version = parts.version;
+            inner.headers = parts.headers;
+            *inner.payload.borrow_mut() = Some(payload);
+            inner.addr = addr;
+        }
+
+        // Payload sender
+        let psender = PayloadType::new(msg.headers(), psender);
+
+        // start request processing
+        let mut task = None;
+        for h in settings.handlers().iter_mut() {
+            msg = match h.handle(msg) {
+                Ok(t) => {
+                    task = Some(t);
+                    break;
+                }
+                Err(msg) => msg,
+            }
+        }
+
+        Entry {
+            task: task.map(EntryPipe::Task).unwrap_or_else(|| {
+                EntryPipe::Error(ServerError::err(
+                    Version::HTTP_2,
+                    StatusCode::NOT_FOUND,
+                ))
+            }),
+            payload: psender,
+            stream: H2Writer::new(resp, Rc::clone(settings)),
+            flags: EntryFlags::empty(),
+            recv,
+        }
+    }
+
+    fn poll_payload(&mut self) {
+        while !self.flags.contains(EntryFlags::REOF)
+            && self.payload.need_read() == PayloadStatus::Read
+        {
+            match self.recv.poll() {
+                Ok(Async::Ready(Some(chunk))) => {
+                    let l = chunk.len();
+                    self.payload.feed_data(chunk);
+                    if let Err(err) = self.recv.release_capacity().release_capacity(l) {
+                        self.payload.set_error(PayloadError::Http2(err));
+                        break;
+                    }
+                }
+                Ok(Async::Ready(None)) => {
+                    self.flags.insert(EntryFlags::REOF);
+                    self.payload.feed_eof();
+                }
+                Ok(Async::NotReady) => break,
+                Err(err) => {
+                    self.payload.set_error(PayloadError::Http2(err));
+                    break;
+                }
+            }
+        }
+    }
+}
+
+struct IoWrapper<T> {
+    unread: Option<Bytes>,
+    inner: T,
+}
+
+impl<T: Read> Read for IoWrapper<T> {
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        if let Some(mut bytes) = self.unread.take() {
+            let size = cmp::min(buf.len(), bytes.len());
+            buf[..size].copy_from_slice(&bytes[..size]);
+            if bytes.len() > size {
+                bytes.split_to(size);
+                self.unread = Some(bytes);
+            }
+            Ok(size)
+        } else {
+            self.inner.read(buf)
+        }
+    }
+}
+
+impl<T: Write> Write for IoWrapper<T> {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.inner.write(buf)
+    }
+    fn flush(&mut self) -> io::Result<()> {
+        self.inner.flush()
+    }
+}
+
+impl<T: AsyncRead + 'static> AsyncRead for IoWrapper<T> {
+    unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+        self.inner.prepare_uninitialized_buffer(buf)
+    }
+}
+
+impl<T: AsyncWrite + 'static> AsyncWrite for IoWrapper<T> {
+    fn shutdown(&mut self) -> Poll<(), io::Error> {
+        self.inner.shutdown()
+    }
+    fn write_buf<B: Buf>(&mut self, buf: &mut B) -> Poll<usize, io::Error> {
+        self.inner.write_buf(buf)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/h2writer.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/h2writer.rs.html new file mode 100644 index 0000000..aae5641 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/h2writer.rs.html @@ -0,0 +1,527 @@ +h2writer.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+
+#![cfg_attr(feature = "cargo-clippy", allow(redundant_field_names))]
+
+use bytes::{Bytes, BytesMut};
+use futures::{Async, Poll};
+use http2::server::SendResponse;
+use http2::{Reason, SendStream};
+use modhttp::Response;
+use std::rc::Rc;
+use std::{cmp, io};
+
+use http::{HttpTryFrom, Method, Version};
+
+use super::helpers;
+use super::message::Request;
+use super::output::{Output, ResponseInfo, ResponseLength};
+use super::settings::WorkerSettings;
+use super::{Writer, WriterState, MAX_WRITE_BUFFER_SIZE};
+use body::{Binary, Body};
+use header::ContentEncoding;
+use http::header::{
+    HeaderValue, CONNECTION, CONTENT_ENCODING, CONTENT_LENGTH, DATE, TRANSFER_ENCODING,
+};
+use httpresponse::HttpResponse;
+
+const CHUNK_SIZE: usize = 16_384;
+
+bitflags! {
+    struct Flags: u8 {
+        const STARTED = 0b0000_0001;
+        const DISCONNECTED = 0b0000_0010;
+        const EOF = 0b0000_0100;
+        const RESERVED = 0b0000_1000;
+    }
+}
+
+pub(crate) struct H2Writer<H: 'static> {
+    respond: SendResponse<Bytes>,
+    stream: Option<SendStream<Bytes>>,
+    flags: Flags,
+    written: u64,
+    buffer: Output,
+    buffer_capacity: usize,
+    settings: Rc<WorkerSettings<H>>,
+}
+
+impl<H: 'static> H2Writer<H> {
+    pub fn new(
+        respond: SendResponse<Bytes>, settings: Rc<WorkerSettings<H>>,
+    ) -> H2Writer<H> {
+        H2Writer {
+            stream: None,
+            flags: Flags::empty(),
+            written: 0,
+            buffer: Output::Buffer(settings.get_bytes()),
+            buffer_capacity: 0,
+            respond,
+            settings,
+        }
+    }
+
+    pub fn reset(&mut self, reason: Reason) {
+        if let Some(mut stream) = self.stream.take() {
+            stream.send_reset(reason)
+        }
+    }
+}
+
+impl<H: 'static> Drop for H2Writer<H> {
+    fn drop(&mut self) {
+        self.settings.release_bytes(self.buffer.take());
+    }
+}
+
+impl<H: 'static> Writer for H2Writer<H> {
+    fn written(&self) -> u64 {
+        self.written
+    }
+
+    #[inline]
+    fn set_date(&mut self) {
+        self.settings.set_date(self.buffer.as_mut(), true)
+    }
+
+    #[inline]
+    fn buffer(&mut self) -> &mut BytesMut {
+        self.buffer.as_mut()
+    }
+
+    fn start(
+        &mut self, req: &Request, msg: &mut HttpResponse, encoding: ContentEncoding,
+    ) -> io::Result<WriterState> {
+        // prepare response
+        self.flags.insert(Flags::STARTED);
+        let mut info = ResponseInfo::new(req.inner.method == Method::HEAD);
+        self.buffer.for_server(&mut info, &req.inner, msg, encoding);
+
+        let mut has_date = false;
+        let mut resp = Response::new(());
+        *resp.status_mut() = msg.status();
+        *resp.version_mut() = Version::HTTP_2;
+        for (key, value) in msg.headers().iter() {
+            match *key {
+                // http2 specific
+                CONNECTION | TRANSFER_ENCODING => continue,
+                CONTENT_ENCODING => if encoding != ContentEncoding::Identity {
+                    continue;
+                },
+                CONTENT_LENGTH => match info.length {
+                    ResponseLength::None => (),
+                    _ => continue,
+                },
+                DATE => has_date = true,
+                _ => (),
+            }
+            resp.headers_mut().insert(key, value.clone());
+        }
+
+        // set date header
+        if !has_date {
+            let mut bytes = BytesMut::with_capacity(29);
+            self.settings.set_date(&mut bytes, false);
+            resp.headers_mut()
+                .insert(DATE, HeaderValue::try_from(bytes.freeze()).unwrap());
+        }
+
+        // content length
+        match info.length {
+            ResponseLength::Zero => {
+                resp.headers_mut()
+                    .insert(CONTENT_LENGTH, HeaderValue::from_static("0"));
+                self.flags.insert(Flags::EOF);
+            }
+            ResponseLength::Length(len) => {
+                let mut val = BytesMut::new();
+                helpers::convert_usize(len, &mut val);
+                let l = val.len();
+                resp.headers_mut().insert(
+                    CONTENT_LENGTH,
+                    HeaderValue::try_from(val.split_to(l - 2).freeze()).unwrap(),
+                );
+            }
+            ResponseLength::Length64(len) => {
+                let l = format!("{}", len);
+                resp.headers_mut()
+                    .insert(CONTENT_LENGTH, HeaderValue::try_from(l.as_str()).unwrap());
+            }
+            _ => (),
+        }
+        if let Some(ce) = info.content_encoding {
+            resp.headers_mut()
+                .insert(CONTENT_ENCODING, HeaderValue::try_from(ce).unwrap());
+        }
+
+        match self
+            .respond
+            .send_response(resp, self.flags.contains(Flags::EOF))
+        {
+            Ok(stream) => self.stream = Some(stream),
+            Err(_) => return Err(io::Error::new(io::ErrorKind::Other, "err")),
+        }
+
+        trace!("Response: {:?}", msg);
+
+        let body = msg.replace_body(Body::Empty);
+        if let Body::Binary(bytes) = body {
+            if bytes.is_empty() {
+                Ok(WriterState::Done)
+            } else {
+                self.flags.insert(Flags::EOF);
+                self.written = bytes.len() as u64;
+                self.buffer.write(bytes.as_ref())?;
+                if let Some(ref mut stream) = self.stream {
+                    self.flags.insert(Flags::RESERVED);
+                    stream.reserve_capacity(cmp::min(self.buffer.len(), CHUNK_SIZE));
+                }
+                Ok(WriterState::Pause)
+            }
+        } else {
+            msg.replace_body(body);
+            self.buffer_capacity = msg.write_buffer_capacity();
+            Ok(WriterState::Done)
+        }
+    }
+
+    fn write(&mut self, payload: &Binary) -> io::Result<WriterState> {
+        self.written = payload.len() as u64;
+
+        if !self.flags.contains(Flags::DISCONNECTED) {
+            if self.flags.contains(Flags::STARTED) {
+                // TODO: add warning, write after EOF
+                self.buffer.write(payload.as_ref())?;
+            } else {
+                // might be response for EXCEPT
+                error!("Not supported");
+            }
+        }
+
+        if self.buffer.len() > self.buffer_capacity {
+            Ok(WriterState::Pause)
+        } else {
+            Ok(WriterState::Done)
+        }
+    }
+
+    fn write_eof(&mut self) -> io::Result<WriterState> {
+        self.flags.insert(Flags::EOF);
+        if !self.buffer.write_eof()? {
+            Err(io::Error::new(
+                io::ErrorKind::Other,
+                "Last payload item, but eof is not reached",
+            ))
+        } else if self.buffer.len() > MAX_WRITE_BUFFER_SIZE {
+            Ok(WriterState::Pause)
+        } else {
+            Ok(WriterState::Done)
+        }
+    }
+
+    fn poll_completed(&mut self, _shutdown: bool) -> Poll<(), io::Error> {
+        if !self.flags.contains(Flags::STARTED) {
+            return Ok(Async::NotReady);
+        }
+
+        if let Some(ref mut stream) = self.stream {
+            // reserve capacity
+            if !self.flags.contains(Flags::RESERVED) && !self.buffer.is_empty() {
+                self.flags.insert(Flags::RESERVED);
+                stream.reserve_capacity(cmp::min(self.buffer.len(), CHUNK_SIZE));
+            }
+
+            loop {
+                match stream.poll_capacity() {
+                    Ok(Async::NotReady) => return Ok(Async::NotReady),
+                    Ok(Async::Ready(None)) => return Ok(Async::Ready(())),
+                    Ok(Async::Ready(Some(cap))) => {
+                        let len = self.buffer.len();
+                        let bytes = self.buffer.split_to(cmp::min(cap, len));
+                        let eof =
+                            self.buffer.is_empty() && self.flags.contains(Flags::EOF);
+                        self.written += bytes.len() as u64;
+
+                        if let Err(e) = stream.send_data(bytes.freeze(), eof) {
+                            return Err(io::Error::new(io::ErrorKind::Other, e));
+                        } else if !self.buffer.is_empty() {
+                            let cap = cmp::min(self.buffer.len(), CHUNK_SIZE);
+                            stream.reserve_capacity(cap);
+                        } else {
+                            if eof {
+                                stream.reserve_capacity(0);
+                                continue;
+                            }
+                            self.flags.remove(Flags::RESERVED);
+                            return Ok(Async::Ready(()));
+                        }
+                    }
+                    Err(e) => return Err(io::Error::new(io::ErrorKind::Other, e)),
+                }
+            }
+        }
+        Ok(Async::Ready(()))
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/helpers.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/helpers.rs.html new file mode 100644 index 0000000..9990272 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/helpers.rs.html @@ -0,0 +1,391 @@ +helpers.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+
+use bytes::{BufMut, BytesMut};
+use http::Version;
+use std::{mem, ptr, slice};
+
+const DEC_DIGITS_LUT: &[u8] = b"0001020304050607080910111213141516171819\
+      2021222324252627282930313233343536373839\
+      4041424344454647484950515253545556575859\
+      6061626364656667686970717273747576777879\
+      8081828384858687888990919293949596979899";
+
+pub(crate) fn write_status_line(version: Version, mut n: u16, bytes: &mut BytesMut) {
+    let mut buf: [u8; 13] = [
+        b'H', b'T', b'T', b'P', b'/', b'1', b'.', b'1', b' ', b' ', b' ', b' ', b' ',
+    ];
+    match version {
+        Version::HTTP_2 => buf[5] = b'2',
+        Version::HTTP_10 => buf[7] = b'0',
+        Version::HTTP_09 => {
+            buf[5] = b'0';
+            buf[7] = b'9';
+        }
+        _ => (),
+    }
+
+    let mut curr: isize = 12;
+    let buf_ptr = buf.as_mut_ptr();
+    let lut_ptr = DEC_DIGITS_LUT.as_ptr();
+    let four = n > 999;
+
+    unsafe {
+        // decode 2 more chars, if > 2 chars
+        let d1 = (n % 100) << 1;
+        n /= 100;
+        curr -= 2;
+        ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(curr), 2);
+
+        // decode last 1 or 2 chars
+        if n < 10 {
+            curr -= 1;
+            *buf_ptr.offset(curr) = (n as u8) + b'0';
+        } else {
+            let d1 = n << 1;
+            curr -= 2;
+            ptr::copy_nonoverlapping(
+                lut_ptr.offset(d1 as isize),
+                buf_ptr.offset(curr),
+                2,
+            );
+        }
+    }
+
+    bytes.put_slice(&buf);
+    if four {
+        bytes.put(b' ');
+    }
+}
+
+/// NOTE: bytes object has to contain enough space
+pub fn write_content_length(mut n: usize, bytes: &mut BytesMut) {
+    if n < 10 {
+        let mut buf: [u8; 21] = [
+            b'\r', b'\n', b'c', b'o', b'n', b't', b'e', b'n', b't', b'-', b'l', b'e',
+            b'n', b'g', b't', b'h', b':', b' ', b'0', b'\r', b'\n',
+        ];
+        buf[18] = (n as u8) + b'0';
+        bytes.put_slice(&buf);
+    } else if n < 100 {
+        let mut buf: [u8; 22] = [
+            b'\r', b'\n', b'c', b'o', b'n', b't', b'e', b'n', b't', b'-', b'l', b'e',
+            b'n', b'g', b't', b'h', b':', b' ', b'0', b'0', b'\r', b'\n',
+        ];
+        let d1 = n << 1;
+        unsafe {
+            ptr::copy_nonoverlapping(
+                DEC_DIGITS_LUT.as_ptr().offset(d1 as isize),
+                buf.as_mut_ptr().offset(18),
+                2,
+            );
+        }
+        bytes.put_slice(&buf);
+    } else if n < 1000 {
+        let mut buf: [u8; 23] = [
+            b'\r', b'\n', b'c', b'o', b'n', b't', b'e', b'n', b't', b'-', b'l', b'e',
+            b'n', b'g', b't', b'h', b':', b' ', b'0', b'0', b'0', b'\r', b'\n',
+        ];
+        // decode 2 more chars, if > 2 chars
+        let d1 = (n % 100) << 1;
+        n /= 100;
+        unsafe {
+            ptr::copy_nonoverlapping(
+                DEC_DIGITS_LUT.as_ptr().offset(d1 as isize),
+                buf.as_mut_ptr().offset(19),
+                2,
+            )
+        };
+
+        // decode last 1
+        buf[18] = (n as u8) + b'0';
+
+        bytes.put_slice(&buf);
+    } else {
+        bytes.put_slice(b"\r\ncontent-length: ");
+        convert_usize(n, bytes);
+    }
+}
+
+pub(crate) fn convert_usize(mut n: usize, bytes: &mut BytesMut) {
+    unsafe {
+        let mut curr: isize = 39;
+        let mut buf: [u8; 41] = mem::uninitialized();
+        buf[39] = b'\r';
+        buf[40] = b'\n';
+        let buf_ptr = buf.as_mut_ptr();
+        let lut_ptr = DEC_DIGITS_LUT.as_ptr();
+
+        // eagerly decode 4 characters at a time
+        while n >= 10_000 {
+            let rem = (n % 10_000) as isize;
+            n /= 10_000;
+
+            let d1 = (rem / 100) << 1;
+            let d2 = (rem % 100) << 1;
+            curr -= 4;
+            ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
+            ptr::copy_nonoverlapping(lut_ptr.offset(d2), buf_ptr.offset(curr + 2), 2);
+        }
+
+        // if we reach here numbers are <= 9999, so at most 4 chars long
+        let mut n = n as isize; // possibly reduce 64bit math
+
+        // decode 2 more chars, if > 2 chars
+        if n >= 100 {
+            let d1 = (n % 100) << 1;
+            n /= 100;
+            curr -= 2;
+            ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
+        }
+
+        // decode last 1 or 2 chars
+        if n < 10 {
+            curr -= 1;
+            *buf_ptr.offset(curr) = (n as u8) + b'0';
+        } else {
+            let d1 = n << 1;
+            curr -= 2;
+            ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
+        }
+
+        bytes.extend_from_slice(slice::from_raw_parts(
+            buf_ptr.offset(curr),
+            41 - curr as usize,
+        ));
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_write_content_length() {
+        let mut bytes = BytesMut::new();
+        bytes.reserve(50);
+        write_content_length(0, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 0\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(9, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 9\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(10, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 10\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(99, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 99\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(100, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 100\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(101, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 101\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(998, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 998\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(1000, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 1000\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(1001, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 1001\r\n"[..]);
+        bytes.reserve(50);
+        write_content_length(5909, &mut bytes);
+        assert_eq!(bytes.take().freeze(), b"\r\ncontent-length: 5909\r\n"[..]);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/input.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/input.rs.html new file mode 100644 index 0000000..249eaa3 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/input.rs.html @@ -0,0 +1,717 @@ +input.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+
+use std::io::{Read, Write};
+use std::{cmp, io};
+
+#[cfg(feature = "brotli")]
+use brotli2::write::BrotliDecoder;
+use bytes::{BufMut, Bytes, BytesMut};
+use error::PayloadError;
+#[cfg(feature = "flate2")]
+use flate2::read::GzDecoder;
+#[cfg(feature = "flate2")]
+use flate2::write::DeflateDecoder;
+use header::ContentEncoding;
+use http::header::{HeaderMap, CONTENT_ENCODING};
+use payload::{PayloadSender, PayloadStatus, PayloadWriter};
+
+pub(crate) enum PayloadType {
+    Sender(PayloadSender),
+    Encoding(Box<EncodedPayload>),
+}
+
+impl PayloadType {
+    #[cfg(any(feature = "brotli", feature = "flate2"))]
+    pub fn new(headers: &HeaderMap, sender: PayloadSender) -> PayloadType {
+        // check content-encoding
+        let enc = if let Some(enc) = headers.get(CONTENT_ENCODING) {
+            if let Ok(enc) = enc.to_str() {
+                ContentEncoding::from(enc)
+            } else {
+                ContentEncoding::Auto
+            }
+        } else {
+            ContentEncoding::Auto
+        };
+
+        match enc {
+            ContentEncoding::Auto | ContentEncoding::Identity => {
+                PayloadType::Sender(sender)
+            }
+            _ => PayloadType::Encoding(Box::new(EncodedPayload::new(sender, enc))),
+        }
+    }
+
+    #[cfg(not(any(feature = "brotli", feature = "flate2")))]
+    pub fn new(headers: &HeaderMap, sender: PayloadSender) -> PayloadType {
+        PayloadType::Sender(sender)
+    }
+}
+
+impl PayloadWriter for PayloadType {
+    #[inline]
+    fn set_error(&mut self, err: PayloadError) {
+        match *self {
+            PayloadType::Sender(ref mut sender) => sender.set_error(err),
+            PayloadType::Encoding(ref mut enc) => enc.set_error(err),
+        }
+    }
+
+    #[inline]
+    fn feed_eof(&mut self) {
+        match *self {
+            PayloadType::Sender(ref mut sender) => sender.feed_eof(),
+            PayloadType::Encoding(ref mut enc) => enc.feed_eof(),
+        }
+    }
+
+    #[inline]
+    fn feed_data(&mut self, data: Bytes) {
+        match *self {
+            PayloadType::Sender(ref mut sender) => sender.feed_data(data),
+            PayloadType::Encoding(ref mut enc) => enc.feed_data(data),
+        }
+    }
+
+    #[inline]
+    fn need_read(&self) -> PayloadStatus {
+        match *self {
+            PayloadType::Sender(ref sender) => sender.need_read(),
+            PayloadType::Encoding(ref enc) => enc.need_read(),
+        }
+    }
+}
+
+/// Payload wrapper with content decompression support
+pub(crate) struct EncodedPayload {
+    inner: PayloadSender,
+    error: bool,
+    payload: PayloadStream,
+}
+
+impl EncodedPayload {
+    pub fn new(inner: PayloadSender, enc: ContentEncoding) -> EncodedPayload {
+        EncodedPayload {
+            inner,
+            error: false,
+            payload: PayloadStream::new(enc),
+        }
+    }
+}
+
+impl PayloadWriter for EncodedPayload {
+    fn set_error(&mut self, err: PayloadError) {
+        self.inner.set_error(err)
+    }
+
+    fn feed_eof(&mut self) {
+        if !self.error {
+            match self.payload.feed_eof() {
+                Err(err) => {
+                    self.error = true;
+                    self.set_error(PayloadError::Io(err));
+                }
+                Ok(value) => {
+                    if let Some(b) = value {
+                        self.inner.feed_data(b);
+                    }
+                    self.inner.feed_eof();
+                }
+            }
+        }
+    }
+
+    fn feed_data(&mut self, data: Bytes) {
+        if self.error {
+            return;
+        }
+
+        match self.payload.feed_data(data) {
+            Ok(Some(b)) => self.inner.feed_data(b),
+            Ok(None) => (),
+            Err(e) => {
+                self.error = true;
+                self.set_error(e.into());
+            }
+        }
+    }
+
+    #[inline]
+    fn need_read(&self) -> PayloadStatus {
+        self.inner.need_read()
+    }
+}
+
+pub(crate) enum Decoder {
+    #[cfg(feature = "flate2")]
+    Deflate(Box<DeflateDecoder<Writer>>),
+    #[cfg(feature = "flate2")]
+    Gzip(Option<Box<GzDecoder<Wrapper>>>),
+    #[cfg(feature = "brotli")]
+    Br(Box<BrotliDecoder<Writer>>),
+    Identity,
+}
+
+// should go after write::GzDecoder get implemented
+#[derive(Debug)]
+pub(crate) struct Wrapper {
+    pub buf: BytesMut,
+    pub eof: bool,
+}
+
+impl io::Read for Wrapper {
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        let len = cmp::min(buf.len(), self.buf.len());
+        buf[..len].copy_from_slice(&self.buf[..len]);
+        self.buf.split_to(len);
+        if len == 0 {
+            if self.eof {
+                Ok(0)
+            } else {
+                Err(io::Error::new(io::ErrorKind::WouldBlock, ""))
+            }
+        } else {
+            Ok(len)
+        }
+    }
+}
+
+impl io::Write for Wrapper {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.buf.extend_from_slice(buf);
+        Ok(buf.len())
+    }
+    fn flush(&mut self) -> io::Result<()> {
+        Ok(())
+    }
+}
+
+pub(crate) struct Writer {
+    buf: BytesMut,
+}
+
+impl Writer {
+    fn new() -> Writer {
+        Writer {
+            buf: BytesMut::with_capacity(8192),
+        }
+    }
+    fn take(&mut self) -> Bytes {
+        self.buf.take().freeze()
+    }
+}
+
+impl io::Write for Writer {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.buf.extend_from_slice(buf);
+        Ok(buf.len())
+    }
+    fn flush(&mut self) -> io::Result<()> {
+        Ok(())
+    }
+}
+
+/// Payload stream with decompression support
+pub(crate) struct PayloadStream {
+    decoder: Decoder,
+    dst: BytesMut,
+}
+
+impl PayloadStream {
+    pub fn new(enc: ContentEncoding) -> PayloadStream {
+        let dec = match enc {
+            #[cfg(feature = "brotli")]
+            ContentEncoding::Br => {
+                Decoder::Br(Box::new(BrotliDecoder::new(Writer::new())))
+            }
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Deflate => {
+                Decoder::Deflate(Box::new(DeflateDecoder::new(Writer::new())))
+            }
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Gzip => Decoder::Gzip(None),
+            _ => Decoder::Identity,
+        };
+        PayloadStream {
+            decoder: dec,
+            dst: BytesMut::new(),
+        }
+    }
+}
+
+impl PayloadStream {
+    pub fn feed_eof(&mut self) -> io::Result<Option<Bytes>> {
+        match self.decoder {
+            #[cfg(feature = "brotli")]
+            Decoder::Br(ref mut decoder) => match decoder.finish() {
+                Ok(mut writer) => {
+                    let b = writer.take();
+                    if !b.is_empty() {
+                        Ok(Some(b))
+                    } else {
+                        Ok(None)
+                    }
+                }
+                Err(e) => Err(e),
+            },
+            #[cfg(feature = "flate2")]
+            Decoder::Gzip(ref mut decoder) => {
+                if let Some(ref mut decoder) = *decoder {
+                    decoder.as_mut().get_mut().eof = true;
+
+                    self.dst.reserve(8192);
+                    match decoder.read(unsafe { self.dst.bytes_mut() }) {
+                        Ok(n) => {
+                            unsafe { self.dst.advance_mut(n) };
+                            return Ok(Some(self.dst.take().freeze()));
+                        }
+                        Err(e) => return Err(e),
+                    }
+                } else {
+                    Ok(None)
+                }
+            }
+            #[cfg(feature = "flate2")]
+            Decoder::Deflate(ref mut decoder) => match decoder.try_finish() {
+                Ok(_) => {
+                    let b = decoder.get_mut().take();
+                    if !b.is_empty() {
+                        Ok(Some(b))
+                    } else {
+                        Ok(None)
+                    }
+                }
+                Err(e) => Err(e),
+            },
+            Decoder::Identity => Ok(None),
+        }
+    }
+
+    pub fn feed_data(&mut self, data: Bytes) -> io::Result<Option<Bytes>> {
+        match self.decoder {
+            #[cfg(feature = "brotli")]
+            Decoder::Br(ref mut decoder) => match decoder.write_all(&data) {
+                Ok(_) => {
+                    decoder.flush()?;
+                    let b = decoder.get_mut().take();
+                    if !b.is_empty() {
+                        Ok(Some(b))
+                    } else {
+                        Ok(None)
+                    }
+                }
+                Err(e) => Err(e),
+            },
+            #[cfg(feature = "flate2")]
+            Decoder::Gzip(ref mut decoder) => {
+                if decoder.is_none() {
+                    *decoder = Some(Box::new(GzDecoder::new(Wrapper {
+                        buf: BytesMut::from(data),
+                        eof: false,
+                    })));
+                } else {
+                    let _ = decoder.as_mut().unwrap().write(&data);
+                }
+
+                loop {
+                    self.dst.reserve(8192);
+                    match decoder
+                        .as_mut()
+                        .as_mut()
+                        .unwrap()
+                        .read(unsafe { self.dst.bytes_mut() })
+                    {
+                        Ok(n) => {
+                            if n != 0 {
+                                unsafe { self.dst.advance_mut(n) };
+                            }
+                            if n == 0 {
+                                return Ok(Some(self.dst.take().freeze()));
+                            }
+                        }
+                        Err(e) => {
+                            if e.kind() == io::ErrorKind::WouldBlock
+                                && !self.dst.is_empty()
+                            {
+                                return Ok(Some(self.dst.take().freeze()));
+                            }
+                            return Err(e);
+                        }
+                    }
+                }
+            }
+            #[cfg(feature = "flate2")]
+            Decoder::Deflate(ref mut decoder) => match decoder.write_all(&data) {
+                Ok(_) => {
+                    decoder.flush()?;
+                    let b = decoder.get_mut().take();
+                    if !b.is_empty() {
+                        Ok(Some(b))
+                    } else {
+                        Ok(None)
+                    }
+                }
+                Err(e) => Err(e),
+            },
+            Decoder::Identity => Ok(Some(data)),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/message.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/message.rs.html new file mode 100644 index 0000000..adaf506 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/message.rs.html @@ -0,0 +1,513 @@ +message.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+
+use std::cell::{Cell, Ref, RefCell, RefMut};
+use std::collections::VecDeque;
+use std::net::SocketAddr;
+use std::rc::Rc;
+
+use http::{header, HeaderMap, Method, Uri, Version};
+
+use extensions::Extensions;
+use httpmessage::HttpMessage;
+use info::ConnectionInfo;
+use payload::Payload;
+use server::ServerSettings;
+use uri::Url as InnerUrl;
+
+bitflags! {
+    pub(crate) struct MessageFlags: u8 {
+        const KEEPALIVE = 0b0000_0001;
+        const CONN_INFO = 0b0000_0010;
+    }
+}
+
+/// Request's context
+pub struct Request {
+    pub(crate) inner: Rc<InnerRequest>,
+}
+
+pub(crate) struct InnerRequest {
+    pub(crate) version: Version,
+    pub(crate) method: Method,
+    pub(crate) url: InnerUrl,
+    pub(crate) flags: Cell<MessageFlags>,
+    pub(crate) headers: HeaderMap,
+    pub(crate) extensions: RefCell<Extensions>,
+    pub(crate) addr: Option<SocketAddr>,
+    pub(crate) info: RefCell<ConnectionInfo>,
+    pub(crate) payload: RefCell<Option<Payload>>,
+    pub(crate) settings: ServerSettings,
+    pool: &'static RequestPool,
+}
+
+impl InnerRequest {
+    #[inline]
+    /// Reset request instance
+    pub fn reset(&mut self) {
+        self.headers.clear();
+        self.extensions.borrow_mut().clear();
+        self.flags.set(MessageFlags::empty());
+        *self.payload.borrow_mut() = None;
+    }
+}
+
+impl HttpMessage for Request {
+    type Stream = Payload;
+
+    fn headers(&self) -> &HeaderMap {
+        &self.inner.headers
+    }
+
+    #[inline]
+    fn payload(&self) -> Payload {
+        if let Some(payload) = self.inner.payload.borrow_mut().take() {
+            payload
+        } else {
+            Payload::empty()
+        }
+    }
+}
+
+impl Request {
+    /// Create new RequestContext instance
+    pub(crate) fn new(pool: &'static RequestPool, settings: ServerSettings) -> Request {
+        Request {
+            inner: Rc::new(InnerRequest {
+                pool,
+                settings,
+                method: Method::GET,
+                url: InnerUrl::default(),
+                version: Version::HTTP_11,
+                headers: HeaderMap::with_capacity(16),
+                flags: Cell::new(MessageFlags::empty()),
+                addr: None,
+                info: RefCell::new(ConnectionInfo::default()),
+                payload: RefCell::new(None),
+                extensions: RefCell::new(Extensions::new()),
+            }),
+        }
+    }
+
+    #[inline]
+    pub(crate) fn inner(&self) -> &InnerRequest {
+        self.inner.as_ref()
+    }
+
+    #[inline]
+    pub(crate) fn inner_mut(&mut self) -> &mut InnerRequest {
+        Rc::get_mut(&mut self.inner).expect("Multiple copies exist")
+    }
+
+    #[inline]
+    pub(crate) fn url(&self) -> &InnerUrl {
+        &self.inner().url
+    }
+
+    /// Read the Request Uri.
+    #[inline]
+    pub fn uri(&self) -> &Uri {
+        self.inner().url.uri()
+    }
+
+    /// Read the Request method.
+    #[inline]
+    pub fn method(&self) -> &Method {
+        &self.inner().method
+    }
+
+    /// Read the Request Version.
+    #[inline]
+    pub fn version(&self) -> Version {
+        self.inner().version
+    }
+
+    /// The target path of this Request.
+    #[inline]
+    pub fn path(&self) -> &str {
+        self.inner().url.path()
+    }
+
+    #[inline]
+    /// Returns Request's headers.
+    pub fn headers(&self) -> &HeaderMap {
+        &self.inner().headers
+    }
+
+    #[inline]
+    /// Returns mutable Request's headers.
+    pub fn headers_mut(&mut self) -> &mut HeaderMap {
+        &mut self.inner_mut().headers
+    }
+
+    /// Peer socket address
+    ///
+    /// Peer address is actual socket address, if proxy is used in front of
+    /// actix http server, then peer address would be address of this proxy.
+    ///
+    /// To get client connection information `connection_info()` method should
+    /// be used.
+    pub fn peer_addr(&self) -> Option<SocketAddr> {
+        self.inner().addr
+    }
+
+    /// Checks if a connection should be kept alive.
+    #[inline]
+    pub fn keep_alive(&self) -> bool {
+        self.inner().flags.get().contains(MessageFlags::KEEPALIVE)
+    }
+
+    /// Request extensions
+    #[inline]
+    pub fn extensions(&self) -> Ref<Extensions> {
+        self.inner().extensions.borrow()
+    }
+
+    /// Mutable reference to a the request's extensions
+    #[inline]
+    pub fn extensions_mut(&self) -> RefMut<Extensions> {
+        self.inner().extensions.borrow_mut()
+    }
+
+    /// Check if request requires connection upgrade
+    pub fn upgrade(&self) -> bool {
+        if let Some(conn) = self.inner().headers.get(header::CONNECTION) {
+            if let Ok(s) = conn.to_str() {
+                return s.to_lowercase().contains("upgrade");
+            }
+        }
+        self.inner().method == Method::CONNECT
+    }
+
+    /// Get *ConnectionInfo* for the correct request.
+    pub fn connection_info(&self) -> Ref<ConnectionInfo> {
+        if self.inner().flags.get().contains(MessageFlags::CONN_INFO) {
+            self.inner().info.borrow()
+        } else {
+            let mut flags = self.inner().flags.get();
+            flags.insert(MessageFlags::CONN_INFO);
+            self.inner().flags.set(flags);
+            self.inner().info.borrow_mut().update(self);
+            self.inner().info.borrow()
+        }
+    }
+
+    /// Server settings
+    #[inline]
+    pub fn server_settings(&self) -> &ServerSettings {
+        &self.inner().settings
+    }
+
+    pub(crate) fn clone(&self) -> Self {
+        Request {
+            inner: self.inner.clone(),
+        }
+    }
+
+    pub(crate) fn release(self) {
+        let mut inner = self.inner;
+        if let Some(r) = Rc::get_mut(&mut inner) {
+            r.reset();
+        } else {
+            return;
+        }
+        inner.pool.release(inner);
+    }
+}
+
+pub(crate) struct RequestPool(
+    RefCell<VecDeque<Rc<InnerRequest>>>,
+    RefCell<ServerSettings>,
+);
+
+thread_local!(static POOL: &'static RequestPool = RequestPool::create());
+
+impl RequestPool {
+    fn create() -> &'static RequestPool {
+        let pool = RequestPool(
+            RefCell::new(VecDeque::with_capacity(128)),
+            RefCell::new(ServerSettings::default()),
+        );
+        Box::leak(Box::new(pool))
+    }
+
+    pub fn pool(settings: ServerSettings) -> &'static RequestPool {
+        POOL.with(|p| {
+            *p.1.borrow_mut() = settings;
+            *p
+        })
+    }
+
+    #[inline]
+    pub fn get(pool: &'static RequestPool) -> Request {
+        if let Some(msg) = pool.0.borrow_mut().pop_front() {
+            Request { inner: msg }
+        } else {
+            Request::new(pool, pool.1.borrow().clone())
+        }
+    }
+
+    #[inline]
+    /// Release request instance
+    pub fn release(&self, msg: Rc<InnerRequest>) {
+        let v = &mut self.0.borrow_mut();
+        if v.len() < 128 {
+            v.push_front(msg);
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/mod.rs.html new file mode 100644 index 0000000..26adca8 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/mod.rs.html @@ -0,0 +1,627 @@ +mod.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+
+//! Http server
+use std::net::Shutdown;
+use std::{io, time};
+
+use bytes::{BufMut, BytesMut};
+use futures::{Async, Poll};
+use tokio_io::{AsyncRead, AsyncWrite};
+use tokio_tcp::TcpStream;
+
+mod channel;
+mod error;
+pub(crate) mod h1;
+pub(crate) mod h1decoder;
+mod h1writer;
+mod h2;
+mod h2writer;
+pub(crate) mod helpers;
+pub(crate) mod input;
+pub(crate) mod message;
+pub(crate) mod output;
+pub(crate) mod settings;
+mod srv;
+mod worker;
+
+pub use self::message::Request;
+pub use self::settings::ServerSettings;
+pub use self::srv::HttpServer;
+
+#[doc(hidden)]
+pub use self::helpers::write_content_length;
+
+use actix::Message;
+use body::Binary;
+use error::Error;
+use header::ContentEncoding;
+use httpresponse::HttpResponse;
+
+/// max buffer size 64k
+pub(crate) const MAX_WRITE_BUFFER_SIZE: usize = 65_536;
+
+const LW_BUFFER_SIZE: usize = 4096;
+const HW_BUFFER_SIZE: usize = 32_768;
+
+/// Create new http server with application factory.
+///
+/// This is shortcut for `server::HttpServer::new()` method.
+///
+/// ```rust
+/// # extern crate actix_web;
+/// use actix_web::{actix, server, App, HttpResponse};
+///
+/// fn main() {
+///     let sys = actix::System::new("example");  // <- create Actix system
+///
+///     server::new(
+///         || App::new()
+///             .resource("/", |r| r.f(|_| HttpResponse::Ok())))
+///         .bind("127.0.0.1:59090").unwrap()
+///         .start();
+///
+/// #       actix::System::current().stop();
+///     sys.run();
+/// }
+/// ```
+pub fn new<F, U, H>(factory: F) -> HttpServer<H>
+where
+    F: Fn() -> U + Sync + Send + 'static,
+    U: IntoIterator<Item = H> + 'static,
+    H: IntoHttpHandler + 'static,
+{
+    HttpServer::new(factory)
+}
+
+#[derive(Debug, PartialEq, Clone, Copy)]
+/// Server keep-alive setting
+pub enum KeepAlive {
+    /// Keep alive in seconds
+    Timeout(usize),
+    /// Use `SO_KEEPALIVE` socket option, value in seconds
+    Tcp(usize),
+    /// Relay on OS to shutdown tcp connection
+    Os,
+    /// Disabled
+    Disabled,
+}
+
+impl From<usize> for KeepAlive {
+    fn from(keepalive: usize) -> Self {
+        KeepAlive::Timeout(keepalive)
+    }
+}
+
+impl From<Option<usize>> for KeepAlive {
+    fn from(keepalive: Option<usize>) -> Self {
+        if let Some(keepalive) = keepalive {
+            KeepAlive::Timeout(keepalive)
+        } else {
+            KeepAlive::Disabled
+        }
+    }
+}
+
+/// Pause accepting incoming connections
+///
+/// If socket contains some pending connection, they might be dropped.
+/// All opened connection remains active.
+#[derive(Message)]
+pub struct PauseServer;
+
+/// Resume accepting incoming connections
+#[derive(Message)]
+pub struct ResumeServer;
+
+/// Stop incoming connection processing, stop all workers and exit.
+///
+/// If server starts with `spawn()` method, then spawned thread get terminated.
+pub struct StopServer {
+    /// Whether to try and shut down gracefully
+    pub graceful: bool,
+}
+
+impl Message for StopServer {
+    type Result = Result<(), ()>;
+}
+
+/// Low level http request handler
+#[allow(unused_variables)]
+pub trait HttpHandler: 'static {
+    /// Request handling task
+    type Task: HttpHandlerTask;
+
+    /// Handle request
+    fn handle(&self, req: Request) -> Result<Self::Task, Request>;
+}
+
+impl HttpHandler for Box<HttpHandler<Task = Box<HttpHandlerTask>>> {
+    type Task = Box<HttpHandlerTask>;
+
+    fn handle(&self, req: Request) -> Result<Box<HttpHandlerTask>, Request> {
+        self.as_ref().handle(req)
+    }
+}
+
+/// Low level http request handler
+pub trait HttpHandlerTask {
+    /// Poll task, this method is used before or after *io* object is available
+    fn poll_completed(&mut self) -> Poll<(), Error> {
+        Ok(Async::Ready(()))
+    }
+
+    /// Poll task when *io* object is available
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error>;
+
+    /// Connection is disconnected
+    fn disconnected(&mut self) {}
+}
+
+impl HttpHandlerTask for Box<HttpHandlerTask> {
+    fn poll_io(&mut self, io: &mut Writer) -> Poll<bool, Error> {
+        self.as_mut().poll_io(io)
+    }
+}
+
+/// Conversion helper trait
+pub trait IntoHttpHandler {
+    /// The associated type which is result of conversion.
+    type Handler: HttpHandler;
+
+    /// Convert into `HttpHandler` object.
+    fn into_handler(self) -> Self::Handler;
+}
+
+impl<T: HttpHandler> IntoHttpHandler for T {
+    type Handler = T;
+
+    fn into_handler(self) -> Self::Handler {
+        self
+    }
+}
+
+#[doc(hidden)]
+#[derive(Debug)]
+pub enum WriterState {
+    Done,
+    Pause,
+}
+
+#[doc(hidden)]
+/// Stream writer
+pub trait Writer {
+    /// number of bytes written to the stream
+    fn written(&self) -> u64;
+
+    #[doc(hidden)]
+    fn set_date(&mut self);
+
+    #[doc(hidden)]
+    fn buffer(&mut self) -> &mut BytesMut;
+
+    fn start(
+        &mut self, req: &Request, resp: &mut HttpResponse, encoding: ContentEncoding,
+    ) -> io::Result<WriterState>;
+
+    fn write(&mut self, payload: &Binary) -> io::Result<WriterState>;
+
+    fn write_eof(&mut self) -> io::Result<WriterState>;
+
+    fn poll_completed(&mut self, shutdown: bool) -> Poll<(), io::Error>;
+}
+
+#[doc(hidden)]
+/// Low-level io stream operations
+pub trait IoStream: AsyncRead + AsyncWrite + 'static {
+    fn shutdown(&mut self, how: Shutdown) -> io::Result<()>;
+
+    fn set_nodelay(&mut self, nodelay: bool) -> io::Result<()>;
+
+    fn set_linger(&mut self, dur: Option<time::Duration>) -> io::Result<()>;
+
+    fn read_available(&mut self, buf: &mut BytesMut) -> Poll<bool, io::Error> {
+        let mut read_some = false;
+        loop {
+            if buf.remaining_mut() < LW_BUFFER_SIZE {
+                buf.reserve(HW_BUFFER_SIZE);
+            }
+            unsafe {
+                match self.read(buf.bytes_mut()) {
+                    Ok(n) => {
+                        if n == 0 {
+                            return Ok(Async::Ready(!read_some));
+                        } else {
+                            read_some = true;
+                            buf.advance_mut(n);
+                        }
+                    }
+                    Err(e) => {
+                        return if e.kind() == io::ErrorKind::WouldBlock {
+                            if read_some {
+                                Ok(Async::Ready(false))
+                            } else {
+                                Ok(Async::NotReady)
+                            }
+                        } else {
+                            Err(e)
+                        };
+                    }
+                }
+            }
+        }
+    }
+}
+
+impl IoStream for TcpStream {
+    #[inline]
+    fn shutdown(&mut self, how: Shutdown) -> io::Result<()> {
+        TcpStream::shutdown(self, how)
+    }
+
+    #[inline]
+    fn set_nodelay(&mut self, nodelay: bool) -> io::Result<()> {
+        TcpStream::set_nodelay(self, nodelay)
+    }
+
+    #[inline]
+    fn set_linger(&mut self, dur: Option<time::Duration>) -> io::Result<()> {
+        TcpStream::set_linger(self, dur)
+    }
+}
+
+#[cfg(feature = "alpn")]
+use tokio_openssl::SslStream;
+
+#[cfg(feature = "alpn")]
+impl IoStream for SslStream<TcpStream> {
+    #[inline]
+    fn shutdown(&mut self, _how: Shutdown) -> io::Result<()> {
+        let _ = self.get_mut().shutdown();
+        Ok(())
+    }
+
+    #[inline]
+    fn set_nodelay(&mut self, nodelay: bool) -> io::Result<()> {
+        self.get_mut().get_mut().set_nodelay(nodelay)
+    }
+
+    #[inline]
+    fn set_linger(&mut self, dur: Option<time::Duration>) -> io::Result<()> {
+        self.get_mut().get_mut().set_linger(dur)
+    }
+}
+
+#[cfg(feature = "tls")]
+use tokio_tls::TlsStream;
+
+#[cfg(feature = "tls")]
+impl IoStream for TlsStream<TcpStream> {
+    #[inline]
+    fn shutdown(&mut self, _how: Shutdown) -> io::Result<()> {
+        let _ = self.get_mut().shutdown();
+        Ok(())
+    }
+
+    #[inline]
+    fn set_nodelay(&mut self, nodelay: bool) -> io::Result<()> {
+        self.get_mut().get_mut().set_nodelay(nodelay)
+    }
+
+    #[inline]
+    fn set_linger(&mut self, dur: Option<time::Duration>) -> io::Result<()> {
+        self.get_mut().get_mut().set_linger(dur)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/output.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/output.rs.html new file mode 100644 index 0000000..874c5f1 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/output.rs.html @@ -0,0 +1,1531 @@ +output.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+
+use std::fmt::Write as FmtWrite;
+use std::io::Write;
+use std::str::FromStr;
+use std::{cmp, fmt, io, mem};
+
+#[cfg(feature = "brotli")]
+use brotli2::write::BrotliEncoder;
+use bytes::BytesMut;
+#[cfg(feature = "flate2")]
+use flate2::write::{DeflateEncoder, GzEncoder};
+#[cfg(feature = "flate2")]
+use flate2::Compression;
+use http::header::{ACCEPT_ENCODING, CONTENT_LENGTH};
+use http::Version;
+
+use super::message::InnerRequest;
+use body::{Binary, Body};
+use header::ContentEncoding;
+use httpresponse::HttpResponse;
+
+#[derive(Debug)]
+pub(crate) enum ResponseLength {
+    Chunked,
+    Zero,
+    Length(usize),
+    Length64(u64),
+    None,
+}
+
+#[derive(Debug)]
+pub(crate) struct ResponseInfo {
+    head: bool,
+    pub length: ResponseLength,
+    pub content_encoding: Option<&'static str>,
+}
+
+impl ResponseInfo {
+    pub fn new(head: bool) -> Self {
+        ResponseInfo {
+            head,
+            length: ResponseLength::None,
+            content_encoding: None,
+        }
+    }
+}
+
+#[derive(Debug)]
+pub(crate) enum Output {
+    Empty(BytesMut),
+    Buffer(BytesMut),
+    Encoder(ContentEncoder),
+    TE(TransferEncoding),
+    Done,
+}
+
+impl Output {
+    pub fn take(&mut self) -> BytesMut {
+        match mem::replace(self, Output::Done) {
+            Output::Empty(bytes) => bytes,
+            Output::Buffer(bytes) => bytes,
+            Output::Encoder(mut enc) => enc.take_buf(),
+            Output::TE(mut te) => te.take(),
+            Output::Done => panic!(),
+        }
+    }
+
+    pub fn take_option(&mut self) -> Option<BytesMut> {
+        match mem::replace(self, Output::Done) {
+            Output::Empty(bytes) => Some(bytes),
+            Output::Buffer(bytes) => Some(bytes),
+            Output::Encoder(mut enc) => Some(enc.take_buf()),
+            Output::TE(mut te) => Some(te.take()),
+            Output::Done => None,
+        }
+    }
+
+    pub fn as_ref(&mut self) -> &BytesMut {
+        match self {
+            Output::Empty(ref mut bytes) => bytes,
+            Output::Buffer(ref mut bytes) => bytes,
+            Output::Encoder(ref mut enc) => enc.buf_ref(),
+            Output::TE(ref mut te) => te.buf_ref(),
+            Output::Done => panic!(),
+        }
+    }
+    pub fn as_mut(&mut self) -> &mut BytesMut {
+        match self {
+            Output::Empty(ref mut bytes) => bytes,
+            Output::Buffer(ref mut bytes) => bytes,
+            Output::Encoder(ref mut enc) => enc.buf_mut(),
+            Output::TE(ref mut te) => te.buf_mut(),
+            Output::Done => panic!(),
+        }
+    }
+    pub fn split_to(&mut self, cap: usize) -> BytesMut {
+        match self {
+            Output::Empty(ref mut bytes) => bytes.split_to(cap),
+            Output::Buffer(ref mut bytes) => bytes.split_to(cap),
+            Output::Encoder(ref mut enc) => enc.buf_mut().split_to(cap),
+            Output::TE(ref mut te) => te.buf_mut().split_to(cap),
+            Output::Done => BytesMut::new(),
+        }
+    }
+
+    pub fn len(&self) -> usize {
+        match self {
+            Output::Empty(ref bytes) => bytes.len(),
+            Output::Buffer(ref bytes) => bytes.len(),
+            Output::Encoder(ref enc) => enc.len(),
+            Output::TE(ref te) => te.len(),
+            Output::Done => 0,
+        }
+    }
+
+    pub fn is_empty(&self) -> bool {
+        match self {
+            Output::Empty(ref bytes) => bytes.is_empty(),
+            Output::Buffer(ref bytes) => bytes.is_empty(),
+            Output::Encoder(ref enc) => enc.is_empty(),
+            Output::TE(ref te) => te.is_empty(),
+            Output::Done => true,
+        }
+    }
+
+    pub fn write(&mut self, data: &[u8]) -> Result<(), io::Error> {
+        match self {
+            Output::Buffer(ref mut bytes) => {
+                bytes.extend_from_slice(data);
+                Ok(())
+            }
+            Output::Encoder(ref mut enc) => enc.write(data),
+            Output::TE(ref mut te) => te.encode(data).map(|_| ()),
+            Output::Empty(_) | Output::Done => Ok(()),
+        }
+    }
+
+    pub fn write_eof(&mut self) -> Result<bool, io::Error> {
+        match self {
+            Output::Buffer(_) => Ok(true),
+            Output::Encoder(ref mut enc) => enc.write_eof(),
+            Output::TE(ref mut te) => Ok(te.encode_eof()),
+            Output::Empty(_) | Output::Done => Ok(true),
+        }
+    }
+
+    pub(crate) fn for_server(
+        &mut self, info: &mut ResponseInfo, req: &InnerRequest, resp: &mut HttpResponse,
+        response_encoding: ContentEncoding,
+    ) {
+        let buf = self.take();
+        let version = resp.version().unwrap_or_else(|| req.version);
+        let mut len = 0;
+
+        #[cfg_attr(feature = "cargo-clippy", allow(match_ref_pats))]
+        let has_body = match resp.body() {
+            &Body::Empty => false,
+            &Body::Binary(ref bin) => {
+                len = bin.len();
+                !(response_encoding == ContentEncoding::Auto && len < 96)
+            }
+            _ => true,
+        };
+
+        // Enable content encoding only if response does not contain Content-Encoding
+        // header
+        #[cfg(any(feature = "brotli", feature = "flate2"))]
+        let mut encoding = if has_body {
+            let encoding = match response_encoding {
+                ContentEncoding::Auto => {
+                    // negotiate content-encoding
+                    if let Some(val) = req.headers.get(ACCEPT_ENCODING) {
+                        if let Ok(enc) = val.to_str() {
+                            AcceptEncoding::parse(enc)
+                        } else {
+                            ContentEncoding::Identity
+                        }
+                    } else {
+                        ContentEncoding::Identity
+                    }
+                }
+                encoding => encoding,
+            };
+            if encoding.is_compression() {
+                info.content_encoding = Some(encoding.as_str());
+            }
+            encoding
+        } else {
+            ContentEncoding::Identity
+        };
+        #[cfg(not(any(feature = "brotli", feature = "flate2")))]
+        let mut encoding = ContentEncoding::Identity;
+
+        #[cfg_attr(feature = "cargo-clippy", allow(match_ref_pats))]
+        let transfer = match resp.body() {
+            &Body::Empty => {
+                if !info.head {
+                    info.length = ResponseLength::Zero;
+                }
+                *self = Output::Empty(buf);
+                return;
+            }
+            &Body::Binary(_) => {
+                #[cfg(any(feature = "brotli", feature = "flate2"))]
+                {
+                    if !(encoding == ContentEncoding::Identity
+                        || encoding == ContentEncoding::Auto)
+                    {
+                        let mut tmp = BytesMut::new();
+                        let mut transfer = TransferEncoding::eof(tmp);
+                        let mut enc = match encoding {
+                            #[cfg(feature = "flate2")]
+                            ContentEncoding::Deflate => ContentEncoder::Deflate(
+                                DeflateEncoder::new(transfer, Compression::fast()),
+                            ),
+                            #[cfg(feature = "flate2")]
+                            ContentEncoding::Gzip => ContentEncoder::Gzip(
+                                GzEncoder::new(transfer, Compression::fast()),
+                            ),
+                            #[cfg(feature = "brotli")]
+                            ContentEncoding::Br => {
+                                ContentEncoder::Br(BrotliEncoder::new(transfer, 3))
+                            }
+                            ContentEncoding::Identity | ContentEncoding::Auto => {
+                                unreachable!()
+                            }
+                        };
+
+                        let bin = resp.replace_body(Body::Empty).binary();
+
+                        // TODO return error!
+                        let _ = enc.write(bin.as_ref());
+                        let _ = enc.write_eof();
+                        let body = enc.buf_mut().take();
+                        len = body.len();
+                        resp.replace_body(Binary::from(body));
+                    }
+                }
+
+                info.length = ResponseLength::Length(len);
+                if info.head {
+                    *self = Output::Empty(buf);
+                } else {
+                    *self = Output::Buffer(buf);
+                }
+                return;
+            }
+            &Body::Streaming(_) | &Body::Actor(_) => {
+                if resp.upgrade() {
+                    if version == Version::HTTP_2 {
+                        error!("Connection upgrade is forbidden for HTTP/2");
+                    }
+                    if encoding != ContentEncoding::Identity {
+                        encoding = ContentEncoding::Identity;
+                        info.content_encoding.take();
+                    }
+                    TransferEncoding::eof(buf)
+                } else {
+                    if !(encoding == ContentEncoding::Identity
+                        || encoding == ContentEncoding::Auto)
+                    {
+                        resp.headers_mut().remove(CONTENT_LENGTH);
+                    }
+                    Output::streaming_encoding(info, buf, version, resp)
+                }
+            }
+        };
+        // check for head response
+        if info.head {
+            resp.set_body(Body::Empty);
+            *self = Output::Empty(transfer.buf.unwrap());
+            return;
+        }
+
+        let enc = match encoding {
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Deflate => ContentEncoder::Deflate(DeflateEncoder::new(
+                transfer,
+                Compression::fast(),
+            )),
+            #[cfg(feature = "flate2")]
+            ContentEncoding::Gzip => {
+                ContentEncoder::Gzip(GzEncoder::new(transfer, Compression::fast()))
+            }
+            #[cfg(feature = "brotli")]
+            ContentEncoding::Br => ContentEncoder::Br(BrotliEncoder::new(transfer, 3)),
+            ContentEncoding::Identity | ContentEncoding::Auto => {
+                *self = Output::TE(transfer);
+                return;
+            }
+        };
+        *self = Output::Encoder(enc);
+    }
+
+    fn streaming_encoding(
+        info: &mut ResponseInfo, buf: BytesMut, version: Version,
+        resp: &mut HttpResponse,
+    ) -> TransferEncoding {
+        match resp.chunked() {
+            Some(true) => {
+                // Enable transfer encoding
+                if version == Version::HTTP_2 {
+                    info.length = ResponseLength::None;
+                    TransferEncoding::eof(buf)
+                } else {
+                    info.length = ResponseLength::Chunked;
+                    TransferEncoding::chunked(buf)
+                }
+            }
+            Some(false) => TransferEncoding::eof(buf),
+            None => {
+                // if Content-Length is specified, then use it as length hint
+                let (len, chunked) =
+                    if let Some(len) = resp.headers().get(CONTENT_LENGTH) {
+                        // Content-Length
+                        if let Ok(s) = len.to_str() {
+                            if let Ok(len) = s.parse::<u64>() {
+                                (Some(len), false)
+                            } else {
+                                error!("illegal Content-Length: {:?}", len);
+                                (None, false)
+                            }
+                        } else {
+                            error!("illegal Content-Length: {:?}", len);
+                            (None, false)
+                        }
+                    } else {
+                        (None, true)
+                    };
+
+                if !chunked {
+                    if let Some(len) = len {
+                        info.length = ResponseLength::Length64(len);
+                        TransferEncoding::length(len, buf)
+                    } else {
+                        TransferEncoding::eof(buf)
+                    }
+                } else {
+                    // Enable transfer encoding
+                    match version {
+                        Version::HTTP_11 => {
+                            info.length = ResponseLength::Chunked;
+                            TransferEncoding::chunked(buf)
+                        }
+                        _ => {
+                            info.length = ResponseLength::None;
+                            TransferEncoding::eof(buf)
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+pub(crate) enum ContentEncoder {
+    #[cfg(feature = "flate2")]
+    Deflate(DeflateEncoder<TransferEncoding>),
+    #[cfg(feature = "flate2")]
+    Gzip(GzEncoder<TransferEncoding>),
+    #[cfg(feature = "brotli")]
+    Br(BrotliEncoder<TransferEncoding>),
+    Identity(TransferEncoding),
+}
+
+impl fmt::Debug for ContentEncoder {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(_) => writeln!(f, "ContentEncoder(Brotli)"),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(_) => writeln!(f, "ContentEncoder(Deflate)"),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(_) => writeln!(f, "ContentEncoder(Gzip)"),
+            ContentEncoder::Identity(_) => writeln!(f, "ContentEncoder(Identity)"),
+        }
+    }
+}
+
+impl ContentEncoder {
+    #[inline]
+    pub fn len(&self) -> usize {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref encoder) => encoder.get_ref().len(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref encoder) => encoder.get_ref().len(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref encoder) => encoder.get_ref().len(),
+            ContentEncoder::Identity(ref encoder) => encoder.len(),
+        }
+    }
+
+    #[inline]
+    pub fn is_empty(&self) -> bool {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref encoder) => encoder.get_ref().is_empty(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref encoder) => encoder.get_ref().is_empty(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref encoder) => encoder.get_ref().is_empty(),
+            ContentEncoder::Identity(ref encoder) => encoder.is_empty(),
+        }
+    }
+
+    #[inline]
+    pub(crate) fn take_buf(&mut self) -> BytesMut {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref mut encoder) => encoder.get_mut().take(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref mut encoder) => encoder.get_mut().take(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref mut encoder) => encoder.get_mut().take(),
+            ContentEncoder::Identity(ref mut encoder) => encoder.take(),
+        }
+    }
+
+    #[inline]
+    pub(crate) fn buf_mut(&mut self) -> &mut BytesMut {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref mut encoder) => encoder.get_mut().buf_mut(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref mut encoder) => encoder.get_mut().buf_mut(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref mut encoder) => encoder.get_mut().buf_mut(),
+            ContentEncoder::Identity(ref mut encoder) => encoder.buf_mut(),
+        }
+    }
+
+    #[inline]
+    pub(crate) fn buf_ref(&mut self) -> &BytesMut {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref mut encoder) => encoder.get_mut().buf_ref(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref mut encoder) => encoder.get_mut().buf_ref(),
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref mut encoder) => encoder.get_mut().buf_ref(),
+            ContentEncoder::Identity(ref mut encoder) => encoder.buf_ref(),
+        }
+    }
+
+    #[cfg_attr(feature = "cargo-clippy", allow(inline_always))]
+    #[inline(always)]
+    pub fn write_eof(&mut self) -> Result<bool, io::Error> {
+        let encoder =
+            mem::replace(self, ContentEncoder::Identity(TransferEncoding::empty()));
+
+        match encoder {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(encoder) => match encoder.finish() {
+                Ok(mut writer) => {
+                    writer.encode_eof();
+                    *self = ContentEncoder::Identity(writer);
+                    Ok(true)
+                }
+                Err(err) => Err(err),
+            },
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(encoder) => match encoder.finish() {
+                Ok(mut writer) => {
+                    writer.encode_eof();
+                    *self = ContentEncoder::Identity(writer);
+                    Ok(true)
+                }
+                Err(err) => Err(err),
+            },
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(encoder) => match encoder.finish() {
+                Ok(mut writer) => {
+                    writer.encode_eof();
+                    *self = ContentEncoder::Identity(writer);
+                    Ok(true)
+                }
+                Err(err) => Err(err),
+            },
+            ContentEncoder::Identity(mut writer) => {
+                let res = writer.encode_eof();
+                *self = ContentEncoder::Identity(writer);
+                Ok(res)
+            }
+        }
+    }
+
+    #[cfg_attr(feature = "cargo-clippy", allow(inline_always))]
+    #[inline(always)]
+    pub fn write(&mut self, data: &[u8]) -> Result<(), io::Error> {
+        match *self {
+            #[cfg(feature = "brotli")]
+            ContentEncoder::Br(ref mut encoder) => match encoder.write_all(data) {
+                Ok(_) => Ok(()),
+                Err(err) => {
+                    trace!("Error decoding br encoding: {}", err);
+                    Err(err)
+                }
+            },
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Gzip(ref mut encoder) => match encoder.write_all(data) {
+                Ok(_) => Ok(()),
+                Err(err) => {
+                    trace!("Error decoding gzip encoding: {}", err);
+                    Err(err)
+                }
+            },
+            #[cfg(feature = "flate2")]
+            ContentEncoder::Deflate(ref mut encoder) => match encoder.write_all(data) {
+                Ok(_) => Ok(()),
+                Err(err) => {
+                    trace!("Error decoding deflate encoding: {}", err);
+                    Err(err)
+                }
+            },
+            ContentEncoder::Identity(ref mut encoder) => {
+                encoder.encode(data)?;
+                Ok(())
+            }
+        }
+    }
+}
+
+/// Encoders to handle different Transfer-Encodings.
+#[derive(Debug)]
+pub(crate) struct TransferEncoding {
+    buf: Option<BytesMut>,
+    kind: TransferEncodingKind,
+}
+
+#[derive(Debug, PartialEq, Clone)]
+enum TransferEncodingKind {
+    /// An Encoder for when Transfer-Encoding includes `chunked`.
+    Chunked(bool),
+    /// An Encoder for when Content-Length is set.
+    ///
+    /// Enforces that the body is not longer than the Content-Length header.
+    Length(u64),
+    /// An Encoder for when Content-Length is not known.
+    ///
+    /// Application decides when to stop writing.
+    Eof,
+}
+
+impl TransferEncoding {
+    fn take(&mut self) -> BytesMut {
+        self.buf.take().unwrap()
+    }
+
+    fn buf_ref(&mut self) -> &BytesMut {
+        self.buf.as_ref().unwrap()
+    }
+
+    fn len(&self) -> usize {
+        self.buf.as_ref().unwrap().len()
+    }
+
+    fn is_empty(&self) -> bool {
+        self.buf.as_ref().unwrap().is_empty()
+    }
+
+    fn buf_mut(&mut self) -> &mut BytesMut {
+        self.buf.as_mut().unwrap()
+    }
+
+    #[inline]
+    pub fn empty() -> TransferEncoding {
+        TransferEncoding {
+            buf: None,
+            kind: TransferEncodingKind::Eof,
+        }
+    }
+
+    #[inline]
+    pub fn eof(buf: BytesMut) -> TransferEncoding {
+        TransferEncoding {
+            buf: Some(buf),
+            kind: TransferEncodingKind::Eof,
+        }
+    }
+
+    #[inline]
+    pub fn chunked(buf: BytesMut) -> TransferEncoding {
+        TransferEncoding {
+            buf: Some(buf),
+            kind: TransferEncodingKind::Chunked(false),
+        }
+    }
+
+    #[inline]
+    pub fn length(len: u64, buf: BytesMut) -> TransferEncoding {
+        TransferEncoding {
+            buf: Some(buf),
+            kind: TransferEncodingKind::Length(len),
+        }
+    }
+
+    /// Encode message. Return `EOF` state of encoder
+    #[inline]
+    pub fn encode(&mut self, msg: &[u8]) -> io::Result<bool> {
+        match self.kind {
+            TransferEncodingKind::Eof => {
+                let eof = msg.is_empty();
+                self.buf.as_mut().unwrap().extend_from_slice(msg);
+                Ok(eof)
+            }
+            TransferEncodingKind::Chunked(ref mut eof) => {
+                if *eof {
+                    return Ok(true);
+                }
+
+                if msg.is_empty() {
+                    *eof = true;
+                    self.buf.as_mut().unwrap().extend_from_slice(b"0\r\n\r\n");
+                } else {
+                    let mut buf = BytesMut::new();
+                    writeln!(&mut buf, "{:X}\r", msg.len())
+                        .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
+
+                    let b = self.buf.as_mut().unwrap();
+                    b.reserve(buf.len() + msg.len() + 2);
+                    b.extend_from_slice(buf.as_ref());
+                    b.extend_from_slice(msg);
+                    b.extend_from_slice(b"\r\n");
+                }
+                Ok(*eof)
+            }
+            TransferEncodingKind::Length(ref mut remaining) => {
+                if *remaining > 0 {
+                    if msg.is_empty() {
+                        return Ok(*remaining == 0);
+                    }
+                    let len = cmp::min(*remaining, msg.len() as u64);
+
+                    self.buf
+                        .as_mut()
+                        .unwrap()
+                        .extend_from_slice(&msg[..len as usize]);
+
+                    *remaining -= len as u64;
+                    Ok(*remaining == 0)
+                } else {
+                    Ok(true)
+                }
+            }
+        }
+    }
+
+    /// Encode eof. Return `EOF` state of encoder
+    #[inline]
+    pub fn encode_eof(&mut self) -> bool {
+        match self.kind {
+            TransferEncodingKind::Eof => true,
+            TransferEncodingKind::Length(rem) => rem == 0,
+            TransferEncodingKind::Chunked(ref mut eof) => {
+                if !*eof {
+                    *eof = true;
+                    self.buf.as_mut().unwrap().extend_from_slice(b"0\r\n\r\n");
+                }
+                true
+            }
+        }
+    }
+}
+
+impl io::Write for TransferEncoding {
+    #[inline]
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        if self.buf.is_some() {
+            self.encode(buf)?;
+        }
+        Ok(buf.len())
+    }
+
+    #[inline]
+    fn flush(&mut self) -> io::Result<()> {
+        Ok(())
+    }
+}
+
+struct AcceptEncoding {
+    encoding: ContentEncoding,
+    quality: f64,
+}
+
+impl Eq for AcceptEncoding {}
+
+impl Ord for AcceptEncoding {
+    fn cmp(&self, other: &AcceptEncoding) -> cmp::Ordering {
+        if self.quality > other.quality {
+            cmp::Ordering::Less
+        } else if self.quality < other.quality {
+            cmp::Ordering::Greater
+        } else {
+            cmp::Ordering::Equal
+        }
+    }
+}
+
+impl PartialOrd for AcceptEncoding {
+    fn partial_cmp(&self, other: &AcceptEncoding) -> Option<cmp::Ordering> {
+        Some(self.cmp(other))
+    }
+}
+
+impl PartialEq for AcceptEncoding {
+    fn eq(&self, other: &AcceptEncoding) -> bool {
+        self.quality == other.quality
+    }
+}
+
+impl AcceptEncoding {
+    fn new(tag: &str) -> Option<AcceptEncoding> {
+        let parts: Vec<&str> = tag.split(';').collect();
+        let encoding = match parts.len() {
+            0 => return None,
+            _ => ContentEncoding::from(parts[0]),
+        };
+        let quality = match parts.len() {
+            1 => encoding.quality(),
+            _ => match f64::from_str(parts[1]) {
+                Ok(q) => q,
+                Err(_) => 0.0,
+            },
+        };
+        Some(AcceptEncoding { encoding, quality })
+    }
+
+    /// Parse a raw Accept-Encoding header value into an ordered list.
+    pub fn parse(raw: &str) -> ContentEncoding {
+        let mut encodings: Vec<_> = raw
+            .replace(' ', "")
+            .split(',')
+            .map(|l| AcceptEncoding::new(l))
+            .collect();
+        encodings.sort();
+
+        for enc in encodings {
+            if let Some(enc) = enc {
+                return enc.encoding;
+            }
+        }
+        ContentEncoding::Identity
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use bytes::Bytes;
+
+    #[test]
+    fn test_chunked_te() {
+        let bytes = BytesMut::new();
+        let mut enc = TransferEncoding::chunked(bytes);
+        {
+            assert!(!enc.encode(b"test").ok().unwrap());
+            assert!(enc.encode(b"").ok().unwrap());
+        }
+        assert_eq!(
+            enc.buf_mut().take().freeze(),
+            Bytes::from_static(b"4\r\ntest\r\n0\r\n\r\n")
+        );
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/settings.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/settings.rs.html new file mode 100644 index 0000000..1b8a943 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/settings.rs.html @@ -0,0 +1,645 @@ +settings.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+
+use std::cell::{Cell, RefCell, RefMut, UnsafeCell};
+use std::collections::VecDeque;
+use std::fmt::Write;
+use std::rc::Rc;
+use std::{env, fmt, net};
+
+use bytes::BytesMut;
+use futures_cpupool::CpuPool;
+use http::StatusCode;
+use lazycell::LazyCell;
+use parking_lot::Mutex;
+use time;
+
+use super::channel::Node;
+use super::message::{Request, RequestPool};
+use super::KeepAlive;
+use body::Body;
+use httpresponse::{HttpResponse, HttpResponseBuilder, HttpResponsePool};
+
+/// Env variable for default cpu pool size
+const ENV_CPU_POOL_VAR: &str = "ACTIX_CPU_POOL";
+
+lazy_static! {
+    pub(crate) static ref DEFAULT_CPUPOOL: Mutex<CpuPool> = {
+        let default = match env::var(ENV_CPU_POOL_VAR) {
+            Ok(val) => {
+                if let Ok(val) = val.parse() {
+                    val
+                } else {
+                    error!("Can not parse ACTIX_CPU_POOL value");
+                    20
+                }
+            }
+            Err(_) => 20,
+        };
+        Mutex::new(CpuPool::new(default))
+    };
+}
+
+/// Various server settings
+pub struct ServerSettings {
+    addr: Option<net::SocketAddr>,
+    secure: bool,
+    host: String,
+    cpu_pool: LazyCell<CpuPool>,
+    responses: &'static HttpResponsePool,
+}
+
+impl Clone for ServerSettings {
+    fn clone(&self) -> Self {
+        ServerSettings {
+            addr: self.addr,
+            secure: self.secure,
+            host: self.host.clone(),
+            cpu_pool: LazyCell::new(),
+            responses: HttpResponsePool::get_pool(),
+        }
+    }
+}
+
+impl Default for ServerSettings {
+    fn default() -> Self {
+        ServerSettings {
+            addr: None,
+            secure: false,
+            host: "localhost:8080".to_owned(),
+            responses: HttpResponsePool::get_pool(),
+            cpu_pool: LazyCell::new(),
+        }
+    }
+}
+
+impl ServerSettings {
+    /// Crate server settings instance
+    pub(crate) fn new(
+        addr: Option<net::SocketAddr>, host: &Option<String>, secure: bool,
+    ) -> ServerSettings {
+        let host = if let Some(ref host) = *host {
+            host.clone()
+        } else if let Some(ref addr) = addr {
+            format!("{}", addr)
+        } else {
+            "localhost".to_owned()
+        };
+        let cpu_pool = LazyCell::new();
+        let responses = HttpResponsePool::get_pool();
+        ServerSettings {
+            addr,
+            secure,
+            host,
+            cpu_pool,
+            responses,
+        }
+    }
+
+    pub(crate) fn parts(&self) -> (Option<net::SocketAddr>, String, bool) {
+        (self.addr, self.host.clone(), self.secure)
+    }
+
+    pub(crate) fn from_parts(parts: (Option<net::SocketAddr>, String, bool)) -> Self {
+        let (addr, host, secure) = parts;
+        ServerSettings {
+            addr,
+            host,
+            secure,
+            cpu_pool: LazyCell::new(),
+            responses: HttpResponsePool::get_pool(),
+        }
+    }
+
+    /// Returns the socket address of the local half of this TCP connection
+    pub fn local_addr(&self) -> Option<net::SocketAddr> {
+        self.addr
+    }
+
+    /// Returns true if connection is secure(https)
+    pub fn secure(&self) -> bool {
+        self.secure
+    }
+
+    /// Returns host header value
+    pub fn host(&self) -> &str {
+        &self.host
+    }
+
+    /// Returns default `CpuPool` for server
+    pub fn cpu_pool(&self) -> &CpuPool {
+        self.cpu_pool.borrow_with(|| DEFAULT_CPUPOOL.lock().clone())
+    }
+
+    #[inline]
+    pub(crate) fn get_response(&self, status: StatusCode, body: Body) -> HttpResponse {
+        HttpResponsePool::get_response(&self.responses, status, body)
+    }
+
+    #[inline]
+    pub(crate) fn get_response_builder(
+        &self, status: StatusCode,
+    ) -> HttpResponseBuilder {
+        HttpResponsePool::get_builder(&self.responses, status)
+    }
+}
+
+// "Sun, 06 Nov 1994 08:49:37 GMT".len()
+const DATE_VALUE_LENGTH: usize = 29;
+
+pub(crate) struct WorkerSettings<H> {
+    h: RefCell<Vec<H>>,
+    keep_alive: u64,
+    ka_enabled: bool,
+    bytes: Rc<SharedBytesPool>,
+    messages: &'static RequestPool,
+    channels: Cell<usize>,
+    node: RefCell<Node<()>>,
+    date: UnsafeCell<Date>,
+}
+
+impl<H> WorkerSettings<H> {
+    pub(crate) fn new(
+        h: Vec<H>, keep_alive: KeepAlive, settings: ServerSettings,
+    ) -> WorkerSettings<H> {
+        let (keep_alive, ka_enabled) = match keep_alive {
+            KeepAlive::Timeout(val) => (val as u64, true),
+            KeepAlive::Os | KeepAlive::Tcp(_) => (0, true),
+            KeepAlive::Disabled => (0, false),
+        };
+
+        WorkerSettings {
+            h: RefCell::new(h),
+            bytes: Rc::new(SharedBytesPool::new()),
+            messages: RequestPool::pool(settings),
+            channels: Cell::new(0),
+            node: RefCell::new(Node::head()),
+            date: UnsafeCell::new(Date::new()),
+            keep_alive,
+            ka_enabled,
+        }
+    }
+
+    pub fn num_channels(&self) -> usize {
+        self.channels.get()
+    }
+
+    pub fn head(&self) -> RefMut<Node<()>> {
+        self.node.borrow_mut()
+    }
+
+    pub fn handlers(&self) -> RefMut<Vec<H>> {
+        self.h.borrow_mut()
+    }
+
+    pub fn keep_alive(&self) -> u64 {
+        self.keep_alive
+    }
+
+    pub fn keep_alive_enabled(&self) -> bool {
+        self.ka_enabled
+    }
+
+    pub fn get_bytes(&self) -> BytesMut {
+        self.bytes.get_bytes()
+    }
+
+    pub fn release_bytes(&self, bytes: BytesMut) {
+        self.bytes.release_bytes(bytes)
+    }
+
+    pub fn get_request(&self) -> Request {
+        RequestPool::get(self.messages)
+    }
+
+    pub fn add_channel(&self) {
+        self.channels.set(self.channels.get() + 1);
+    }
+
+    pub fn remove_channel(&self) {
+        let num = self.channels.get();
+        if num > 0 {
+            self.channels.set(num - 1);
+        } else {
+            error!("Number of removed channels is bigger than added channel. Bug in actix-web");
+        }
+    }
+
+    pub fn update_date(&self) {
+        // Unsafe: WorkerSetting is !Sync and !Send
+        unsafe { &mut *self.date.get() }.update();
+    }
+
+    pub fn set_date(&self, dst: &mut BytesMut, full: bool) {
+        // Unsafe: WorkerSetting is !Sync and !Send
+        let date_bytes = unsafe { &(*self.date.get()).bytes };
+        if full {
+            let mut buf: [u8; 39] = [0; 39];
+            buf[..6].copy_from_slice(b"date: ");
+            buf[6..35].copy_from_slice(date_bytes);
+            buf[35..].copy_from_slice(b"\r\n\r\n");
+            dst.extend_from_slice(&buf);
+        } else {
+            dst.extend_from_slice(date_bytes);
+        }
+    }
+}
+
+struct Date {
+    bytes: [u8; DATE_VALUE_LENGTH],
+    pos: usize,
+}
+
+impl Date {
+    fn new() -> Date {
+        let mut date = Date {
+            bytes: [0; DATE_VALUE_LENGTH],
+            pos: 0,
+        };
+        date.update();
+        date
+    }
+    fn update(&mut self) {
+        self.pos = 0;
+        write!(self, "{}", time::at_utc(time::get_time()).rfc822()).unwrap();
+    }
+}
+
+impl fmt::Write for Date {
+    fn write_str(&mut self, s: &str) -> fmt::Result {
+        let len = s.len();
+        self.bytes[self.pos..self.pos + len].copy_from_slice(s.as_bytes());
+        self.pos += len;
+        Ok(())
+    }
+}
+
+#[derive(Debug)]
+pub(crate) struct SharedBytesPool(RefCell<VecDeque<BytesMut>>);
+
+impl SharedBytesPool {
+    pub fn new() -> SharedBytesPool {
+        SharedBytesPool(RefCell::new(VecDeque::with_capacity(128)))
+    }
+
+    pub fn get_bytes(&self) -> BytesMut {
+        if let Some(bytes) = self.0.borrow_mut().pop_front() {
+            bytes
+        } else {
+            BytesMut::new()
+        }
+    }
+
+    pub fn release_bytes(&self, mut bytes: BytesMut) {
+        let v = &mut self.0.borrow_mut();
+        if v.len() < 128 {
+            bytes.clear();
+            v.push_front(bytes);
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_date_len() {
+        assert_eq!(DATE_VALUE_LENGTH, "Sun, 06 Nov 1994 08:49:37 GMT".len());
+    }
+
+    #[test]
+    fn test_date() {
+        let settings = WorkerSettings::<()>::new(
+            Vec::new(),
+            KeepAlive::Os,
+            ServerSettings::default(),
+        );
+        let mut buf1 = BytesMut::with_capacity(DATE_VALUE_LENGTH + 10);
+        settings.set_date(&mut buf1, true);
+        let mut buf2 = BytesMut::with_capacity(DATE_VALUE_LENGTH + 10);
+        settings.set_date(&mut buf2, true);
+        assert_eq!(buf1, buf2);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/srv.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/srv.rs.html new file mode 100644 index 0000000..ea295ce --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/srv.rs.html @@ -0,0 +1,1923 @@ +srv.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+
+use std::rc::Rc;
+use std::sync::{mpsc as sync_mpsc, Arc};
+use std::time::Duration;
+use std::{io, net, thread};
+
+use actix::{
+    fut, signal, Actor, ActorFuture, Addr, Arbiter, AsyncContext, Context, Handler,
+    Response, StreamHandler, System, WrapFuture,
+};
+
+use futures::sync::mpsc;
+use futures::{Future, Sink, Stream};
+use mio;
+use net2::TcpBuilder;
+use num_cpus;
+use slab::Slab;
+use tokio_io::{AsyncRead, AsyncWrite};
+
+#[cfg(feature = "tls")]
+use native_tls::TlsAcceptor;
+
+#[cfg(feature = "alpn")]
+use openssl::ssl::{AlpnError, SslAcceptorBuilder};
+
+use super::channel::{HttpChannel, WrapperStream};
+use super::settings::{ServerSettings, WorkerSettings};
+use super::worker::{Conn, SocketInfo, StopWorker, StreamHandlerType, Worker};
+use super::{IntoHttpHandler, IoStream, KeepAlive};
+use super::{PauseServer, ResumeServer, StopServer};
+
+#[cfg(feature = "alpn")]
+fn configure_alpn(builder: &mut SslAcceptorBuilder) -> io::Result<()> {
+    builder.set_alpn_protos(b"\x02h2\x08http/1.1")?;
+    builder.set_alpn_select_callback(|_, protos| {
+        const H2: &[u8] = b"\x02h2";
+        if protos.windows(3).any(|window| window == H2) {
+            Ok(b"h2")
+        } else {
+            Err(AlpnError::NOACK)
+        }
+    });
+    Ok(())
+}
+
+/// An HTTP Server
+pub struct HttpServer<H>
+where
+    H: IntoHttpHandler + 'static,
+{
+    h: Option<Rc<WorkerSettings<H::Handler>>>,
+    threads: usize,
+    backlog: i32,
+    host: Option<String>,
+    keep_alive: KeepAlive,
+    factory: Arc<Fn() -> Vec<H> + Send + Sync>,
+    #[cfg_attr(feature = "cargo-clippy", allow(type_complexity))]
+    workers: Vec<(usize, Addr<Worker<H::Handler>>)>,
+    sockets: Vec<Socket>,
+    accept: Vec<(mio::SetReadiness, sync_mpsc::Sender<Command>)>,
+    exit: bool,
+    shutdown_timeout: u16,
+    signals: Option<Addr<signal::ProcessSignals>>,
+    no_http2: bool,
+    no_signals: bool,
+}
+
+enum ServerCommand {
+    WorkerDied(usize, Slab<SocketInfo>),
+}
+
+impl<H> Actor for HttpServer<H>
+where
+    H: IntoHttpHandler,
+{
+    type Context = Context<Self>;
+}
+
+struct Socket {
+    lst: net::TcpListener,
+    addr: net::SocketAddr,
+    tp: StreamHandlerType,
+}
+
+impl<H> HttpServer<H>
+where
+    H: IntoHttpHandler + 'static,
+{
+    /// Create new http server with application factory
+    pub fn new<F, U>(factory: F) -> Self
+    where
+        F: Fn() -> U + Sync + Send + 'static,
+        U: IntoIterator<Item = H> + 'static,
+    {
+        let f = move || (factory)().into_iter().collect();
+
+        HttpServer {
+            h: None,
+            threads: num_cpus::get(),
+            backlog: 2048,
+            host: None,
+            keep_alive: KeepAlive::Os,
+            factory: Arc::new(f),
+            workers: Vec::new(),
+            sockets: Vec::new(),
+            accept: Vec::new(),
+            exit: false,
+            shutdown_timeout: 30,
+            signals: None,
+            no_http2: false,
+            no_signals: false,
+        }
+    }
+
+    /// Set number of workers to start.
+    ///
+    /// By default http server uses number of available logical cpu as threads
+    /// count.
+    pub fn workers(mut self, num: usize) -> Self {
+        self.threads = num;
+        self
+    }
+
+    #[doc(hidden)]
+    #[deprecated(since = "0.6.0", note = "please use `HttpServer::workers()` instead")]
+    pub fn threads(self, num: usize) -> Self {
+        self.workers(num)
+    }
+
+    /// Set the maximum number of pending connections.
+    ///
+    /// This refers to the number of clients that can be waiting to be served.
+    /// Exceeding this number results in the client getting an error when
+    /// attempting to connect. It should only affect servers under significant
+    /// load.
+    ///
+    /// Generally set in the 64-2048 range. Default value is 2048.
+    ///
+    /// This method should be called before `bind()` method call.
+    pub fn backlog(mut self, num: i32) -> Self {
+        self.backlog = num;
+        self
+    }
+
+    /// Set server keep-alive setting.
+    ///
+    /// By default keep alive is set to a `Os`.
+    pub fn keep_alive<T: Into<KeepAlive>>(mut self, val: T) -> Self {
+        self.keep_alive = val.into();
+        self
+    }
+
+    /// Set server host name.
+    ///
+    /// Host name is used by application router aa a hostname for url
+    /// generation. Check [ConnectionInfo](./dev/struct.ConnectionInfo.
+    /// html#method.host) documentation for more information.
+    pub fn server_hostname(mut self, val: String) -> Self {
+        self.host = Some(val);
+        self
+    }
+
+    /// Stop actix system.
+    ///
+    /// `SystemExit` message stops currently running system.
+    pub fn system_exit(mut self) -> Self {
+        self.exit = true;
+        self
+    }
+
+    /// Set alternative address for `ProcessSignals` actor.
+    pub fn signals(mut self, addr: Addr<signal::ProcessSignals>) -> Self {
+        self.signals = Some(addr);
+        self
+    }
+
+    /// Disable signal handling
+    pub fn disable_signals(mut self) -> Self {
+        self.no_signals = true;
+        self
+    }
+
+    /// Timeout for graceful workers shutdown.
+    ///
+    /// After receiving a stop signal, workers have this much time to finish
+    /// serving requests. Workers still alive after the timeout are force
+    /// dropped.
+    ///
+    /// By default shutdown timeout sets to 30 seconds.
+    pub fn shutdown_timeout(mut self, sec: u16) -> Self {
+        self.shutdown_timeout = sec;
+        self
+    }
+
+    /// Disable `HTTP/2` support
+    pub fn no_http2(mut self) -> Self {
+        self.no_http2 = true;
+        self
+    }
+
+    /// Get addresses of bound sockets.
+    pub fn addrs(&self) -> Vec<net::SocketAddr> {
+        self.sockets.iter().map(|s| s.addr).collect()
+    }
+
+    /// Get addresses of bound sockets and the scheme for it.
+    ///
+    /// This is useful when the server is bound from different sources
+    /// with some sockets listening on http and some listening on https
+    /// and the user should be presented with an enumeration of which
+    /// socket requires which protocol.
+    pub fn addrs_with_scheme(&self) -> Vec<(net::SocketAddr, &str)> {
+        self.sockets
+            .iter()
+            .map(|s| (s.addr, s.tp.scheme()))
+            .collect()
+    }
+
+    /// Use listener for accepting incoming connection requests
+    ///
+    /// HttpServer does not change any configuration for TcpListener,
+    /// it needs to be configured before passing it to listen() method.
+    pub fn listen(mut self, lst: net::TcpListener) -> Self {
+        let addr = lst.local_addr().unwrap();
+        self.sockets.push(Socket {
+            addr,
+            lst,
+            tp: StreamHandlerType::Normal,
+        });
+        self
+    }
+
+    #[cfg(feature = "tls")]
+    /// Use listener for accepting incoming tls connection requests
+    ///
+    /// HttpServer does not change any configuration for TcpListener,
+    /// it needs to be configured before passing it to listen() method.
+    pub fn listen_tls(mut self, lst: net::TcpListener, acceptor: TlsAcceptor) -> Self {
+        let addr = lst.local_addr().unwrap();
+        self.sockets.push(Socket {
+            addr,
+            lst,
+            tp: StreamHandlerType::Tls(acceptor.clone()),
+        });
+        self
+    }
+
+    #[cfg(feature = "alpn")]
+    /// Use listener for accepting incoming tls connection requests
+    ///
+    /// This method sets alpn protocols to "h2" and "http/1.1"
+    pub fn listen_ssl(
+        mut self, lst: net::TcpListener, mut builder: SslAcceptorBuilder,
+    ) -> io::Result<Self> {
+        // alpn support
+        if !self.no_http2 {
+            configure_alpn(&mut builder)?;
+        }
+        let acceptor = builder.build();
+        let addr = lst.local_addr().unwrap();
+        self.sockets.push(Socket {
+            addr,
+            lst,
+            tp: StreamHandlerType::Alpn(acceptor.clone()),
+        });
+        Ok(self)
+    }
+
+    fn bind2<S: net::ToSocketAddrs>(&mut self, addr: S) -> io::Result<Vec<Socket>> {
+        let mut err = None;
+        let mut succ = false;
+        let mut sockets = Vec::new();
+        for addr in addr.to_socket_addrs()? {
+            match create_tcp_listener(addr, self.backlog) {
+                Ok(lst) => {
+                    succ = true;
+                    let addr = lst.local_addr().unwrap();
+                    sockets.push(Socket {
+                        lst,
+                        addr,
+                        tp: StreamHandlerType::Normal,
+                    });
+                }
+                Err(e) => err = Some(e),
+            }
+        }
+
+        if !succ {
+            if let Some(e) = err.take() {
+                Err(e)
+            } else {
+                Err(io::Error::new(
+                    io::ErrorKind::Other,
+                    "Can not bind to address.",
+                ))
+            }
+        } else {
+            Ok(sockets)
+        }
+    }
+
+    /// The socket address to bind
+    ///
+    /// To bind multiple addresses this method can be called multiple times.
+    pub fn bind<S: net::ToSocketAddrs>(mut self, addr: S) -> io::Result<Self> {
+        let sockets = self.bind2(addr)?;
+        self.sockets.extend(sockets);
+        Ok(self)
+    }
+
+    #[cfg(feature = "tls")]
+    /// The ssl socket address to bind
+    ///
+    /// To bind multiple addresses this method can be called multiple times.
+    pub fn bind_tls<S: net::ToSocketAddrs>(
+        mut self, addr: S, acceptor: TlsAcceptor,
+    ) -> io::Result<Self> {
+        let sockets = self.bind2(addr)?;
+        self.sockets.extend(sockets.into_iter().map(|mut s| {
+            s.tp = StreamHandlerType::Tls(acceptor.clone());
+            s
+        }));
+        Ok(self)
+    }
+
+    #[cfg(feature = "alpn")]
+    /// Start listening for incoming tls connections.
+    ///
+    /// This method sets alpn protocols to "h2" and "http/1.1"
+    pub fn bind_ssl<S: net::ToSocketAddrs>(
+        mut self, addr: S, mut builder: SslAcceptorBuilder,
+    ) -> io::Result<Self> {
+        // alpn support
+        if !self.no_http2 {
+            configure_alpn(&mut builder)?;
+        }
+
+        let acceptor = builder.build();
+        let sockets = self.bind2(addr)?;
+        self.sockets.extend(sockets.into_iter().map(|mut s| {
+            s.tp = StreamHandlerType::Alpn(acceptor.clone());
+            s
+        }));
+        Ok(self)
+    }
+
+    fn start_workers(
+        &mut self, settings: &ServerSettings, sockets: &Slab<SocketInfo>,
+    ) -> Vec<(usize, mpsc::UnboundedSender<Conn<net::TcpStream>>)> {
+        // start workers
+        let mut workers = Vec::new();
+        for idx in 0..self.threads {
+            let (tx, rx) = mpsc::unbounded::<Conn<net::TcpStream>>();
+
+            let ka = self.keep_alive;
+            let socks = sockets.clone();
+            let factory = Arc::clone(&self.factory);
+            let parts = settings.parts();
+
+            let addr = Arbiter::start(move |ctx: &mut Context<_>| {
+                let s = ServerSettings::from_parts(parts);
+                let apps: Vec<_> =
+                    (*factory)().into_iter().map(|h| h.into_handler()).collect();
+                ctx.add_message_stream(rx);
+                Worker::new(apps, socks, ka, s)
+            });
+            workers.push((idx, tx));
+            self.workers.push((idx, addr));
+        }
+        info!("Starting {} http workers", self.threads);
+        workers
+    }
+
+    // subscribe to os signals
+    fn subscribe_to_signals(&self) -> Option<Addr<signal::ProcessSignals>> {
+        if !self.no_signals {
+            if let Some(ref signals) = self.signals {
+                Some(signals.clone())
+            } else {
+                Some(System::current().registry().get::<signal::ProcessSignals>())
+            }
+        } else {
+            None
+        }
+    }
+}
+
+impl<H: IntoHttpHandler> HttpServer<H> {
+    /// Start listening for incoming connections.
+    ///
+    /// This method starts number of http handler workers in separate threads.
+    /// For each address this method starts separate thread which does
+    /// `accept()` in a loop.
+    ///
+    /// This methods panics if no socket addresses get bound.
+    ///
+    /// This method requires to run within properly configured `Actix` system.
+    ///
+    /// ```rust
+    /// extern crate actix_web;
+    /// use actix_web::{actix, server, App, HttpResponse};
+    ///
+    /// fn main() {
+    ///     let sys = actix::System::new("example");  // <- create Actix system
+    ///
+    ///     server::new(|| App::new().resource("/", |r| r.h(|_: &_| HttpResponse::Ok())))
+    ///         .bind("127.0.0.1:0")
+    ///         .expect("Can not bind to 127.0.0.1:0")
+    ///         .start();
+    /// #   actix::System::current().stop();
+    ///    sys.run();  // <- Run actix system, this method starts all async processes
+    /// }
+    /// ```
+    pub fn start(mut self) -> Addr<Self> {
+        if self.sockets.is_empty() {
+            panic!("HttpServer::bind() has to be called before start()");
+        } else {
+            let (tx, rx) = mpsc::unbounded();
+
+            let mut socks = Slab::new();
+            let mut addrs: Vec<(usize, Socket)> = Vec::new();
+
+            for socket in self.sockets.drain(..) {
+                let entry = socks.vacant_entry();
+                let token = entry.key();
+                entry.insert(SocketInfo {
+                    addr: socket.addr,
+                    htype: socket.tp.clone(),
+                });
+                addrs.push((token, socket));
+            }
+
+            let settings = ServerSettings::new(Some(addrs[0].1.addr), &self.host, false);
+            let workers = self.start_workers(&settings, &socks);
+
+            // start acceptors threads
+            for (token, sock) in addrs {
+                info!("Starting server on http://{}", sock.addr);
+                self.accept.push(start_accept_thread(
+                    token,
+                    sock,
+                    tx.clone(),
+                    socks.clone(),
+                    workers.clone(),
+                ));
+            }
+
+            // start http server actor
+            let signals = self.subscribe_to_signals();
+            let addr = Actor::create(move |ctx| {
+                ctx.add_stream(rx);
+                self
+            });
+            if let Some(signals) = signals {
+                signals.do_send(signal::Subscribe(addr.clone().recipient()))
+            }
+            addr
+        }
+    }
+
+    /// Spawn new thread and start listening for incoming connections.
+    ///
+    /// This method spawns new thread and starts new actix system. Other than
+    /// that it is similar to `start()` method. This method blocks.
+    ///
+    /// This methods panics if no socket addresses get bound.
+    ///
+    /// ```rust,ignore
+    /// # extern crate futures;
+    /// # extern crate actix_web;
+    /// # use futures::Future;
+    /// use actix_web::*;
+    ///
+    /// fn main() {
+    ///     HttpServer::new(|| App::new().resource("/", |r| r.h(|_| HttpResponse::Ok())))
+    ///         .bind("127.0.0.1:0")
+    ///         .expect("Can not bind to 127.0.0.1:0")
+    ///         .run();
+    /// }
+    /// ```
+    pub fn run(self) {
+        let sys = System::new("http-server");
+        self.start();
+        sys.run();
+    }
+}
+
+#[doc(hidden)]
+#[cfg(feature = "tls")]
+#[deprecated(
+    since = "0.6.0", note = "please use `actix_web::HttpServer::bind_tls` instead"
+)]
+impl<H: IntoHttpHandler> HttpServer<H> {
+    /// Start listening for incoming tls connections.
+    pub fn start_tls(mut self, acceptor: TlsAcceptor) -> io::Result<Addr<Self>> {
+        for sock in &mut self.sockets {
+            match sock.tp {
+                StreamHandlerType::Normal => (),
+                _ => continue,
+            }
+            sock.tp = StreamHandlerType::Tls(acceptor.clone());
+        }
+        Ok(self.start())
+    }
+}
+
+#[doc(hidden)]
+#[cfg(feature = "alpn")]
+#[deprecated(
+    since = "0.6.0", note = "please use `actix_web::HttpServer::bind_ssl` instead"
+)]
+impl<H: IntoHttpHandler> HttpServer<H> {
+    /// Start listening for incoming tls connections.
+    ///
+    /// This method sets alpn protocols to "h2" and "http/1.1"
+    pub fn start_ssl(
+        mut self, mut builder: SslAcceptorBuilder,
+    ) -> io::Result<Addr<Self>> {
+        // alpn support
+        if !self.no_http2 {
+            builder.set_alpn_protos(b"\x02h2\x08http/1.1")?;
+            builder.set_alpn_select_callback(|_, protos| {
+                const H2: &[u8] = b"\x02h2";
+                if protos.windows(3).any(|window| window == H2) {
+                    Ok(b"h2")
+                } else {
+                    Err(AlpnError::NOACK)
+                }
+            });
+        }
+
+        let acceptor = builder.build();
+        for sock in &mut self.sockets {
+            match sock.tp {
+                StreamHandlerType::Normal => (),
+                _ => continue,
+            }
+            sock.tp = StreamHandlerType::Alpn(acceptor.clone());
+        }
+        Ok(self.start())
+    }
+}
+
+impl<H: IntoHttpHandler> HttpServer<H> {
+    /// Start listening for incoming connections from a stream.
+    ///
+    /// This method uses only one thread for handling incoming connections.
+    pub fn start_incoming<T, S>(mut self, stream: S, secure: bool) -> Addr<Self>
+    where
+        S: Stream<Item = T, Error = io::Error> + Send + 'static,
+        T: AsyncRead + AsyncWrite + Send + 'static,
+    {
+        // set server settings
+        let addr: net::SocketAddr = "127.0.0.1:8080".parse().unwrap();
+        let settings = ServerSettings::new(Some(addr), &self.host, secure);
+        let apps: Vec<_> = (*self.factory)()
+            .into_iter()
+            .map(|h| h.into_handler())
+            .collect();
+        self.h = Some(Rc::new(WorkerSettings::new(
+            apps,
+            self.keep_alive,
+            settings,
+        )));
+
+        // start server
+        let signals = self.subscribe_to_signals();
+        let addr = HttpServer::create(move |ctx| {
+            ctx.add_message_stream(stream.map_err(|_| ()).map(move |t| Conn {
+                io: WrapperStream::new(t),
+                token: 0,
+                peer: None,
+                http2: false,
+            }));
+            self
+        });
+
+        if let Some(signals) = signals {
+            signals.do_send(signal::Subscribe(addr.clone().recipient()))
+        }
+        addr
+    }
+}
+
+/// Signals support
+/// Handle `SIGINT`, `SIGTERM`, `SIGQUIT` signals and stop actix system
+/// message to `System` actor.
+impl<H: IntoHttpHandler> Handler<signal::Signal> for HttpServer<H> {
+    type Result = ();
+
+    fn handle(&mut self, msg: signal::Signal, ctx: &mut Context<Self>) {
+        match msg.0 {
+            signal::SignalType::Int => {
+                info!("SIGINT received, exiting");
+                self.exit = true;
+                Handler::<StopServer>::handle(self, StopServer { graceful: false }, ctx);
+            }
+            signal::SignalType::Term => {
+                info!("SIGTERM received, stopping");
+                self.exit = true;
+                Handler::<StopServer>::handle(self, StopServer { graceful: true }, ctx);
+            }
+            signal::SignalType::Quit => {
+                info!("SIGQUIT received, exiting");
+                self.exit = true;
+                Handler::<StopServer>::handle(self, StopServer { graceful: false }, ctx);
+            }
+            _ => (),
+        }
+    }
+}
+
+/// Commands from accept threads
+impl<H: IntoHttpHandler> StreamHandler<ServerCommand, ()> for HttpServer<H> {
+    fn finished(&mut self, _: &mut Context<Self>) {}
+
+    fn handle(&mut self, msg: ServerCommand, _: &mut Context<Self>) {
+        match msg {
+            ServerCommand::WorkerDied(idx, socks) => {
+                let mut found = false;
+                for i in 0..self.workers.len() {
+                    if self.workers[i].0 == idx {
+                        self.workers.swap_remove(i);
+                        found = true;
+                        break;
+                    }
+                }
+
+                if found {
+                    error!("Worker has died {:?}, restarting", idx);
+                    let (tx, rx) = mpsc::unbounded::<Conn<net::TcpStream>>();
+
+                    let mut new_idx = self.workers.len();
+                    'found: loop {
+                        for i in 0..self.workers.len() {
+                            if self.workers[i].0 == new_idx {
+                                new_idx += 1;
+                                continue 'found;
+                            }
+                        }
+                        break;
+                    }
+
+                    let ka = self.keep_alive;
+                    let factory = Arc::clone(&self.factory);
+                    let host = self.host.clone();
+                    let addr = socks[0].addr;
+
+                    let addr = Arbiter::start(move |ctx: &mut Context<_>| {
+                        let settings = ServerSettings::new(Some(addr), &host, false);
+                        let apps: Vec<_> =
+                            (*factory)().into_iter().map(|h| h.into_handler()).collect();
+                        ctx.add_message_stream(rx);
+                        Worker::new(apps, socks, ka, settings)
+                    });
+                    for item in &self.accept {
+                        let _ = item.1.send(Command::Worker(new_idx, tx.clone()));
+                        let _ = item.0.set_readiness(mio::Ready::readable());
+                    }
+
+                    self.workers.push((new_idx, addr));
+                }
+            }
+        }
+    }
+}
+
+impl<T, H> Handler<Conn<T>> for HttpServer<H>
+where
+    T: IoStream,
+    H: IntoHttpHandler,
+{
+    type Result = ();
+
+    fn handle(&mut self, msg: Conn<T>, _: &mut Context<Self>) -> Self::Result {
+        Arbiter::spawn(HttpChannel::new(
+            Rc::clone(self.h.as_ref().unwrap()),
+            msg.io,
+            msg.peer,
+            msg.http2,
+        ));
+    }
+}
+
+impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H> {
+    type Result = ();
+
+    fn handle(&mut self, _: PauseServer, _: &mut Context<Self>) {
+        for item in &self.accept {
+            let _ = item.1.send(Command::Pause);
+            let _ = item.0.set_readiness(mio::Ready::readable());
+        }
+    }
+}
+
+impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H> {
+    type Result = ();
+
+    fn handle(&mut self, _: ResumeServer, _: &mut Context<Self>) {
+        for item in &self.accept {
+            let _ = item.1.send(Command::Resume);
+            let _ = item.0.set_readiness(mio::Ready::readable());
+        }
+    }
+}
+
+impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H> {
+    type Result = Response<(), ()>;
+
+    fn handle(&mut self, msg: StopServer, ctx: &mut Context<Self>) -> Self::Result {
+        // stop accept threads
+        for item in &self.accept {
+            let _ = item.1.send(Command::Stop);
+            let _ = item.0.set_readiness(mio::Ready::readable());
+        }
+
+        // stop workers
+        let (tx, rx) = mpsc::channel(1);
+
+        let dur = if msg.graceful {
+            Some(Duration::new(u64::from(self.shutdown_timeout), 0))
+        } else {
+            None
+        };
+        for worker in &self.workers {
+            let tx2 = tx.clone();
+            ctx.spawn(
+                worker
+                    .1
+                    .send(StopWorker { graceful: dur })
+                    .into_actor(self)
+                    .then(move |_, slf, ctx| {
+                        slf.workers.pop();
+                        if slf.workers.is_empty() {
+                            let _ = tx2.send(());
+
+                            // we need to stop system if server was spawned
+                            if slf.exit {
+                                ctx.run_later(Duration::from_millis(300), |_, _| {
+                                    System::current().stop();
+                                });
+                            }
+                        }
+                        fut::ok(())
+                    }),
+            );
+        }
+
+        if !self.workers.is_empty() {
+            Response::async(rx.into_future().map(|_| ()).map_err(|_| ()))
+        } else {
+            // we need to stop system if server was spawned
+            if self.exit {
+                ctx.run_later(Duration::from_millis(300), |_, _| {
+                    System::current().stop();
+                });
+            }
+            Response::reply(Ok(()))
+        }
+    }
+}
+
+enum Command {
+    Pause,
+    Resume,
+    Stop,
+    Worker(usize, mpsc::UnboundedSender<Conn<net::TcpStream>>),
+}
+
+fn start_accept_thread(
+    token: usize, sock: Socket, srv: mpsc::UnboundedSender<ServerCommand>,
+    socks: Slab<SocketInfo>,
+    mut workers: Vec<(usize, mpsc::UnboundedSender<Conn<net::TcpStream>>)>,
+) -> (mio::SetReadiness, sync_mpsc::Sender<Command>) {
+    let (tx, rx) = sync_mpsc::channel();
+    let (reg, readiness) = mio::Registration::new2();
+
+    // start accept thread
+    #[cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))]
+    let _ = thread::Builder::new()
+        .name(format!("Accept on {}", sock.addr))
+        .spawn(move || {
+            const SRV: mio::Token = mio::Token(0);
+            const CMD: mio::Token = mio::Token(1);
+
+            let addr = sock.addr;
+            let mut server = Some(
+                mio::net::TcpListener::from_std(sock.lst)
+                    .expect("Can not create mio::net::TcpListener"),
+            );
+
+            // Create a poll instance
+            let poll = match mio::Poll::new() {
+                Ok(poll) => poll,
+                Err(err) => panic!("Can not create mio::Poll: {}", err),
+            };
+
+            // Start listening for incoming connections
+            if let Some(ref srv) = server {
+                if let Err(err) =
+                    poll.register(srv, SRV, mio::Ready::readable(), mio::PollOpt::edge())
+                {
+                    panic!("Can not register io: {}", err);
+                }
+            }
+
+            // Start listening for incoming commands
+            if let Err(err) =
+                poll.register(&reg, CMD, mio::Ready::readable(), mio::PollOpt::edge())
+            {
+                panic!("Can not register Registration: {}", err);
+            }
+
+            // Create storage for events
+            let mut events = mio::Events::with_capacity(128);
+
+            // Sleep on error
+            let sleep = Duration::from_millis(100);
+
+            let mut next = 0;
+            loop {
+                if let Err(err) = poll.poll(&mut events, None) {
+                    panic!("Poll error: {}", err);
+                }
+
+                for event in events.iter() {
+                    match event.token() {
+                        SRV => if let Some(ref server) = server {
+                            loop {
+                                match server.accept_std() {
+                                    Ok((io, addr)) => {
+                                        let mut msg = Conn {
+                                            io,
+                                            token,
+                                            peer: Some(addr),
+                                            http2: false,
+                                        };
+                                        while !workers.is_empty() {
+                                            match workers[next].1.unbounded_send(msg) {
+                                                Ok(_) => (),
+                                                Err(err) => {
+                                                    let _ = srv.unbounded_send(
+                                                        ServerCommand::WorkerDied(
+                                                            workers[next].0,
+                                                            socks.clone(),
+                                                        ),
+                                                    );
+                                                    msg = err.into_inner();
+                                                    workers.swap_remove(next);
+                                                    if workers.is_empty() {
+                                                        error!("No workers");
+                                                        thread::sleep(sleep);
+                                                        break;
+                                                    } else if workers.len() <= next {
+                                                        next = 0;
+                                                    }
+                                                    continue;
+                                                }
+                                            }
+                                            next = (next + 1) % workers.len();
+                                            break;
+                                        }
+                                    }
+                                    Err(ref e)
+                                        if e.kind() == io::ErrorKind::WouldBlock =>
+                                    {
+                                        break
+                                    }
+                                    Err(ref e) if connection_error(e) => continue,
+                                    Err(e) => {
+                                        error!("Error accepting connection: {}", e);
+                                        // sleep after error
+                                        thread::sleep(sleep);
+                                        break;
+                                    }
+                                }
+                            }
+                        },
+                        CMD => match rx.try_recv() {
+                            Ok(cmd) => match cmd {
+                                Command::Pause => if let Some(ref server) = server {
+                                    if let Err(err) = poll.deregister(server) {
+                                        error!(
+                                            "Can not deregister server socket {}",
+                                            err
+                                        );
+                                    } else {
+                                        info!(
+                                            "Paused accepting connections on {}",
+                                            addr
+                                        );
+                                    }
+                                },
+                                Command::Resume => {
+                                    if let Some(ref server) = server {
+                                        if let Err(err) = poll.register(
+                                            server,
+                                            SRV,
+                                            mio::Ready::readable(),
+                                            mio::PollOpt::edge(),
+                                        ) {
+                                            error!("Can not resume socket accept process: {}", err);
+                                        } else {
+                                            info!("Accepting connections on {} has been resumed",
+                                              addr);
+                                        }
+                                    }
+                                }
+                                Command::Stop => {
+                                    if let Some(server) = server.take() {
+                                        let _ = poll.deregister(&server);
+                                    }
+                                    return;
+                                }
+                                Command::Worker(idx, addr) => {
+                                    workers.push((idx, addr));
+                                }
+                            },
+                            Err(err) => match err {
+                                sync_mpsc::TryRecvError::Empty => (),
+                                sync_mpsc::TryRecvError::Disconnected => {
+                                    if let Some(server) = server.take() {
+                                        let _ = poll.deregister(&server);
+                                    }
+                                    return;
+                                }
+                            },
+                        },
+                        _ => unreachable!(),
+                    }
+                }
+            }
+        });
+
+    (readiness, tx)
+}
+
+fn create_tcp_listener(
+    addr: net::SocketAddr, backlog: i32,
+) -> io::Result<net::TcpListener> {
+    let builder = match addr {
+        net::SocketAddr::V4(_) => TcpBuilder::new_v4()?,
+        net::SocketAddr::V6(_) => TcpBuilder::new_v6()?,
+    };
+    builder.reuse_address(true)?;
+    builder.bind(addr)?;
+    Ok(builder.listen(backlog)?)
+}
+
+/// This function defines errors that are per-connection. Which basically
+/// means that if we get this error from `accept()` system call it means
+/// next connection might be ready to be accepted.
+///
+/// All other errors will incur a timeout before next `accept()` is performed.
+/// The timeout is useful to handle resource exhaustion errors like ENFILE
+/// and EMFILE. Otherwise, could enter into tight loop.
+fn connection_error(e: &io::Error) -> bool {
+    e.kind() == io::ErrorKind::ConnectionRefused
+        || e.kind() == io::ErrorKind::ConnectionAborted
+        || e.kind() == io::ErrorKind::ConnectionReset
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/server/worker.rs.html b/static/api/actix-web/0.7.2/src/actix_web/server/worker.rs.html new file mode 100644 index 0000000..5bd8722 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/server/worker.rs.html @@ -0,0 +1,507 @@ +worker.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+
+use futures::sync::oneshot;
+use futures::Future;
+use net2::TcpStreamExt;
+use slab::Slab;
+use std::rc::Rc;
+use std::{net, time};
+use tokio::executor::current_thread;
+use tokio_reactor::Handle;
+use tokio_tcp::TcpStream;
+
+#[cfg(any(feature = "tls", feature = "alpn"))]
+use futures::future;
+
+#[cfg(feature = "tls")]
+use native_tls::TlsAcceptor;
+#[cfg(feature = "tls")]
+use tokio_tls::TlsAcceptorExt;
+
+#[cfg(feature = "alpn")]
+use openssl::ssl::SslAcceptor;
+#[cfg(feature = "alpn")]
+use tokio_openssl::SslAcceptorExt;
+
+use actix::msgs::StopArbiter;
+use actix::{Actor, Arbiter, AsyncContext, Context, Handler, Message, Response};
+
+use server::channel::HttpChannel;
+use server::settings::{ServerSettings, WorkerSettings};
+use server::{HttpHandler, KeepAlive};
+
+#[derive(Message)]
+pub(crate) struct Conn<T> {
+    pub io: T,
+    pub token: usize,
+    pub peer: Option<net::SocketAddr>,
+    pub http2: bool,
+}
+
+#[derive(Clone)]
+pub(crate) struct SocketInfo {
+    pub addr: net::SocketAddr,
+    pub htype: StreamHandlerType,
+}
+
+/// Stop worker message. Returns `true` on successful shutdown
+/// and `false` if some connections still alive.
+pub(crate) struct StopWorker {
+    pub graceful: Option<time::Duration>,
+}
+
+impl Message for StopWorker {
+    type Result = Result<bool, ()>;
+}
+
+/// Http worker
+///
+/// Worker accepts Socket objects via unbounded channel and start requests
+/// processing.
+pub(crate) struct Worker<H>
+where
+    H: HttpHandler + 'static,
+{
+    settings: Rc<WorkerSettings<H>>,
+    socks: Slab<SocketInfo>,
+    tcp_ka: Option<time::Duration>,
+}
+
+impl<H: HttpHandler + 'static> Worker<H> {
+    pub(crate) fn new(
+        h: Vec<H>, socks: Slab<SocketInfo>, keep_alive: KeepAlive,
+        settings: ServerSettings,
+    ) -> Worker<H> {
+        let tcp_ka = if let KeepAlive::Tcp(val) = keep_alive {
+            Some(time::Duration::new(val as u64, 0))
+        } else {
+            None
+        };
+
+        Worker {
+            settings: Rc::new(WorkerSettings::new(h, keep_alive, settings)),
+            socks,
+            tcp_ka,
+        }
+    }
+
+    fn update_time(&self, ctx: &mut Context<Self>) {
+        self.settings.update_date();
+        ctx.run_later(time::Duration::new(1, 0), |slf, ctx| slf.update_time(ctx));
+    }
+
+    fn shutdown_timeout(
+        &self, ctx: &mut Context<Self>, tx: oneshot::Sender<bool>, dur: time::Duration,
+    ) {
+        // sleep for 1 second and then check again
+        ctx.run_later(time::Duration::new(1, 0), move |slf, ctx| {
+            let num = slf.settings.num_channels();
+            if num == 0 {
+                let _ = tx.send(true);
+                Arbiter::current().do_send(StopArbiter(0));
+            } else if let Some(d) = dur.checked_sub(time::Duration::new(1, 0)) {
+                slf.shutdown_timeout(ctx, tx, d);
+            } else {
+                info!("Force shutdown http worker, {} connections", num);
+                slf.settings.head().traverse::<TcpStream, H>();
+                let _ = tx.send(false);
+                Arbiter::current().do_send(StopArbiter(0));
+            }
+        });
+    }
+}
+
+impl<H: 'static> Actor for Worker<H>
+where
+    H: HttpHandler + 'static,
+{
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Self::Context) {
+        self.update_time(ctx);
+    }
+}
+
+impl<H> Handler<Conn<net::TcpStream>> for Worker<H>
+where
+    H: HttpHandler + 'static,
+{
+    type Result = ();
+
+    fn handle(&mut self, msg: Conn<net::TcpStream>, _: &mut Context<Self>) {
+        if self.tcp_ka.is_some() && msg.io.set_keepalive(self.tcp_ka).is_err() {
+            error!("Can not set socket keep-alive option");
+        }
+        self.socks
+            .get_mut(msg.token)
+            .unwrap()
+            .htype
+            .handle(Rc::clone(&self.settings), msg);
+    }
+}
+
+/// `StopWorker` message handler
+impl<H> Handler<StopWorker> for Worker<H>
+where
+    H: HttpHandler + 'static,
+{
+    type Result = Response<bool, ()>;
+
+    fn handle(&mut self, msg: StopWorker, ctx: &mut Context<Self>) -> Self::Result {
+        let num = self.settings.num_channels();
+        if num == 0 {
+            info!("Shutting down http worker, 0 connections");
+            Response::reply(Ok(true))
+        } else if let Some(dur) = msg.graceful {
+            info!("Graceful http worker shutdown, {} connections", num);
+            let (tx, rx) = oneshot::channel();
+            self.shutdown_timeout(ctx, tx, dur);
+            Response::async(rx.map_err(|_| ()))
+        } else {
+            info!("Force shutdown http worker, {} connections", num);
+            self.settings.head().traverse::<TcpStream, H>();
+            Response::reply(Ok(false))
+        }
+    }
+}
+
+#[derive(Clone)]
+pub(crate) enum StreamHandlerType {
+    Normal,
+    #[cfg(feature = "tls")]
+    Tls(TlsAcceptor),
+    #[cfg(feature = "alpn")]
+    Alpn(SslAcceptor),
+}
+
+impl StreamHandlerType {
+    fn handle<H: HttpHandler>(
+        &mut self, h: Rc<WorkerSettings<H>>, msg: Conn<net::TcpStream>,
+    ) {
+        match *self {
+            StreamHandlerType::Normal => {
+                let _ = msg.io.set_nodelay(true);
+                let io = TcpStream::from_std(msg.io, &Handle::default())
+                    .expect("failed to associate TCP stream");
+
+                current_thread::spawn(HttpChannel::new(h, io, msg.peer, msg.http2));
+            }
+            #[cfg(feature = "tls")]
+            StreamHandlerType::Tls(ref acceptor) => {
+                let Conn {
+                    io, peer, http2, ..
+                } = msg;
+                let _ = io.set_nodelay(true);
+                let io = TcpStream::from_std(io, &Handle::default())
+                    .expect("failed to associate TCP stream");
+
+                current_thread::spawn(TlsAcceptorExt::accept_async(acceptor, io).then(
+                    move |res| {
+                        match res {
+                            Ok(io) => current_thread::spawn(HttpChannel::new(
+                                h, io, peer, http2,
+                            )),
+                            Err(err) => {
+                                trace!("Error during handling tls connection: {}", err)
+                            }
+                        };
+                        future::result(Ok(()))
+                    },
+                ));
+            }
+            #[cfg(feature = "alpn")]
+            StreamHandlerType::Alpn(ref acceptor) => {
+                let Conn { io, peer, .. } = msg;
+                let _ = io.set_nodelay(true);
+                let io = TcpStream::from_std(io, &Handle::default())
+                    .expect("failed to associate TCP stream");
+
+                current_thread::spawn(SslAcceptorExt::accept_async(acceptor, io).then(
+                    move |res| {
+                        match res {
+                            Ok(io) => {
+                                let http2 = if let Some(p) =
+                                    io.get_ref().ssl().selected_alpn_protocol()
+                                {
+                                    p.len() == 2 && &p == b"h2"
+                                } else {
+                                    false
+                                };
+                                current_thread::spawn(HttpChannel::new(
+                                    h, io, peer, http2,
+                                ));
+                            }
+                            Err(err) => {
+                                trace!("Error during handling tls connection: {}", err)
+                            }
+                        };
+                        future::result(Ok(()))
+                    },
+                ));
+            }
+        }
+    }
+
+    pub(crate) fn scheme(&self) -> &'static str {
+        match *self {
+            StreamHandlerType::Normal => "http",
+            #[cfg(feature = "tls")]
+            StreamHandlerType::Tls(_) => "https",
+            #[cfg(feature = "alpn")]
+            StreamHandlerType::Alpn(_) => "https",
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/test.rs.html b/static/api/actix-web/0.7.2/src/actix_web/test.rs.html new file mode 100644 index 0000000..f544ef9 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/test.rs.html @@ -0,0 +1,1351 @@ +test.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+
+//! Various helpers for Actix applications to use during testing.
+use std::rc::Rc;
+use std::str::FromStr;
+use std::sync::mpsc;
+use std::{net, thread};
+
+use actix_inner::{Actor, Addr, System};
+
+use cookie::Cookie;
+use futures::Future;
+use http::header::HeaderName;
+use http::{HeaderMap, HttpTryFrom, Method, Uri, Version};
+use net2::TcpBuilder;
+use tokio::runtime::current_thread::Runtime;
+
+#[cfg(feature = "alpn")]
+use openssl::ssl::SslAcceptorBuilder;
+
+use application::{App, HttpApplication};
+use body::Binary;
+use client::{ClientConnector, ClientRequest, ClientRequestBuilder};
+use error::Error;
+use handler::{AsyncResultItem, Handler, Responder};
+use header::{Header, IntoHeaderValue};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+use middleware::Middleware;
+use param::Params;
+use payload::Payload;
+use resource::Resource;
+use router::Router;
+use server::message::{Request, RequestPool};
+use server::{HttpServer, IntoHttpHandler, ServerSettings};
+use uri::Url as InnerUrl;
+use ws;
+
+/// The `TestServer` type.
+///
+/// `TestServer` is very simple test server that simplify process of writing
+/// integration tests cases for actix web applications.
+///
+/// # Examples
+///
+/// ```rust
+/// # extern crate actix_web;
+/// # use actix_web::*;
+/// #
+/// # fn my_handler(req: &HttpRequest) -> HttpResponse {
+/// #     HttpResponse::Ok().into()
+/// # }
+/// #
+/// # fn main() {
+/// use actix_web::test::TestServer;
+///
+/// let mut srv = TestServer::new(|app| app.handler(my_handler));
+///
+/// let req = srv.get().finish().unwrap();
+/// let response = srv.execute(req.send()).unwrap();
+/// assert!(response.status().is_success());
+/// # }
+/// ```
+pub struct TestServer {
+    addr: net::SocketAddr,
+    ssl: bool,
+    conn: Addr<ClientConnector>,
+    rt: Runtime,
+}
+
+impl TestServer {
+    /// Start new test server
+    ///
+    /// This method accepts configuration method. You can add
+    /// middlewares or set handlers for test application.
+    pub fn new<F>(config: F) -> Self
+    where
+        F: Sync + Send + 'static + Fn(&mut TestApp<()>),
+    {
+        TestServerBuilder::new(|| ()).start(config)
+    }
+
+    /// Create test server builder
+    pub fn build() -> TestServerBuilder<()> {
+        TestServerBuilder::new(|| ())
+    }
+
+    /// Create test server builder with specific state factory
+    ///
+    /// This method can be used for constructing application state.
+    /// Also it can be used for external dependency initialization,
+    /// like creating sync actors for diesel integration.
+    pub fn build_with_state<F, S>(state: F) -> TestServerBuilder<S>
+    where
+        F: Fn() -> S + Sync + Send + 'static,
+        S: 'static,
+    {
+        TestServerBuilder::new(state)
+    }
+
+    /// Start new test server with application factory
+    pub fn with_factory<F, U, H>(factory: F) -> Self
+    where
+        F: Fn() -> U + Sync + Send + 'static,
+        U: IntoIterator<Item = H> + 'static,
+        H: IntoHttpHandler + 'static,
+    {
+        let (tx, rx) = mpsc::channel();
+
+        // run server in separate thread
+        thread::spawn(move || {
+            let sys = System::new("actix-test-server");
+            let tcp = net::TcpListener::bind("127.0.0.1:0").unwrap();
+            let local_addr = tcp.local_addr().unwrap();
+
+            HttpServer::new(factory)
+                .disable_signals()
+                .listen(tcp)
+                .start();
+
+            tx.send((System::current(), local_addr, TestServer::get_conn()))
+                .unwrap();
+            sys.run();
+        });
+
+        let (system, addr, conn) = rx.recv().unwrap();
+        System::set_current(system);
+        TestServer {
+            addr,
+            conn,
+            ssl: false,
+            rt: Runtime::new().unwrap(),
+        }
+    }
+
+    fn get_conn() -> Addr<ClientConnector> {
+        #[cfg(feature = "alpn")]
+        {
+            use openssl::ssl::{SslConnector, SslMethod, SslVerifyMode};
+
+            let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
+            builder.set_verify(SslVerifyMode::NONE);
+            ClientConnector::with_connector(builder.build()).start()
+        }
+        #[cfg(not(feature = "alpn"))]
+        {
+            ClientConnector::default().start()
+        }
+    }
+
+    /// Get firat available unused address
+    pub fn unused_addr() -> net::SocketAddr {
+        let addr: net::SocketAddr = "127.0.0.1:0".parse().unwrap();
+        let socket = TcpBuilder::new_v4().unwrap();
+        socket.bind(&addr).unwrap();
+        socket.reuse_address(true).unwrap();
+        let tcp = socket.to_tcp_listener().unwrap();
+        tcp.local_addr().unwrap()
+    }
+
+    /// Construct test server url
+    pub fn addr(&self) -> net::SocketAddr {
+        self.addr
+    }
+
+    /// Construct test server url
+    pub fn url(&self, uri: &str) -> String {
+        if uri.starts_with('/') {
+            format!(
+                "{}://{}{}",
+                if self.ssl { "https" } else { "http" },
+                self.addr,
+                uri
+            )
+        } else {
+            format!(
+                "{}://{}/{}",
+                if self.ssl { "https" } else { "http" },
+                self.addr,
+                uri
+            )
+        }
+    }
+
+    /// Stop http server
+    fn stop(&mut self) {
+        System::current().stop();
+    }
+
+    /// Execute future on current core
+    pub fn execute<F, I, E>(&mut self, fut: F) -> Result<I, E>
+    where
+        F: Future<Item = I, Error = E>,
+    {
+        self.rt.block_on(fut)
+    }
+
+    /// Connect to websocket server
+    pub fn ws(
+        &mut self,
+    ) -> Result<(ws::ClientReader, ws::ClientWriter), ws::ClientError> {
+        let url = self.url("/");
+        self.rt
+            .block_on(ws::Client::with_connector(url, self.conn.clone()).connect())
+    }
+
+    /// Create `GET` request
+    pub fn get(&self) -> ClientRequestBuilder {
+        ClientRequest::get(self.url("/").as_str())
+    }
+
+    /// Create `POST` request
+    pub fn post(&self) -> ClientRequestBuilder {
+        ClientRequest::post(self.url("/").as_str())
+    }
+
+    /// Create `HEAD` request
+    pub fn head(&self) -> ClientRequestBuilder {
+        ClientRequest::head(self.url("/").as_str())
+    }
+
+    /// Connect to test http server
+    pub fn client(&self, meth: Method, path: &str) -> ClientRequestBuilder {
+        ClientRequest::build()
+            .method(meth)
+            .uri(self.url(path).as_str())
+            .with_connector(self.conn.clone())
+            .take()
+    }
+}
+
+impl Drop for TestServer {
+    fn drop(&mut self) {
+        self.stop()
+    }
+}
+
+/// An `TestServer` builder
+///
+/// This type can be used to construct an instance of `TestServer` through a
+/// builder-like pattern.
+pub struct TestServerBuilder<S> {
+    state: Box<Fn() -> S + Sync + Send + 'static>,
+    #[cfg(feature = "alpn")]
+    ssl: Option<SslAcceptorBuilder>,
+}
+
+impl<S: 'static> TestServerBuilder<S> {
+    /// Create a new test server
+    pub fn new<F>(state: F) -> TestServerBuilder<S>
+    where
+        F: Fn() -> S + Sync + Send + 'static,
+    {
+        TestServerBuilder {
+            state: Box::new(state),
+            #[cfg(feature = "alpn")]
+            ssl: None,
+        }
+    }
+
+    #[cfg(feature = "alpn")]
+    /// Create ssl server
+    pub fn ssl(mut self, ssl: SslAcceptorBuilder) -> Self {
+        self.ssl = Some(ssl);
+        self
+    }
+
+    #[allow(unused_mut)]
+    /// Configure test application and run test server
+    pub fn start<F>(mut self, config: F) -> TestServer
+    where
+        F: Sync + Send + 'static + Fn(&mut TestApp<S>),
+    {
+        let (tx, rx) = mpsc::channel();
+
+        #[cfg(feature = "alpn")]
+        let ssl = self.ssl.is_some();
+        #[cfg(not(feature = "alpn"))]
+        let ssl = false;
+
+        // run server in separate thread
+        thread::spawn(move || {
+            let tcp = net::TcpListener::bind("127.0.0.1:0").unwrap();
+            let local_addr = tcp.local_addr().unwrap();
+
+            let sys = System::new("actix-test-server");
+            let state = self.state;
+            let srv = HttpServer::new(move || {
+                let mut app = TestApp::new(state());
+                config(&mut app);
+                vec![app]
+            }).workers(1)
+                .disable_signals();
+
+            tx.send((System::current(), local_addr, TestServer::get_conn()))
+                .unwrap();
+
+            #[cfg(feature = "alpn")]
+            {
+                let ssl = self.ssl.take();
+                if let Some(ssl) = ssl {
+                    srv.listen_ssl(tcp, ssl).unwrap().start();
+                } else {
+                    srv.listen(tcp).start();
+                }
+            }
+            #[cfg(not(feature = "alpn"))]
+            {
+                srv.listen(tcp).start();
+            }
+            sys.run();
+        });
+
+        let (system, addr, conn) = rx.recv().unwrap();
+        System::set_current(system);
+        TestServer {
+            addr,
+            ssl,
+            conn,
+            rt: Runtime::new().unwrap(),
+        }
+    }
+}
+
+/// Test application helper for testing request handlers.
+pub struct TestApp<S = ()> {
+    app: Option<App<S>>,
+}
+
+impl<S: 'static> TestApp<S> {
+    fn new(state: S) -> TestApp<S> {
+        let app = App::with_state(state);
+        TestApp { app: Some(app) }
+    }
+
+    /// Register handler for "/"
+    pub fn handler<F, R>(&mut self, handler: F)
+    where
+        F: Fn(&HttpRequest<S>) -> R + 'static,
+        R: Responder + 'static,
+    {
+        self.app = Some(self.app.take().unwrap().resource("/", |r| r.f(handler)));
+    }
+
+    /// Register middleware
+    pub fn middleware<T>(&mut self, mw: T) -> &mut TestApp<S>
+    where
+        T: Middleware<S> + 'static,
+    {
+        self.app = Some(self.app.take().unwrap().middleware(mw));
+        self
+    }
+
+    /// Register resource. This method is similar
+    /// to `App::resource()` method.
+    pub fn resource<F, R>(&mut self, path: &str, f: F) -> &mut TestApp<S>
+    where
+        F: FnOnce(&mut Resource<S>) -> R + 'static,
+    {
+        self.app = Some(self.app.take().unwrap().resource(path, f));
+        self
+    }
+}
+
+impl<S: 'static> IntoHttpHandler for TestApp<S> {
+    type Handler = HttpApplication<S>;
+
+    fn into_handler(mut self) -> HttpApplication<S> {
+        self.app.take().unwrap().into_handler()
+    }
+}
+
+#[doc(hidden)]
+impl<S: 'static> Iterator for TestApp<S> {
+    type Item = HttpApplication<S>;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        if let Some(mut app) = self.app.take() {
+            Some(app.finish())
+        } else {
+            None
+        }
+    }
+}
+
+/// Test `HttpRequest` builder
+///
+/// ```rust
+/// # extern crate http;
+/// # extern crate actix_web;
+/// # use http::{header, StatusCode};
+/// # use actix_web::*;
+/// use actix_web::test::TestRequest;
+///
+/// fn index(req: &HttpRequest) -> HttpResponse {
+///     if let Some(hdr) = req.headers().get(header::CONTENT_TYPE) {
+///         HttpResponse::Ok().into()
+///     } else {
+///         HttpResponse::BadRequest().into()
+///     }
+/// }
+///
+/// fn main() {
+///     let resp = TestRequest::with_header("content-type", "text/plain")
+///         .run(&index)
+///         .unwrap();
+///     assert_eq!(resp.status(), StatusCode::OK);
+///
+///     let resp = TestRequest::default().run(&index).unwrap();
+///     assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+/// }
+/// ```
+pub struct TestRequest<S> {
+    state: S,
+    version: Version,
+    method: Method,
+    uri: Uri,
+    headers: HeaderMap,
+    params: Params,
+    cookies: Option<Vec<Cookie<'static>>>,
+    payload: Option<Payload>,
+    prefix: u16,
+}
+
+impl Default for TestRequest<()> {
+    fn default() -> TestRequest<()> {
+        TestRequest {
+            state: (),
+            method: Method::GET,
+            uri: Uri::from_str("/").unwrap(),
+            version: Version::HTTP_11,
+            headers: HeaderMap::new(),
+            params: Params::new(),
+            cookies: None,
+            payload: None,
+            prefix: 0,
+        }
+    }
+}
+
+impl TestRequest<()> {
+    /// Create TestRequest and set request uri
+    pub fn with_uri(path: &str) -> TestRequest<()> {
+        TestRequest::default().uri(path)
+    }
+
+    /// Create TestRequest and set header
+    pub fn with_hdr<H: Header>(hdr: H) -> TestRequest<()> {
+        TestRequest::default().set(hdr)
+    }
+
+    /// Create TestRequest and set header
+    pub fn with_header<K, V>(key: K, value: V) -> TestRequest<()>
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        TestRequest::default().header(key, value)
+    }
+}
+
+impl<S: 'static> TestRequest<S> {
+    /// Start HttpRequest build process with application state
+    pub fn with_state(state: S) -> TestRequest<S> {
+        TestRequest {
+            state,
+            method: Method::GET,
+            uri: Uri::from_str("/").unwrap(),
+            version: Version::HTTP_11,
+            headers: HeaderMap::new(),
+            params: Params::new(),
+            cookies: None,
+            payload: None,
+            prefix: 0,
+        }
+    }
+
+    /// Set HTTP version of this request
+    pub fn version(mut self, ver: Version) -> Self {
+        self.version = ver;
+        self
+    }
+
+    /// Set HTTP method of this request
+    pub fn method(mut self, meth: Method) -> Self {
+        self.method = meth;
+        self
+    }
+
+    /// Set HTTP Uri of this request
+    pub fn uri(mut self, path: &str) -> Self {
+        self.uri = Uri::from_str(path).unwrap();
+        self
+    }
+
+    /// Set a header
+    pub fn set<H: Header>(mut self, hdr: H) -> Self {
+        if let Ok(value) = hdr.try_into() {
+            self.headers.append(H::name(), value);
+            return self;
+        }
+        panic!("Can not set header");
+    }
+
+    /// Set a header
+    pub fn header<K, V>(mut self, key: K, value: V) -> Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        if let Ok(key) = HeaderName::try_from(key) {
+            if let Ok(value) = value.try_into() {
+                self.headers.append(key, value);
+                return self;
+            }
+        }
+        panic!("Can not create header");
+    }
+
+    /// Set request path pattern parameter
+    pub fn param(mut self, name: &'static str, value: &'static str) -> Self {
+        self.params.add_static(name, value);
+        self
+    }
+
+    /// Set request payload
+    pub fn set_payload<B: Into<Binary>>(mut self, data: B) -> Self {
+        let mut data = data.into();
+        let mut payload = Payload::empty();
+        payload.unread_data(data.take());
+        self.payload = Some(payload);
+        self
+    }
+
+    /// Set request's prefix
+    pub fn prefix(mut self, prefix: u16) -> Self {
+        self.prefix = prefix;
+        self
+    }
+
+    /// Complete request creation and generate `HttpRequest` instance
+    pub fn finish(self) -> HttpRequest<S> {
+        let TestRequest {
+            state,
+            method,
+            uri,
+            version,
+            headers,
+            mut params,
+            cookies,
+            payload,
+            prefix,
+        } = self;
+        let router = Router::<()>::new();
+
+        let pool = RequestPool::pool(ServerSettings::default());
+        let mut req = RequestPool::get(pool);
+        {
+            let inner = req.inner_mut();
+            inner.method = method;
+            inner.url = InnerUrl::new(uri);
+            inner.version = version;
+            inner.headers = headers;
+            *inner.payload.borrow_mut() = payload;
+        }
+        params.set_url(req.url().clone());
+        let mut info = router.route_info_params(0, params);
+        info.set_prefix(prefix);
+
+        let mut req = HttpRequest::new(req, Rc::new(state), info);
+        req.set_cookies(cookies);
+        req
+    }
+
+    #[cfg(test)]
+    /// Complete request creation and generate `HttpRequest` instance
+    pub(crate) fn finish_with_router(self, router: Router<S>) -> HttpRequest<S> {
+        let TestRequest {
+            state,
+            method,
+            uri,
+            version,
+            headers,
+            mut params,
+            cookies,
+            payload,
+            prefix,
+        } = self;
+
+        let pool = RequestPool::pool(ServerSettings::default());
+        let mut req = RequestPool::get(pool);
+        {
+            let inner = req.inner_mut();
+            inner.method = method;
+            inner.url = InnerUrl::new(uri);
+            inner.version = version;
+            inner.headers = headers;
+            *inner.payload.borrow_mut() = payload;
+        }
+        params.set_url(req.url().clone());
+        let mut info = router.route_info_params(0, params);
+        info.set_prefix(prefix);
+        let mut req = HttpRequest::new(req, Rc::new(state), info);
+        req.set_cookies(cookies);
+        req
+    }
+
+    /// Complete request creation and generate server `Request` instance
+    pub fn request(self) -> Request {
+        let TestRequest {
+            method,
+            uri,
+            version,
+            headers,
+            payload,
+            ..
+        } = self;
+
+        let pool = RequestPool::pool(ServerSettings::default());
+        let mut req = RequestPool::get(pool);
+        {
+            let inner = req.inner_mut();
+            inner.method = method;
+            inner.url = InnerUrl::new(uri);
+            inner.version = version;
+            inner.headers = headers;
+            *inner.payload.borrow_mut() = payload;
+        }
+        req
+    }
+
+    /// This method generates `HttpRequest` instance and runs handler
+    /// with generated request.
+    ///
+    /// This method panics is handler returns actor or async result.
+    pub fn run<H: Handler<S>>(self, h: &H) -> Result<HttpResponse, Error> {
+        let req = self.finish();
+        let resp = h.handle(&req);
+
+        match resp.respond_to(&req) {
+            Ok(resp) => match resp.into().into() {
+                AsyncResultItem::Ok(resp) => Ok(resp),
+                AsyncResultItem::Err(err) => Err(err),
+                AsyncResultItem::Future(_) => panic!("Async handler is not supported."),
+            },
+            Err(err) => Err(err.into()),
+        }
+    }
+
+    /// This method generates `HttpRequest` instance and runs handler
+    /// with generated request.
+    ///
+    /// This method panics is handler returns actor.
+    pub fn run_async<H, R, F, E>(self, h: H) -> Result<HttpResponse, E>
+    where
+        H: Fn(HttpRequest<S>) -> F + 'static,
+        F: Future<Item = R, Error = E> + 'static,
+        R: Responder<Error = E> + 'static,
+        E: Into<Error> + 'static,
+    {
+        let req = self.finish();
+        let fut = h(req.clone());
+
+        let mut core = Runtime::new().unwrap();
+        match core.block_on(fut) {
+            Ok(r) => match r.respond_to(&req) {
+                Ok(reply) => match reply.into().into() {
+                    AsyncResultItem::Ok(resp) => Ok(resp),
+                    _ => panic!("Nested async replies are not supported"),
+                },
+                Err(e) => Err(e),
+            },
+            Err(err) => Err(err),
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/uri.rs.html b/static/api/actix-web/0.7.2/src/actix_web/uri.rs.html new file mode 100644 index 0000000..e884e47 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/uri.rs.html @@ -0,0 +1,351 @@ +uri.rs.html -- source
  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
+
+use http::Uri;
+use std::rc::Rc;
+
+#[allow(dead_code)]
+const GEN_DELIMS: &[u8] = b":/?#[]@";
+#[allow(dead_code)]
+const SUB_DELIMS_WITHOUT_QS: &[u8] = b"!$'()*,";
+#[allow(dead_code)]
+const SUB_DELIMS: &[u8] = b"!$'()*,+?=;";
+#[allow(dead_code)]
+const RESERVED: &[u8] = b":/?#[]@!$'()*,+?=;";
+#[allow(dead_code)]
+const UNRESERVED: &[u8] = b"abcdefghijklmnopqrstuvwxyz
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ
+    1234567890
+    -._~";
+const ALLOWED: &[u8] = b"abcdefghijklmnopqrstuvwxyz
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ
+    1234567890
+    -._~
+    !$'()*,";
+const QS: &[u8] = b"+&=;b";
+
+#[inline]
+fn bit_at(array: &[u8], ch: u8) -> bool {
+    array[(ch >> 3) as usize] & (1 << (ch & 7)) != 0
+}
+
+#[inline]
+fn set_bit(array: &mut [u8], ch: u8) {
+    array[(ch >> 3) as usize] |= 1 << (ch & 7)
+}
+
+lazy_static! {
+    static ref DEFAULT_QUOTER: Quoter = { Quoter::new(b"@:", b"/+") };
+}
+
+#[derive(Default, Clone, Debug)]
+pub(crate) struct Url {
+    uri: Uri,
+    path: Option<Rc<String>>,
+}
+
+impl Url {
+    pub fn new(uri: Uri) -> Url {
+        let path = DEFAULT_QUOTER.requote(uri.path().as_bytes());
+
+        Url { uri, path }
+    }
+
+    pub fn uri(&self) -> &Uri {
+        &self.uri
+    }
+
+    pub fn path(&self) -> &str {
+        if let Some(ref s) = self.path {
+            s
+        } else {
+            self.uri.path()
+        }
+    }
+}
+
+pub(crate) struct Quoter {
+    safe_table: [u8; 16],
+    protected_table: [u8; 16],
+}
+
+impl Quoter {
+    pub fn new(safe: &[u8], protected: &[u8]) -> Quoter {
+        let mut q = Quoter {
+            safe_table: [0; 16],
+            protected_table: [0; 16],
+        };
+
+        // prepare safe table
+        for i in 0..128 {
+            if ALLOWED.contains(&i) {
+                set_bit(&mut q.safe_table, i);
+            }
+            if QS.contains(&i) {
+                set_bit(&mut q.safe_table, i);
+            }
+        }
+
+        for ch in safe {
+            set_bit(&mut q.safe_table, *ch)
+        }
+
+        // prepare protected table
+        for ch in protected {
+            set_bit(&mut q.safe_table, *ch);
+            set_bit(&mut q.protected_table, *ch);
+        }
+
+        q
+    }
+
+    pub fn requote(&self, val: &[u8]) -> Option<Rc<String>> {
+        let mut has_pct = 0;
+        let mut pct = [b'%', 0, 0];
+        let mut idx = 0;
+        let mut cloned: Option<Vec<u8>> = None;
+
+        let len = val.len();
+        while idx < len {
+            let ch = val[idx];
+
+            if has_pct != 0 {
+                pct[has_pct] = val[idx];
+                has_pct += 1;
+                if has_pct == 3 {
+                    has_pct = 0;
+                    let buf = cloned.as_mut().unwrap();
+
+                    if let Some(ch) = restore_ch(pct[1], pct[2]) {
+                        if ch < 128 {
+                            if bit_at(&self.protected_table, ch) {
+                                buf.extend_from_slice(&pct);
+                                idx += 1;
+                                continue;
+                            }
+
+                            if bit_at(&self.safe_table, ch) {
+                                buf.push(ch);
+                                idx += 1;
+                                continue;
+                            }
+                        }
+                        buf.push(ch);
+                    } else {
+                        buf.extend_from_slice(&pct[..]);
+                    }
+                }
+            } else if ch == b'%' {
+                has_pct = 1;
+                if cloned.is_none() {
+                    let mut c = Vec::with_capacity(len);
+                    c.extend_from_slice(&val[..idx]);
+                    cloned = Some(c);
+                }
+            } else if let Some(ref mut cloned) = cloned {
+                cloned.push(ch)
+            }
+            idx += 1;
+        }
+
+        if let Some(data) = cloned {
+            // Unsafe: we get data from http::Uri, which does utf-8 checks already
+            // this code only decodes valid pct encoded values
+            Some(unsafe { Rc::new(String::from_utf8_unchecked(data)) })
+        } else {
+            None
+        }
+    }
+}
+
+#[inline]
+fn from_hex(v: u8) -> Option<u8> {
+    if v >= b'0' && v <= b'9' {
+        Some(v - 0x30) // ord('0') == 0x30
+    } else if v >= b'A' && v <= b'F' {
+        Some(v - 0x41 + 10) // ord('A') == 0x41
+    } else if v > b'a' && v <= b'f' {
+        Some(v - 0x61 + 10) // ord('a') == 0x61
+    } else {
+        None
+    }
+}
+
+#[inline]
+fn restore_ch(d1: u8, d2: u8) -> Option<u8> {
+    from_hex(d1).and_then(|d1| from_hex(d2).and_then(move |d2| Some(d1 << 4 | d2)))
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/with.rs.html b/static/api/actix-web/0.7.2/src/actix_web/with.rs.html new file mode 100644 index 0000000..9a0affa --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/with.rs.html @@ -0,0 +1,529 @@ +with.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+
+use futures::{Async, Future, Poll};
+use std::marker::PhantomData;
+use std::rc::Rc;
+
+use error::Error;
+use handler::{AsyncResult, AsyncResultItem, FromRequest, Handler, Responder};
+use httprequest::HttpRequest;
+use httpresponse::HttpResponse;
+
+pub(crate) struct With<T, S, F, R>
+where
+    F: Fn(T) -> R,
+    T: FromRequest<S>,
+    S: 'static,
+{
+    hnd: Rc<F>,
+    cfg: Rc<T::Config>,
+    _s: PhantomData<S>,
+}
+
+impl<T, S, F, R> With<T, S, F, R>
+where
+    F: Fn(T) -> R,
+    T: FromRequest<S>,
+    S: 'static,
+{
+    pub fn new(f: F, cfg: T::Config) -> Self {
+        With {
+            cfg: Rc::new(cfg),
+            hnd: Rc::new(f),
+            _s: PhantomData,
+        }
+    }
+}
+
+impl<T, S, F, R> Handler<S> for With<T, S, F, R>
+where
+    F: Fn(T) -> R + 'static,
+    R: Responder + 'static,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    type Result = AsyncResult<HttpResponse>;
+
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result {
+        let mut fut = WithHandlerFut {
+            req: req.clone(),
+            started: false,
+            hnd: Rc::clone(&self.hnd),
+            cfg: self.cfg.clone(),
+            fut1: None,
+            fut2: None,
+        };
+
+        match fut.poll() {
+            Ok(Async::Ready(resp)) => AsyncResult::ok(resp),
+            Ok(Async::NotReady) => AsyncResult::async(Box::new(fut)),
+            Err(e) => AsyncResult::err(e),
+        }
+    }
+}
+
+struct WithHandlerFut<T, S, F, R>
+where
+    F: Fn(T) -> R,
+    R: Responder,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    started: bool,
+    hnd: Rc<F>,
+    cfg: Rc<T::Config>,
+    req: HttpRequest<S>,
+    fut1: Option<Box<Future<Item = T, Error = Error>>>,
+    fut2: Option<Box<Future<Item = HttpResponse, Error = Error>>>,
+}
+
+impl<T, S, F, R> Future for WithHandlerFut<T, S, F, R>
+where
+    F: Fn(T) -> R,
+    R: Responder + 'static,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if let Some(ref mut fut) = self.fut2 {
+            return fut.poll();
+        }
+
+        let item = if !self.started {
+            self.started = true;
+            let reply = T::from_request(&self.req, self.cfg.as_ref()).into();
+            match reply.into() {
+                AsyncResultItem::Err(err) => return Err(err),
+                AsyncResultItem::Ok(msg) => msg,
+                AsyncResultItem::Future(fut) => {
+                    self.fut1 = Some(fut);
+                    return self.poll();
+                }
+            }
+        } else {
+            match self.fut1.as_mut().unwrap().poll()? {
+                Async::Ready(item) => item,
+                Async::NotReady => return Ok(Async::NotReady),
+            }
+        };
+
+        let item = match (*self.hnd)(item).respond_to(&self.req) {
+            Ok(item) => item.into(),
+            Err(e) => return Err(e.into()),
+        };
+
+        match item.into() {
+            AsyncResultItem::Err(err) => Err(err),
+            AsyncResultItem::Ok(resp) => Ok(Async::Ready(resp)),
+            AsyncResultItem::Future(fut) => {
+                self.fut2 = Some(fut);
+                self.poll()
+            }
+        }
+    }
+}
+
+pub(crate) struct WithAsync<T, S, F, R, I, E>
+where
+    F: Fn(T) -> R,
+    R: Future<Item = I, Error = E>,
+    I: Responder,
+    E: Into<E>,
+    T: FromRequest<S>,
+    S: 'static,
+{
+    hnd: Rc<F>,
+    cfg: Rc<T::Config>,
+    _s: PhantomData<S>,
+}
+
+impl<T, S, F, R, I, E> WithAsync<T, S, F, R, I, E>
+where
+    F: Fn(T) -> R,
+    R: Future<Item = I, Error = E>,
+    I: Responder,
+    E: Into<Error>,
+    T: FromRequest<S>,
+    S: 'static,
+{
+    pub fn new(f: F, cfg: T::Config) -> Self {
+        WithAsync {
+            cfg: Rc::new(cfg),
+            hnd: Rc::new(f),
+            _s: PhantomData,
+        }
+    }
+}
+
+impl<T, S, F, R, I, E> Handler<S> for WithAsync<T, S, F, R, I, E>
+where
+    F: Fn(T) -> R + 'static,
+    R: Future<Item = I, Error = E> + 'static,
+    I: Responder + 'static,
+    E: Into<Error> + 'static,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    type Result = AsyncResult<HttpResponse>;
+
+    fn handle(&self, req: &HttpRequest<S>) -> Self::Result {
+        let mut fut = WithAsyncHandlerFut {
+            req: req.clone(),
+            started: false,
+            hnd: Rc::clone(&self.hnd),
+            cfg: Rc::clone(&self.cfg),
+            fut1: None,
+            fut2: None,
+            fut3: None,
+        };
+
+        match fut.poll() {
+            Ok(Async::Ready(resp)) => AsyncResult::ok(resp),
+            Ok(Async::NotReady) => AsyncResult::async(Box::new(fut)),
+            Err(e) => AsyncResult::err(e),
+        }
+    }
+}
+
+struct WithAsyncHandlerFut<T, S, F, R, I, E>
+where
+    F: Fn(T) -> R,
+    R: Future<Item = I, Error = E> + 'static,
+    I: Responder + 'static,
+    E: Into<Error> + 'static,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    started: bool,
+    hnd: Rc<F>,
+    cfg: Rc<T::Config>,
+    req: HttpRequest<S>,
+    fut1: Option<Box<Future<Item = T, Error = Error>>>,
+    fut2: Option<R>,
+    fut3: Option<Box<Future<Item = HttpResponse, Error = Error>>>,
+}
+
+impl<T, S, F, R, I, E> Future for WithAsyncHandlerFut<T, S, F, R, I, E>
+where
+    F: Fn(T) -> R,
+    R: Future<Item = I, Error = E> + 'static,
+    I: Responder + 'static,
+    E: Into<Error> + 'static,
+    T: FromRequest<S> + 'static,
+    S: 'static,
+{
+    type Item = HttpResponse;
+    type Error = Error;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if let Some(ref mut fut) = self.fut3 {
+            return fut.poll();
+        }
+
+        if self.fut2.is_some() {
+            return match self.fut2.as_mut().unwrap().poll() {
+                Ok(Async::NotReady) => Ok(Async::NotReady),
+                Ok(Async::Ready(r)) => match r.respond_to(&self.req) {
+                    Ok(r) => match r.into().into() {
+                        AsyncResultItem::Err(err) => Err(err),
+                        AsyncResultItem::Ok(resp) => Ok(Async::Ready(resp)),
+                        AsyncResultItem::Future(fut) => {
+                            self.fut3 = Some(fut);
+                            self.poll()
+                        }
+                    },
+                    Err(e) => Err(e.into()),
+                },
+                Err(e) => Err(e.into()),
+            };
+        }
+
+        let item = if !self.started {
+            self.started = true;
+            let reply = T::from_request(&self.req, self.cfg.as_ref()).into();
+            match reply.into() {
+                AsyncResultItem::Err(err) => return Err(err),
+                AsyncResultItem::Ok(msg) => msg,
+                AsyncResultItem::Future(fut) => {
+                    self.fut1 = Some(fut);
+                    return self.poll();
+                }
+            }
+        } else {
+            match self.fut1.as_mut().unwrap().poll()? {
+                Async::Ready(item) => item,
+                Async::NotReady => return Ok(Async::NotReady),
+            }
+        };
+
+        self.fut2 = Some((*self.hnd)(item));
+        self.poll()
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/client.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/client.rs.html new file mode 100644 index 0000000..80dbab5 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/client.rs.html @@ -0,0 +1,1207 @@ +client.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+
+//! Http client request
+use std::cell::RefCell;
+use std::rc::Rc;
+use std::time::Duration;
+use std::{fmt, io, str};
+
+use base64;
+use bytes::Bytes;
+use cookie::Cookie;
+use futures::sync::mpsc::{unbounded, UnboundedSender};
+use futures::{Async, Future, Poll, Stream};
+use http::header::{self, HeaderName, HeaderValue};
+use http::{Error as HttpError, HttpTryFrom, StatusCode};
+use rand;
+use sha1::Sha1;
+
+use actix::{Addr, SystemService};
+
+use body::{Binary, Body};
+use error::{Error, UrlParseError};
+use header::IntoHeaderValue;
+use httpmessage::HttpMessage;
+use payload::PayloadBuffer;
+
+use client::{
+    ClientConnector, ClientRequest, ClientRequestBuilder, HttpResponseParserError,
+    Pipeline, SendRequest, SendRequestError,
+};
+
+use super::frame::{Frame, FramedMessage};
+use super::proto::{CloseReason, OpCode};
+use super::{Message, ProtocolError, WsWriter};
+
+/// Websocket client error
+#[derive(Fail, Debug)]
+pub enum ClientError {
+    /// Invalid url
+    #[fail(display = "Invalid url")]
+    InvalidUrl,
+    /// Invalid response status
+    #[fail(display = "Invalid response status")]
+    InvalidResponseStatus(StatusCode),
+    /// Invalid upgrade header
+    #[fail(display = "Invalid upgrade header")]
+    InvalidUpgradeHeader,
+    /// Invalid connection header
+    #[fail(display = "Invalid connection header")]
+    InvalidConnectionHeader(HeaderValue),
+    /// Missing CONNECTION header
+    #[fail(display = "Missing CONNECTION header")]
+    MissingConnectionHeader,
+    /// Missing SEC-WEBSOCKET-ACCEPT header
+    #[fail(display = "Missing SEC-WEBSOCKET-ACCEPT header")]
+    MissingWebSocketAcceptHeader,
+    /// Invalid challenge response
+    #[fail(display = "Invalid challenge response")]
+    InvalidChallengeResponse(String, HeaderValue),
+    /// Http parsing error
+    #[fail(display = "Http parsing error")]
+    Http(Error),
+    /// Url parsing error
+    #[fail(display = "Url parsing error")]
+    Url(UrlParseError),
+    /// Response parsing error
+    #[fail(display = "Response parsing error")]
+    ResponseParseError(HttpResponseParserError),
+    /// Send request error
+    #[fail(display = "{}", _0)]
+    SendRequest(SendRequestError),
+    /// Protocol error
+    #[fail(display = "{}", _0)]
+    Protocol(#[cause] ProtocolError),
+    /// IO Error
+    #[fail(display = "{}", _0)]
+    Io(io::Error),
+    /// "Disconnected"
+    #[fail(display = "Disconnected")]
+    Disconnected,
+}
+
+impl From<Error> for ClientError {
+    fn from(err: Error) -> ClientError {
+        ClientError::Http(err)
+    }
+}
+
+impl From<UrlParseError> for ClientError {
+    fn from(err: UrlParseError) -> ClientError {
+        ClientError::Url(err)
+    }
+}
+
+impl From<SendRequestError> for ClientError {
+    fn from(err: SendRequestError) -> ClientError {
+        ClientError::SendRequest(err)
+    }
+}
+
+impl From<ProtocolError> for ClientError {
+    fn from(err: ProtocolError) -> ClientError {
+        ClientError::Protocol(err)
+    }
+}
+
+impl From<io::Error> for ClientError {
+    fn from(err: io::Error) -> ClientError {
+        ClientError::Io(err)
+    }
+}
+
+impl From<HttpResponseParserError> for ClientError {
+    fn from(err: HttpResponseParserError) -> ClientError {
+        ClientError::ResponseParseError(err)
+    }
+}
+
+/// `WebSocket` client
+///
+/// Example of `WebSocket` client usage is available in
+/// [websocket example](
+/// https://github.com/actix/examples/blob/master/websocket/src/client.rs#L24)
+pub struct Client {
+    request: ClientRequestBuilder,
+    err: Option<ClientError>,
+    http_err: Option<HttpError>,
+    origin: Option<HeaderValue>,
+    protocols: Option<String>,
+    conn: Addr<ClientConnector>,
+    max_size: usize,
+    no_masking: bool,
+}
+
+impl Client {
+    /// Create new websocket connection
+    pub fn new<S: AsRef<str>>(uri: S) -> Client {
+        Client::with_connector(uri, ClientConnector::from_registry())
+    }
+
+    /// Create new websocket connection with custom `ClientConnector`
+    pub fn with_connector<S: AsRef<str>>(uri: S, conn: Addr<ClientConnector>) -> Client {
+        let mut cl = Client {
+            request: ClientRequest::build(),
+            err: None,
+            http_err: None,
+            origin: None,
+            protocols: None,
+            max_size: 65_536,
+            no_masking: false,
+            conn,
+        };
+        cl.request.uri(uri.as_ref());
+        cl
+    }
+
+    /// Set supported websocket protocols
+    pub fn protocols<U, V>(mut self, protos: U) -> Self
+    where
+        U: IntoIterator<Item = V> + 'static,
+        V: AsRef<str>,
+    {
+        let mut protos = protos
+            .into_iter()
+            .fold(String::new(), |acc, s| acc + s.as_ref() + ",");
+        protos.pop();
+        self.protocols = Some(protos);
+        self
+    }
+
+    /// Set cookie for handshake request
+    pub fn cookie(mut self, cookie: Cookie) -> Self {
+        self.request.cookie(cookie);
+        self
+    }
+
+    /// Set request Origin
+    pub fn origin<V>(mut self, origin: V) -> Self
+    where
+        HeaderValue: HttpTryFrom<V>,
+    {
+        match HeaderValue::try_from(origin) {
+            Ok(value) => self.origin = Some(value),
+            Err(e) => self.http_err = Some(e.into()),
+        }
+        self
+    }
+
+    /// Set max frame size
+    ///
+    /// By default max size is set to 64kb
+    pub fn max_frame_size(mut self, size: usize) -> Self {
+        self.max_size = size;
+        self
+    }
+
+    /// Set write buffer capacity
+    ///
+    /// Default buffer capacity is 32kb
+    pub fn write_buffer_capacity(mut self, cap: usize) -> Self {
+        self.request.write_buffer_capacity(cap);
+        self
+    }
+
+    /// Disable payload masking. By default ws client masks frame payload.
+    pub fn no_masking(mut self) -> Self {
+        self.no_masking = true;
+        self
+    }
+
+    /// Set request header
+    pub fn header<K, V>(mut self, key: K, value: V) -> Self
+    where
+        HeaderName: HttpTryFrom<K>,
+        V: IntoHeaderValue,
+    {
+        self.request.header(key, value);
+        self
+    }
+
+    /// Set websocket handshake timeout
+    ///
+    /// Handshake timeout is a total time for successful handshake.
+    /// Default value is 5 seconds.
+    pub fn timeout(mut self, timeout: Duration) -> Self {
+        self.request.timeout(timeout);
+        self
+    }
+
+    /// Connect to websocket server and do ws handshake
+    pub fn connect(&mut self) -> ClientHandshake {
+        if let Some(e) = self.err.take() {
+            ClientHandshake::error(e)
+        } else if let Some(e) = self.http_err.take() {
+            ClientHandshake::error(Error::from(e).into())
+        } else {
+            // origin
+            if let Some(origin) = self.origin.take() {
+                self.request.set_header(header::ORIGIN, origin);
+            }
+
+            self.request.upgrade();
+            self.request.set_header(header::UPGRADE, "websocket");
+            self.request.set_header(header::CONNECTION, "upgrade");
+            self.request.set_header(header::SEC_WEBSOCKET_VERSION, "13");
+            self.request.with_connector(self.conn.clone());
+
+            if let Some(protocols) = self.protocols.take() {
+                self.request
+                    .set_header(header::SEC_WEBSOCKET_PROTOCOL, protocols.as_str());
+            }
+            let request = match self.request.finish() {
+                Ok(req) => req,
+                Err(err) => return ClientHandshake::error(err.into()),
+            };
+
+            if request.uri().host().is_none() {
+                return ClientHandshake::error(ClientError::InvalidUrl);
+            }
+            if let Some(scheme) = request.uri().scheme_part() {
+                if scheme != "http"
+                    && scheme != "https"
+                    && scheme != "ws"
+                    && scheme != "wss"
+                {
+                    return ClientHandshake::error(ClientError::InvalidUrl);
+                }
+            } else {
+                return ClientHandshake::error(ClientError::InvalidUrl);
+            }
+
+            // start handshake
+            ClientHandshake::new(request, self.max_size, self.no_masking)
+        }
+    }
+}
+
+struct Inner {
+    tx: UnboundedSender<Bytes>,
+    rx: PayloadBuffer<Box<Pipeline>>,
+    closed: bool,
+}
+
+/// Future that implementes client websocket handshake process.
+///
+/// It resolves to a pair of `ClientReader` and `ClientWriter` that
+/// can be used for reading and writing websocket frames.
+pub struct ClientHandshake {
+    request: Option<SendRequest>,
+    tx: Option<UnboundedSender<Bytes>>,
+    key: String,
+    error: Option<ClientError>,
+    max_size: usize,
+    no_masking: bool,
+}
+
+impl ClientHandshake {
+    fn new(
+        mut request: ClientRequest, max_size: usize, no_masking: bool,
+    ) -> ClientHandshake {
+        // Generate a random key for the `Sec-WebSocket-Key` header.
+        // a base64-encoded (see Section 4 of [RFC4648]) value that,
+        // when decoded, is 16 bytes in length (RFC 6455)
+        let sec_key: [u8; 16] = rand::random();
+        let key = base64::encode(&sec_key);
+
+        request.headers_mut().insert(
+            header::SEC_WEBSOCKET_KEY,
+            HeaderValue::try_from(key.as_str()).unwrap(),
+        );
+
+        let (tx, rx) = unbounded();
+        request.set_body(Body::Streaming(Box::new(rx.map_err(|_| {
+            io::Error::new(io::ErrorKind::Other, "disconnected").into()
+        }))));
+
+        ClientHandshake {
+            key,
+            max_size,
+            no_masking,
+            request: Some(request.send()),
+            tx: Some(tx),
+            error: None,
+        }
+    }
+
+    fn error(err: ClientError) -> ClientHandshake {
+        ClientHandshake {
+            key: String::new(),
+            request: None,
+            tx: None,
+            error: Some(err),
+            max_size: 0,
+            no_masking: false,
+        }
+    }
+
+    /// Set handshake timeout
+    ///
+    /// Handshake timeout is a total time before handshake should be completed.
+    /// Default value is 5 seconds.
+    pub fn timeout(mut self, timeout: Duration) -> Self {
+        if let Some(request) = self.request.take() {
+            self.request = Some(request.timeout(timeout));
+        }
+        self
+    }
+
+    /// Set connection timeout
+    ///
+    /// Connection timeout includes resolving hostname and actual connection to
+    /// the host.
+    /// Default value is 1 second.
+    pub fn conn_timeout(mut self, timeout: Duration) -> Self {
+        if let Some(request) = self.request.take() {
+            self.request = Some(request.conn_timeout(timeout));
+        }
+        self
+    }
+}
+
+impl Future for ClientHandshake {
+    type Item = (ClientReader, ClientWriter);
+    type Error = ClientError;
+
+    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+        if let Some(err) = self.error.take() {
+            return Err(err);
+        }
+
+        let resp = match self.request.as_mut().unwrap().poll()? {
+            Async::Ready(response) => {
+                self.request.take();
+                response
+            }
+            Async::NotReady => return Ok(Async::NotReady),
+        };
+
+        // verify response
+        if resp.status() != StatusCode::SWITCHING_PROTOCOLS {
+            return Err(ClientError::InvalidResponseStatus(resp.status()));
+        }
+        // Check for "UPGRADE" to websocket header
+        let has_hdr = if let Some(hdr) = resp.headers().get(header::UPGRADE) {
+            if let Ok(s) = hdr.to_str() {
+                s.to_lowercase().contains("websocket")
+            } else {
+                false
+            }
+        } else {
+            false
+        };
+        if !has_hdr {
+            trace!("Invalid upgrade header");
+            return Err(ClientError::InvalidUpgradeHeader);
+        }
+        // Check for "CONNECTION" header
+        if let Some(conn) = resp.headers().get(header::CONNECTION) {
+            if let Ok(s) = conn.to_str() {
+                if !s.to_lowercase().contains("upgrade") {
+                    trace!("Invalid connection header: {}", s);
+                    return Err(ClientError::InvalidConnectionHeader(conn.clone()));
+                }
+            } else {
+                trace!("Invalid connection header: {:?}", conn);
+                return Err(ClientError::InvalidConnectionHeader(conn.clone()));
+            }
+        } else {
+            trace!("Missing connection header");
+            return Err(ClientError::MissingConnectionHeader);
+        }
+
+        if let Some(key) = resp.headers().get(header::SEC_WEBSOCKET_ACCEPT) {
+            // field is constructed by concatenating /key/
+            // with the string "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" (RFC 6455)
+            const WS_GUID: &[u8] = b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+            let mut sha1 = Sha1::new();
+            sha1.update(self.key.as_ref());
+            sha1.update(WS_GUID);
+            let encoded = base64::encode(&sha1.digest().bytes());
+            if key.as_bytes() != encoded.as_bytes() {
+                trace!(
+                    "Invalid challenge response: expected: {} received: {:?}",
+                    encoded,
+                    key
+                );
+                return Err(ClientError::InvalidChallengeResponse(encoded, key.clone()));
+            }
+        } else {
+            trace!("Missing SEC-WEBSOCKET-ACCEPT header");
+            return Err(ClientError::MissingWebSocketAcceptHeader);
+        };
+
+        let inner = Inner {
+            tx: self.tx.take().unwrap(),
+            rx: PayloadBuffer::new(resp.payload()),
+            closed: false,
+        };
+
+        let inner = Rc::new(RefCell::new(inner));
+        Ok(Async::Ready((
+            ClientReader {
+                inner: Rc::clone(&inner),
+                max_size: self.max_size,
+                no_masking: self.no_masking,
+            },
+            ClientWriter { inner },
+        )))
+    }
+}
+
+/// Websocket reader client
+pub struct ClientReader {
+    inner: Rc<RefCell<Inner>>,
+    max_size: usize,
+    no_masking: bool,
+}
+
+impl fmt::Debug for ClientReader {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "ws::ClientReader()")
+    }
+}
+
+impl Stream for ClientReader {
+    type Item = Message;
+    type Error = ProtocolError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        let max_size = self.max_size;
+        let no_masking = self.no_masking;
+        let mut inner = self.inner.borrow_mut();
+        if inner.closed {
+            return Ok(Async::Ready(None));
+        }
+
+        // read
+        match Frame::parse(&mut inner.rx, no_masking, max_size) {
+            Ok(Async::Ready(Some(frame))) => {
+                let (_finished, opcode, payload) = frame.unpack();
+
+                match opcode {
+                    // continuation is not supported
+                    OpCode::Continue => {
+                        inner.closed = true;
+                        Err(ProtocolError::NoContinuation)
+                    }
+                    OpCode::Bad => {
+                        inner.closed = true;
+                        Err(ProtocolError::BadOpCode)
+                    }
+                    OpCode::Close => {
+                        inner.closed = true;
+                        let close_reason = Frame::parse_close_payload(&payload);
+                        Ok(Async::Ready(Some(Message::Close(close_reason))))
+                    }
+                    OpCode::Ping => Ok(Async::Ready(Some(Message::Ping(
+                        String::from_utf8_lossy(payload.as_ref()).into(),
+                    )))),
+                    OpCode::Pong => Ok(Async::Ready(Some(Message::Pong(
+                        String::from_utf8_lossy(payload.as_ref()).into(),
+                    )))),
+                    OpCode::Binary => Ok(Async::Ready(Some(Message::Binary(payload)))),
+                    OpCode::Text => {
+                        let tmp = Vec::from(payload.as_ref());
+                        match String::from_utf8(tmp) {
+                            Ok(s) => Ok(Async::Ready(Some(Message::Text(s)))),
+                            Err(_) => {
+                                inner.closed = true;
+                                Err(ProtocolError::BadEncoding)
+                            }
+                        }
+                    }
+                }
+            }
+            Ok(Async::Ready(None)) => Ok(Async::Ready(None)),
+            Ok(Async::NotReady) => Ok(Async::NotReady),
+            Err(e) => {
+                inner.closed = true;
+                Err(e)
+            }
+        }
+    }
+}
+
+/// Websocket writer client
+pub struct ClientWriter {
+    inner: Rc<RefCell<Inner>>,
+}
+
+impl ClientWriter {
+    /// Write payload
+    #[inline]
+    fn write(&mut self, mut data: FramedMessage) {
+        let inner = self.inner.borrow_mut();
+        if !inner.closed {
+            let _ = inner.tx.unbounded_send(data.0.take());
+        } else {
+            warn!("Trying to write to disconnected response");
+        }
+    }
+
+    /// Send text frame
+    #[inline]
+    pub fn text<T: Into<Binary>>(&mut self, text: T) {
+        self.write(Frame::message(text.into(), OpCode::Text, true, true));
+    }
+
+    /// Send binary frame
+    #[inline]
+    pub fn binary<B: Into<Binary>>(&mut self, data: B) {
+        self.write(Frame::message(data, OpCode::Binary, true, true));
+    }
+
+    /// Send ping frame
+    #[inline]
+    pub fn ping(&mut self, message: &str) {
+        self.write(Frame::message(Vec::from(message), OpCode::Ping, true, true));
+    }
+
+    /// Send pong frame
+    #[inline]
+    pub fn pong(&mut self, message: &str) {
+        self.write(Frame::message(Vec::from(message), OpCode::Pong, true, true));
+    }
+
+    /// Send close frame
+    #[inline]
+    pub fn close(&mut self, reason: Option<CloseReason>) {
+        self.write(Frame::close(reason, true));
+    }
+}
+
+impl WsWriter for ClientWriter {
+    /// Send text frame
+    #[inline]
+    fn send_text<T: Into<Binary>>(&mut self, text: T) {
+        self.text(text)
+    }
+
+    /// Send binary frame
+    #[inline]
+    fn send_binary<B: Into<Binary>>(&mut self, data: B) {
+        self.binary(data)
+    }
+
+    /// Send ping frame
+    #[inline]
+    fn send_ping(&mut self, message: &str) {
+        self.ping(message)
+    }
+
+    /// Send pong frame
+    #[inline]
+    fn send_pong(&mut self, message: &str) {
+        self.pong(message)
+    }
+
+    /// Send close frame
+    #[inline]
+    fn send_close(&mut self, reason: Option<CloseReason>) {
+        self.close(reason);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/context.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/context.rs.html new file mode 100644 index 0000000..951664a --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/context.rs.html @@ -0,0 +1,671 @@ +context.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+
+extern crate actix;
+
+use bytes::Bytes;
+use futures::sync::oneshot::{self, Sender};
+use futures::{Async, Future, Poll, Stream};
+use smallvec::SmallVec;
+
+use self::actix::dev::{
+    AsyncContextParts, ContextFut, ContextParts, Envelope, Mailbox, StreamHandler,
+    ToEnvelope,
+};
+use self::actix::fut::ActorFuture;
+use self::actix::{
+    Actor, ActorContext, ActorState, Addr, AsyncContext, Handler,
+    Message as ActixMessage, SpawnHandle,
+};
+
+use body::{Binary, Body};
+use context::{ActorHttpContext, Drain, Frame as ContextFrame};
+use error::{Error, ErrorInternalServerError, PayloadError};
+use httprequest::HttpRequest;
+
+use ws::frame::{Frame, FramedMessage};
+use ws::proto::{CloseReason, OpCode};
+use ws::{Message, ProtocolError, WsStream, WsWriter};
+
+/// Execution context for `WebSockets` actors
+pub struct WebsocketContext<A, S = ()>
+where
+    A: Actor<Context = WebsocketContext<A, S>>,
+{
+    inner: ContextParts<A>,
+    stream: Option<SmallVec<[ContextFrame; 4]>>,
+    request: HttpRequest<S>,
+    disconnected: bool,
+}
+
+impl<A, S> ActorContext for WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    fn stop(&mut self) {
+        self.inner.stop();
+    }
+    fn terminate(&mut self) {
+        self.inner.terminate()
+    }
+    fn state(&self) -> ActorState {
+        self.inner.state()
+    }
+}
+
+impl<A, S> AsyncContext<A> for WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    fn spawn<F>(&mut self, fut: F) -> SpawnHandle
+    where
+        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static,
+    {
+        self.inner.spawn(fut)
+    }
+
+    fn wait<F>(&mut self, fut: F)
+    where
+        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static,
+    {
+        self.inner.wait(fut)
+    }
+
+    #[doc(hidden)]
+    #[inline]
+    fn waiting(&self) -> bool {
+        self.inner.waiting()
+            || self.inner.state() == ActorState::Stopping
+            || self.inner.state() == ActorState::Stopped
+    }
+
+    fn cancel_future(&mut self, handle: SpawnHandle) -> bool {
+        self.inner.cancel_future(handle)
+    }
+
+    #[inline]
+    fn address(&self) -> Addr<A> {
+        self.inner.address()
+    }
+}
+
+impl<A, S: 'static> WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    #[inline]
+    /// Create a new Websocket context from a request and an actor
+    pub fn create<P>(req: HttpRequest<S>, actor: A, stream: WsStream<P>) -> Body
+    where
+        A: StreamHandler<Message, ProtocolError>,
+        P: Stream<Item = Bytes, Error = PayloadError> + 'static,
+    {
+        let mb = Mailbox::default();
+        let mut ctx = WebsocketContext {
+            inner: ContextParts::new(mb.sender_producer()),
+            stream: None,
+            request: req,
+            disconnected: false,
+        };
+        ctx.add_stream(stream);
+
+        Body::Actor(Box::new(WebsocketContextFut::new(ctx, actor, mb)))
+    }
+
+    /// Create a new Websocket context
+    pub fn with_factory<F>(req: HttpRequest<S>, f: F) -> Body
+    where
+        F: FnOnce(&mut Self) -> A + 'static,
+    {
+        let mb = Mailbox::default();
+        let mut ctx = WebsocketContext {
+            inner: ContextParts::new(mb.sender_producer()),
+            stream: None,
+            request: req,
+            disconnected: false,
+        };
+
+        let act = f(&mut ctx);
+        Body::Actor(Box::new(WebsocketContextFut::new(ctx, act, mb)))
+    }
+}
+
+impl<A, S> WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    /// Write payload
+    ///
+    /// This is a low-level function that accepts framed messages that should
+    /// be created using `Frame::message()`. If you want to send text or binary
+    /// data you should prefer the `text()` or `binary()` convenience functions
+    /// that handle the framing for you.
+    #[inline]
+    pub fn write_raw(&mut self, data: FramedMessage) {
+        if !self.disconnected {
+            if self.stream.is_none() {
+                self.stream = Some(SmallVec::new());
+            }
+            let stream = self.stream.as_mut().unwrap();
+            stream.push(ContextFrame::Chunk(Some(data.0)));
+        } else {
+            warn!("Trying to write to disconnected response");
+        }
+    }
+
+    /// Shared application state
+    #[inline]
+    pub fn state(&self) -> &S {
+        self.request.state()
+    }
+
+    /// Incoming request
+    #[inline]
+    pub fn request(&mut self) -> &mut HttpRequest<S> {
+        &mut self.request
+    }
+
+    /// Returns drain future
+    pub fn drain(&mut self) -> Drain<A> {
+        let (tx, rx) = oneshot::channel();
+        self.add_frame(ContextFrame::Drain(tx));
+        Drain::new(rx)
+    }
+
+    /// Send text frame
+    #[inline]
+    pub fn text<T: Into<Binary>>(&mut self, text: T) {
+        self.write_raw(Frame::message(text.into(), OpCode::Text, true, false));
+    }
+
+    /// Send binary frame
+    #[inline]
+    pub fn binary<B: Into<Binary>>(&mut self, data: B) {
+        self.write_raw(Frame::message(data, OpCode::Binary, true, false));
+    }
+
+    /// Send ping frame
+    #[inline]
+    pub fn ping(&mut self, message: &str) {
+        self.write_raw(Frame::message(
+            Vec::from(message),
+            OpCode::Ping,
+            true,
+            false,
+        ));
+    }
+
+    /// Send pong frame
+    #[inline]
+    pub fn pong(&mut self, message: &str) {
+        self.write_raw(Frame::message(
+            Vec::from(message),
+            OpCode::Pong,
+            true,
+            false,
+        ));
+    }
+
+    /// Send close frame
+    #[inline]
+    pub fn close(&mut self, reason: Option<CloseReason>) {
+        self.write_raw(Frame::close(reason, false));
+    }
+
+    /// Check if connection still open
+    #[inline]
+    pub fn connected(&self) -> bool {
+        !self.disconnected
+    }
+
+    #[inline]
+    fn add_frame(&mut self, frame: ContextFrame) {
+        if self.stream.is_none() {
+            self.stream = Some(SmallVec::new());
+        }
+        if let Some(s) = self.stream.as_mut() {
+            s.push(frame)
+        }
+    }
+
+    /// Handle of the running future
+    ///
+    /// SpawnHandle is the handle returned by `AsyncContext::spawn()` method.
+    pub fn handle(&self) -> SpawnHandle {
+        self.inner.curr_handle()
+    }
+}
+
+impl<A, S> WsWriter for WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+    S: 'static,
+{
+    /// Send text frame
+    #[inline]
+    fn send_text<T: Into<Binary>>(&mut self, text: T) {
+        self.text(text)
+    }
+
+    /// Send binary frame
+    #[inline]
+    fn send_binary<B: Into<Binary>>(&mut self, data: B) {
+        self.binary(data)
+    }
+
+    /// Send ping frame
+    #[inline]
+    fn send_ping(&mut self, message: &str) {
+        self.ping(message)
+    }
+
+    /// Send pong frame
+    #[inline]
+    fn send_pong(&mut self, message: &str) {
+        self.pong(message)
+    }
+
+    /// Send close frame
+    #[inline]
+    fn send_close(&mut self, reason: Option<CloseReason>) {
+        self.close(reason)
+    }
+}
+
+impl<A, S> AsyncContextParts<A> for WebsocketContext<A, S>
+where
+    A: Actor<Context = Self>,
+{
+    fn parts(&mut self) -> &mut ContextParts<A> {
+        &mut self.inner
+    }
+}
+
+struct WebsocketContextFut<A, S>
+where
+    A: Actor<Context = WebsocketContext<A, S>>,
+{
+    fut: ContextFut<A, WebsocketContext<A, S>>,
+}
+
+impl<A, S> WebsocketContextFut<A, S>
+where
+    A: Actor<Context = WebsocketContext<A, S>>,
+{
+    fn new(ctx: WebsocketContext<A, S>, act: A, mailbox: Mailbox<A>) -> Self {
+        let fut = ContextFut::new(ctx, act, mailbox);
+        WebsocketContextFut { fut }
+    }
+}
+
+impl<A, S> ActorHttpContext for WebsocketContextFut<A, S>
+where
+    A: Actor<Context = WebsocketContext<A, S>>,
+    S: 'static,
+{
+    #[inline]
+    fn disconnected(&mut self) {
+        self.fut.ctx().disconnected = true;
+        self.fut.ctx().stop();
+    }
+
+    fn poll(&mut self) -> Poll<Option<SmallVec<[ContextFrame; 4]>>, Error> {
+        if self.fut.alive() && self.fut.poll().is_err() {
+            return Err(ErrorInternalServerError("error"));
+        }
+
+        // frames
+        if let Some(data) = self.fut.ctx().stream.take() {
+            Ok(Async::Ready(Some(data)))
+        } else if self.fut.alive() {
+            Ok(Async::NotReady)
+        } else {
+            Ok(Async::Ready(None))
+        }
+    }
+}
+
+impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S>
+where
+    A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
+    M: ActixMessage + Send + 'static,
+    M::Result: Send,
+{
+    fn pack(msg: M, tx: Option<Sender<M::Result>>) -> Envelope<A> {
+        Envelope::new(msg, tx)
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/frame.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/frame.rs.html new file mode 100644 index 0000000..c81fc62 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/frame.rs.html @@ -0,0 +1,1079 @@ +frame.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+
+use byteorder::{ByteOrder, LittleEndian, NetworkEndian};
+use bytes::{BufMut, Bytes, BytesMut};
+use futures::{Async, Poll, Stream};
+use rand;
+use std::fmt;
+
+use body::Binary;
+use error::PayloadError;
+use payload::PayloadBuffer;
+
+use ws::mask::apply_mask;
+use ws::proto::{CloseCode, CloseReason, OpCode};
+use ws::ProtocolError;
+
+/// A struct representing a `WebSocket` frame.
+#[derive(Debug)]
+pub struct Frame {
+    finished: bool,
+    opcode: OpCode,
+    payload: Binary,
+}
+
+impl Frame {
+    /// Destruct frame
+    pub fn unpack(self) -> (bool, OpCode, Binary) {
+        (self.finished, self.opcode, self.payload)
+    }
+
+    /// Create a new Close control frame.
+    #[inline]
+    pub fn close(reason: Option<CloseReason>, genmask: bool) -> FramedMessage {
+        let payload = match reason {
+            None => Vec::new(),
+            Some(reason) => {
+                let mut code_bytes = [0; 2];
+                NetworkEndian::write_u16(&mut code_bytes, reason.code.into());
+
+                let mut payload = Vec::from(&code_bytes[..]);
+                if let Some(description) = reason.description {
+                    payload.extend(description.as_bytes());
+                }
+                payload
+            }
+        };
+
+        Frame::message(payload, OpCode::Close, true, genmask)
+    }
+
+    #[cfg_attr(feature = "cargo-clippy", allow(type_complexity))]
+    fn read_copy_md<S>(
+        pl: &mut PayloadBuffer<S>, server: bool, max_size: usize,
+    ) -> Poll<Option<(usize, bool, OpCode, usize, Option<u32>)>, ProtocolError>
+    where
+        S: Stream<Item = Bytes, Error = PayloadError>,
+    {
+        let mut idx = 2;
+        let buf = match pl.copy(2)? {
+            Async::Ready(Some(buf)) => buf,
+            Async::Ready(None) => return Ok(Async::Ready(None)),
+            Async::NotReady => return Ok(Async::NotReady),
+        };
+        let first = buf[0];
+        let second = buf[1];
+        let finished = first & 0x80 != 0;
+
+        // check masking
+        let masked = second & 0x80 != 0;
+        if !masked && server {
+            return Err(ProtocolError::UnmaskedFrame);
+        } else if masked && !server {
+            return Err(ProtocolError::MaskedFrame);
+        }
+
+        // Op code
+        let opcode = OpCode::from(first & 0x0F);
+
+        if let OpCode::Bad = opcode {
+            return Err(ProtocolError::InvalidOpcode(first & 0x0F));
+        }
+
+        let len = second & 0x7F;
+        let length = if len == 126 {
+            let buf = match pl.copy(4)? {
+                Async::Ready(Some(buf)) => buf,
+                Async::Ready(None) => return Ok(Async::Ready(None)),
+                Async::NotReady => return Ok(Async::NotReady),
+            };
+            let len = NetworkEndian::read_uint(&buf[idx..], 2) as usize;
+            idx += 2;
+            len
+        } else if len == 127 {
+            let buf = match pl.copy(10)? {
+                Async::Ready(Some(buf)) => buf,
+                Async::Ready(None) => return Ok(Async::Ready(None)),
+                Async::NotReady => return Ok(Async::NotReady),
+            };
+            let len = NetworkEndian::read_uint(&buf[idx..], 8);
+            if len > max_size as u64 {
+                return Err(ProtocolError::Overflow);
+            }
+            idx += 8;
+            len as usize
+        } else {
+            len as usize
+        };
+
+        // check for max allowed size
+        if length > max_size {
+            return Err(ProtocolError::Overflow);
+        }
+
+        let mask = if server {
+            let buf = match pl.copy(idx + 4)? {
+                Async::Ready(Some(buf)) => buf,
+                Async::Ready(None) => return Ok(Async::Ready(None)),
+                Async::NotReady => return Ok(Async::NotReady),
+            };
+
+            let mask: &[u8] = &buf[idx..idx + 4];
+            let mask_u32 = LittleEndian::read_u32(mask);
+            idx += 4;
+            Some(mask_u32)
+        } else {
+            None
+        };
+
+        Ok(Async::Ready(Some((idx, finished, opcode, length, mask))))
+    }
+
+    fn read_chunk_md(
+        chunk: &[u8], server: bool, max_size: usize,
+    ) -> Poll<(usize, bool, OpCode, usize, Option<u32>), ProtocolError> {
+        let chunk_len = chunk.len();
+
+        let mut idx = 2;
+        if chunk_len < 2 {
+            return Ok(Async::NotReady);
+        }
+
+        let first = chunk[0];
+        let second = chunk[1];
+        let finished = first & 0x80 != 0;
+
+        // check masking
+        let masked = second & 0x80 != 0;
+        if !masked && server {
+            return Err(ProtocolError::UnmaskedFrame);
+        } else if masked && !server {
+            return Err(ProtocolError::MaskedFrame);
+        }
+
+        // Op code
+        let opcode = OpCode::from(first & 0x0F);
+
+        if let OpCode::Bad = opcode {
+            return Err(ProtocolError::InvalidOpcode(first & 0x0F));
+        }
+
+        let len = second & 0x7F;
+        let length = if len == 126 {
+            if chunk_len < 4 {
+                return Ok(Async::NotReady);
+            }
+            let len = NetworkEndian::read_uint(&chunk[idx..], 2) as usize;
+            idx += 2;
+            len
+        } else if len == 127 {
+            if chunk_len < 10 {
+                return Ok(Async::NotReady);
+            }
+            let len = NetworkEndian::read_uint(&chunk[idx..], 8);
+            if len > max_size as u64 {
+                return Err(ProtocolError::Overflow);
+            }
+            idx += 8;
+            len as usize
+        } else {
+            len as usize
+        };
+
+        // check for max allowed size
+        if length > max_size {
+            return Err(ProtocolError::Overflow);
+        }
+
+        let mask = if server {
+            if chunk_len < idx + 4 {
+                return Ok(Async::NotReady);
+            }
+
+            let mask: &[u8] = &chunk[idx..idx + 4];
+            let mask_u32 = LittleEndian::read_u32(mask);
+            idx += 4;
+            Some(mask_u32)
+        } else {
+            None
+        };
+
+        Ok(Async::Ready((idx, finished, opcode, length, mask)))
+    }
+
+    /// Parse the input stream into a frame.
+    pub fn parse<S>(
+        pl: &mut PayloadBuffer<S>, server: bool, max_size: usize,
+    ) -> Poll<Option<Frame>, ProtocolError>
+    where
+        S: Stream<Item = Bytes, Error = PayloadError>,
+    {
+        // try to parse ws frame md from one chunk
+        let result = match pl.get_chunk()? {
+            Async::NotReady => return Ok(Async::NotReady),
+            Async::Ready(None) => return Ok(Async::Ready(None)),
+            Async::Ready(Some(chunk)) => Frame::read_chunk_md(chunk, server, max_size)?,
+        };
+
+        let (idx, finished, opcode, length, mask) = match result {
+            // we may need to join several chunks
+            Async::NotReady => match Frame::read_copy_md(pl, server, max_size)? {
+                Async::Ready(Some(item)) => item,
+                Async::NotReady => return Ok(Async::NotReady),
+                Async::Ready(None) => return Ok(Async::Ready(None)),
+            },
+            Async::Ready(item) => item,
+        };
+
+        match pl.can_read(idx + length)? {
+            Async::Ready(Some(true)) => (),
+            Async::Ready(None) => return Ok(Async::Ready(None)),
+            Async::Ready(Some(false)) | Async::NotReady => return Ok(Async::NotReady),
+        }
+
+        // remove prefix
+        pl.drop_bytes(idx);
+
+        // no need for body
+        if length == 0 {
+            return Ok(Async::Ready(Some(Frame {
+                finished,
+                opcode,
+                payload: Binary::from(""),
+            })));
+        }
+
+        let data = match pl.read_exact(length)? {
+            Async::Ready(Some(buf)) => buf,
+            Async::Ready(None) => return Ok(Async::Ready(None)),
+            Async::NotReady => panic!(),
+        };
+
+        // control frames must have length <= 125
+        match opcode {
+            OpCode::Ping | OpCode::Pong if length > 125 => {
+                return Err(ProtocolError::InvalidLength(length))
+            }
+            OpCode::Close if length > 125 => {
+                debug!("Received close frame with payload length exceeding 125. Morphing to protocol close frame.");
+                return Ok(Async::Ready(Some(Frame::default())));
+            }
+            _ => (),
+        }
+
+        // unmask
+        let data = if let Some(mask) = mask {
+            let mut buf = BytesMut::new();
+            buf.extend_from_slice(&data);
+            apply_mask(&mut buf, mask);
+            buf.freeze()
+        } else {
+            data
+        };
+
+        Ok(Async::Ready(Some(Frame {
+            finished,
+            opcode,
+            payload: data.into(),
+        })))
+    }
+
+    /// Parse the payload of a close frame.
+    pub fn parse_close_payload(payload: &Binary) -> Option<CloseReason> {
+        if payload.len() >= 2 {
+            let raw_code = NetworkEndian::read_u16(payload.as_ref());
+            let code = CloseCode::from(raw_code);
+            let description = if payload.len() > 2 {
+                Some(String::from_utf8_lossy(&payload.as_ref()[2..]).into())
+            } else {
+                None
+            };
+            Some(CloseReason { code, description })
+        } else {
+            None
+        }
+    }
+
+    /// Generate binary representation
+    pub fn message<B: Into<Binary>>(
+        data: B, code: OpCode, finished: bool, genmask: bool,
+    ) -> FramedMessage {
+        let payload = data.into();
+        let one: u8 = if finished {
+            0x80 | Into::<u8>::into(code)
+        } else {
+            code.into()
+        };
+        let payload_len = payload.len();
+        let (two, p_len) = if genmask {
+            (0x80, payload_len + 4)
+        } else {
+            (0, payload_len)
+        };
+
+        let mut buf = if payload_len < 126 {
+            let mut buf = BytesMut::with_capacity(p_len + 2);
+            buf.put_slice(&[one, two | payload_len as u8]);
+            buf
+        } else if payload_len <= 65_535 {
+            let mut buf = BytesMut::with_capacity(p_len + 4);
+            buf.put_slice(&[one, two | 126]);
+            buf.put_u16_be(payload_len as u16);
+            buf
+        } else {
+            let mut buf = BytesMut::with_capacity(p_len + 10);
+            buf.put_slice(&[one, two | 127]);
+            buf.put_u64_be(payload_len as u64);
+            buf
+        };
+
+        let binary = if genmask {
+            let mask = rand::random::<u32>();
+            buf.put_u32_le(mask);
+            buf.extend_from_slice(payload.as_ref());
+            let pos = buf.len() - payload_len;
+            apply_mask(&mut buf[pos..], mask);
+            buf.into()
+        } else {
+            buf.put_slice(payload.as_ref());
+            buf.into()
+        };
+
+        FramedMessage(binary)
+    }
+}
+
+impl Default for Frame {
+    fn default() -> Frame {
+        Frame {
+            finished: true,
+            opcode: OpCode::Close,
+            payload: Binary::from(&b""[..]),
+        }
+    }
+}
+
+impl fmt::Display for Frame {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(
+            f,
+            "
+<FRAME>
+    final: {}
+    opcode: {}
+    payload length: {}
+    payload: 0x{}
+</FRAME>",
+            self.finished,
+            self.opcode,
+            self.payload.len(),
+            self.payload
+                .as_ref()
+                .iter()
+                .map(|byte| format!("{:x}", byte))
+                .collect::<String>()
+        )
+    }
+}
+
+/// `WebSocket` message with framing.
+#[derive(Debug)]
+pub struct FramedMessage(pub(crate) Binary);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use futures::stream::once;
+
+    fn is_none(frm: &Poll<Option<Frame>, ProtocolError>) -> bool {
+        match *frm {
+            Ok(Async::Ready(None)) => true,
+            _ => false,
+        }
+    }
+
+    fn extract(frm: Poll<Option<Frame>, ProtocolError>) -> Frame {
+        match frm {
+            Ok(Async::Ready(Some(frame))) => frame,
+            _ => unreachable!("error"),
+        }
+    }
+
+    #[test]
+    fn test_parse() {
+        let mut buf = PayloadBuffer::new(once(Ok(BytesMut::from(
+            &[0b0000_0001u8, 0b0000_0001u8][..],
+        ).freeze())));
+        assert!(is_none(&Frame::parse(&mut buf, false, 1024)));
+
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 0b0000_0001u8][..]);
+        buf.extend(b"1");
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        let frame = extract(Frame::parse(&mut buf, false, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert_eq!(frame.payload.as_ref(), &b"1"[..]);
+    }
+
+    #[test]
+    fn test_parse_length0() {
+        let buf = BytesMut::from(&[0b0000_0001u8, 0b0000_0000u8][..]);
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        let frame = extract(Frame::parse(&mut buf, false, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert!(frame.payload.is_empty());
+    }
+
+    #[test]
+    fn test_parse_length2() {
+        let buf = BytesMut::from(&[0b0000_0001u8, 126u8][..]);
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+        assert!(is_none(&Frame::parse(&mut buf, false, 1024)));
+
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 126u8][..]);
+        buf.extend(&[0u8, 4u8][..]);
+        buf.extend(b"1234");
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        let frame = extract(Frame::parse(&mut buf, false, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert_eq!(frame.payload.as_ref(), &b"1234"[..]);
+    }
+
+    #[test]
+    fn test_parse_length4() {
+        let buf = BytesMut::from(&[0b0000_0001u8, 127u8][..]);
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+        assert!(is_none(&Frame::parse(&mut buf, false, 1024)));
+
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 127u8][..]);
+        buf.extend(&[0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 4u8][..]);
+        buf.extend(b"1234");
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        let frame = extract(Frame::parse(&mut buf, false, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert_eq!(frame.payload.as_ref(), &b"1234"[..]);
+    }
+
+    #[test]
+    fn test_parse_frame_mask() {
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 0b1000_0001u8][..]);
+        buf.extend(b"0001");
+        buf.extend(b"1");
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        assert!(Frame::parse(&mut buf, false, 1024).is_err());
+
+        let frame = extract(Frame::parse(&mut buf, true, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert_eq!(frame.payload, vec![1u8].into());
+    }
+
+    #[test]
+    fn test_parse_frame_no_mask() {
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 0b0000_0001u8][..]);
+        buf.extend(&[1u8]);
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        assert!(Frame::parse(&mut buf, true, 1024).is_err());
+
+        let frame = extract(Frame::parse(&mut buf, false, 1024));
+        assert!(!frame.finished);
+        assert_eq!(frame.opcode, OpCode::Text);
+        assert_eq!(frame.payload, vec![1u8].into());
+    }
+
+    #[test]
+    fn test_parse_frame_max_size() {
+        let mut buf = BytesMut::from(&[0b0000_0001u8, 0b0000_0010u8][..]);
+        buf.extend(&[1u8, 1u8]);
+        let mut buf = PayloadBuffer::new(once(Ok(buf.freeze())));
+
+        assert!(Frame::parse(&mut buf, true, 1).is_err());
+
+        if let Err(ProtocolError::Overflow) = Frame::parse(&mut buf, false, 0) {
+        } else {
+            unreachable!("error");
+        }
+    }
+
+    #[test]
+    fn test_ping_frame() {
+        let frame = Frame::message(Vec::from("data"), OpCode::Ping, true, false);
+
+        let mut v = vec![137u8, 4u8];
+        v.extend(b"data");
+        assert_eq!(frame.0, v.into());
+    }
+
+    #[test]
+    fn test_pong_frame() {
+        let frame = Frame::message(Vec::from("data"), OpCode::Pong, true, false);
+
+        let mut v = vec![138u8, 4u8];
+        v.extend(b"data");
+        assert_eq!(frame.0, v.into());
+    }
+
+    #[test]
+    fn test_close_frame() {
+        let reason = (CloseCode::Normal, "data");
+        let frame = Frame::close(Some(reason.into()), false);
+
+        let mut v = vec![136u8, 6u8, 3u8, 232u8];
+        v.extend(b"data");
+        assert_eq!(frame.0, v.into());
+    }
+
+    #[test]
+    fn test_empty_close_frame() {
+        let frame = Frame::close(None, false);
+        assert_eq!(frame.0, vec![0x88, 0x00].into());
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/mask.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/mask.rs.html new file mode 100644 index 0000000..df2bc24 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/mask.rs.html @@ -0,0 +1,301 @@ +mask.rs.html -- source
  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
+
+//! This is code from [Tungstenite project](https://github.com/snapview/tungstenite-rs)
+#![cfg_attr(feature = "cargo-clippy", allow(cast_ptr_alignment))]
+use std::ptr::copy_nonoverlapping;
+use std::slice;
+
+// Holds a slice guaranteed to be shorter than 8 bytes
+struct ShortSlice<'a>(&'a mut [u8]);
+
+impl<'a> ShortSlice<'a> {
+    unsafe fn new(slice: &'a mut [u8]) -> Self {
+        // Sanity check for debug builds
+        debug_assert!(slice.len() < 8);
+        ShortSlice(slice)
+    }
+    fn len(&self) -> usize {
+        self.0.len()
+    }
+}
+
+/// Faster version of `apply_mask()` which operates on 8-byte blocks.
+#[inline]
+#[cfg_attr(feature = "cargo-clippy", allow(cast_lossless))]
+pub(crate) fn apply_mask(buf: &mut [u8], mask_u32: u32) {
+    // Extend the mask to 64 bits
+    let mut mask_u64 = ((mask_u32 as u64) << 32) | (mask_u32 as u64);
+    // Split the buffer into three segments
+    let (head, mid, tail) = align_buf(buf);
+
+    // Initial unaligned segment
+    let head_len = head.len();
+    if head_len > 0 {
+        xor_short(head, mask_u64);
+        if cfg!(target_endian = "big") {
+            mask_u64 = mask_u64.rotate_left(8 * head_len as u32);
+        } else {
+            mask_u64 = mask_u64.rotate_right(8 * head_len as u32);
+        }
+    }
+    // Aligned segment
+    for v in mid {
+        *v ^= mask_u64;
+    }
+    // Final unaligned segment
+    if tail.len() > 0 {
+        xor_short(tail, mask_u64);
+    }
+}
+
+#[inline]
+// TODO: copy_nonoverlapping here compiles to call memcpy. While it is not so
+// inefficient, it could be done better. The compiler does not understand that
+// a `ShortSlice` must be smaller than a u64.
+#[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
+fn xor_short(buf: ShortSlice, mask: u64) {
+    // Unsafe: we know that a `ShortSlice` fits in a u64
+    unsafe {
+        let (ptr, len) = (buf.0.as_mut_ptr(), buf.0.len());
+        let mut b: u64 = 0;
+        #[allow(trivial_casts)]
+        copy_nonoverlapping(ptr, &mut b as *mut _ as *mut u8, len);
+        b ^= mask;
+        #[allow(trivial_casts)]
+        copy_nonoverlapping(&b as *const _ as *const u8, ptr, len);
+    }
+}
+
+#[inline]
+// Unsafe: caller must ensure the buffer has the correct size and alignment
+unsafe fn cast_slice(buf: &mut [u8]) -> &mut [u64] {
+    // Assert correct size and alignment in debug builds
+    debug_assert!(buf.len().trailing_zeros() >= 3);
+    debug_assert!((buf.as_ptr() as usize).trailing_zeros() >= 3);
+
+    slice::from_raw_parts_mut(buf.as_mut_ptr() as *mut u64, buf.len() >> 3)
+}
+
+#[inline]
+// Splits a slice into three parts: an unaligned short head and tail, plus an aligned
+// u64 mid section.
+fn align_buf(buf: &mut [u8]) -> (ShortSlice, &mut [u64], ShortSlice) {
+    let start_ptr = buf.as_ptr() as usize;
+    let end_ptr = start_ptr + buf.len();
+
+    // Round *up* to next aligned boundary for start
+    let start_aligned = (start_ptr + 7) & !0x7;
+    // Round *down* to last aligned boundary for end
+    let end_aligned = end_ptr & !0x7;
+
+    if end_aligned >= start_aligned {
+        // We have our three segments (head, mid, tail)
+        let (tmp, tail) = buf.split_at_mut(end_aligned - start_ptr);
+        let (head, mid) = tmp.split_at_mut(start_aligned - start_ptr);
+
+        // Unsafe: we know the middle section is correctly aligned, and the outer
+        // sections are smaller than 8 bytes
+        unsafe { (ShortSlice::new(head), cast_slice(mid), ShortSlice(tail)) }
+    } else {
+        // We didn't cross even one aligned boundary!
+
+        // Unsafe: The outer sections are smaller than 8 bytes
+        unsafe { (ShortSlice::new(buf), &mut [], ShortSlice::new(&mut [])) }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::apply_mask;
+    use byteorder::{ByteOrder, LittleEndian};
+
+    /// A safe unoptimized mask application.
+    fn apply_mask_fallback(buf: &mut [u8], mask: &[u8; 4]) {
+        for (i, byte) in buf.iter_mut().enumerate() {
+            *byte ^= mask[i & 3];
+        }
+    }
+
+    #[test]
+    fn test_apply_mask() {
+        let mask = [0x6d, 0xb6, 0xb2, 0x80];
+        let mask_u32: u32 = LittleEndian::read_u32(&mask);
+
+        let unmasked = vec![
+            0xf3, 0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x82, 0xff, 0xfe, 0x00, 0x17,
+            0x74, 0xf9, 0x12, 0x03,
+        ];
+
+        // Check masking with proper alignment.
+        {
+            let mut masked = unmasked.clone();
+            apply_mask_fallback(&mut masked, &mask);
+
+            let mut masked_fast = unmasked.clone();
+            apply_mask(&mut masked_fast, mask_u32);
+
+            assert_eq!(masked, masked_fast);
+        }
+
+        // Check masking without alignment.
+        {
+            let mut masked = unmasked.clone();
+            apply_mask_fallback(&mut masked[1..], &mask);
+
+            let mut masked_fast = unmasked.clone();
+            apply_mask(&mut masked_fast[1..], mask_u32);
+
+            assert_eq!(masked, masked_fast);
+        }
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/mod.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/mod.rs.html new file mode 100644 index 0000000..c751c5d --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/mod.rs.html @@ -0,0 +1,981 @@ +mod.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+
+//! `WebSocket` support for Actix
+//!
+//! To setup a `WebSocket`, first do web socket handshake then on success
+//! convert `Payload` into a `WsStream` stream and then use `WsWriter` to
+//! communicate with the peer.
+//!
+//! ## Example
+//!
+//! ```rust
+//! # extern crate actix_web;
+//! # use actix_web::actix::*;
+//! # use actix_web::*;
+//! use actix_web::{ws, HttpRequest, HttpResponse};
+//!
+//! // do websocket handshake and start actor
+//! fn ws_index(req: &HttpRequest) -> Result<HttpResponse> {
+//!     ws::start(req, Ws)
+//! }
+//!
+//! struct Ws;
+//!
+//! impl Actor for Ws {
+//!     type Context = ws::WebsocketContext<Self>;
+//! }
+//!
+//! // Handler for ws::Message messages
+//! impl StreamHandler<ws::Message, ws::ProtocolError> for Ws {
+//!     fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) {
+//!         match msg {
+//!             ws::Message::Ping(msg) => ctx.pong(&msg),
+//!             ws::Message::Text(text) => ctx.text(text),
+//!             ws::Message::Binary(bin) => ctx.binary(bin),
+//!             _ => (),
+//!         }
+//!     }
+//! }
+//! #
+//! # fn main() {
+//! #    App::new()
+//! #      .resource("/ws/", |r| r.f(ws_index))  // <- register websocket route
+//! #      .finish();
+//! # }
+//! ```
+use bytes::Bytes;
+use futures::{Async, Poll, Stream};
+use http::{header, Method, StatusCode};
+
+use super::actix::{Actor, StreamHandler};
+
+use body::Binary;
+use error::{Error, PayloadError, ResponseError};
+use httpmessage::HttpMessage;
+use httprequest::HttpRequest;
+use httpresponse::{ConnectionType, HttpResponse, HttpResponseBuilder};
+use payload::PayloadBuffer;
+
+mod client;
+mod context;
+mod frame;
+mod mask;
+mod proto;
+
+pub use self::client::{
+    Client, ClientError, ClientHandshake, ClientReader, ClientWriter,
+};
+pub use self::context::WebsocketContext;
+pub use self::frame::{Frame, FramedMessage};
+pub use self::proto::{CloseCode, CloseReason, OpCode};
+
+/// Websocket protocol errors
+#[derive(Fail, Debug)]
+pub enum ProtocolError {
+    /// Received an unmasked frame from client
+    #[fail(display = "Received an unmasked frame from client")]
+    UnmaskedFrame,
+    /// Received a masked frame from server
+    #[fail(display = "Received a masked frame from server")]
+    MaskedFrame,
+    /// Encountered invalid opcode
+    #[fail(display = "Invalid opcode: {}", _0)]
+    InvalidOpcode(u8),
+    /// Invalid control frame length
+    #[fail(display = "Invalid control frame length: {}", _0)]
+    InvalidLength(usize),
+    /// Bad web socket op code
+    #[fail(display = "Bad web socket op code")]
+    BadOpCode,
+    /// A payload reached size limit.
+    #[fail(display = "A payload reached size limit.")]
+    Overflow,
+    /// Continuation is not supported
+    #[fail(display = "Continuation is not supported.")]
+    NoContinuation,
+    /// Bad utf-8 encoding
+    #[fail(display = "Bad utf-8 encoding.")]
+    BadEncoding,
+    /// Payload error
+    #[fail(display = "Payload error: {}", _0)]
+    Payload(#[cause] PayloadError),
+}
+
+impl ResponseError for ProtocolError {}
+
+impl From<PayloadError> for ProtocolError {
+    fn from(err: PayloadError) -> ProtocolError {
+        ProtocolError::Payload(err)
+    }
+}
+
+/// Websocket handshake errors
+#[derive(Fail, PartialEq, Debug)]
+pub enum HandshakeError {
+    /// Only get method is allowed
+    #[fail(display = "Method not allowed")]
+    GetMethodRequired,
+    /// Upgrade header if not set to websocket
+    #[fail(display = "Websocket upgrade is expected")]
+    NoWebsocketUpgrade,
+    /// Connection header is not set to upgrade
+    #[fail(display = "Connection upgrade is expected")]
+    NoConnectionUpgrade,
+    /// Websocket version header is not set
+    #[fail(display = "Websocket version header is required")]
+    NoVersionHeader,
+    /// Unsupported websocket version
+    #[fail(display = "Unsupported version")]
+    UnsupportedVersion,
+    /// Websocket key is not set or wrong
+    #[fail(display = "Unknown websocket key")]
+    BadWebsocketKey,
+}
+
+impl ResponseError for HandshakeError {
+    fn error_response(&self) -> HttpResponse {
+        match *self {
+            HandshakeError::GetMethodRequired => HttpResponse::MethodNotAllowed()
+                .header(header::ALLOW, "GET")
+                .finish(),
+            HandshakeError::NoWebsocketUpgrade => HttpResponse::BadRequest()
+                .reason("No WebSocket UPGRADE header found")
+                .finish(),
+            HandshakeError::NoConnectionUpgrade => HttpResponse::BadRequest()
+                .reason("No CONNECTION upgrade")
+                .finish(),
+            HandshakeError::NoVersionHeader => HttpResponse::BadRequest()
+                .reason("Websocket version header is required")
+                .finish(),
+            HandshakeError::UnsupportedVersion => HttpResponse::BadRequest()
+                .reason("Unsupported version")
+                .finish(),
+            HandshakeError::BadWebsocketKey => HttpResponse::BadRequest()
+                .reason("Handshake error")
+                .finish(),
+        }
+    }
+}
+
+/// `WebSocket` Message
+#[derive(Debug, PartialEq, Message)]
+pub enum Message {
+    /// Text message
+    Text(String),
+    /// Binary message
+    Binary(Binary),
+    /// Ping message
+    Ping(String),
+    /// Pong message
+    Pong(String),
+    /// Close message with optional reason
+    Close(Option<CloseReason>),
+}
+
+/// Do websocket handshake and start actor
+pub fn start<A, S>(req: &HttpRequest<S>, actor: A) -> Result<HttpResponse, Error>
+where
+    A: Actor<Context = WebsocketContext<A, S>> + StreamHandler<Message, ProtocolError>,
+    S: 'static,
+{
+    let mut resp = handshake(req)?;
+    let stream = WsStream::new(req.payload());
+
+    let body = WebsocketContext::create(req.clone(), actor, stream);
+    Ok(resp.body(body))
+}
+
+/// Prepare `WebSocket` handshake response.
+///
+/// This function returns handshake `HttpResponse`, ready to send to peer.
+/// It does not perform any IO.
+///
+// /// `protocols` is a sequence of known protocols. On successful handshake,
+// /// the returned response headers contain the first protocol in this list
+// /// which the server also knows.
+pub fn handshake<S>(
+    req: &HttpRequest<S>,
+) -> Result<HttpResponseBuilder, HandshakeError> {
+    // WebSocket accepts only GET
+    if *req.method() != Method::GET {
+        return Err(HandshakeError::GetMethodRequired);
+    }
+
+    // Check for "UPGRADE" to websocket header
+    let has_hdr = if let Some(hdr) = req.headers().get(header::UPGRADE) {
+        if let Ok(s) = hdr.to_str() {
+            s.to_lowercase().contains("websocket")
+        } else {
+            false
+        }
+    } else {
+        false
+    };
+    if !has_hdr {
+        return Err(HandshakeError::NoWebsocketUpgrade);
+    }
+
+    // Upgrade connection
+    if !req.upgrade() {
+        return Err(HandshakeError::NoConnectionUpgrade);
+    }
+
+    // check supported version
+    if !req.headers().contains_key(header::SEC_WEBSOCKET_VERSION) {
+        return Err(HandshakeError::NoVersionHeader);
+    }
+    let supported_ver = {
+        if let Some(hdr) = req.headers().get(header::SEC_WEBSOCKET_VERSION) {
+            hdr == "13" || hdr == "8" || hdr == "7"
+        } else {
+            false
+        }
+    };
+    if !supported_ver {
+        return Err(HandshakeError::UnsupportedVersion);
+    }
+
+    // check client handshake for validity
+    if !req.headers().contains_key(header::SEC_WEBSOCKET_KEY) {
+        return Err(HandshakeError::BadWebsocketKey);
+    }
+    let key = {
+        let key = req.headers().get(header::SEC_WEBSOCKET_KEY).unwrap();
+        proto::hash_key(key.as_ref())
+    };
+
+    Ok(HttpResponse::build(StatusCode::SWITCHING_PROTOCOLS)
+        .connection_type(ConnectionType::Upgrade)
+        .header(header::UPGRADE, "websocket")
+        .header(header::TRANSFER_ENCODING, "chunked")
+        .header(header::SEC_WEBSOCKET_ACCEPT, key.as_str())
+        .take())
+}
+
+/// Maps `Payload` stream into stream of `ws::Message` items
+pub struct WsStream<S> {
+    rx: PayloadBuffer<S>,
+    closed: bool,
+    max_size: usize,
+}
+
+impl<S> WsStream<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    /// Create new websocket frames stream
+    pub fn new(stream: S) -> WsStream<S> {
+        WsStream {
+            rx: PayloadBuffer::new(stream),
+            closed: false,
+            max_size: 65_536,
+        }
+    }
+
+    /// Set max frame size
+    ///
+    /// By default max size is set to 64kb
+    pub fn max_size(mut self, size: usize) -> Self {
+        self.max_size = size;
+        self
+    }
+}
+
+impl<S> Stream for WsStream<S>
+where
+    S: Stream<Item = Bytes, Error = PayloadError>,
+{
+    type Item = Message;
+    type Error = ProtocolError;
+
+    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
+        if self.closed {
+            return Ok(Async::Ready(None));
+        }
+
+        match Frame::parse(&mut self.rx, true, self.max_size) {
+            Ok(Async::Ready(Some(frame))) => {
+                let (finished, opcode, payload) = frame.unpack();
+
+                // continuation is not supported
+                if !finished {
+                    self.closed = true;
+                    return Err(ProtocolError::NoContinuation);
+                }
+
+                match opcode {
+                    OpCode::Continue => Err(ProtocolError::NoContinuation),
+                    OpCode::Bad => {
+                        self.closed = true;
+                        Err(ProtocolError::BadOpCode)
+                    }
+                    OpCode::Close => {
+                        self.closed = true;
+                        let close_reason = Frame::parse_close_payload(&payload);
+                        Ok(Async::Ready(Some(Message::Close(close_reason))))
+                    }
+                    OpCode::Ping => Ok(Async::Ready(Some(Message::Ping(
+                        String::from_utf8_lossy(payload.as_ref()).into(),
+                    )))),
+                    OpCode::Pong => Ok(Async::Ready(Some(Message::Pong(
+                        String::from_utf8_lossy(payload.as_ref()).into(),
+                    )))),
+                    OpCode::Binary => Ok(Async::Ready(Some(Message::Binary(payload)))),
+                    OpCode::Text => {
+                        let tmp = Vec::from(payload.as_ref());
+                        match String::from_utf8(tmp) {
+                            Ok(s) => Ok(Async::Ready(Some(Message::Text(s)))),
+                            Err(_) => {
+                                self.closed = true;
+                                Err(ProtocolError::BadEncoding)
+                            }
+                        }
+                    }
+                }
+            }
+            Ok(Async::Ready(None)) => Ok(Async::Ready(None)),
+            Ok(Async::NotReady) => Ok(Async::NotReady),
+            Err(e) => {
+                self.closed = true;
+                Err(e)
+            }
+        }
+    }
+}
+
+/// Common writing methods for a websocket.
+pub trait WsWriter {
+    /// Send a text
+    fn send_text<T: Into<Binary>>(&mut self, text: T);
+    /// Send a binary
+    fn send_binary<B: Into<Binary>>(&mut self, data: B);
+    /// Send a ping message
+    fn send_ping(&mut self, message: &str);
+    /// Send a pong message
+    fn send_pong(&mut self, message: &str);
+    /// Close the connection
+    fn send_close(&mut self, reason: Option<CloseReason>);
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use http::{header, Method};
+    use test::TestRequest;
+
+    #[test]
+    fn test_handshake() {
+        let req = TestRequest::default().method(Method::POST).finish();
+        assert_eq!(
+            HandshakeError::GetMethodRequired,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default().finish();
+        assert_eq!(
+            HandshakeError::NoWebsocketUpgrade,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(header::UPGRADE, header::HeaderValue::from_static("test"))
+            .finish();
+        assert_eq!(
+            HandshakeError::NoWebsocketUpgrade,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(
+                header::UPGRADE,
+                header::HeaderValue::from_static("websocket"),
+            )
+            .finish();
+        assert_eq!(
+            HandshakeError::NoConnectionUpgrade,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(
+                header::UPGRADE,
+                header::HeaderValue::from_static("websocket"),
+            )
+            .header(
+                header::CONNECTION,
+                header::HeaderValue::from_static("upgrade"),
+            )
+            .finish();
+        assert_eq!(
+            HandshakeError::NoVersionHeader,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(
+                header::UPGRADE,
+                header::HeaderValue::from_static("websocket"),
+            )
+            .header(
+                header::CONNECTION,
+                header::HeaderValue::from_static("upgrade"),
+            )
+            .header(
+                header::SEC_WEBSOCKET_VERSION,
+                header::HeaderValue::from_static("5"),
+            )
+            .finish();
+        assert_eq!(
+            HandshakeError::UnsupportedVersion,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(
+                header::UPGRADE,
+                header::HeaderValue::from_static("websocket"),
+            )
+            .header(
+                header::CONNECTION,
+                header::HeaderValue::from_static("upgrade"),
+            )
+            .header(
+                header::SEC_WEBSOCKET_VERSION,
+                header::HeaderValue::from_static("13"),
+            )
+            .finish();
+        assert_eq!(
+            HandshakeError::BadWebsocketKey,
+            handshake(&req).err().unwrap()
+        );
+
+        let req = TestRequest::default()
+            .header(
+                header::UPGRADE,
+                header::HeaderValue::from_static("websocket"),
+            )
+            .header(
+                header::CONNECTION,
+                header::HeaderValue::from_static("upgrade"),
+            )
+            .header(
+                header::SEC_WEBSOCKET_VERSION,
+                header::HeaderValue::from_static("13"),
+            )
+            .header(
+                header::SEC_WEBSOCKET_KEY,
+                header::HeaderValue::from_static("13"),
+            )
+            .finish();
+        assert_eq!(
+            StatusCode::SWITCHING_PROTOCOLS,
+            handshake(&req).unwrap().finish().status()
+        );
+    }
+
+    #[test]
+    fn test_wserror_http_response() {
+        let resp: HttpResponse = HandshakeError::GetMethodRequired.error_response();
+        assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
+        let resp: HttpResponse = HandshakeError::NoWebsocketUpgrade.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+        let resp: HttpResponse = HandshakeError::NoConnectionUpgrade.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+        let resp: HttpResponse = HandshakeError::NoVersionHeader.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+        let resp: HttpResponse = HandshakeError::UnsupportedVersion.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+        let resp: HttpResponse = HandshakeError::BadWebsocketKey.error_response();
+        assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/src/actix_web/ws/proto.rs.html b/static/api/actix-web/0.7.2/src/actix_web/ws/proto.rs.html new file mode 100644 index 0000000..f6bf8c7 --- /dev/null +++ b/static/api/actix-web/0.7.2/src/actix_web/ws/proto.rs.html @@ -0,0 +1,639 @@ +proto.rs.html -- source
  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
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+
+use base64;
+use sha1;
+use std::convert::{From, Into};
+use std::fmt;
+
+use self::OpCode::*;
+/// Operation codes as part of rfc6455.
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub enum OpCode {
+    /// Indicates a continuation frame of a fragmented message.
+    Continue,
+    /// Indicates a text data frame.
+    Text,
+    /// Indicates a binary data frame.
+    Binary,
+    /// Indicates a close control frame.
+    Close,
+    /// Indicates a ping control frame.
+    Ping,
+    /// Indicates a pong control frame.
+    Pong,
+    /// Indicates an invalid opcode was received.
+    Bad,
+}
+
+impl fmt::Display for OpCode {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            Continue => write!(f, "CONTINUE"),
+            Text => write!(f, "TEXT"),
+            Binary => write!(f, "BINARY"),
+            Close => write!(f, "CLOSE"),
+            Ping => write!(f, "PING"),
+            Pong => write!(f, "PONG"),
+            Bad => write!(f, "BAD"),
+        }
+    }
+}
+
+impl Into<u8> for OpCode {
+    fn into(self) -> u8 {
+        match self {
+            Continue => 0,
+            Text => 1,
+            Binary => 2,
+            Close => 8,
+            Ping => 9,
+            Pong => 10,
+            Bad => {
+                debug_assert!(
+                    false,
+                    "Attempted to convert invalid opcode to u8. This is a bug."
+                );
+                8 // if this somehow happens, a close frame will help us tear down quickly
+            }
+        }
+    }
+}
+
+impl From<u8> for OpCode {
+    fn from(byte: u8) -> OpCode {
+        match byte {
+            0 => Continue,
+            1 => Text,
+            2 => Binary,
+            8 => Close,
+            9 => Ping,
+            10 => Pong,
+            _ => Bad,
+        }
+    }
+}
+
+use self::CloseCode::*;
+/// Status code used to indicate why an endpoint is closing the `WebSocket`
+/// connection.
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub enum CloseCode {
+    /// Indicates a normal closure, meaning that the purpose for
+    /// which the connection was established has been fulfilled.
+    Normal,
+    /// Indicates that an endpoint is "going away", such as a server
+    /// going down or a browser having navigated away from a page.
+    Away,
+    /// Indicates that an endpoint is terminating the connection due
+    /// to a protocol error.
+    Protocol,
+    /// 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).
+    Unsupported,
+    /// 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.
+    Abnormal,
+    /// 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 [RFC3629]
+    /// data within a text message).
+    Invalid,
+    /// 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.
+    Policy,
+    /// Indicates that an endpoint is terminating the connection
+    /// because it has received a message that is too big for it to
+    /// process.
+    Size,
+    /// 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.
+    Extension,
+    /// Indicates that a server is terminating the connection because
+    /// it encountered an unexpected condition that prevented it from
+    /// fulfilling the request.
+    Error,
+    /// 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.
+    Restart,
+    /// 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.
+    Again,
+    #[doc(hidden)]
+    Tls,
+    #[doc(hidden)]
+    Other(u16),
+}
+
+impl Into<u16> for CloseCode {
+    fn into(self) -> u16 {
+        match self {
+            Normal => 1000,
+            Away => 1001,
+            Protocol => 1002,
+            Unsupported => 1003,
+            Abnormal => 1006,
+            Invalid => 1007,
+            Policy => 1008,
+            Size => 1009,
+            Extension => 1010,
+            Error => 1011,
+            Restart => 1012,
+            Again => 1013,
+            Tls => 1015,
+            Other(code) => code,
+        }
+    }
+}
+
+impl From<u16> for CloseCode {
+    fn from(code: u16) -> CloseCode {
+        match code {
+            1000 => Normal,
+            1001 => Away,
+            1002 => Protocol,
+            1003 => Unsupported,
+            1006 => Abnormal,
+            1007 => Invalid,
+            1008 => Policy,
+            1009 => Size,
+            1010 => Extension,
+            1011 => Error,
+            1012 => Restart,
+            1013 => Again,
+            1015 => Tls,
+            _ => Other(code),
+        }
+    }
+}
+
+#[derive(Debug, Eq, PartialEq, Clone)]
+/// Reason for closing the connection
+pub struct CloseReason {
+    /// Exit code
+    pub code: CloseCode,
+    /// Optional description of the exit code
+    pub description: Option<String>,
+}
+
+impl From<CloseCode> for CloseReason {
+    fn from(code: CloseCode) -> Self {
+        CloseReason {
+            code,
+            description: None,
+        }
+    }
+}
+
+impl<T: Into<String>> From<(CloseCode, T)> for CloseReason {
+    fn from(info: (CloseCode, T)) -> Self {
+        CloseReason {
+            code: info.0,
+            description: Some(info.1.into()),
+        }
+    }
+}
+
+static WS_GUID: &'static str = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+
+// TODO: hash is always same size, we dont need String
+pub(crate) fn hash_key(key: &[u8]) -> String {
+    let mut hasher = sha1::Sha1::new();
+
+    hasher.update(key);
+    hasher.update(WS_GUID.as_bytes());
+
+    base64::encode(&hasher.digest().bytes())
+}
+
+#[cfg(test)]
+mod test {
+    #![allow(unused_imports, unused_variables, dead_code)]
+    use super::*;
+
+    macro_rules! opcode_into {
+        ($from:expr => $opcode:pat) => {
+            match OpCode::from($from) {
+                e @ $opcode => (),
+                e => unreachable!("{:?}", e),
+            }
+        };
+    }
+
+    macro_rules! opcode_from {
+        ($from:expr => $opcode:pat) => {
+            let res: u8 = $from.into();
+            match res {
+                e @ $opcode => (),
+                e => unreachable!("{:?}", e),
+            }
+        };
+    }
+
+    #[test]
+    fn test_to_opcode() {
+        opcode_into!(0 => OpCode::Continue);
+        opcode_into!(1 => OpCode::Text);
+        opcode_into!(2 => OpCode::Binary);
+        opcode_into!(8 => OpCode::Close);
+        opcode_into!(9 => OpCode::Ping);
+        opcode_into!(10 => OpCode::Pong);
+        opcode_into!(99 => OpCode::Bad);
+    }
+
+    #[test]
+    fn test_from_opcode() {
+        opcode_from!(OpCode::Continue => 0);
+        opcode_from!(OpCode::Text => 1);
+        opcode_from!(OpCode::Binary => 2);
+        opcode_from!(OpCode::Close => 8);
+        opcode_from!(OpCode::Ping => 9);
+        opcode_from!(OpCode::Pong => 10);
+    }
+
+    #[test]
+    #[should_panic]
+    fn test_from_opcode_debug() {
+        opcode_from!(OpCode::Bad => 99);
+    }
+
+    #[test]
+    fn test_from_opcode_display() {
+        assert_eq!(format!("{}", OpCode::Continue), "CONTINUE");
+        assert_eq!(format!("{}", OpCode::Text), "TEXT");
+        assert_eq!(format!("{}", OpCode::Binary), "BINARY");
+        assert_eq!(format!("{}", OpCode::Close), "CLOSE");
+        assert_eq!(format!("{}", OpCode::Ping), "PING");
+        assert_eq!(format!("{}", OpCode::Pong), "PONG");
+        assert_eq!(format!("{}", OpCode::Bad), "BAD");
+    }
+
+    #[test]
+    fn closecode_from_u16() {
+        assert_eq!(CloseCode::from(1000u16), CloseCode::Normal);
+        assert_eq!(CloseCode::from(1001u16), CloseCode::Away);
+        assert_eq!(CloseCode::from(1002u16), CloseCode::Protocol);
+        assert_eq!(CloseCode::from(1003u16), CloseCode::Unsupported);
+        assert_eq!(CloseCode::from(1006u16), CloseCode::Abnormal);
+        assert_eq!(CloseCode::from(1007u16), CloseCode::Invalid);
+        assert_eq!(CloseCode::from(1008u16), CloseCode::Policy);
+        assert_eq!(CloseCode::from(1009u16), CloseCode::Size);
+        assert_eq!(CloseCode::from(1010u16), CloseCode::Extension);
+        assert_eq!(CloseCode::from(1011u16), CloseCode::Error);
+        assert_eq!(CloseCode::from(1012u16), CloseCode::Restart);
+        assert_eq!(CloseCode::from(1013u16), CloseCode::Again);
+        assert_eq!(CloseCode::from(1015u16), CloseCode::Tls);
+        assert_eq!(CloseCode::from(2000u16), CloseCode::Other(2000));
+    }
+
+    #[test]
+    fn closecode_into_u16() {
+        assert_eq!(1000u16, Into::<u16>::into(CloseCode::Normal));
+        assert_eq!(1001u16, Into::<u16>::into(CloseCode::Away));
+        assert_eq!(1002u16, Into::<u16>::into(CloseCode::Protocol));
+        assert_eq!(1003u16, Into::<u16>::into(CloseCode::Unsupported));
+        assert_eq!(1006u16, Into::<u16>::into(CloseCode::Abnormal));
+        assert_eq!(1007u16, Into::<u16>::into(CloseCode::Invalid));
+        assert_eq!(1008u16, Into::<u16>::into(CloseCode::Policy));
+        assert_eq!(1009u16, Into::<u16>::into(CloseCode::Size));
+        assert_eq!(1010u16, Into::<u16>::into(CloseCode::Extension));
+        assert_eq!(1011u16, Into::<u16>::into(CloseCode::Error));
+        assert_eq!(1012u16, Into::<u16>::into(CloseCode::Restart));
+        assert_eq!(1013u16, Into::<u16>::into(CloseCode::Again));
+        assert_eq!(1015u16, Into::<u16>::into(CloseCode::Tls));
+        assert_eq!(2000u16, Into::<u16>::into(CloseCode::Other(2000)));
+    }
+}
+
+
\ No newline at end of file diff --git a/static/api/actix-web/0.7.2/storage.js b/static/api/actix-web/0.7.2/storage.js new file mode 100644 index 0000000..f01b7d3 --- /dev/null +++ b/static/api/actix-web/0.7.2/storage.js @@ -0,0 +1,11 @@ +var resourcesSuffix="";/*! + * Copyright 2018 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */var currentTheme=document.getElementById("themeStyle");var mainTheme=document.getElementById("mainThemeStyle");var savedHref=[];function onEach(arr,func){if(arr&&arr.length>0&&func){for(var i=0;i \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ActorContext.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ActorContext.t.html new file mode 100644 index 0000000..6e5d57c --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ActorContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ActorFuture.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ActorFuture.t.html new file mode 100644 index 0000000..a5df857 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ActorResponse.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ActorResponse.t.html new file mode 100644 index 0000000..d7ea7f3 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ActorResponse.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ActorResponse.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ActorStream.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ActorStream.t.html new file mode 100644 index 0000000..489af55 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ActorStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ActorStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Arbiter.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Arbiter.t.html new file mode 100644 index 0000000..5f7e124 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Arbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Arbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ArbiterService.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ArbiterService.t.html new file mode 100644 index 0000000..9c27960 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ArbiterService.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.ArbiterService.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/AsyncContext.t.html b/static/api/actix-web/stable/actix_web/actix/actix/AsyncContext.t.html new file mode 100644 index 0000000..4f09fc1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/AsyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.AsyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Handler.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Handler.t.html new file mode 100644 index 0000000..6aa19e5 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Handler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Handler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Message.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Message.t.html new file mode 100644 index 0000000..d1d248b --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Message.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.Message.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Recipient.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Recipient.t.html new file mode 100644 index 0000000..35b8874 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Recipient.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Recipient.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/RecipientRequest.t.html b/static/api/actix-web/stable/actix_web/actix/actix/RecipientRequest.t.html new file mode 100644 index 0000000..f683ad1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/RecipientRequest.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.RecipientRequest.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Request.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Request.t.html new file mode 100644 index 0000000..333c56f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Request.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Request.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/Response.t.html b/static/api/actix-web/stable/actix_web/actix/actix/Response.t.html new file mode 100644 index 0000000..9a85f97 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/Response.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Response.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/ResponseFuture.t.html b/static/api/actix-web/stable/actix_web/actix/actix/ResponseFuture.t.html new file mode 100644 index 0000000..e0e4c06 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/ResponseFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ResponseFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/SpawnHandle.t.html b/static/api/actix-web/stable/actix_web/actix/actix/SpawnHandle.t.html new file mode 100644 index 0000000..adeee55 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/SpawnHandle.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SpawnHandle.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/StreamHandler.t.html b/static/api/actix-web/stable/actix_web/actix/actix/StreamHandler.t.html new file mode 100644 index 0000000..90647e7 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/StreamHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.StreamHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/SyncContext.t.html b/static/api/actix-web/stable/actix_web/actix/actix/SyncContext.t.html new file mode 100644 index 0000000..de0d7a6 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/SyncContext.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SyncContext.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/System.t.html b/static/api/actix-web/stable/actix_web/actix/actix/System.t.html new file mode 100644 index 0000000..1426538 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/System.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.System.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/WrapStream.t.html b/static/api/actix-web/stable/actix_web/actix/actix/WrapStream.t.html new file mode 100644 index 0000000..259580b --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/WrapStream.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.WrapStream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/index.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/index.html new file mode 100644 index 0000000..90e5ae1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/index.html @@ -0,0 +1,19 @@ +actix_web::actix::actix::actors - Rust

Module actix_web::actix::actix::actors[]

Helper actors

+

Modules

+ + + + + + + + +
resolver +

DNS resolver and connector utility actor

+ +
signal +

An actor implementation of Unix signal handling

+ +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connect.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connect.t.html new file mode 100644 index 0000000..bf9a0c3 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connect.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Connect.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html new file mode 100644 index 0000000..88ce27b --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectAddr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ConnectAddr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connector.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connector.t.html new file mode 100644 index 0000000..2aa154d --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Connector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.Connector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectorError.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectorError.t.html new file mode 100644 index 0000000..db9f3da --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ConnectorError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to type.ConnectorError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolve.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolve.t.html new file mode 100644 index 0000000..cdbc08d --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolve.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolve.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolver.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolver.t.html new file mode 100644 index 0000000..df985bd --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/Resolver.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Resolver.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ResolverError.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ResolverError.t.html new file mode 100644 index 0000000..7b07e5e --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/ResolverError.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.ResolverError.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/TcpConnector.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/TcpConnector.t.html new file mode 100644 index 0000000..0729a94 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/TcpConnector.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.TcpConnector.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/enum.ResolverError.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/enum.ResolverError.html new file mode 100644 index 0000000..9d774b5 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/enum.ResolverError.html @@ -0,0 +1,30 @@ +actix_web::actix::actix::actors::resolver::ResolverError - Rust

Enum actix_web::actix::actix::actors::resolver::ResolverError[]

pub enum ResolverError {
+    Resolver(String),
+    InvalidInput(&'static str),
+    Timeout,
+    IoError(Error),
+}

+ Variants

+

Failed to resolve the hostname

+

Address is invalid

+

Connecting took too long

+

Connection io error

+
+

+ Trait Implementations +

+

impl Debug for ResolverError

Formats the value using the given formatter. Read more

+

impl Display for ResolverError

Formats the value using the given formatter. Read more

+

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

+

Provides context for this failure. Read more

+

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

+

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

+

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+
+

+ Auto Trait Implementations +

+
+

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/index.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/index.html new file mode 100644 index 0000000..e061480 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/index.html @@ -0,0 +1,93 @@ +actix_web::actix::actix::actors::resolver - Rust

Module actix_web::actix::actix::actors::resolver[]

DNS resolver and connector utility actor

+

Example

+
+use actix::prelude::*;
+use actix::actors::resolver;
+
+fn main() {
+    System::run(|| {
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost"))       // <- resolve "localhost"
+                    .then(|addrs| {
+                        println!("RESULT: {:?}", addrs);
+                        Ok::<_, ()>(())
+                    })
+        });
+
+        tokio::spawn({
+            let resolver = resolver::Resolver::from_registry();
+
+            resolver.send(
+                resolver::Resolve::host("localhost:5000"))  // <- connect to a "localhost"
+                    .then(|stream| {
+                        println!("RESULT: {:?}", stream);
+                        Ok::<_, ()>(())
+                    })
+       });
+   });
+}
+

Structs

+ + + + + + + + + + + + + + + + + + + + +
Connect + +
ConnectAddr + +
Resolve + +
Resolver + +
TcpConnector +

Tcp stream connector

+ +

Enums

+ + + + +
ResolverError + +

Type Definitions

+ + + + + + + + +
Connector + [
Deprecated
] +
ConnectorError + [
Deprecated
] +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/sidebar-items.js new file mode 100644 index 0000000..b4723a7 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["ResolverError",""]],"struct":[["Connect",""],["ConnectAddr",""],["Resolve",""],["Resolver",""],["TcpConnector","Tcp stream connector"]],"type":[["Connector",""],["ConnectorError",""]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Connect.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Connect.html new file mode 100644 index 0000000..6bd1ed8 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Connect.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::actors::resolver::Connect - Rust

Struct actix_web::actix::actix::actors::resolver::Connect[]

pub struct Connect { /* fields omitted */ }
+

+ Methods +

+

impl Connect

Set connect timeout

+

By default timeout is set to a 1 second.

+
+

+ Trait Implementations +

+

impl Eq for Connect

impl Message for Connect

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Connect

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html new file mode 100644 index 0000000..7358143 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.ConnectAddr.html @@ -0,0 +1,18 @@ +actix_web::actix::actix::actors::resolver::ConnectAddr - Rust

Struct actix_web::actix::actix::actors::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);
+

+ Trait Implementations +

+

impl Eq for ConnectAddr

impl Message for ConnectAddr

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolve.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolve.html new file mode 100644 index 0000000..dd249d0 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolve.html @@ -0,0 +1,22 @@ +actix_web::actix::actix::actors::resolver::Resolve - Rust

Struct actix_web::actix::actix::actors::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }
+

+ Methods +

+

impl Resolve

+

+ Trait Implementations +

+

impl Eq for Resolve

impl Message for Resolve

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Resolve

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolver.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolver.html new file mode 100644 index 0000000..339e362 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.Resolver.html @@ -0,0 +1,36 @@ +actix_web::actix::actix::actors::resolver::Resolver - Rust

Struct actix_web::actix::actix::actors::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }
+

+ Methods +

+

impl Resolver

+

+ Trait Implementations +

+

impl Handler<Resolve> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<ConnectAddr> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for Resolver

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for Resolver

Construct and srtart system service

+

Method is called during service initialization.

+

Get actor's address from system registry

+

impl Supervised for Resolver

Method called when supervisor restarting failed actor

+

impl Default for Resolver

Returns the "default value" for a type. Read more

+

impl Actor for Resolver

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html new file mode 100644 index 0000000..9170272 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/struct.TcpConnector.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::actors::resolver::TcpConnector - Rust

Struct actix_web::actix::actix::actors::resolver::TcpConnector[]

pub struct TcpConnector { /* fields omitted */ }

Tcp stream connector

+
+

+ Methods +

+

impl TcpConnector

+

+ Trait Implementations +

+

impl ActorFuture for TcpConnector

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.Connector.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.Connector.html new file mode 100644 index 0000000..3a347d6 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.Connector.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::actors::resolver::Connector - Rust

Type Definition actix_web::actix::actix::actors::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.ConnectorError.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.ConnectorError.html new file mode 100644 index 0000000..c30b5f8 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/resolver/type.ConnectorError.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::actors::resolver::ConnectorError - Rust

Type Definition actix_web::actix::actix::actors::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/actors/sidebar-items.js new file mode 100644 index 0000000..49ca6e0 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"mod":[["resolver","DNS resolver and connector utility actor"],["signal","An actor implementation of Unix signal handling"]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html new file mode 100644 index 0000000..c8dd85f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/DefaultSignalsHandler.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DefaultSignalsHandler.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/ProcessSignals.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/ProcessSignals.t.html new file mode 100644 index 0000000..2d485f4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/ProcessSignals.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.ProcessSignals.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Signal.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Signal.t.html new file mode 100644 index 0000000..28776b9 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Signal.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Signal.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/SignalType.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/SignalType.t.html new file mode 100644 index 0000000..5240b33 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/SignalType.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.SignalType.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Subscribe.t.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Subscribe.t.html new file mode 100644 index 0000000..ceac0d3 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/Subscribe.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Subscribe.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/enum.SignalType.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/enum.SignalType.html new file mode 100644 index 0000000..0c4c4f0 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/enum.SignalType.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::actors::signal::SignalType - Rust

Enum actix_web::actix::actix::actors::signal::SignalType[]

pub enum SignalType {
+    Hup,
+    Int,
+    Term,
+    Quit,
+    Child,
+}

Different types of process signals

+

+ Variants

+

SIGHUP

+

SIGINT

+

SIGTERM

+

SIGQUIT

+

SIGCHILD

+
+

+ Trait Implementations +

+

impl Message for SignalType

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Clone for SignalType

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SignalType

Formats the value using the given formatter. Read more

+

impl Copy for SignalType

+

+ Auto Trait Implementations +

+
+

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/index.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/index.html new file mode 100644 index 0000000..d1939ee --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/index.html @@ -0,0 +1,100 @@ +actix_web::actix::actix::actors::signal - Rust

Module actix_web::actix::actix::actors::signal[]

An actor implementation of Unix signal handling

+

This module implements asynchronous signal handling for Actix. For each +signal ProcessSignals actor sends Signal message to all subscriber. To +subscriber, send Subscribe message to ProcessSignals actor.

+

Examples

+
+use actix::actors::signal;
+use actix::prelude::*;
+
+struct Signals;
+
+impl Actor for Signals {
+    type Context = Context<Self>;
+}
+
+// Shutdown system on and of `SIGINT`, `SIGTERM`, `SIGQUIT` signals
+impl Handler<signal::Signal> for Signals {
+    type Result = ();
+
+    fn handle(&mut self, msg: signal::Signal, _: &mut Context<Self>) {
+        match msg.0 {
+            signal::SignalType::Int => {
+                println!("SIGINT received, exiting");
+                System::current().stop();
+            }
+            signal::SignalType::Hup => {
+                println!("SIGHUP received, reloading");
+            }
+            signal::SignalType::Term => {
+                println!("SIGTERM received, stopping");
+                System::current().stop();
+            }
+            signal::SignalType::Quit => {
+                println!("SIGQUIT received, exiting");
+                System::current().stop();
+            }
+            _ => (),
+        }
+    }
+}
+
+fn main() {
+    // initialize system
+    System::run(|| {
+        // Start signals handler
+        let addr = Signals.start();
+
+        // send SIGTERM
+        std::thread::spawn(move || {
+            // emulate SIGNTERM
+            addr.do_send(signal::Signal(signal::SignalType::Term));
+        });
+    });
+
+    std::process::exit(0);
+}
+

Structs

+ + + + + + + + + + + + + + + + +
DefaultSignalsHandler +

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+ +
ProcessSignals +

An actor implementation of Unix signal handling

+ +
Signal +

Process signal message

+ +
Subscribe +

Subscribe to process signals.

+ +

Enums

+ + + + +
SignalType +

Different types of process signals

+ +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/sidebar-items.js new file mode 100644 index 0000000..9c95d85 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["SignalType","Different types of process signals"]],"struct":[["DefaultSignalsHandler","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals."],["ProcessSignals","An actor implementation of Unix signal handling"],["Signal","Process signal message"],["Subscribe","Subscribe to process signals."]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html new file mode 100644 index 0000000..999bba1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.DefaultSignalsHandler.html @@ -0,0 +1,26 @@ +actix_web::actix::actix::actors::signal::DefaultSignalsHandler - Rust

Struct actix_web::actix::actix::actors::signal::DefaultSignalsHandler[]

pub struct DefaultSignalsHandler;

Default signals handler. This actor sends SystemExit message to System +actor for each of SIGINT, SIGTERM, SIGQUIT signals.

+
+

+ Trait Implementations +

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

+

impl Actor for DefaultSignalsHandler

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html new file mode 100644 index 0000000..30890e5 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.ProcessSignals.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::actors::signal::ProcessSignals - Rust

Struct actix_web::actix::actix::actors::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

+
+

+ Trait Implementations +

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl SystemService for ProcessSignals

Method is called during service initialization.

+

Construct and srtart system service

+

Get actor's address from system registry

+

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

+

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

+

impl Actor for ProcessSignals

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Signal.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Signal.html new file mode 100644 index 0000000..7534af1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Signal.html @@ -0,0 +1,25 @@ +actix_web::actix::actix::actors::signal::Signal - Rust

Struct actix_web::actix::actix::actors::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

+
+

+ Trait Implementations +

+

impl Message for Signal

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Debug for Signal

Formats the value using the given formatter. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system +message to System actor.

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Signal

impl Sync for Signal

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Subscribe.html b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Subscribe.html new file mode 100644 index 0000000..aa346f5 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/actors/signal/struct.Subscribe.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::actors::signal::Subscribe - Rust

Struct actix_web::actix::actix::actors::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

+
+

+ Trait Implementations +

+

impl Message for Subscribe

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/index.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/index.html index bc6bd27..700fb94 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/index.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/index.html @@ -1,52 +1,11 @@ -actix_web::actix::actix::dev - Rust

Module actix_web::actix::actix::dev[]

The actix prelude for library developers

+actix_web::actix::actix::dev - Rust

Module actix_web::actix::actix::dev[]

The actix prelude for library developers

The purpose of this module is to alleviate imports of many common actix traits by adding a glob import to the top of actix heavy modules:

 use actix::dev::*;
-

Modules

+

Structs

- - - - - - - - - - - -
actors -

Helper actors

- -
fut -

Custom Future implementation with Actix support

- -
msgs -

Actix system messages

- -

Structs

- - - - - - - - - @@ -75,23 +34,6 @@ traits by adding a glob import to the top of actix heavy modules:

- - - - - - - - @@ -100,47 +42,6 @@ sending process.

- - - - - - - - - - - - - - - - - - - - @@ -150,47 +51,6 @@ process.

ActorResponse -

Helper type for representing different type of message responses

- -
Arbiter -

Event loop controller

- -
ContextFut
Recipient -

Recipient type allows to send one specific message to an actor.

- -
RecipientRequest -

RecipientRequest is a Future which represents asynchronous message -sending process.

- -
Registry
Request -

Request is a Future which represents asynchronous message sending -process.

- -
Response -

Helper type for representing different type of message responses

- -
SpawnHandle -

Spawned future handle. Could be used for cancelling spawned future.

- -
SyncContext -

Sync actor execution context

- -
System -

System is an actor which manages runtime.

- -
SystemRegistry

Traits

- - - - - - - - - - - - - - - - - - - - @@ -198,22 +58,6 @@ available at some later point in time.

- - - - - - - - @@ -230,36 +74,11 @@ available at some later point in time.

- - - - - - - - -
ActorContext -

Actor execution context

- -
ActorFuture -

Trait for types which are a placeholder of a value that may become -available at some later point in time.

- -
ActorStream -

A stream of values, not all of which may have been produced yet.

- -
ArbiterService -

Trait defines arbiter's service.

- -
AsyncContext -

Asynchronous execution context

- -
AsyncContextParts
Handler -

Message handler

- -
Message -

Message type

- -
MessageResponse
StreamHandler -

Stream handler

- -
ToEnvelope

Converter trait, packs message to suitable envelope

-
WrapStream -

Helper trait that allows conversion of normal stream into ActorStream

- -

Type Definitions

- - - -
ResponseFuture -

A specialized future for async message handler

-
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/dev/sidebar-items.js index f4a3005..a7df54b 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/sidebar-items.js +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"mod":[["actors","Helper actors"],["fut","Custom `Future` implementation with `Actix` support"],["msgs","Actix system messages"]],"struct":[["ActorResponse","Helper type for representing different type of message responses"],["Arbiter","Event loop controller"],["ContextFut",""],["ContextParts",""],["Envelope",""],["Mailbox",""],["Recipient","`Recipient` type allows to send one specific message to an actor."],["RecipientRequest","`RecipientRequest` is a `Future` which represents asynchronous message sending process."],["Registry","Actors registry"],["Request","`Request` is a `Future` which represents asynchronous message sending process."],["Response","Helper type for representing different type of message responses"],["SpawnHandle","Spawned future handle. Could be used for cancelling spawned future."],["SyncContext","Sync actor execution context"],["System","System is an actor which manages runtime."],["SystemRegistry","System wide actors registry"]],"trait":[["ActorContext","Actor execution context"],["ActorFuture","Trait for types which are a placeholder of a value that may become available at some later point in time."],["ActorStream","A stream of values, not all of which may have been produced yet."],["ArbiterService","Trait defines arbiter's service."],["AsyncContext","Asynchronous execution context"],["AsyncContextParts",""],["Handler","Message handler"],["Message","Message type"],["MessageResponse","Trait which defines message response"],["ResponseChannel","Trait defines message response channel"],["StreamHandler","Stream handler"],["ToEnvelope","Converter trait, packs message to suitable envelope"],["WrapStream","Helper trait that allows conversion of normal stream into `ActorStream`"]],"type":[["ResponseFuture","A specialized future for async message handler"]]}); \ No newline at end of file +initSidebarItems({"struct":[["ContextFut",""],["ContextParts",""],["Envelope",""],["Mailbox",""],["Registry","Actors registry"],["SystemRegistry","System wide actors registry"]],"trait":[["AsyncContextParts",""],["MessageResponse","Trait which defines message response"],["ResponseChannel","Trait defines message response channel"],["ToEnvelope","Converter trait, packs message to suitable envelope"]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.ContextParts.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.ContextParts.html index b876f53..4146bc8 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.ContextParts.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.ContextParts.html @@ -1,19 +1,19 @@ -actix_web::actix::actix::dev::ContextParts - Rust

Struct actix_web::actix::actix::dev::ContextParts[]

pub struct ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }
+actix_web::actix::actix::dev::ContextParts - Rust

Struct actix_web::actix::actix::dev::ContextParts[]

pub struct ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }

Methods

-

impl<A> ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Create new ContextParts instance

+

impl<A> ContextParts<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Create new ContextParts instance

Initiate stop process for actor execution

Actor could prevent stopping by returning false from Actor::stopping() method.

Terminate actor execution

Actor execution state

Is context waiting for future completion

-

Handle of the running future

-

Spawn new future to this context.

-

Spawn new future to this context and wait future completion.

+

Handle of the running future

+

Spawn new future to this context.

+

Spawn new future to this context and wait future completion.

During wait period actor does not receive any messages.

-

Cancel previously scheduled future.

+

Cancel previously scheduled future.

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Envelope.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Envelope.html index f70a5ac..c29713a 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Envelope.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Envelope.html @@ -2,7 +2,7 @@

Methods

-

impl<A> Envelope<A> where
    A: Actor

+

impl<A> Envelope<A> where
    A: Actor

Auto Trait Implementations

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Mailbox.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Mailbox.html index 6cac553..3d183d8 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Mailbox.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Mailbox.html @@ -1,12 +1,12 @@ -actix_web::actix::actix::dev::Mailbox - Rust

Struct actix_web::actix::actix::dev::Mailbox[]

pub struct Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }
+actix_web::actix::actix::dev::Mailbox - Rust

Struct actix_web::actix::actix::dev::Mailbox[]

pub struct Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ /* fields omitted */ }

Methods

-

impl<A> Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

+

impl<A> Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Trait Implementations

-

impl<A> Default for Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Returns the "default value" for a type. Read more

+

impl<A> Default for Mailbox<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 

Returns the "default value" for a type. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Registry.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Registry.html index a9e871d..debafc8 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Registry.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/struct.Registry.html @@ -59,10 +59,10 @@ unique per system.

Methods

-

impl Registry

Query registry for specific actor. Returns address of the actor. +

impl Registry

Query registry for specific actor. Returns address of the actor. If actor is not registered, starts new actor and return address of newly created actor.

-

Add new actor to the registry by address, panic if actor is already running

+

Add new actor to the registry by address, panic if actor is already running

Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.AsyncContextParts.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.AsyncContextParts.html index d73b2b9..173e91c 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.AsyncContextParts.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.AsyncContextParts.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::dev::AsyncContextParts - Rust

Trait actix_web::actix::actix::dev::AsyncContextParts[]

pub trait AsyncContextParts<A>: ActorContext + AsyncContext<A> where
    A: Actor<Context = Self>, 
{ +actix_web::actix::actix::dev::AsyncContextParts - Rust

Trait actix_web::actix::actix::dev::AsyncContextParts[]

pub trait AsyncContextParts<A>: ActorContext + AsyncContext<A> where
    A: Actor<Context = Self>, 
{ fn parts(&mut self) -> &mut ContextParts<A>; }

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.MessageResponse.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.MessageResponse.html index 7b58775..a0c7537 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.MessageResponse.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.MessageResponse.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::dev::MessageResponse - Rust

Trait actix_web::actix::actix::dev::MessageResponse[]

pub trait MessageResponse<A, M> where
    A: Actor,
    M: Message
{ +actix_web::actix::actix::dev::MessageResponse - Rust

Trait actix_web::actix::actix::dev::MessageResponse[]

pub trait MessageResponse<A, M> where
    A: Actor,
    M: Message
{ fn handle<R>(self, ctx: &mut <A as Actor>::Context, tx: Option<R>)
    where
        R: ResponseChannel<M>
; }

Trait which defines message response

@@ -10,15 +10,15 @@

Implementations on Foreign Types

-

impl<A, M> MessageResponse<A, M> for usize where
    A: Actor,
    M: Message<Result = usize>, 

impl<A, M> MessageResponse<A, M> for u16 where
    A: Actor,
    M: Message<Result = u16>, 

impl<A, M> MessageResponse<A, M> for u64 where
    A: Actor,
    M: Message<Result = u64>, 

impl<A, M> MessageResponse<A, M> for i32 where
    A: Actor,
    M: Message<Result = i32>, 

impl<A, M> MessageResponse<A, M> for () where
    A: Actor,
    M: Message<Result = ()>, 

impl<A, M> MessageResponse<A, M> for i64 where
    A: Actor,
    M: Message<Result = i64>, 

impl<A, M, I, E> MessageResponse<A, M> for Result<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>, 

impl<A, M> MessageResponse<A, M> for i8 where
    A: Actor,
    M: Message<Result = i8>, 

impl<A, M> MessageResponse<A, M> for bool where
    A: Actor,
    M: Message<Result = bool>, 

impl<A, M> MessageResponse<A, M> for i16 where
    A: Actor,
    M: Message<Result = i16>, 

impl<A, M, I> MessageResponse<A, M> for Option<I> where
    A: Actor,
    I: 'static,
    M: Message<Result = Option<I>>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<Future<Error = E, Item = I> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <M as Message>::Result: Send,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for isize where
    A: Actor,
    M: Message<Result = isize>, 

impl<A, M> MessageResponse<A, M> for f64 where
    A: Actor,
    M: Message<Result = f64>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<ActorFuture<Item = I, Actor = A, Error = E> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for f32 where
    A: Actor,
    M: Message<Result = f32>, 

impl<A, M> MessageResponse<A, M> for String where
    A: Actor,
    M: Message<Result = String>, 

impl<A, M> MessageResponse<A, M> for u8 where
    A: Actor,
    M: Message<Result = u8>, 

impl<A, M> MessageResponse<A, M> for u32 where
    A: Actor,
    M: Message<Result = u32>, 

+

impl<A, M> MessageResponse<A, M> for u32 where
    A: Actor,
    M: Message<Result = u32>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<Future<Error = E, Item = I> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <M as Message>::Result: Send,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for u64 where
    A: Actor,
    M: Message<Result = u64>, 

impl<A, M> MessageResponse<A, M> for i16 where
    A: Actor,
    M: Message<Result = i16>, 

impl<A, M> MessageResponse<A, M> for isize where
    A: Actor,
    M: Message<Result = isize>, 

impl<A, M> MessageResponse<A, M> for i8 where
    A: Actor,
    M: Message<Result = i8>, 

impl<A, M, I> MessageResponse<A, M> for Option<I> where
    A: Actor,
    I: 'static,
    M: Message<Result = Option<I>>, 

impl<A, M> MessageResponse<A, M> for i64 where
    A: Actor,
    M: Message<Result = i64>, 

impl<A, M> MessageResponse<A, M> for i32 where
    A: Actor,
    M: Message<Result = i32>, 

impl<A, M> MessageResponse<A, M> for bool where
    A: Actor,
    M: Message<Result = bool>, 

impl<A, M> MessageResponse<A, M> for u8 where
    A: Actor,
    M: Message<Result = u8>, 

impl<A, M> MessageResponse<A, M> for usize where
    A: Actor,
    M: Message<Result = usize>, 

impl<A, M> MessageResponse<A, M> for () where
    A: Actor,
    M: Message<Result = ()>, 

impl<A, M, I, E> MessageResponse<A, M> for Result<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>, 

impl<A, M, I, E> MessageResponse<A, M> for Box<ActorFuture<Error = E, Item = I, Actor = A> + 'static> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

impl<A, M> MessageResponse<A, M> for f32 where
    A: Actor,
    M: Message<Result = f32>, 

impl<A, M> MessageResponse<A, M> for f64 where
    A: Actor,
    M: Message<Result = f64>, 

impl<A, M> MessageResponse<A, M> for String where
    A: Actor,
    M: Message<Result = String>, 

impl<A, M> MessageResponse<A, M> for u16 where
    A: Actor,
    M: Message<Result = u16>, 

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ResponseChannel.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ResponseChannel.html index 1f8ebb6..7402841 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ResponseChannel.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ResponseChannel.html @@ -1,17 +1,17 @@ -actix_web::actix::actix::dev::ResponseChannel - Rust

Trait actix_web::actix::actix::dev::ResponseChannel[]

pub trait ResponseChannel<M>: 'static where
    M: Message
{ +actix_web::actix::actix::dev::ResponseChannel - Rust

Trait actix_web::actix::actix::dev::ResponseChannel[]

pub trait ResponseChannel<M>: 'static where
    M: Message
{ fn is_canceled(&self) -> bool; -
fn send(self, response: <M as Message>::Result); +
fn send(self, response: <M as Message>::Result); }

Trait defines message response channel

Required Methods

-

+

Implementations on Foreign Types

-

impl<M> ResponseChannel<M> for () where
    M: 'static + Message

impl<M> ResponseChannel<M> for Sender<<M as Message>::Result> where
    M: 'static + Message,
    <M as Message>::Result: Send

+

impl<M> ResponseChannel<M> for () where
    M: 'static + Message

impl<M> ResponseChannel<M> for Sender<<M as Message>::Result> where
    M: 'static + Message,
    <M as Message>::Result: Send

Implementors

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ToEnvelope.html b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ToEnvelope.html index 213543f..88841ef 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ToEnvelope.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/dev/trait.ToEnvelope.html @@ -1,21 +1,21 @@ -actix_web::actix::actix::dev::ToEnvelope - Rust

Trait actix_web::actix::actix::dev::ToEnvelope[]

pub trait ToEnvelope<A, M> where
    A: Actor + Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ - fn pack(msg: M, tx: Option<Sender<<M as Message>::Result>>) -> Envelope<A>; +actix_web::actix::actix::dev::ToEnvelope - Rust

Trait actix_web::actix::actix::dev::ToEnvelope[]

pub trait ToEnvelope<A, M> where
    A: Actor + Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ + fn pack(msg: M, tx: Option<Sender<<M as Message>::Result>>) -> Envelope<A>; }

Converter trait, packs message to suitable envelope

Required Methods

-

Pack message into suitable envelope

+

Pack message into suitable envelope

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/enum.ActorState.html b/static/api/actix-web/stable/actix_web/actix/actix/enum.ActorState.html index 43d31ec..56c9170 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/enum.ActorState.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/enum.ActorState.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::ActorState - Rust

Enum actix_web::actix::actix::ActorState[]

pub enum ActorState {
+actix_web::actix::actix::ActorState - Rust

Enum actix_web::actix::actix::ActorState[]

pub enum ActorState {
     Started,
     Running,
     Stopping,
@@ -20,13 +20,13 @@
                 

Trait Implementations

-

impl Debug for ActorState

Formats the value using the given formatter. Read more

-

impl Copy for ActorState

impl Clone for ActorState

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

impl PartialEq<ActorState> for ActorState

This method tests for self and other values to be equal, and is used by ==. Read more

+

impl PartialEq<ActorState> for ActorState

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-
+

impl Clone for ActorState

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for ActorState

Formats the value using the given formatter. Read more

+

impl Copy for ActorState

Auto Trait Implementations

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/enum.MailboxError.html b/static/api/actix-web/stable/actix_web/actix/actix/enum.MailboxError.html index 8a9e0b2..481cc64 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/enum.MailboxError.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/enum.MailboxError.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::MailboxError - Rust

Enum actix_web::actix::actix::MailboxError[]

pub enum MailboxError {
+actix_web::actix::actix::MailboxError - Rust

Enum actix_web::actix::actix::MailboxError[]

pub enum MailboxError {
     Closed,
     Timeout,
 }

Set of error that can occurred during message delivery process

@@ -8,8 +8,8 @@

Trait Implementations

-

impl Display for MailboxError

Formats the value using the given formatter. Read more

-

impl Debug for MailboxError

Formats the value using the given formatter. Read more

+

impl Debug for MailboxError

Formats the value using the given formatter. Read more

+

impl Display for MailboxError

Formats the value using the given formatter. Read more

impl Fail for MailboxError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

Provides context for this failure. Read more

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/enum.Running.html b/static/api/actix-web/stable/actix_web/actix/actix/enum.Running.html index abb6908..1718723 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/enum.Running.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/enum.Running.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::Running - Rust

Enum actix_web::actix::actix::Running[]

pub enum Running {
+actix_web::actix::actix::Running - Rust

Enum actix_web::actix::actix::Running[]

pub enum Running {
     Stop,
     Continue,
 }

@@ -7,13 +7,13 @@

Trait Implementations

-

impl Debug for Running

Formats the value using the given formatter. Read more

-

impl Copy for Running

impl Clone for Running

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

impl PartialEq<Running> for Running

This method tests for self and other values to be equal, and is used by ==. Read more

+

impl PartialEq<Running> for Running

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-
+

impl Clone for Running

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for Running

Formats the value using the given formatter. Read more

+

impl Copy for Running

Auto Trait Implementations

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/enum.SendError.html b/static/api/actix-web/stable/actix_web/actix/actix/enum.SendError.html index 796bbc3..126d978 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/enum.SendError.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/enum.SendError.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::SendError - Rust

Enum actix_web::actix::actix::SendError[]

pub enum SendError<T> {
+actix_web::actix::actix::SendError - Rust

Enum actix_web::actix::actix::SendError[]

pub enum SendError<T> {
     Full(T),
     Closed(T),
 }

@@ -11,8 +11,8 @@

Trait Implementations

-

impl<T> Display for SendError<T>

Formats the value using the given formatter. Read more

-

impl<T> Debug for SendError<T>

Formats the value using the given formatter. Read more

+

impl<T> Debug for SendError<T>

Formats the value using the given formatter. Read more

+

impl<T> Display for SendError<T>

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/AndThen.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/AndThen.t.html new file mode 100644 index 0000000..e6c39d7 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/AndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/DropErr.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/DropErr.t.html new file mode 100644 index 0000000..872d170 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/DropErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.DropErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/Either.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/Either.t.html new file mode 100644 index 0000000..5e1c4d8 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/Either.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Either.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/Finish.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/Finish.t.html new file mode 100644 index 0000000..ed486e8 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/Finish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Finish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/FromErr.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/FromErr.t.html new file mode 100644 index 0000000..97ef002 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/FromErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FromErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureResult.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureResult.t.html new file mode 100644 index 0000000..2925708 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureResult.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureResult.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureWrap.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureWrap.t.html new file mode 100644 index 0000000..e267ec4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/FutureWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.FutureWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/IntoActorFuture.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/IntoActorFuture.t.html new file mode 100644 index 0000000..211e5cb --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/IntoActorFuture.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to trait.IntoActorFuture.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/Map.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/Map.t.html new file mode 100644 index 0000000..9009faf --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/Map.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Map.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/MapErr.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/MapErr.t.html new file mode 100644 index 0000000..21f7573 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/MapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.MapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamAndThen.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamAndThen.t.html new file mode 100644 index 0000000..bd6e6ce --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamAndThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamAndThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFinish.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFinish.t.html new file mode 100644 index 0000000..da33c3a --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFinish.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFinish.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFold.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFold.t.html new file mode 100644 index 0000000..b938ceb --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamFold.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamFold.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMap.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMap.t.html new file mode 100644 index 0000000..441690b --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMapErr.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMapErr.t.html new file mode 100644 index 0000000..67136f1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamMapErr.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamMapErr.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamThen.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamThen.t.html new file mode 100644 index 0000000..bd638fe --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamThen.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamThen.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamTimeout.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamTimeout.t.html new file mode 100644 index 0000000..30bc1f1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamTimeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamTimeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamWrap.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamWrap.t.html new file mode 100644 index 0000000..59d4cbe --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/StreamWrap.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StreamWrap.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/Then.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/Then.t.html new file mode 100644 index 0000000..1cc8020 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/Then.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Then.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/Timeout.t.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/Timeout.t.html new file mode 100644 index 0000000..d6412e0 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/Timeout.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Timeout.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/enum.Either.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/enum.Either.html new file mode 100644 index 0000000..3700a96 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/enum.Either.html @@ -0,0 +1,40 @@ +actix_web::actix::actix::fut::Either - Rust

Enum actix_web::actix::actix::fut::Either[]

pub enum Either<A, B> {
+    A(A),
+    B(B),
+}

Combines two different futures yielding the same item and error +types into a single type.

+

+ Variants

+

First branch of the type

+

Second branch of the type

+
+

+ Methods +

+

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

+

This method is typically useful when combined with the Future::select2 +combinator.

+
+

+ Trait Implementations +

+

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/err.v.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/err.v.html new file mode 100644 index 0000000..a1c0ed9 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/err.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.err.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.err.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.err.html new file mode 100644 index 0000000..a3723b1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.err.html @@ -0,0 +1,14 @@ +actix_web::actix::actix::fut::err - Rust

Function actix_web::actix::actix::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_err_1 = fut::err::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.ok.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.ok.html new file mode 100644 index 0000000..cb1c1a5 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.ok.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::fut::ok - Rust

Function actix_web::actix::actix::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+

The returned future is similar to result where it will immediately run a +scheduled callback with the provided value.

+

Examples

+
+use actix::fut::*;
+use actix::{Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = ok::<u32, u32, MyActor>(1);
+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.result.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.result.html new file mode 100644 index 0000000..0d2cad2 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.result.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::fut::result - Rust

Function actix_web::actix::actix::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

+

The returned future represents a computation which is finished immediately. +This can be useful with the finished and failed base future types to +convert an immediate value to a future to interoperate elsewhere.

+

Examples

+
+use actix::{fut, Actor, Context};
+
+struct MyActor;
+impl Actor for MyActor {
+    type Context = Context<Self>;
+}
+
+let future_of_1 = fut::result::<u32, u32, MyActor>(Ok(1));
+let future_of_err_2 = fut::result::<u32, u32, MyActor>(Err(2));
+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_future.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_future.html new file mode 100644 index 0000000..84e8a04 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_future.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::fut::wrap_future - Rust

Function actix_web::actix::actix::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_stream.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_stream.html new file mode 100644 index 0000000..4b150af --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/fn.wrap_stream.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::fut::wrap_stream - Rust

Function actix_web::actix::actix::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/index.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/index.html new file mode 100644 index 0000000..8562d44 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/index.html @@ -0,0 +1,215 @@ +actix_web::actix::actix::fut - Rust

Module actix_web::actix::actix::fut[]

Custom Future implementation with Actix support

+

Structs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AndThen +

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+ +
DropErr + +
Finish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
FromErr +

Future for the from_err combinator, changing the error type of a future.

+ +
FutureResult +

A future representing a value that is immediately ready.

+ +
FutureWrap + +
Map +

Future for the map combinator, changing the type of a future.

+ +
MapErr +

Future for the map_err combinator, changing the error type of a future.

+ +
StreamAndThen +

A stream combinator which chains a computation onto values produced by a +stream.

+ +
StreamFinish +

A combinator used to convert stream into a future, future resolves +when stream completes.

+ +
StreamFold +

A future used to collect all the results of a stream into one generic type.

+ +
StreamMap +

A stream combinator which will change the type of a stream from one +type to another.

+ +
StreamMapErr +

A stream combinator which will change the error type of a stream from one +type to another.

+ +
StreamThen +

A stream combinator which chains a computation onto each item produced by a +stream.

+ +
StreamTimeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +
StreamWrap + +
Then +

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+ +
Timeout +

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+ +

Enums

+ + + + +
Either +

Combines two different futures yielding the same item and error +types into a single type.

+ +

Traits

+ + + + +
IntoActorFuture +

Class of types which can be converted into an actor future.

+ +

Functions

+ + + + + + + + + + + + + + + + + + + + +
err +

Creates a "leaf future" from an immediate value of a failed computation.

+ +
ok +

Creates a "leaf future" from an immediate value of a finished and +successful computation.

+ +
result +

Creates a new "leaf future" which will resolve with the given result.

+ +
wrap_future +

Converts normal future into ActorFuture

+ +
wrap_stream +

Converts normal stream into ActorStream

+ +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/ok.v.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/ok.v.html new file mode 100644 index 0000000..dca3201 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/ok.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ok.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/result.v.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/result.v.html new file mode 100644 index 0000000..94765e4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/result.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.result.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/fut/sidebar-items.js new file mode 100644 index 0000000..4cde84b --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Either","Combines two different futures yielding the same item and error types into a single type."]],"fn":[["err","Creates a \"leaf future\" from an immediate value of a failed computation."],["ok","Creates a \"leaf future\" from an immediate value of a finished and successful computation."],["result","Creates a new \"leaf future\" which will resolve with the given result."],["wrap_future","Converts normal future into `ActorFuture`"],["wrap_stream","Converts normal stream into `ActorStream`"]],"struct":[["AndThen","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully."],["DropErr",""],["Finish","A combinator used to convert stream into a future, future resolves when stream completes."],["FromErr","Future for the `from_err` combinator, changing the error type of a future."],["FutureResult","A future representing a value that is immediately ready."],["FutureWrap",""],["Map","Future for the `map` combinator, changing the type of a future."],["MapErr","Future for the `map_err` combinator, changing the error type of a future."],["StreamAndThen","A stream combinator which chains a computation onto values produced by a stream."],["StreamFinish","A combinator used to convert stream into a future, future resolves when stream completes."],["StreamFold","A future used to collect all the results of a stream into one generic type."],["StreamMap","A stream combinator which will change the type of a stream from one type to another."],["StreamMapErr","A stream combinator which will change the error type of a stream from one type to another."],["StreamThen","A stream combinator which chains a computation onto each item produced by a stream."],["StreamTimeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."],["StreamWrap",""],["Then","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome."],["Timeout","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`."]],"trait":[["IntoActorFuture","Class of types which can be converted into an actor future."]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.AndThen.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.AndThen.html new file mode 100644 index 0000000..f2c2c3d --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.AndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::AndThen - Rust

Struct actix_web::actix::actix::fut::AndThen[]

#[must_use = "futures do nothing unless polled"] +
pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of +another future which completes successfully.

+

This is created by the Future::and_then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.DropErr.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.DropErr.html new file mode 100644 index 0000000..5642da6 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.DropErr.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::DropErr - Rust

Struct actix_web::actix::actix::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Finish.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Finish.html new file mode 100644 index 0000000..b84a2ea --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Finish.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::fut::Finish - Rust

Struct actix_web::actix::actix::fut::Finish[]

#[must_use = "streams do nothing unless polled"] +
pub struct Finish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the Stream::finish method.

+
+

+ Methods +

+

impl<S> Finish<S>

+

+ Trait Implementations +

+

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

impl<S> Future for Finish<S> where
    S: Stream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FromErr.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FromErr.html new file mode 100644 index 0000000..13977b4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FromErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::FromErr - Rust

Struct actix_web::actix::actix::fut::FromErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

+

This is created by the Future::from_err method.

+
+

+ Trait Implementations +

+

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureResult.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureResult.html new file mode 100644 index 0000000..754f77f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureResult.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::FutureResult - Rust

Struct actix_web::actix::actix::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"] +
pub struct FutureResult<T, E, A> { /* fields omitted */ }

A future representing a value that is immediately ready.

+

Created by the result function.

+
+

+ Trait Implementations +

+

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

+

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureWrap.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureWrap.html new file mode 100644 index 0000000..ba00a1e --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.FutureWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::FutureWrap - Rust

Struct actix_web::actix::actix::fut::FutureWrap[]

pub struct FutureWrap<F, A> where
    F: Future
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Map.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Map.html new file mode 100644 index 0000000..88a9a97 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Map.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::Map - Rust

Struct actix_web::actix::actix::fut::Map[]

#[must_use = "futures do nothing unless polled"] +
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

+

This is created by the ActorFuture::map method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.MapErr.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.MapErr.html new file mode 100644 index 0000000..5c65948 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.MapErr.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::MapErr - Rust

Struct actix_web::actix::actix::fut::MapErr[]

#[must_use = "futures do nothing unless polled"] +
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

+

This is created by the Future::map_err method.

+
+

+ Trait Implementations +

+

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamAndThen.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamAndThen.html new file mode 100644 index 0000000..3f77d9c --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamAndThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamAndThen - Rust

Struct actix_web::actix::actix::fut::StreamAndThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a +stream.

+

This structure is produced by the ActorStream::and_then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFinish.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFinish.html new file mode 100644 index 0000000..51d70fa --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFinish.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamFinish - Rust

Struct actix_web::actix::actix::fut::StreamFinish[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFinish<S>(_);

A combinator used to convert stream into a future, future resolves +when stream completes.

+

This structure is produced by the ActorStream::finish method.

+
+

+ Trait Implementations +

+

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFold.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFold.html new file mode 100644 index 0000000..1b38a84 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamFold.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::fut::StreamFold - Rust

Struct actix_web::actix::actix::fut::StreamFold[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

+

This future is returned by the ActorStream::fold method.

+
+

+ Trait Implementations +

+

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMap.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMap.html new file mode 100644 index 0000000..d45b453 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMap.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamMap - Rust

Struct actix_web::actix::actix::fut::StreamMap[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMap<S, F> { /* fields omitted */ }

A stream combinator which will change the type of a stream from one +type to another.

+

This is produced by the ActorStream::map method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMapErr.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMapErr.html new file mode 100644 index 0000000..8694fa4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamMapErr.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamMapErr - Rust

Struct actix_web::actix::actix::fut::StreamMapErr[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamMapErr<S, F> { /* fields omitted */ }

A stream combinator which will change the error type of a stream from one +type to another.

+

This is produced by the ActorStream::map_err method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamThen.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamThen.html new file mode 100644 index 0000000..7b5f442 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamThen.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamThen - Rust

Struct actix_web::actix::actix::fut::StreamThen[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a +stream.

+

This structure is produced by the ActorStream::then method.

+
+

+ Trait Implementations +

+

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamTimeout.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamTimeout.html new file mode 100644 index 0000000..abde16d --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamTimeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::StreamTimeout - Rust

Struct actix_web::actix::actix::fut::StreamTimeout[]

#[must_use = "streams do nothing unless polled"] +
pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamWrap.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamWrap.html new file mode 100644 index 0000000..3efd286 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.StreamWrap.html @@ -0,0 +1,23 @@ +actix_web::actix::actix::fut::StreamWrap - Rust

Struct actix_web::actix::actix::fut::StreamWrap[]

pub struct StreamWrap<S, A> where
    S: Stream
{ /* fields omitted */ }
+

+ Trait Implementations +

+

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

+

The type of item this stream will yield on success.

+

+

The type of error this stream may generate.

+

+

The actor within which this stream runs.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Auto Trait Implementations +

+
+

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Then.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Then.html new file mode 100644 index 0000000..6a25f45 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Then.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::Then - Rust

Struct actix_web::actix::actix::fut::Then[]

#[must_use = "futures do nothing unless polled"] +
pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of +another future regardless of its outcome.

+

This is created by the Future::then method.

+
+

+ Trait Implementations +

+

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Timeout.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Timeout.html new file mode 100644 index 0000000..3a9d646 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/struct.Timeout.html @@ -0,0 +1,28 @@ +actix_web::actix::actix::fut::Timeout - Rust

Struct actix_web::actix::actix::fut::Timeout[]

#[must_use = "futures do nothing unless polled"] +
pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +more than timeout.

+

This is created by the ActorFuture::timeout() method.

+
+

+ Trait Implementations +

+

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

+

The actor within which this future runs

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/trait.IntoActorFuture.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/trait.IntoActorFuture.html new file mode 100644 index 0000000..5c0cd8f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/trait.IntoActorFuture.html @@ -0,0 +1,33 @@ +actix_web::actix::actix::fut::IntoActorFuture - Rust

Trait actix_web::actix::actix::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ + type Future: ActorFuture; + type Item; + type Error; + type Actor: Actor; + fn into_future(self) -> Self::Future; +}

Class of types which can be converted into an actor future.

+

This trait is very similar to the IntoIterator trait and is intended to be +used in a very similar fashion.

+
+

+ Associated Types +

+
+

The future that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

Consumes this object and produces a future.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_future.v.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_future.v.html new file mode 100644 index 0000000..12394f1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_future.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_future.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_stream.v.html b/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_stream.v.html new file mode 100644 index 0000000..b39ce83 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/fut/wrap_stream.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.wrap_stream.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/index.html b/static/api/actix-web/stable/actix_web/actix/actix/index.html index b332bf0..8773a18 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/index.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/index.html @@ -1,5 +1,13 @@ actix_web::actix::actix - Rust

Module actix_web::actix::actix[]

Modules

+ + + + @@ -8,14 +16,38 @@ + + + + + + + +
actors +

Helper actors

+ +
dev
fut +

Custom Future implementation with Actix support

+ +
io +
msgs +

Actix system messages

+

Structs

+ + + + @@ -24,6 +56,14 @@ + + + + @@ -47,6 +87,48 @@ + + + + + + + + + + + + + + + + + + + + @@ -61,6 +143,22 @@ + + + + + + + +
ActorResponse +

Helper type for representing different type of message responses

+ +
Addr
Arbiter +

Event loop controller

+ +
Condition
Recipient +

Recipient type allows to send one specific message to an actor.

+ +
RecipientRequest +

RecipientRequest is a Future which represents asynchronous message +sending process.

+ +
Request +

Request is a Future which represents asynchronous message sending +process.

+ +
Response +

Helper type for representing different type of message responses

+ +
SpawnHandle +

Spawned future handle. Could be used for cancelling spawned future.

+ +
Supervisor

Sync arbiter

+
SyncContext +

Sync actor execution context

+ +
System +

System is an actor which manages runtime.

+

Enums

@@ -103,6 +201,47 @@ + + + + + + + + + + + + + + + + + + + + @@ -111,6 +250,30 @@ + + + + + + + + + + + + @@ -133,6 +296,14 @@ + + + +
ActorContext +

Actor execution context

+ +
ActorFuture +

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+ +
ActorStream +

A stream of values, not all of which may have been produced yet.

+ +
ArbiterService +

Trait defines arbiter's service.

+ +
AsyncContext +

Asynchronous execution context

+ +
ContextFutureSpawner
Handler +

Message handler

+ +
Message +

Message type

+ +
StreamHandler +

Stream handler

+ +
Supervised

Helper trait that allows conversion of normal future into ActorFuture

+
WrapStream +

Helper trait that allows conversion of normal stream into ActorStream

+

Type Definitions

@@ -142,5 +313,13 @@ + + + +

A specialized actor future for async message handler

+
ResponseFuture +

A specialized future for async message handler

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/io/struct.FramedWrite.html b/static/api/actix-web/stable/actix_web/actix/actix/io/struct.FramedWrite.html index b5f8015..447ba4d 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/io/struct.FramedWrite.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/io/struct.FramedWrite.html @@ -3,12 +3,12 @@

Methods

-

impl<T, U> FramedWrite<T, U> where
    T: AsyncWrite,
    U: Encoder

Gracefully close sink

+

impl<T, U> FramedWrite<T, U> where
    T: AsyncWrite,
    U: Encoder

Gracefully close sink

Close process is asynchronous.

Check if sink is closed

Set write buffer capacity

Write item

-

SpawnHandle for this writer

+

SpawnHandle for this writer

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/io/struct.Writer.html b/static/api/actix-web/stable/actix_web/actix/actix/io/struct.Writer.html index 59d70ac..3ede784 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/io/struct.Writer.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/io/struct.Writer.html @@ -3,12 +3,12 @@

Methods

-

impl<T, E> Writer<T, E> where
    E: 'static + From<Error>,
    T: AsyncWrite

Gracefully close sink

+

impl<T, E> Writer<T, E> where
    E: 'static + From<Error>,
    T: AsyncWrite

Gracefully close sink

Close process is asynchronous.

Check if sink is closed

Set write buffer capacity

Send item to a sink.

-

SpawnHandle for this writer

+

SpawnHandle for this writer

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/io/trait.WriteHandler.html b/static/api/actix-web/stable/actix_web/actix/actix/io/trait.WriteHandler.html index 3279cf5..07538bf 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/io/trait.WriteHandler.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/io/trait.WriteHandler.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::io::WriteHandler - Rust

Trait actix_web::actix::actix::io::WriteHandler[]

pub trait WriteHandler<E>: Actor + Actor where
    Self::Context: ActorContext
{ +actix_web::actix::actix::io::WriteHandler - Rust

Trait actix_web::actix::actix::io::WriteHandler[]

pub trait WriteHandler<E>: Actor + Actor where
    Self::Context: ActorContext
{ fn error(&mut self, err: E, ctx: &mut Self::Context) -> Running { ... }
fn finished(&mut self, ctx: &mut Self::Context) { ... } }

Write handler

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/Execute.t.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/Execute.t.html new file mode 100644 index 0000000..761750d --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/Execute.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Execute.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/StartActor.t.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/StartActor.t.html new file mode 100644 index 0000000..f45c3dd --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/StartActor.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StartActor.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/StopArbiter.t.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/StopArbiter.t.html new file mode 100644 index 0000000..a7cdee1 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/StopArbiter.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.StopArbiter.html...

+ + + \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/index.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/index.html new file mode 100644 index 0000000..6c12094 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/index.html @@ -0,0 +1,27 @@ +actix_web::actix::actix::msgs - Rust

Module actix_web::actix::actix::msgs[]

Actix system messages

+

Structs

+ + + + + + + + + + + + +
Execute +

Execute function in arbiter's thread

+ +
StartActor +

Start actor in arbiter's thread

+ +
StopArbiter +

Stop arbiter execution

+ +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/msgs/sidebar-items.js new file mode 100644 index 0000000..0cff758 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Execute","Execute function in arbiter's thread"],["StartActor","Start actor in arbiter's thread"],["StopArbiter","Stop arbiter execution"]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.Execute.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.Execute.html new file mode 100644 index 0000000..089dc87 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.Execute.html @@ -0,0 +1,44 @@ +actix_web::actix::actix::msgs::Execute - Rust

Struct actix_web::actix::actix::msgs::Execute[]

pub struct Execute<I = (), E = ()>(_)
where
    E: 'static + Send,
    I: 'static + Send
;

Execute function in arbiter's thread

+

Arbiter` actor handles Execute message.

+

Example

+
+use actix::prelude::*;
+
+struct MyActor {
+    addr: Addr<Arbiter>,
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        self.addr
+            .do_send(actix::msgs::Execute::new(|| -> Result<(), ()> {
+                // do something
+                // ...
+                Ok(())
+            }));
+    }
+}
+fn main() {}
+
+

+ Methods +

+

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

+
+

+ Trait Implementations +

+

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

+

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StartActor.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StartActor.html new file mode 100644 index 0000000..4f0ceb2 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StartActor.html @@ -0,0 +1,20 @@ +actix_web::actix::actix::msgs::StartActor - Rust

Struct actix_web::actix::actix::msgs::StartActor[]

pub struct StartActor<A>(_)
where
    A: Actor
;

Start actor in arbiter's thread

+
+

+ Methods +

+

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

+

+ Trait Implementations +

+

impl<A> Message for StartActor<A> where
    A: Actor

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StopArbiter.html b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StopArbiter.html new file mode 100644 index 0000000..9c9210e --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/msgs/struct.StopArbiter.html @@ -0,0 +1,16 @@ +actix_web::actix::actix::msgs::StopArbiter - Rust

Struct actix_web::actix::actix::msgs::StopArbiter[]

pub struct StopArbiter(pub i32);

Stop arbiter execution

+
+

+ Trait Implementations +

+

impl Message for StopArbiter

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+
+

+ Auto Trait Implementations +

+
+

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/sidebar-items.js b/static/api/actix-web/stable/actix_web/actix/actix/sidebar-items.js index 51e72f0..ebfd3e4 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/sidebar-items.js +++ b/static/api/actix-web/stable/actix_web/actix/actix/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["ActorState","Actor execution state"],["MailboxError","Set of error that can occurred during message delivery process"],["Running",""],["SendError",""]],"mod":[["dev","The `actix` prelude for library developers"],["io",""]],"struct":[["Addr","Address of the actor"],["Condition",""],["Context","Actor execution context"],["MessageResult","Helper type that implements `MessageResponse` trait"],["Supervisor","Actor supervisor"],["SyncArbiter","Sync arbiter"]],"trait":[["Actor","Actors are objects which encapsulate state and behavior."],["ContextFutureSpawner","Helper trait which can spawn future into actor's context"],["Supervised","Actors with ability to restart after failure"],["SystemService","Trait defines system's service."],["WrapFuture","Helper trait that allows conversion of normal future into `ActorFuture`"]],"type":[["ResponseActFuture","A specialized actor future for async message handler"]]}); \ No newline at end of file +initSidebarItems({"enum":[["ActorState","Actor execution state"],["MailboxError","Set of error that can occurred during message delivery process"],["Running",""],["SendError",""]],"mod":[["actors","Helper actors"],["dev","The `actix` prelude for library developers"],["fut","Custom `Future` implementation with `Actix` support"],["io",""],["msgs","Actix system messages"]],"struct":[["ActorResponse","Helper type for representing different type of message responses"],["Addr","Address of the actor"],["Arbiter","Event loop controller"],["Condition",""],["Context","Actor execution context"],["MessageResult","Helper type that implements `MessageResponse` trait"],["Recipient","`Recipient` type allows to send one specific message to an actor."],["RecipientRequest","`RecipientRequest` is a `Future` which represents asynchronous message sending process."],["Request","`Request` is a `Future` which represents asynchronous message sending process."],["Response","Helper type for representing different type of message responses"],["SpawnHandle","Spawned future handle. Could be used for cancelling spawned future."],["Supervisor","Actor supervisor"],["SyncArbiter","Sync arbiter"],["SyncContext","Sync actor execution context"],["System","System is an actor which manages runtime."]],"trait":[["Actor","Actors are objects which encapsulate state and behavior."],["ActorContext","Actor execution context"],["ActorFuture","Trait for types which are a placeholder of a value that may become available at some later point in time."],["ActorStream","A stream of values, not all of which may have been produced yet."],["ArbiterService","Trait defines arbiter's service."],["AsyncContext","Asynchronous execution context"],["ContextFutureSpawner","Helper trait which can spawn future into actor's context"],["Handler","Message handler"],["Message","Message type"],["StreamHandler","Stream handler"],["Supervised","Actors with ability to restart after failure"],["SystemService","Trait defines system's service."],["WrapFuture","Helper trait that allows conversion of normal future into `ActorFuture`"],["WrapStream","Helper trait that allows conversion of normal stream into `ActorStream`"]],"type":[["ResponseActFuture","A specialized actor future for async message handler"],["ResponseFuture","A specialized future for async message handler"]]}); \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.ActorResponse.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.ActorResponse.html new file mode 100644 index 0000000..99fe17f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.ActorResponse.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::ActorResponse - Rust

Struct actix_web::actix::actix::ActorResponse[]

pub struct ActorResponse<A, I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<A, I, E> ActorResponse<A, I, E> where
    A: Actor

Create response

+

Create async response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for ActorResponse<A, I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<A, I, E> !Send for ActorResponse<A, I, E>

impl<A, I, E> !Sync for ActorResponse<A, I, E>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Addr.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Addr.html index 7d465fe..834d08f 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/struct.Addr.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Addr.html @@ -1,31 +1,31 @@ -actix_web::actix::actix::Addr - Rust

Struct actix_web::actix::actix::Addr[]

pub struct Addr<A> where
    A: Actor
{ /* fields omitted */ }

Address of the actor

+actix_web::actix::actix::Addr - Rust

Struct actix_web::actix::actix::Addr[]

pub struct Addr<A> where
    A: Actor
{ /* fields omitted */ }

Address of the actor

Methods

impl<A> Addr<A> where
    A: Actor

Indicates if actor is still alive

-

Send message unconditionally

+

Send message unconditionally

This method ignores actor's mailbox capacity, it silently fails if mailbox is closed.

-

Try send message

+

Try send message

This method fails if actor's mailbox is full or closed. This method register current task in receivers queue.

-

Send asynchronous message and wait for response.

+

Send asynchronous message and wait for response.

Communication channel to the actor is bounded. if returned Future object get dropped, message cancels.

-

Get Recipient for specific message type

+

Get Recipient for specific message type

Trait Implementations

-

impl<A> Clone for Addr<A> where
    A: Actor

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

impl<A> Eq for Addr<A> where
    A: Actor

impl<A, M, B> MessageResponse<A, M> for Addr<B> where
    A: Actor,
    B: Actor<Context = Context<B>>,
    M: Message<Result = Addr<B>>, 

impl<A> PartialEq<Addr<A>> for Addr<A> where
    A: Actor

This method tests for self and other values to be equal, and is used by ==. Read more

+

impl<A> Eq for Addr<A> where
    A: Actor

impl<A> PartialEq<Addr<A>> for Addr<A> where
    A: Actor

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<A> Hash for Addr<A> where
    A: Actor

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

-
+

impl<A> Clone for Addr<A> where
    A: Actor

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl<A, M, B> MessageResponse<A, M> for Addr<B> where
    A: Actor,
    B: Actor<Context = Context<B>>,
    M: Message<Result = Addr<B>>, 

Auto Trait Implementations

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Arbiter.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Arbiter.html new file mode 100644 index 0000000..b2cfa1f --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Arbiter.html @@ -0,0 +1,53 @@ +actix_web::actix::actix::Arbiter - Rust

Struct actix_web::actix::actix::Arbiter[]

pub struct Arbiter { /* fields omitted */ }

Event loop controller

+

Arbiter controls event loop in it's thread. Each arbiter runs in separate +thread. Arbiter provides several api for event loop access. Each arbiter +can belongs to specific System actor.

+

By default, a panic in an Arbiter does not stop the rest of the System, +unless the panic is in the System actor. Users of Arbiter can opt into +shutting down the system on panic by using Arbiter::builder() and enabling +stop_system_on_panic.

+
+

+ Methods +

+

impl Arbiter

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Spawn new thread and run event loop in spawned thread. +Returns address of newly created arbiter. +Does not stop the system on panic.

+

Returns current arbiter's name

+

Returns current arbiter's address

+

This function returns arbiter's registry,

+

Executes a future on the current thread.

+

Executes a future on the current thread.

+

Start new arbiter and then start actor in created arbiter. +Returns Addr<Syn, A> of created actor.

+
+

+ Trait Implementations +

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Handler<StopArbiter> for Arbiter

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

The type of value that this handle will return

+

Method is called for every message received by this Actor

+

impl Drop for Arbiter

Executes the destructor for this type. Read more

+

impl Actor for Arbiter

+

Actor execution context type

+

Method is called when actor get polled first time.

+

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

+

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

+

Start new asynchronous actor, returns address of newly created actor. Read more

+

Start new asynchronous actor, returns address of newly created actor.

+

Use create method, if you need Context object during actor initialization. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for Arbiter

impl Sync for Arbiter

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Context.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Context.html index 3746a3e..08dbf68 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/struct.Context.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Context.html @@ -3,7 +3,7 @@

Methods

-

impl<A> Context<A> where
    A: Actor<Context = Context<A>>, 

Handle of the running future

+

impl<A> Context<A> where
    A: Actor<Context = Context<A>>, 

Handle of the running future

SpawnHandle is the handle returned by AsyncContext::spawn() method.

Set mailbox capacity

By default mailbox capacity is 16 messages.

@@ -11,21 +11,21 @@

Trait Implementations

-

impl<A> ActorContext for Context<A> where
    A: Actor<Context = Context<A>>, 

Immediately stop processing incoming messages and switch to a stopping state Read more

-

Terminate actor execution

-

Actor execution state

-

impl<A> AsyncContextParts<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

impl<A> AsyncContext<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

-

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

-

Check if context is paused (waiting for future completion or stopping)

-

Cancel future. handle is a value returned by spawn method.

-

Return Address of the context

-

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

-

This method is similar to add_stream but it skips stream errors. Read more

-

Send message msg to self.

-

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

-

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

-

Spawns job to execute closure with specified interval

-

impl<A, M> ToEnvelope<A, M> for Context<A> where
    A: Actor<Context = Context<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

+

impl<A> ActorContext for Context<A> where
    A: Actor<Context = Context<A>>, 

Immediately stop processing incoming messages and switch to a stopping state Read more

+

Terminate actor execution

+

Actor execution state

+

impl<A> AsyncContextParts<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

impl<A> AsyncContext<A> for Context<A> where
    A: Actor<Context = Context<A>>, 

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

+

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

+

Check if context is paused (waiting for future completion or stopping)

+

Cancel future. handle is a value returned by spawn method.

+

Return Address of the context

+

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

+

This method is similar to add_stream but it skips stream errors. Read more

+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

+

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

+

Spawns job to execute closure with specified interval

+

impl<A, M> ToEnvelope<A, M> for Context<A> where
    A: Actor<Context = Context<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.MessageResult.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.MessageResult.html index a1e7c63..2762f20 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/struct.MessageResult.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.MessageResult.html @@ -1,11 +1,11 @@ -actix_web::actix::actix::MessageResult - Rust

Struct actix_web::actix::actix::MessageResult[]

pub struct MessageResult<M>(pub <M as Message>::Result)
where
    M: Message
;

Helper type that implements MessageResponse trait

+actix_web::actix::actix::MessageResult - Rust

Struct actix_web::actix::actix::MessageResult[]

pub struct MessageResult<M>(pub <M as Message>::Result)
where
    M: Message
;

Helper type that implements MessageResponse trait

Trait Implementations

-

impl<A, M> MessageResponse<A, M> for MessageResult<M> where
    A: Actor,
    M: Message

+

impl<A, M> MessageResponse<A, M> for MessageResult<M> where
    A: Actor,
    M: Message

Auto Trait Implementations

-

impl<M> Send for MessageResult<M> where
    <M as Message>::Result: Send

impl<M> Sync for MessageResult<M> where
    <M as Message>::Result: Sync

\ No newline at end of file +

impl<M> Send for MessageResult<M> where
    <M as Message>::Result: Send

impl<M> Sync for MessageResult<M> where
    <M as Message>::Result: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Recipient.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Recipient.html new file mode 100644 index 0000000..c76f5a9 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Recipient.html @@ -0,0 +1,32 @@ +actix_web::actix::actix::Recipient - Rust

Struct actix_web::actix::actix::Recipient[]

pub struct Recipient<M> where
    M: Message + Message + Send,
    <M as Message>::Result: Send
{ /* fields omitted */ }

Recipient type allows to send one specific message to an actor.

+

You can get recipient with Addr<_, _>::recipient() method. +It is possible to use Clone::clone() method to get cloned recipient.

+
+

+ Methods +

+

impl<M> Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Send message

+

Deliver message even if recipient's mailbox is full

+

Try send message

+

This method fails if actor's mailbox is full or closed. This method +register current task in receivers queue.

+

Send message and asynchronously wait for response.

+

Communication channel to the actor is bounded. if returned Request +object get dropped, message cancels.

+
+

+ Trait Implementations +

+

impl<M> Eq for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

impl<M> PartialEq<Recipient<M>> for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<M> Hash for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl<M> Clone for Recipient<M> where
    M: Message + Send,
    <M as Message>::Result: Send

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for Recipient<M>

impl<M> !Sync for Recipient<M>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.RecipientRequest.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.RecipientRequest.html new file mode 100644 index 0000000..0e6c5ec --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.RecipientRequest.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::RecipientRequest - Rust

Struct actix_web::actix::actix::RecipientRequest[]

#[must_use = "future do nothing unless polled"] +
pub struct RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send
{ /* fields omitted */ }

RecipientRequest is a Future which represents asynchronous message +sending process.

+
+

+ Methods +

+

impl<M> RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<M> Future for RecipientRequest<M> where
    M: Message + Send + 'static,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<M> Send for RecipientRequest<M>

impl<M> !Sync for RecipientRequest<M>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Request.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Request.html new file mode 100644 index 0000000..c2256cd --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Request.html @@ -0,0 +1,43 @@ +actix_web::actix::actix::Request - Rust

Struct actix_web::actix::actix::Request[]

#[must_use = "You have to wait on request otherwise Message wont be delivered"] +
pub struct Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 
{ /* fields omitted */ }

Request is a Future which represents asynchronous message sending +process.

+
+

+ Methods +

+

impl<A, M> Request<A, M> where
    A: Handler<M>,
    M: Message,
    <A as Actor>::Context: ToEnvelope<A, M>, 

Set message delivery timeout

+
+

+ Trait Implementations +

+

impl<A, M> Future for Request<A, M> where
    A: Handler<M>,
    M: Message + Send,
    <A as Actor>::Context: ToEnvelope<A, M>,
    <M as Message>::Result: Send

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

Query this future to see if its value has become available, registering interest if it is not. Read more

+

Block the current thread until this future is resolved. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future. Read more

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully. Read more

+

Execute another future if this one resolves with an error. Read more

+

Waits for either one of two futures to complete. Read more

+

Waits for either one of two differently-typed futures to complete. Read more

+

Joins the result of two futures, waiting for them both to complete. Read more

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Same as join, but with more futures.

+

Convert this future into a single element stream. Read more

+

Flatten the execution of this future when the successful result of this future is itself another future. Read more

+

Flatten the execution of this future when the successful result of this future is a stream. Read more

+

Fuse a future such that poll will never again be called once it has completed. Read more

+

Do something with the item of a future, passing it on. Read more

+

Catches unwinding panics while polling the future. Read more

+

Create a cloneable handle to this future where all handles will resolve to the same result. Read more

+
+

+ Auto Trait Implementations +

+
+

impl<A, M> Send for Request<A, M> where
    A: Send,
    M: Send,
    <M as Message>::Result: Send

impl<A, M> Sync for Request<A, M> where
    A: Sync,
    M: Sync,
    <M as Message>::Result: Send

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Response.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Response.html new file mode 100644 index 0000000..a6f1b4c --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Response.html @@ -0,0 +1,17 @@ +actix_web::actix::actix::Response - Rust

Struct actix_web::actix::actix::Response[]

pub struct Response<I, E> { /* fields omitted */ }

Helper type for representing different type of message responses

+
+

+ Methods +

+

impl<I, E> Response<I, E>

Create async response

+

Create response

+
+

+ Trait Implementations +

+

impl<A, M, I, E> MessageResponse<A, M> for Response<I, E> where
    A: Actor,
    E: 'static,
    I: 'static,
    M: Message<Result = Result<I, E>>,
    <A as Actor>::Context: AsyncContext<A>, 

+

+ Auto Trait Implementations +

+
+

impl<I, E> !Send for Response<I, E>

impl<I, E> !Sync for Response<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.SpawnHandle.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.SpawnHandle.html new file mode 100644 index 0000000..d721aa4 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.SpawnHandle.html @@ -0,0 +1,24 @@ +actix_web::actix::actix::SpawnHandle - Rust

Struct actix_web::actix::actix::SpawnHandle[]

pub struct SpawnHandle(_);

Spawned future handle. Could be used for cancelling spawned future.

+
+

+ Methods +

+

impl SpawnHandle

Get next handle

+
+

+ Trait Implementations +

+

impl Eq for SpawnHandle

impl PartialEq<SpawnHandle> for SpawnHandle

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Hash for SpawnHandle

Feeds this value into the given [Hasher]. Read more

+

Feeds a slice of this type into the given [Hasher]. Read more

+

impl Clone for SpawnHandle

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SpawnHandle

Formats the value using the given formatter. Read more

+

impl Default for SpawnHandle

Returns the "default value" for a type. Read more

+

impl Copy for SpawnHandle

+

+ Auto Trait Implementations +

+
+

impl Send for SpawnHandle

impl Sync for SpawnHandle

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.Supervisor.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.Supervisor.html index 27b5a64..7135c82 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/struct.Supervisor.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.Supervisor.html @@ -59,7 +59,7 @@ recovered. Sender would receive Err(Cancelled) error in this situat // Get `Addr` of a MyActor actor let addr = actix::Supervisor::start(|_| MyActor);

-

Start new supervised actor in arbiter's thread.

+

Start new supervised actor in arbiter's thread.

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncArbiter.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncArbiter.html index 90ee6e3..ab8d599 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncArbiter.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncArbiter.html @@ -1,15 +1,15 @@ -actix_web::actix::actix::SyncArbiter - Rust

Struct actix_web::actix::actix::SyncArbiter[]

pub struct SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync arbiter

+actix_web::actix::actix::SyncArbiter - Rust

Struct actix_web::actix::actix::SyncArbiter[]

pub struct SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync arbiter

Methods

-

impl<A> SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

Start new sync arbiter with specified number of worker threads. +

impl<A> SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

Start new sync arbiter with specified number of worker threads. Returns address of the started actor.

Trait Implementations

-

impl<A> Actor for SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

+

impl<A> Actor for SyncArbiter<A> where
    A: Actor<Context = SyncContext<A>>, 

Actor execution context type

Method is called when actor get polled first time.

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncContext.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncContext.html new file mode 100644 index 0000000..e0f5c85 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.SyncContext.html @@ -0,0 +1,15 @@ +actix_web::actix::actix::SyncContext - Rust

Struct actix_web::actix::actix::SyncContext[]

pub struct SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 
{ /* fields omitted */ }

Sync actor execution context

+
+

+ Trait Implementations +

+

impl<A> ActorContext for SyncContext<A> where
    A: Actor<Context = SyncContext<A>>, 

Stop current actor. SyncContext creates and starts new actor.

+

Terminate actor execution. SyncContext creates and starts new actor.

+

Actor execution state

+

impl<A, M> ToEnvelope<A, M> for SyncContext<A> where
    A: Actor<Context = SyncContext<A>> + Handler<M>,
    M: Message + Send + 'static,
    <M as Message>::Result: Send

Pack message into suitable envelope

+
+

+ Auto Trait Implementations +

+
+

impl<A> !Send for SyncContext<A>

impl<A> !Sync for SyncContext<A>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/struct.System.html b/static/api/actix-web/stable/actix_web/actix/actix/struct.System.html new file mode 100644 index 0000000..99f2291 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/struct.System.html @@ -0,0 +1,65 @@ +actix_web::actix::actix::System - Rust

Struct actix_web::actix::actix::System[]

pub struct System { /* fields omitted */ }

System is an actor which manages runtime.

+

Before starting any actix's actors, System actor has to be created and +started with System::run() call. This method creates new Arbiter in +current thread and starts System actor.

+

Examples

+
+extern crate actix;
+
+use actix::prelude::*;
+use std::time::Duration;
+
+struct Timer {
+    dur: Duration,
+}
+
+impl Actor for Timer {
+    type Context = Context<Self>;
+
+    // stop system after `self.dur` seconds
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        ctx.run_later(self.dur, |act, ctx| {
+            // Stop current running system.
+            System::current().stop();
+        });
+    }
+}
+
+fn main() {
+    // initialize system and run it.
+    // This function blocks current thread
+    let code = System::run(|| {
+        // Start `Timer` actor
+        Timer {
+            dur: Duration::new(0, 1),
+        }.start();
+    });
+
+    std::process::exit(code);
+}
+
+

+ Methods +

+

impl System

Create new system.

+

This method panics if it can not create tokio runtime

+

Get current running system.

+

Execute function with system reference.

+

Stop the system

+

System arbiter

+

Get current system registry.

+

This function will start tokio runtime and will finish once the +System::stop() message get called. +Function f get called within tokio runtime context.

+
+

+ Trait Implementations +

+

impl Clone for System

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+
+

+ Auto Trait Implementations +

+
+

impl Send for System

impl Sync for System

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.Actor.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.Actor.html index 634f9a2..5796266 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/trait.Actor.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.Actor.html @@ -1,5 +1,5 @@ actix_web::actix::actix::Actor - Rust

Trait actix_web::actix::actix::Actor[]

pub trait Actor: 'static {
-    type Context: ActorContext;
+    type Context: ActorContext;
     fn started(&mut self, ctx: &mut Self::Context) { ... }
 
fn stopping(&mut self, ctx: &mut Self::Context) -> Running { ... }
fn stopped(&mut self, ctx: &mut Self::Context) { ... } @@ -52,7 +52,7 @@ point actor get dropped.

Associated Types

-

Actor execution context type

+

Actor execution context type

Provided Methods @@ -109,11 +109,11 @@ initialization.

Implementors

Trait actix_web::actix::actix::ActorContext[]

pub trait ActorContext {
+    fn stop(&mut self);
+
fn terminate(&mut self); +
fn state(&self) -> ActorState; +}

Actor execution context

+

Each actor runs within specific execution context. Actor::Context defines +context. Execution context defines type of execution, actor communication +channels (message handling).

+
+

+ Required Methods +

+
+

Immediately stop processing incoming messages and switch to a +stopping state

+

Terminate actor execution

+

Actor execution state

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorFuture.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorFuture.html new file mode 100644 index 0000000..c7d7486 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorFuture.html @@ -0,0 +1,81 @@ +actix_web::actix::actix::ActorFuture - Rust

Trait actix_web::actix::actix::ActorFuture[]

pub trait ActorFuture {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; + + fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn drop_err(self) -> DropErr<Self> { ... } +
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, + { ... } +
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } +}

Trait for types which are a placeholder of a value that may become +available at some later point in time.

+

This is similar to futures::Future trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of value that this future will resolved with if it is +successful.

+

The type of error that this future will resolve with if it fails in a +normal fashion.

+

The actor within which this future runs

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Map this future's result to a different type, returning a new future of +the resulting type.

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for +this future's Error, returning a new future.

+

Chain on a computation for when a future finished, passing the result of +the future to the provided closure f.

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain.

+

err value get returned as a timeout error.

+
+

+ Implementations on Foreign Types +

+

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

+

+

+

+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorStream.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorStream.html new file mode 100644 index 0000000..b442bc3 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.ActorStream.html @@ -0,0 +1,64 @@ +actix_web::actix::actix::ActorStream - Rust

Trait actix_web::actix::actix::ActorStream[]

pub trait ActorStream {
+    type Item;
+    type Error;
+    type Actor: Actor;
+    fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; + + fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + { ... } +
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, + { ... } +
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, + { ... } +
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, + { ... } +
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, + { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, + { ... } +
fn finish(self) -> StreamFinish<Self> { ... } +}

A stream of values, not all of which may have been produced yet.

+

This is similar to futures::Stream trait, except it works with Actor

+
+

+ Associated Types +

+
+

The type of item this stream will yield on success.

+

The type of error this stream may generate.

+

The actor within which this stream runs.

+
+

+ Required Methods +

+
+

+

+ Provided Methods +

+
+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting +item to the provided closure f.

+

Chain on a computation for when a value is ready, passing the successful +results to the provided closure f.

+

Execute an accumulating computation over a stream, collecting all the +values into one final result.

+

Add timeout to stream.

+

err value get returned as a timeout error.

+

Converts a stream to a future that resolves when stream finishes.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.ArbiterService.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.ArbiterService.html new file mode 100644 index 0000000..e303b94 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.ArbiterService.html @@ -0,0 +1,21 @@ +actix_web::actix::actix::ArbiterService - Rust

Trait actix_web::actix::actix::ArbiterService[]

pub trait ArbiterService: Actor<Context = Context<Self>> + Supervised + Default {
+    fn start_service() -> Addr<Self> { ... }
+
fn service_started(&mut self, ctx: &mut Context<Self>) { ... } +
fn from_registry() -> Addr<Self> { ... } +}

Trait defines arbiter's service.

+
+

+ Provided Methods +

+
+

Construct and srtart arbiter service

+

Method is called during service initialization.

+

Get actor's address from arbiter registry

+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.AsyncContext.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.AsyncContext.html new file mode 100644 index 0000000..ee708fd --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.AsyncContext.html @@ -0,0 +1,115 @@ +actix_web::actix::actix::AsyncContext - Rust

Trait actix_web::actix::actix::AsyncContext[]

pub trait AsyncContext<A>: ActorContext where
    A: Actor<Context = Self>, 
{ + fn address(&self) -> Addr<A>; +
fn spawn<F>(&mut self, fut: F) -> SpawnHandle
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn wait<F>(&mut self, fut: F)
    where
        F: ActorFuture<Item = (), Error = (), Actor = A> + 'static
; +
fn waiting(&self) -> bool; +
fn cancel_future(&mut self, handle: SpawnHandle) -> bool; + + fn add_stream<S>(&mut self, fut: S) -> SpawnHandle
    where
        A: StreamHandler<<S as Stream>::Item, <S as Stream>::Error>,
        S: Stream + 'static
, + { ... } +
fn add_message_stream<S>(&mut self, fut: S)
    where
        A: Handler<<S as Stream>::Item>,
        S: Stream<Error = ()> + 'static,
        <S as Stream>::Item: Message
, + { ... } +
fn notify<M>(&mut self, msg: M)
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn notify_later<M>(&mut self, msg: M, after: Duration) -> SpawnHandle
    where
        A: Handler<M>,
        M: Message + 'static
, + { ... } +
fn run_later<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnOnce(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +
fn run_interval<F>(&mut self, dur: Duration, f: F) -> SpawnHandle
    where
        F: FnMut(&mut A, &mut <A as Actor>::Context) + 'static
, + { ... } +}

Asynchronous execution context

+
+

+ Required Methods +

+
+

Return Address of the context

+

Spawn async future into context. Returns handle of the item, +could be used for cancelling execution.

+

All futures cancel during actor stopping stage.

+

Spawn future into the context. Stop processing any of incoming events +until this future resolves.

+

Check if context is paused (waiting for future completion or stopping)

+

Cancel future. handle is a value returned by spawn method.

+
+

+ Provided Methods +

+
+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       ctx.add_stream(once::<Ping, io::Error>(Ok(Ping)));
+   }
+}
+

This method is similar to add_stream but it skips stream errors.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl Handler<Ping> for MyActor {
+    type Result = ();
+
+    fn handle(&mut self, msg: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+}
+
+impl Actor for MyActor {
+    type Context = Context<Self>;
+
+    fn started(&mut self, ctx: &mut Context<Self>) {
+        // add messages stream
+        ctx.add_message_stream(once(Ok(Ping)));
+    }
+}
+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns +spawn handle which could be used for cancellation. Notification get +cancelled if context's stop method get called.

+

Execute closure after specified period of time within same Actor and +Context. Execution get cancelled if context's stop method get +called.

+

Spawns job to execute closure with specified interval

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.ContextFutureSpawner.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.ContextFutureSpawner.html index 3fd53b5..c069ec3 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/trait.ContextFutureSpawner.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.ContextFutureSpawner.html @@ -1,4 +1,4 @@ -actix_web::actix::actix::ContextFutureSpawner - Rust

Trait actix_web::actix::actix::ContextFutureSpawner[]

pub trait ContextFutureSpawner<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ +actix_web::actix::actix::ContextFutureSpawner - Rust

Trait actix_web::actix::actix::ContextFutureSpawner[]

pub trait ContextFutureSpawner<A> where
    A: Actor,
    <A as Actor>::Context: AsyncContext<A>, 
{ fn spawn(self, ctx: &mut <A as Actor>::Context);
fn wait(self, ctx: &mut <A as Actor>::Context); }

Helper trait which can spawn future into actor's context

@@ -15,7 +15,7 @@ until this future resolves.

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.Handler.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.Handler.html new file mode 100644 index 0000000..fe448c0 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.Handler.html @@ -0,0 +1,42 @@ +actix_web::actix::actix::Handler - Rust

Trait actix_web::actix::actix::Handler[]

pub trait Handler<M>: Actor + Actor where
    M: Message
{ + type Result: MessageResponse<Self, M>; + fn handle(&mut self, msg: M, ctx: &mut Self::Context) -> Self::Result; +}

Message handler

+

Handler implementation is a general way how to handle +incoming messages, streams, futures.

+

M is a message which can be handled by the actor.

+
+

+ Associated Types +

+
+

The type of value that this handle will return

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.Message.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.Message.html new file mode 100644 index 0000000..20cb430 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.Message.html @@ -0,0 +1,35 @@ +actix_web::actix::actix::Message - Rust

Trait actix_web::actix::actix::Message[]

pub trait Message {
+    type Result: 'static;
+}

Message type

+
+

+ Associated Types +

+
+

The type of value that this message will resolved with if it is +successful.

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.StreamHandler.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.StreamHandler.html new file mode 100644 index 0000000..63e3997 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.StreamHandler.html @@ -0,0 +1,74 @@ +actix_web::actix::actix::StreamHandler - Rust

Trait actix_web::actix::actix::StreamHandler[]

pub trait StreamHandler<I, E>: Actor + Actor {
+    fn handle(&mut self, item: I, ctx: &mut Self::Context);
+
+    fn started(&mut self, ctx: &mut Self::Context) { ... }
+
fn error(&mut self, err: E, ctx: &mut Self::Context) -> Running { ... } +
fn finished(&mut self, ctx: &mut Self::Context) { ... } +
fn add_stream<S>(fut: S, ctx: &mut Self::Context) -> SpawnHandle
    where
        E: 'static,
        I: 'static,
        S: Stream<Item = I, Error = E> + 'static,
        Self::Context: AsyncContext<Self>
, + { ... } +}

Stream handler

+

This is helper trait that allows to handle Stream in +a similar way as normal actor messages. +When stream resolves to a next item, handle() method of this trait +get called. If stream produces error, error() method get called. +Depends on result of the error() method, actor could continue to +process stream items or stop stream processing. +When stream completes, finished() method get called. By default +finished() method stops actor execution.

+
+

+ Required Methods +

+
+

Method is called for every message received by this Actor

+
+

+ Provided Methods +

+
+

Method is called when stream get polled first time.

+

Method is called when stream emits error.

+

If this method returns ErrorAction::Continue stream processing +continues otherwise stream processing stops. Default method +implementation returns ErrorAction::Stop

+

Method is called when stream finishes.

+

By default this method stops actor execution.

+

This method register stream to an actor context and +allows to handle Stream in similar way as normal actor messages.

+ +
+use actix::prelude::*;
+use futures::stream::once;
+
+#[derive(Message)]
+struct Ping;
+
+struct MyActor;
+
+impl StreamHandler<Ping, io::Error> for MyActor {
+
+    fn handle(&mut self, item: Ping, ctx: &mut Context<MyActor>) {
+        println!("PING");
+    }
+
+    fn finished(&mut self, ctx: &mut Self::Context) {
+        println!("finished");
+    }
+}
+
+impl Actor for MyActor {
+   type Context = Context<Self>;
+
+   fn started(&mut self, ctx: &mut Context<Self>) {
+       // add stream
+       Self::add_stream(once::<Ping, io::Error>(Ok(Ping)), ctx);
+   }
+}
+
+

+ Implementors +

+
    +
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.Supervised.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.Supervised.html index 7c033b7..61c58f2 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/trait.Supervised.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.Supervised.html @@ -19,8 +19,8 @@ starts.

Implementors

Trait actix_web::actix::actix::SystemService[]

pub trait SystemService: Actor<Context = Context<Self>> + Supervised + Default {
-    fn start_service(sys: &Addr<Arbiter>) -> Addr<Self> { ... }
+    fn start_service(sys: &Addr<Arbiter>) -> Addr<Self> { ... }
 
fn service_started(&mut self, ctx: &mut Context<Self>) { ... }
fn from_registry() -> Addr<Self> { ... } }

Trait defines system's service.

@@ -8,7 +8,7 @@ Provided Methods
-

Construct and srtart system service

+

Construct and srtart system service

Method is called during service initialization.

Get actor's address from system registry

@@ -16,8 +16,8 @@ Implementors

Trait actix_web::actix::actix::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ - type Future: ActorFuture; +actix_web::actix::actix::WrapFuture - Rust

Trait actix_web::actix::actix::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ + type Future: ActorFuture; type Item; type Error; fn into_actor(self, a: &A) -> Self::Future; @@ -9,7 +9,7 @@ Associated Types
-

The future that this type can be converted into.

+

The future that this type can be converted into.

The item that the future may resolve with.

The error that the future may resolve with.

@@ -23,7 +23,7 @@ Implementors
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/trait.WrapStream.html b/static/api/actix-web/stable/actix_web/actix/actix/trait.WrapStream.html new file mode 100644 index 0000000..4fdbd23 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/trait.WrapStream.html @@ -0,0 +1,29 @@ +actix_web::actix::actix::WrapStream - Rust

Trait actix_web::actix::actix::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ + type Stream: ActorStream; + type Item; + type Error; + fn into_actor(self, a: &A) -> Self::Stream; +}

Helper trait that allows conversion of normal stream into ActorStream

+
+

+ Associated Types +

+
+

The stream that this type can be converted into.

+

The item that the future may resolve with.

+

The error that the future may resolve with.

+
+

+ Required Methods +

+
+

Convert normal stream to a ActorStream

+
+

+ Implementors +

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseActFuture.html b/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseActFuture.html index a364462..45b03d8 100644 --- a/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseActFuture.html +++ b/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseActFuture.html @@ -1,2 +1,2 @@ -actix_web::actix::actix::ResponseActFuture - Rust

Type Definition actix_web::actix::actix::ResponseActFuture[]

type ResponseActFuture<A, I, E> = Box<ActorFuture<Item = I, Actor = A, Error = E> + 'static>;

A specialized actor future for async message handler

+actix_web::actix::actix::ResponseActFuture - Rust

Type Definition actix_web::actix::actix::ResponseActFuture[]

type ResponseActFuture<A, I, E> = Box<ActorFuture<Error = E, Item = I, Actor = A> + 'static>;

A specialized actor future for async message handler

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseFuture.html b/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseFuture.html new file mode 100644 index 0000000..a9e33c9 --- /dev/null +++ b/static/api/actix-web/stable/actix_web/actix/actix/type.ResponseFuture.html @@ -0,0 +1,2 @@ +actix_web::actix::actix::ResponseFuture - Rust

Type Definition actix_web::actix::actix::ResponseFuture[]

type ResponseFuture<I, E> = Box<Future<Error = E, Item = I> + 'static>;

A specialized future for async message handler

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/enum.Either.html b/static/api/actix-web/stable/actix_web/actix/fut/enum.Either.html index 8e515ab..7665599 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/enum.Either.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/enum.Either.html @@ -11,30 +11,30 @@ types into a single type.

Methods

-

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

+

impl<T, A, B> Either<(T, A), (T, B)>

Splits out the homogeneous type from an either of tuples.

This method is typically useful when combined with the Future::select2 combinator.

Trait Implementations

-

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A, B> ActorFuture for Either<A, B> where
    A: ActorFuture,
    B: ActorFuture<Item = <A as ActorFuture>::Item, Error = <A as ActorFuture>::Error, Actor = <A as ActorFuture>::Actor>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B> Debug for Either<A, B> where
    A: Debug,
    B: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file +

impl<A, B> Send for Either<A, B> where
    A: Send,
    B: Send

impl<A, B> Sync for Either<A, B> where
    A: Sync,
    B: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/fn.err.html b/static/api/actix-web/stable/actix_web/actix/fut/fn.err.html index d0edd57..432e75d 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/fn.err.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/fn.err.html @@ -1,4 +1,4 @@ -actix_web::actix::fut::err - Rust

Function actix_web::actix::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

+actix_web::actix::fut::err - Rust

Function actix_web::actix::fut::err[]

pub fn err<T, E, A>(e: E) -> FutureResult<T, E, A>

Creates a "leaf future" from an immediate value of a failed computation.

The returned future is similar to result where it will immediately run a scheduled callback with the provided value.

Examples

diff --git a/static/api/actix-web/stable/actix_web/actix/fut/fn.ok.html b/static/api/actix-web/stable/actix_web/actix/fut/fn.ok.html index e11a8a7..412635e 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/fn.ok.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/fn.ok.html @@ -1,4 +1,4 @@ -actix_web::actix::fut::ok - Rust

Function actix_web::actix::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and +actix_web::actix::fut::ok - Rust

Function actix_web::actix::fut::ok[]

pub fn ok<T, E, S>(t: T) -> FutureResult<T, E, S>

Creates a "leaf future" from an immediate value of a finished and successful computation.

The returned future is similar to result where it will immediately run a scheduled callback with the provided value.

diff --git a/static/api/actix-web/stable/actix_web/actix/fut/fn.result.html b/static/api/actix-web/stable/actix_web/actix/fut/fn.result.html index b4426e3..8a44c18 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/fn.result.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/fn.result.html @@ -1,4 +1,4 @@ -actix_web::actix::fut::result - Rust

Function actix_web::actix::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

+actix_web::actix::fut::result - Rust

Function actix_web::actix::fut::result[]

pub fn result<T, E, A>(r: Result<T, E>) -> FutureResult<T, E, A>

Creates a new "leaf future" which will resolve with the given result.

The returned future represents a computation which is finished immediately. This can be useful with the finished and failed base future types to convert an immediate value to a future to interoperate elsewhere.

diff --git a/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_future.html b/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_future.html index 95a269c..51516e7 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_future.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_future.html @@ -1,2 +1,2 @@ -actix_web::actix::fut::wrap_future - Rust

Function actix_web::actix::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

+actix_web::actix::fut::wrap_future - Rust

Function actix_web::actix::fut::wrap_future[]

pub fn wrap_future<F, A>(f: F) -> FutureWrap<F, A> where
    F: Future

Converts normal future into ActorFuture

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_stream.html b/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_stream.html index 1e9bc2b..1204f72 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_stream.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/fn.wrap_stream.html @@ -1,2 +1,2 @@ -actix_web::actix::fut::wrap_stream - Rust

Function actix_web::actix::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

+actix_web::actix::fut::wrap_stream - Rust

Function actix_web::actix::fut::wrap_stream[]

pub fn wrap_stream<S, A>(s: S) -> StreamWrap<S, A> where
    S: Stream

Converts normal stream into ActorStream

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.AndThen.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.AndThen.html index acb157d..fbf3a31 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.AndThen.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.AndThen.html @@ -1,28 +1,28 @@ actix_web::actix::fut::AndThen - Rust

Struct actix_web::actix::fut::AndThen[]

#[must_use = "futures do nothing unless polled"] -
pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of +

pub struct AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the and_then combinator, chaining a computation onto the end of another future which completes successfully.

This is created by the Future::and_then method.

Trait Implementations

-

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A, B, F> ActorFuture for AndThen<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor, Error = <A as ActorFuture>::Error>,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for AndThen<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file +

impl<A, B, F> Send for AndThen<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for AndThen<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.DropErr.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.DropErr.html index 444d465..7176304 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.DropErr.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.DropErr.html @@ -1,23 +1,23 @@ -actix_web::actix::fut::DropErr - Rust

Struct actix_web::actix::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }
+actix_web::actix::fut::DropErr - Rust

Struct actix_web::actix::fut::DropErr[]

pub struct DropErr<A> where
    A: ActorFuture
{ /* fields omitted */ }

Trait Implementations

-

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A> ActorFuture for DropErr<A> where
    A: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

Auto Trait Implementations

-

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file +

impl<A> Send for DropErr<A> where
    A: Send

impl<A> Sync for DropErr<A> where
    A: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.Finish.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.Finish.html index 4b4a4b8..33f6bf9 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.Finish.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.Finish.html @@ -6,12 +6,12 @@ when stream completes.

Methods

-

impl<S> Finish<S>

+

impl<S> Finish<S>

Trait Implementations

-

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

-

impl<S> Future for Finish<S> where
    S: Stream

+

impl<S> Debug for Finish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

impl<S> Future for Finish<S> where
    S: Stream

The type of value that this future will resolved with if it is successful. Read more

The type of error that this future will resolve with if it fails in a normal fashion. Read more

@@ -41,4 +41,4 @@ when stream completes.

Auto Trait Implementations
-

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file +

impl<S> Send for Finish<S> where
    S: Send

impl<S> Sync for Finish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.FromErr.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.FromErr.html index 134895d..92f298e 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.FromErr.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.FromErr.html @@ -1,27 +1,27 @@ actix_web::actix::fut::FromErr - Rust

Struct actix_web::actix::fut::FromErr[]

#[must_use = "futures do nothing unless polled"] -
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

+
pub struct FromErr<A, E> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the from_err combinator, changing the error type of a future.

This is created by the Future::from_err method.

Trait Implementations

-

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A, E> ActorFuture for FromErr<A, E> where
    A: ActorFuture,
    E: From<<A as ActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, E> Debug for FromErr<A, E> where
    A: Debug + ActorFuture,
    E: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file +

impl<A, E> Send for FromErr<A, E> where
    A: Send,
    E: Send

impl<A, E> Sync for FromErr<A, E> where
    A: Sync,
    E: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureResult.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureResult.html index 00366f4..fe3c8b4 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureResult.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureResult.html @@ -1,28 +1,28 @@ -actix_web::actix::fut::FutureResult - Rust

Struct actix_web::actix::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"] +actix_web::actix::fut::FutureResult - Rust

Struct actix_web::actix::fut::FutureResult[]

#[must_use = "futures do nothing unless polled"]
pub struct FutureResult<T, E, A> { /* fields omitted */ }

A future representing a value that is immediately ready.

Created by the result function.

Trait Implementations

-

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

-

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<T, E, A> ActorFuture for FutureResult<T, E, A> where
    A: Actor

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<T, E, A> From<Result<T, E>> for FutureResult<T, E, A>

Performs the conversion.

+

impl<T, E, A> Debug for FutureResult<T, E, A> where
    A: Debug,
    E: Debug,
    T: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file +

impl<T, E, A> Send for FutureResult<T, E, A> where
    A: Send,
    E: Send,
    T: Send

impl<T, E, A> Sync for FutureResult<T, E, A> where
    A: Sync,
    E: Sync,
    T: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureWrap.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureWrap.html index 4affd26..50967ac 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureWrap.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.FutureWrap.html @@ -2,22 +2,22 @@

Trait Implementations

-

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<F, A> ActorFuture for FutureWrap<F, A> where
    A: Actor,
    F: Future

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

Auto Trait Implementations

-

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file +

impl<F, A> Send for FutureWrap<F, A> where
    A: Send,
    F: Send

impl<F, A> Sync for FutureWrap<F, A> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.Map.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.Map.html index 1ae30c0..d63f9fe 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.Map.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.Map.html @@ -1,27 +1,27 @@ actix_web::actix::fut::Map - Rust

Struct actix_web::actix::fut::Map[]

#[must_use = "futures do nothing unless polled"] -
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

+
pub struct Map<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map combinator, changing the type of a future.

This is created by the ActorFuture::map method.

Trait Implementations

-

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<U, A, F> ActorFuture for Map<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Item, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for Map<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file +

impl<A, F> Send for Map<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for Map<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.MapErr.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.MapErr.html index cfb2d22..c392089 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.MapErr.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.MapErr.html @@ -1,27 +1,27 @@ actix_web::actix::fut::MapErr - Rust

Struct actix_web::actix::fut::MapErr[]

#[must_use = "futures do nothing unless polled"] -
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

+
pub struct MapErr<A, F> where
    A: ActorFuture
{ /* fields omitted */ }

Future for the map_err combinator, changing the error type of a future.

This is created by the Future::map_err method.

Trait Implementations

-

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<U, A, F> ActorFuture for MapErr<A, F> where
    A: ActorFuture,
    F: FnOnce(<A as ActorFuture>::Error, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> U, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, F> Debug for MapErr<A, F> where
    A: Debug + ActorFuture,
    F: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file +

impl<A, F> Send for MapErr<A, F> where
    A: Send,
    F: Send

impl<A, F> Sync for MapErr<A, F> where
    A: Sync,
    F: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamAndThen.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamAndThen.html index f2f2a3c..90bf816 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamAndThen.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamAndThen.html @@ -1,28 +1,28 @@ actix_web::actix::fut::StreamAndThen - Rust

Struct actix_web::actix::fut::StreamAndThen[]

#[must_use = "streams do nothing unless polled"] -
pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a +

pub struct StreamAndThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto values produced by a stream.

This structure is produced by the ActorStream::and_then method.

Trait Implementations

-

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

+

impl<S, F, U> ActorStream for StreamAndThen<S, F, U> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor, Error = <S as ActorStream>::Error>, 

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

-

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamAndThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file +

impl<S, F, U> Send for StreamAndThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamAndThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFinish.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFinish.html index 37c41d7..bf1ced7 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFinish.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFinish.html @@ -6,23 +6,23 @@ when stream completes.

Trait Implementations

-

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<S> ActorFuture for StreamFinish<S> where
    S: ActorStream

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S> Debug for StreamFinish<S> where
    S: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file +

impl<S> Send for StreamFinish<S> where
    S: Send

impl<S> Sync for StreamFinish<S> where
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFold.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFold.html index a579b30..96e58be 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFold.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamFold.html @@ -1,27 +1,27 @@ actix_web::actix::fut::StreamFold - Rust

Struct actix_web::actix::fut::StreamFold[]

#[must_use = "streams do nothing unless polled"] -
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

+
pub struct StreamFold<S, F, Fut, T> where
    Fut: IntoActorFuture
{ /* fields omitted */ }

A future used to collect all the results of a stream into one generic type.

This future is returned by the ActorStream::fold method.

Trait Implementations

-

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<S, F, Fut, T> ActorFuture for StreamFold<S, F, Fut, T> where
    F: FnMut(T, <S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> Fut,
    Fut: IntoActorFuture<Item = T, Actor = <S as ActorStream>::Actor>,
    S: ActorStream,
    <S as ActorStream>::Error: From<<Fut as IntoActorFuture>::Error>, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<S, F, Fut, T> Debug for StreamFold<S, F, Fut, T> where
    F: Debug,
    Fut: Debug + IntoActorFuture,
    S: Debug,
    T: Debug,
    <Fut as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file +

impl<S, F, Fut, T> Send for StreamFold<S, F, Fut, T> where
    F: Send,
    S: Send,
    T: Send,
    <Fut as IntoActorFuture>::Future: Send

impl<S, F, Fut, T> Sync for StreamFold<S, F, Fut, T> where
    F: Sync,
    S: Sync,
    T: Sync,
    <Fut as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMap.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMap.html index c80a6b8..76243e7 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMap.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMap.html @@ -6,23 +6,23 @@ type to another.

Trait Implementations

-

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

impl<S, F, U> ActorStream for StreamMap<S, F> where
    F: FnMut(<S as ActorStream>::Item, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

-

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMap<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file +

impl<S, F> Send for StreamMap<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMap<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMapErr.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMapErr.html index de8926a..dd23a4c 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMapErr.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamMapErr.html @@ -6,23 +6,23 @@ type to another.

Trait Implementations

-

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

+

impl<S, F, U> ActorStream for StreamMapErr<S, F> where
    F: FnMut(<S as ActorStream>::Error, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

-

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F> Debug for StreamMapErr<S, F> where
    F: Debug,
    S: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file +

impl<S, F> Send for StreamMapErr<S, F> where
    F: Send,
    S: Send

impl<S, F> Sync for StreamMapErr<S, F> where
    F: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamThen.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamThen.html index 28910ba..85a3a20 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamThen.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamThen.html @@ -1,28 +1,28 @@ actix_web::actix::fut::StreamThen - Rust

Struct actix_web::actix::fut::StreamThen[]

#[must_use = "streams do nothing unless polled"] -
pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a +

pub struct StreamThen<S, F, U> where
    U: IntoActorFuture
{ /* fields omitted */ }

A stream combinator which chains a computation onto each item produced by a stream.

This structure is produced by the ActorStream::then method.

Trait Implementations

-

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

+

impl<S, F, U> ActorStream for StreamThen<S, F, U> where
    F: FnMut(Result<<S as ActorStream>::Item, <S as ActorStream>::Error>, &mut <S as ActorStream>::Actor, &mut <<S as ActorStream>::Actor as Actor>::Context) -> U,
    S: ActorStream,
    U: IntoActorFuture<Actor = <S as ActorStream>::Actor>, 

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

-

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S, F, U> Debug for StreamThen<S, F, U> where
    F: Debug,
    S: Debug,
    U: Debug + IntoActorFuture,
    <U as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file +

impl<S, F, U> Send for StreamThen<S, F, U> where
    F: Send,
    S: Send,
    <U as IntoActorFuture>::Future: Send

impl<S, F, U> Sync for StreamThen<S, F, U> where
    F: Sync,
    S: Sync,
    <U as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamTimeout.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamTimeout.html index acf1a9b..7fe3025 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamTimeout.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamTimeout.html @@ -1,28 +1,28 @@ actix_web::actix::fut::StreamTimeout - Rust

Struct actix_web::actix::fut::StreamTimeout[]

#[must_use = "streams do nothing unless polled"] -
pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +

pub struct StreamTimeout<S> where
    S: ActorStream
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes more than timeout.

This is created by the ActorFuture::timeout() method.

Trait Implementations

-

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

+

impl<S> ActorStream for StreamTimeout<S> where
    S: ActorStream,
    <S as ActorStream>::Error: Clone

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

-

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

+

impl<S> Debug for StreamTimeout<S> where
    S: Debug + ActorStream,
    <S as ActorStream>::Error: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file +

impl<S> Send for StreamTimeout<S> where
    S: Send,
    <S as ActorStream>::Error: Send

impl<S> Sync for StreamTimeout<S> where
    S: Sync,
    <S as ActorStream>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamWrap.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamWrap.html index 460f9e4..7b81a4c 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamWrap.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.StreamWrap.html @@ -2,22 +2,22 @@

Trait Implementations

-

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

+

impl<S, A> ActorStream for StreamWrap<S, A> where
    A: Actor,
    S: Stream

The type of item this stream will yield on success.

-

+

The type of error this stream may generate.

-

+

The actor within which this stream runs.

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

-

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

-

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

-

Add timeout to stream. Read more

-

Converts a stream to a future that resolves when stream finishes.

+

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f. Read more

+

Chain on a computation for when a value is ready, passing the successful results to the provided closure f. Read more

+

Execute an accumulating computation over a stream, collecting all the values into one final result. Read more

+

Add timeout to stream. Read more

+

Converts a stream to a future that resolves when stream finishes.

Auto Trait Implementations

-

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file +

impl<S, A> Send for StreamWrap<S, A> where
    A: Send,
    S: Send

impl<S, A> Sync for StreamWrap<S, A> where
    A: Sync,
    S: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.Then.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.Then.html index 41a73b5..6068409 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.Then.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.Then.html @@ -1,28 +1,28 @@ actix_web::actix::fut::Then - Rust

Struct actix_web::actix::fut::Then[]

#[must_use = "futures do nothing unless polled"] -
pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of +

pub struct Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>, 
{ /* fields omitted */ }

Future for the then combinator, chaining computations on the end of another future regardless of its outcome.

This is created by the Future::then method.

Trait Implementations

-

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A, B, F> ActorFuture for Then<A, B, F> where
    A: ActorFuture,
    B: IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: FnOnce(Result<<A as ActorFuture>::Item, <A as ActorFuture>::Error>, &mut <A as ActorFuture>::Actor, &mut <<A as ActorFuture>::Actor as Actor>::Context) -> B, 

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<A, B, F> Debug for Then<A, B, F> where
    A: Debug + ActorFuture,
    B: Debug + IntoActorFuture<Actor = <A as ActorFuture>::Actor>,
    F: Debug,
    <B as IntoActorFuture>::Future: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file +

impl<A, B, F> Send for Then<A, B, F> where
    A: Send,
    F: Send,
    <B as IntoActorFuture>::Future: Send

impl<A, B, F> Sync for Then<A, B, F> where
    A: Sync,
    F: Sync,
    <B as IntoActorFuture>::Future: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/struct.Timeout.html b/static/api/actix-web/stable/actix_web/actix/fut/struct.Timeout.html index 76e4257..7d659be 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/struct.Timeout.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/struct.Timeout.html @@ -1,28 +1,28 @@ actix_web::actix::fut::Timeout - Rust

Struct actix_web::actix::fut::Timeout[]

#[must_use = "futures do nothing unless polled"] -
pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes +

pub struct Timeout<F> where
    F: ActorFuture
{ /* fields omitted */ }

Future for the timeout combinator, interrupts computations if it takes more than timeout.

This is created by the ActorFuture::timeout() method.

Trait Implementations

-

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<F> ActorFuture for Timeout<F> where
    F: ActorFuture

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

-

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

+

impl<F> Debug for Timeout<F> where
    F: Debug + ActorFuture,
    <F as ActorFuture>::Error: Debug

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file +

impl<F> Send for Timeout<F> where
    F: Send,
    <F as ActorFuture>::Error: Send

impl<F> Sync for Timeout<F> where
    F: Sync,
    <F as ActorFuture>::Error: Sync

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorFuture.html b/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorFuture.html index d939c6c..de4fad8 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorFuture.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorFuture.html @@ -2,20 +2,20 @@ type Item; type Error; type Actor: Actor; - fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; + fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Self::Item>, Self::Error>; - fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + fn map<F, U>(self, f: F) -> Map<Self, F>
    where
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, { ... } -
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, +
fn map_err<F, E>(self, f: F) -> MapErr<Self, F>
    where
        F: FnOnce(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, { ... } -
fn drop_err(self) -> DropErr<Self> { ... } -
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, +
fn drop_err(self) -> DropErr<Self> { ... } +
fn from_err<E>(self) -> FromErr<Self, E>
    where
        E: From<Self::Error>
, { ... } -
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, +
fn then<F, B>(self, f: F) -> Then<Self, B, F>
    where
        B: IntoActorFuture<Actor = Self::Actor>,
        F: FnOnce(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, { ... } -
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, +
fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
    where
        B: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>,
        F: FnOnce(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> B
, { ... } -
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } +
fn timeout(self, timeout: Duration, err: Self::Error) -> Timeout<Self> { ... } }

Trait for types which are a placeholder of a value that may become available at some later point in time.

This is similar to futures::Future trait, except it works with Actor

@@ -34,48 +34,48 @@ normal fashion.

Required Methods
-

+

Provided Methods

-

Map this future's result to a different type, returning a new future of +

Map this future's result to a different type, returning a new future of the resulting type.

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for +

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future.

-

Chain on a computation for when a future finished, passing the result of +

Chain on a computation for when a future finished, passing the result of the future to the provided closure f.

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain.

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain.

err value get returned as a timeout error.

Implementations on Foreign Types

-

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

-

-

-

+

impl<F> ActorFuture for Box<F> where
    F: ActorFuture + ?Sized

+

+

+

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorStream.html b/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorStream.html index 1ebf633..b7a875e 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorStream.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/trait.ActorStream.html @@ -2,21 +2,21 @@ type Item; type Error; type Actor: Actor; - fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; + fn poll(
        &mut self,
        srv: &mut Self::Actor,
        ctx: &mut <Self::Actor as Actor>::Context
    ) -> Result<Async<Option<Self::Item>>, Self::Error>; - fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, + fn map<U, F>(self, f: F) -> StreamMap<Self, F>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U
, { ... } -
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, +
fn map_err<E, F>(self, f: F) -> StreamMapErr<Self, F>
    where
        F: FnMut(Self::Error, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> E
, { ... } -
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, +
fn then<F, U>(self, f: F) -> StreamThen<Self, F, U>
    where
        F: FnMut(Result<Self::Item, Self::Error>, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Actor = Self::Actor>
, { ... } -
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, +
fn and_then<F, U>(self, f: F) -> StreamAndThen<Self, F, U>
    where
        F: FnMut(Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> U,
        U: IntoActorFuture<Error = Self::Error, Actor = Self::Actor>
, { ... } -
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, +
fn fold<F, T, Fut>(self, init: T, f: F) -> StreamFold<Self, F, Fut, T>
    where
        F: FnMut(T, Self::Item, &mut Self::Actor, &mut <Self::Actor as Actor>::Context) -> Fut,
        Fut: IntoActorFuture<Actor = Self::Actor, Item = T>,
        Self::Error: From<<Fut as IntoActorFuture>::Error>
, { ... } -
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, +
fn timeout(self, timeout: Duration, err: Self::Error) -> StreamTimeout<Self>
    where
        Self::Error: Clone
, { ... } -
fn finish(self) -> StreamFinish<Self> { ... } +
fn finish(self) -> StreamFinish<Self> { ... } }

A stream of values, not all of which may have been produced yet.

This is similar to futures::Stream trait, except it works with Actor

@@ -32,33 +32,33 @@ Required Methods
-

+

Provided Methods

-

Converts a stream of type T to a stream of type U.

-

Converts a stream of error type T to a stream of error type E.

-

Chain on a computation for when a value is ready, passing the resulting +

Converts a stream of type T to a stream of type U.

+

Converts a stream of error type T to a stream of error type E.

+

Chain on a computation for when a value is ready, passing the resulting item to the provided closure f.

-

Chain on a computation for when a value is ready, passing the successful +

Chain on a computation for when a value is ready, passing the successful results to the provided closure f.

-

Execute an accumulating computation over a stream, collecting all the +

Execute an accumulating computation over a stream, collecting all the values into one final result.

-

Add timeout to stream.

+

Add timeout to stream.

err value get returned as a timeout error.

-

Converts a stream to a future that resolves when stream finishes.

+

Converts a stream to a future that resolves when stream finishes.

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/trait.IntoActorFuture.html b/static/api/actix-web/stable/actix_web/actix/fut/trait.IntoActorFuture.html index 466576d..293763d 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/trait.IntoActorFuture.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/trait.IntoActorFuture.html @@ -1,9 +1,9 @@ -actix_web::actix::fut::IntoActorFuture - Rust

Trait actix_web::actix::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ - type Future: ActorFuture; +actix_web::actix::fut::IntoActorFuture - Rust

Trait actix_web::actix::fut::IntoActorFuture[]

pub trait IntoActorFuture where
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == Self::Actor
{ + type Future: ActorFuture; type Item; type Error; type Actor: Actor; - fn into_future(self) -> Self::Future; + fn into_future(self) -> Self::Future; }

Class of types which can be converted into an actor future.

This trait is very similar to the IntoIterator trait and is intended to be used in a very similar fashion.

@@ -12,7 +12,7 @@ used in a very similar fashion.

Associated Types
-

The future that this type can be converted into.

+

The future that this type can be converted into.

The item that the future may resolve with.

The error that the future may resolve with.

The actor within which this future runs

@@ -21,13 +21,13 @@ used in a very similar fashion.

Required Methods
-

Consumes this object and produces a future.

+

Consumes this object and produces a future.

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapFuture.html b/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapFuture.html index 46adbf3..0056d68 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapFuture.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapFuture.html @@ -1,5 +1,5 @@ -actix_web::actix::fut::WrapFuture - Rust

Trait actix_web::actix::fut::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ - type Future: ActorFuture; +actix_web::actix::fut::WrapFuture - Rust

Trait actix_web::actix::fut::WrapFuture[]

pub trait WrapFuture<A> where
    A: Actor,
    <Self::Future as ActorFuture>::Item == Self::Item,
    <Self::Future as ActorFuture>::Error == Self::Error,
    <Self::Future as ActorFuture>::Actor == A, 
{ + type Future: ActorFuture; type Item; type Error; fn into_actor(self, a: &A) -> Self::Future; @@ -9,7 +9,7 @@ Associated Types
-

The future that this type can be converted into.

+

The future that this type can be converted into.

The item that the future may resolve with.

The error that the future may resolve with.

@@ -23,7 +23,7 @@ Implementors
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapStream.html b/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapStream.html index ff3cde4..dc8f9b3 100644 --- a/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapStream.html +++ b/static/api/actix-web/stable/actix_web/actix/fut/trait.WrapStream.html @@ -1,15 +1,15 @@ -actix_web::actix::fut::WrapStream - Rust

Trait actix_web::actix::fut::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ - type Stream: ActorStream; +actix_web::actix::fut::WrapStream - Rust

Trait actix_web::actix::fut::WrapStream[]

pub trait WrapStream<A> where
    A: Actor,
    <Self::Stream as ActorStream>::Item == Self::Item,
    <Self::Stream as ActorStream>::Error == Self::Error,
    <Self::Stream as ActorStream>::Actor == A, 
{ + type Stream: ActorStream; type Item; type Error; - fn into_actor(self, a: &A) -> Self::Stream; + fn into_actor(self, a: &A) -> Self::Stream; }

Helper trait that allows conversion of normal stream into ActorStream

Associated Types

-

The stream that this type can be converted into.

+

The stream that this type can be converted into.

The item that the future may resolve with.

The error that the future may resolve with.

@@ -17,13 +17,13 @@ Required Methods
-

Convert normal stream to a ActorStream

+

Convert normal stream to a ActorStream

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/msgs/struct.Execute.html b/static/api/actix-web/stable/actix_web/actix/msgs/struct.Execute.html index 6ac87b8..41e96fe 100644 --- a/static/api/actix-web/stable/actix_web/actix/msgs/struct.Execute.html +++ b/static/api/actix-web/stable/actix_web/actix/msgs/struct.Execute.html @@ -25,20 +25,20 @@

Methods

-

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

+

impl<I, E> Execute<I, E> where
    E: Send + 'static,
    I: Send + 'static, 

Execute enclosed function

Trait Implementations

-

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

-

-

The type of value that this message will resolved with if it is successful. Read more

-

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

+

impl<I, E> Message for Execute<I, E> where
    E: Send,
    I: Send

Execute message response

+

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<I, E> Handler<Execute<I, E>> for Arbiter where
    E: Send,
    I: Send

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations

-

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file +

impl<I, E> Send for Execute<I, E>

impl<I = (), E = ()> !Sync for Execute<I, E>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/msgs/struct.StartActor.html b/static/api/actix-web/stable/actix_web/actix/msgs/struct.StartActor.html index 9aac2fa..01d2b09 100644 --- a/static/api/actix-web/stable/actix_web/actix/msgs/struct.StartActor.html +++ b/static/api/actix-web/stable/actix_web/actix/msgs/struct.StartActor.html @@ -3,18 +3,18 @@

Methods

-

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

+

impl<A> StartActor<A> where
    A: Actor<Context = Context<A>>, 

Trait Implementations

-

impl<A> Message for StartActor<A> where
    A: Actor

-

The type of value that this message will resolved with if it is successful. Read more

-

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

+

impl<A> Message for StartActor<A> where
    A: Actor

+

The type of value that this message will resolved with if it is successful. Read more

+

impl<A> Handler<StartActor<A>> for Arbiter where
    A: Actor<Context = Context<A>>, 

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations

-

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file +

impl<A> Send for StartActor<A>

impl<A> !Sync for StartActor<A>

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/msgs/struct.StopArbiter.html b/static/api/actix-web/stable/actix_web/actix/msgs/struct.StopArbiter.html index eb32d4f..54d7f40 100644 --- a/static/api/actix-web/stable/actix_web/actix/msgs/struct.StopArbiter.html +++ b/static/api/actix-web/stable/actix_web/actix/msgs/struct.StopArbiter.html @@ -3,14 +3,14 @@

Trait Implementations

-

impl Message for StopArbiter

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<StopArbiter> for Arbiter

+

impl Message for StopArbiter

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<StopArbiter> for Arbiter

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations

-

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file +

impl Send for StopArbiter

impl Sync for StopArbiter

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/enum.ResolverError.html b/static/api/actix-web/stable/actix_web/actix/resolver/enum.ResolverError.html index fac13ff..76b782c 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/enum.ResolverError.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/enum.ResolverError.html @@ -1,4 +1,4 @@ -actix_web::actix::resolver::ResolverError - Rust

Enum actix_web::actix::resolver::ResolverError[]

pub enum ResolverError {
+actix_web::actix::resolver::ResolverError - Rust

Enum actix_web::actix::resolver::ResolverError[]

pub enum ResolverError {
     Resolver(String),
     InvalidInput(&'static str),
     Timeout,
@@ -13,18 +13,18 @@
                 

Trait Implementations

-

impl Display for ResolverError

Formats the value using the given formatter. Read more

-

impl Debug for ResolverError

Formats the value using the given formatter. Read more

-

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

+

impl Debug for ResolverError

Formats the value using the given formatter. Read more

+

impl Display for ResolverError

Formats the value using the given formatter. Read more

+

impl Fail for ResolverError

Returns a reference to the underlying cause of this failure, if it is an error that wraps other errors. Read more

Returns a reference to the Backtrace carried by this failure, if it carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

Important traits for Causes<'f>

Returns a iterator over the causes of this Fail with itself as the first item and the root_cause as the final item. Read more

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

-

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

Auto Trait Implementations

-

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file +

impl Send for ResolverError

impl Sync for ResolverError

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Connect.html b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Connect.html index a4a7d23..231334f 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Connect.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Connect.html @@ -1,24 +1,24 @@ -actix_web::actix::resolver::Connect - Rust

Struct actix_web::actix::resolver::Connect[]

pub struct Connect { /* fields omitted */ }
+actix_web::actix::resolver::Connect - Rust

Struct actix_web::actix::resolver::Connect[]

pub struct Connect { /* fields omitted */ }

Methods

-

impl Connect

Set connect timeout

+

impl Connect

Set connect timeout

By default timeout is set to a 1 second.

Trait Implementations

-

impl Message for Connect

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Connect> for Resolver

+

impl Eq for Connect

impl Message for Connect

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Connect> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Debug for Connect

Formats the value using the given formatter. Read more

-

impl Eq for Connect

impl PartialEq<Connect> for Connect

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

+

Method is called for every message received by this Actor

+

impl Debug for Connect

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl Send for Connect

impl Sync for Connect

\ No newline at end of file +

impl Send for Connect

impl Sync for Connect

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/struct.ConnectAddr.html b/static/api/actix-web/stable/actix_web/actix/resolver/struct.ConnectAddr.html index 523e042..e0e5c13 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/struct.ConnectAddr.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/struct.ConnectAddr.html @@ -1,18 +1,18 @@ -actix_web::actix::resolver::ConnectAddr - Rust

Struct actix_web::actix::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);
+actix_web::actix::resolver::ConnectAddr - Rust

Struct actix_web::actix::resolver::ConnectAddr[]

pub struct ConnectAddr(pub SocketAddr);

Trait Implementations

-

impl Message for ConnectAddr

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<ConnectAddr> for Resolver

+

impl Eq for ConnectAddr

impl Message for ConnectAddr

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<ConnectAddr> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

-

impl Eq for ConnectAddr

impl PartialEq<ConnectAddr> for ConnectAddr

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

+

Method is called for every message received by this Actor

+

impl Debug for ConnectAddr

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file +

impl Send for ConnectAddr

impl Sync for ConnectAddr

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolve.html b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolve.html index 682266c..fd88586 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolve.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolve.html @@ -1,22 +1,22 @@ -actix_web::actix::resolver::Resolve - Rust

Struct actix_web::actix::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }
+actix_web::actix::resolver::Resolve - Rust

Struct actix_web::actix::resolver::Resolve[]

pub struct Resolve { /* fields omitted */ }

Methods

-

impl Resolve

+

impl Resolve

Trait Implementations

-

impl Message for Resolve

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Resolve> for Resolver

+

impl Eq for Resolve

impl Message for Resolve

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Handler<Resolve> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Debug for Resolve

Formats the value using the given formatter. Read more

-

impl Eq for Resolve

impl PartialEq<Resolve> for Resolve

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

+

Method is called for every message received by this Actor

+

impl Debug for Resolve

Formats the value using the given formatter. Read more

Auto Trait Implementations

-

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file +

impl Send for Resolve

impl Sync for Resolve

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolver.html b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolver.html index 06970fc..85554b7 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolver.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/struct.Resolver.html @@ -1,28 +1,28 @@ -actix_web::actix::resolver::Resolver - Rust

Struct actix_web::actix::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }
+actix_web::actix::resolver::Resolver - Rust

Struct actix_web::actix::resolver::Resolver[]

pub struct Resolver { /* fields omitted */ }

Methods

-

impl Resolver

+

impl Resolver

Trait Implementations

-

impl Handler<ConnectAddr> for Resolver

+

impl Handler<Resolve> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Handler<Resolve> for Resolver

+

Method is called for every message received by this Actor

+

impl Handler<ConnectAddr> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Handler<Connect> for Resolver

+

Method is called for every message received by this Actor

+

impl Handler<Connect> for Resolver

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Default for Resolver

Returns the "default value" for a type. Read more

-

impl SystemService for Resolver

Construct and srtart system service

+

Method is called for every message received by this Actor

+

impl SystemService for Resolver

Construct and srtart system service

Method is called during service initialization.

Get actor's address from system registry

-

impl Supervised for Resolver

Method called when supervisor restarting failed actor

-

impl Actor for Resolver

impl Supervised for Resolver

Method called when supervisor restarting failed actor

+

impl Default for Resolver

Returns the "default value" for a type. Read more

+

impl Actor for Resolver

Actor execution context type

-

Method is called when actor get polled first time.

+

Method is called when actor get polled first time.

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

Start new asynchronous actor, returns address of newly created actor. Read more

@@ -33,4 +33,4 @@ Auto Trait Implementations
-

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file +

impl Send for Resolver

impl Sync for Resolver

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/struct.TcpConnector.html b/static/api/actix-web/stable/actix_web/actix/resolver/struct.TcpConnector.html index c8c17a1..098c97d 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/struct.TcpConnector.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/struct.TcpConnector.html @@ -3,26 +3,26 @@

Methods

-

impl TcpConnector

+

impl TcpConnector

Trait Implementations

-

impl ActorFuture for TcpConnector

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl ActorFuture for TcpConnector

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

Auto Trait Implementations

-

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file +

impl Send for TcpConnector

impl Sync for TcpConnector

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/type.Connector.html b/static/api/actix-web/stable/actix_web/actix/resolver/type.Connector.html index c7a5ae3..8c001e5 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/type.Connector.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/type.Connector.html @@ -1,2 +1,2 @@ -actix_web::actix::resolver::Connector - Rust

Type Definition actix_web::actix::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

+actix_web::actix::resolver::Connector - Rust

Type Definition actix_web::actix::resolver::Connector[]

type Connector = Resolver;
Deprecated since 0.7.0

: please use Resolver instead

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/resolver/type.ConnectorError.html b/static/api/actix-web/stable/actix_web/actix/resolver/type.ConnectorError.html index 9ebedba..389ad04 100644 --- a/static/api/actix-web/stable/actix_web/actix/resolver/type.ConnectorError.html +++ b/static/api/actix-web/stable/actix_web/actix/resolver/type.ConnectorError.html @@ -1,2 +1,2 @@ -actix_web::actix::resolver::ConnectorError - Rust

Type Definition actix_web::actix::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

+actix_web::actix::resolver::ConnectorError - Rust

Type Definition actix_web::actix::resolver::ConnectorError[]

type ConnectorError = ResolverError;
Deprecated since 0.7.0

: please use ResolverError instead

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/signal/enum.SignalType.html b/static/api/actix-web/stable/actix_web/actix/signal/enum.SignalType.html index 0748a4d..a47a54a 100644 --- a/static/api/actix-web/stable/actix_web/actix/signal/enum.SignalType.html +++ b/static/api/actix-web/stable/actix_web/actix/signal/enum.SignalType.html @@ -1,4 +1,4 @@ -actix_web::actix::signal::SignalType - Rust

Enum actix_web::actix::signal::SignalType[]

pub enum SignalType {
+actix_web::actix::signal::SignalType - Rust

Enum actix_web::actix::signal::SignalType[]

pub enum SignalType {
     Hup,
     Int,
     Term,
@@ -16,17 +16,17 @@
                 

Trait Implementations

-

impl Message for SignalType

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Debug for SignalType

Formats the value using the given formatter. Read more

-

impl Copy for SignalType

impl Clone for SignalType

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

+

impl Message for SignalType

+

The type of value that this message will resolved with if it is successful. Read more

+

impl PartialEq<SignalType> for SignalType

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-
+

impl Clone for SignalType

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for SignalType

Formats the value using the given formatter. Read more

+

impl Copy for SignalType

Auto Trait Implementations

-

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file +

impl Send for SignalType

impl Sync for SignalType

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/signal/struct.DefaultSignalsHandler.html b/static/api/actix-web/stable/actix_web/actix/signal/struct.DefaultSignalsHandler.html index 5d7855c..7bc2cdf 100644 --- a/static/api/actix-web/stable/actix_web/actix/signal/struct.DefaultSignalsHandler.html +++ b/static/api/actix-web/stable/actix_web/actix/signal/struct.DefaultSignalsHandler.html @@ -4,15 +4,15 @@ actor for each of SIGINT, SIGTERM, SIGQUIT Trait Implementations -

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) message to System actor.

-

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

-

impl Actor for DefaultSignalsHandler

Method is called for every message received by this Actor

+

impl Default for DefaultSignalsHandler

Returns the "default value" for a type. Read more

+

impl Actor for DefaultSignalsHandler

Actor execution context type

-

Method is called when actor get polled first time.

+

Method is called when actor get polled first time.

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped. Read more

Start new asynchronous actor, returns address of newly created actor. Read more

@@ -23,4 +23,4 @@ message to System actor.

Auto Trait Implementations
\ No newline at end of file +

impl Send for DefaultSignalsHandler

impl Sync for DefaultSignalsHandler

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/signal/struct.ProcessSignals.html b/static/api/actix-web/stable/actix_web/actix/signal/struct.ProcessSignals.html index 52ffa8b..0115dcd 100644 --- a/static/api/actix-web/stable/actix_web/actix/signal/struct.ProcessSignals.html +++ b/static/api/actix-web/stable/actix_web/actix/signal/struct.ProcessSignals.html @@ -1,18 +1,18 @@ -actix_web::actix::signal::ProcessSignals - Rust

Struct actix_web::actix::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

+actix_web::actix::signal::ProcessSignals - Rust

Struct actix_web::actix::signal::ProcessSignals[]

pub struct ProcessSignals { /* fields omitted */ }

An actor implementation of Unix signal handling

Trait Implementations

-

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

-

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

-

impl SystemService for ProcessSignals

Method is called during service initialization.

-

Construct and srtart system service

+

Method is called for every message received by this Actor

+

impl SystemService for ProcessSignals

Method is called during service initialization.

+

Construct and srtart system service

Get actor's address from system registry

-

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

-

impl Actor for ProcessSignals

impl Supervised for ProcessSignals

Method called when supervisor restarting failed actor

+

impl Default for ProcessSignals

Returns the "default value" for a type. Read more

+

impl Actor for ProcessSignals

Actor execution context type

Method is called when actor get polled first time.

Method is called after an actor is in Actor::Stopping state. There could be several reasons for stopping. Context::stop get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context. Read more

@@ -25,4 +25,4 @@ Auto Trait Implementations
-

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file +

impl Send for ProcessSignals

impl !Sync for ProcessSignals

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/signal/struct.Signal.html b/static/api/actix-web/stable/actix_web/actix/signal/struct.Signal.html index 0c38025..974b656 100644 --- a/static/api/actix-web/stable/actix_web/actix/signal/struct.Signal.html +++ b/static/api/actix-web/stable/actix_web/actix/signal/struct.Signal.html @@ -1,25 +1,25 @@ -actix_web::actix::signal::Signal - Rust

Struct actix_web::actix::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

+actix_web::actix::signal::Signal - Rust

Struct actix_web::actix::signal::Signal[]

pub struct Signal(pub SignalType);

Process signal message

Trait Implementations

-

impl Message for Signal

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) +

impl Message for Signal

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Signal> for DefaultSignalsHandler

Handle SIGINT, SIGTERM, SIGQUIT signals and send SystemExit(0) message to System actor.

-

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Debug for Signal

Formats the value using the given formatter. Read more

-

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +

Method is called for every message received by this Actor

+

impl Debug for Signal

Formats the value using the given formatter. Read more

+

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system message to System actor.

-

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations

-

impl Send for Signal

impl Sync for Signal

\ No newline at end of file +

impl Send for Signal

impl Sync for Signal

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/actix/signal/struct.Subscribe.html b/static/api/actix-web/stable/actix_web/actix/signal/struct.Subscribe.html index a274443..33503b6 100644 --- a/static/api/actix-web/stable/actix_web/actix/signal/struct.Subscribe.html +++ b/static/api/actix-web/stable/actix_web/actix/signal/struct.Subscribe.html @@ -1,17 +1,17 @@ -actix_web::actix::signal::Subscribe - Rust

Struct actix_web::actix::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

+actix_web::actix::signal::Subscribe - Rust

Struct actix_web::actix::signal::Subscribe[]

pub struct Subscribe(pub Recipient<Signal>);

Subscribe to process signals.

Trait Implementations

-

impl Message for Subscribe

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

-

+

impl Message for Subscribe

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Subscribe> for ProcessSignals

Add subscriber for signals

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations

-

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file +

impl Send for Subscribe

impl !Sync for Subscribe

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/all.html b/static/api/actix-web/stable/actix_web/all.html index 7078dcf..98378eb 100644 --- a/static/api/actix-web/stable/actix_web/all.html +++ b/static/api/actix-web/stable/actix_web/all.html @@ -1,3 +1,3 @@ List of all items in this crate

List of all items[] -

Structs

Enums

Traits

Macros

Functions

Typedefs

Constants

\ No newline at end of file +

Structs

Enums

Traits

Macros

Functions

Typedefs

Constants

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/client/enum.ClientConnectorError.html b/static/api/actix-web/stable/actix_web/client/enum.ClientConnectorError.html index 2a9015c..6a8bbaa 100644 --- a/static/api/actix-web/stable/actix_web/client/enum.ClientConnectorError.html +++ b/static/api/actix-web/stable/actix_web/client/enum.ClientConnectorError.html @@ -2,7 +2,7 @@ InvalidUrl, SslIsNotSupported, SslError(OpensslError), - Resolver(ResolverError), + Resolver(ResolverError), Timeout, Disconnected, IoError(Error), @@ -12,7 +12,7 @@

Invalid URL

SSL feature is not enabled

SSL error

-

Resolver error

+

Resolver error

Connection took too long

Connector has been disconnected

Connection IO error

@@ -28,7 +28,7 @@

Returns the "root cause" of this Fail - the last value in the cause chain which does not return an underlying cause. Read more

impl Display for ClientConnectorError
[src]

Formats the value using the given formatter. Read more

impl Debug for ClientConnectorError
[src]

Formats the value using the given formatter. Read more

-

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

+

impl From<ResolverError> for ClientConnectorError
[src]

Performs the conversion.

impl From<ClientConnectorError> for SendRequestError
[src]

Performs the conversion.

diff --git a/static/api/actix-web/stable/actix_web/client/struct.ClientConnector.html b/static/api/actix-web/stable/actix_web/client/struct.ClientConnector.html index b667263..e38f8d0 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.ClientConnector.html +++ b/static/api/actix-web/stable/actix_web/client/struct.ClientConnector.html @@ -4,7 +4,7 @@ client connection.

Methods

-

impl ClientConnector
[src]

Create ClientConnector actor with custom SslConnector instance.

+

impl ClientConnector
[src]

Create ClientConnector actor with custom SslConnector instance.

By default ClientConnector uses very a simple SSL configuration. With with_connector method it is possible to use a custom SslConnector object.

@@ -47,8 +47,8 @@ Default keep-alive period is 15 seconds.

Connection lifetime is max lifetime of any opened connection until it is closed regardless of keep-alive period. Default lifetime period is 75 seconds.

-

Subscribe for connector stats. Only one subscriber is supported.

-

Use custom resolver actor

+

Subscribe for connector stats. Only one subscriber is supported.

+

Use custom resolver actor

Trait Implementations @@ -62,19 +62,19 @@ Default lifetime period is 75 seconds.

Start new asynchronous actor, returns address of newly created actor.

Use create method, if you need Context object during actor initialization. Read more

impl Supervised for ClientConnector
[src]

Method called when supervisor restarting failed actor

-

impl SystemService for ClientConnector
[src]

Construct and srtart system service

+

impl SystemService for ClientConnector
[src]

Construct and srtart system service

Method is called during service initialization.

Get actor's address from system registry

impl Default for ClientConnector
[src]

Returns the "default value" for a type. Read more

-

impl Handler<Pause> for ClientConnector
[src]

+

impl Handler<Pause> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Handler<Resume> for ClientConnector
[src]

+

Method is called for every message received by this Actor

+

impl Handler<Resume> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Handler<Connect> for ClientConnector
[src]

Method is called for every message received by this Actor

+

impl Handler<Connect> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/client/struct.ClientConnectorStats.html b/static/api/actix-web/stable/actix_web/client/struct.ClientConnectorStats.html index d06be30..6ae5b70 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.ClientConnectorStats.html +++ b/static/api/actix-web/stable/actix_web/client/struct.ClientConnectorStats.html @@ -47,8 +47,8 @@

Trait Implementations

-

impl Message for ClientConnectorStats
[src]

-

The type of value that this message will resolved with if it is successful. Read more

+

impl Message for ClientConnectorStats
[src]

+

The type of value that this message will resolved with if it is successful. Read more

impl Default for ClientConnectorStats
[src]

Returns the "default value" for a type. Read more

diff --git a/static/api/actix-web/stable/actix_web/client/struct.ClientRequest.html b/static/api/actix-web/stable/actix_web/client/struct.ClientRequest.html index 16502fe..8d41e7c 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.ClientRequest.html +++ b/static/api/actix-web/stable/actix_web/client/struct.ClientRequest.html @@ -27,8 +27,8 @@

Create request builder for DELETE request

impl ClientRequest
[src]

Create client request builder

Create client request builder

-

Get the request URI

-

Set client request URI

+

Get the request URI

+

Set client request URI

Get the request method

Set HTTP Method for the request

Get HTTP version for the request

diff --git a/static/api/actix-web/stable/actix_web/client/struct.ClientRequestBuilder.html b/static/api/actix-web/stable/actix_web/client/struct.ClientRequestBuilder.html index 6f8e269..654d046 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.ClientRequestBuilder.html +++ b/static/api/actix-web/stable/actix_web/client/struct.ClientRequestBuilder.html @@ -10,7 +10,7 @@ builder-like pattern.

Set HTTP method of this request.

Important traits for &'a mut R

Set HTTP version of this request.

By default requests's HTTP version depends on network stream

-

Important traits for &'a mut R

Append a header.

+

Important traits for &'a mut R

Append a header.

Header gets appended to existing header. To override header use set_header() method.

@@ -24,13 +24,13 @@ To override header use set_header() method.

.finish() .unwrap(); } -

Important traits for &'a mut R

Set a header.

-

Important traits for &'a mut R

Set a header only if it is not yet set.

+

Important traits for &'a mut R

Set a header.

+

Important traits for &'a mut R

Set a header only if it is not yet set.

Important traits for &'a mut R

Set content encoding.

By default ContentEncoding::Identity is used.

Important traits for &'a mut R

Enables automatic chunked transfer encoding

Important traits for &'a mut R

Enable connection upgrade

-

Important traits for &'a mut R

Set request's content type

+

Important traits for &'a mut R

Set request's content type

Important traits for &'a mut R

Set content length

Important traits for &'a mut R

Set a cookie

@@ -70,7 +70,7 @@ value is Some.

ClientRequestBuilder can not be used after this call.

Set a urlencoded body and generate ClientRequest

ClientRequestBuilder can not be used after this call.

-

Set a streaming body and generate ClientRequest.

+

Set a streaming body and generate ClientRequest.

ClientRequestBuilder can not be used after this call.

Set an empty body and generate ClientRequest

ClientRequestBuilder can not be used after this call.

diff --git a/static/api/actix-web/stable/actix_web/client/struct.Connect.html b/static/api/actix-web/stable/actix_web/client/struct.Connect.html index e058681..8bb8aa6 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.Connect.html +++ b/static/api/actix-web/stable/actix_web/client/struct.Connect.html @@ -4,7 +4,7 @@

Methods

-

impl Connect
[src]

Create Connect message for specified Uri

+

impl Connect
[src]

Create Connect message for specified Uri

Connection timeout, i.e. max time to connect to remote host. Set to 1 second by default.

If connection pool limits are enabled, wait time indicates @@ -15,11 +15,11 @@ Set to 5 seconds by default.

Trait Implementations

impl Debug for Connect
[src]

Formats the value using the given formatter. Read more

-

impl Message for Connect
[src]

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Connect> for ClientConnector
[src]

impl Message for Connect
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Connect> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/client/struct.Connection.html b/static/api/actix-web/stable/actix_web/client/struct.Connection.html index 884d2b5..60a240f 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.Connection.html +++ b/static/api/actix-web/stable/actix_web/client/struct.Connection.html @@ -1,18 +1,18 @@ -actix_web::client::Connection - Rust

Struct actix_web::client::Connection[][src]

pub struct Connection { /* fields omitted */ }

HTTP client connection

+actix_web::client::Connection - Rust

Struct actix_web::client::Connection[][src]

pub struct Connection { /* fields omitted */ }

HTTP client connection

Methods

-

impl Connection
[src]

Raw IO stream

-

Important traits for Connection

Create a new connection from an IO Stream

-

Close connection

-

Release this connection to the connection pool

+

impl Connection
[src]

Raw IO stream

+

Important traits for Connection

Create a new connection from an IO Stream

+

Close connection

+

Release this connection to the connection pool

Trait Implementations

-

impl Debug for Connection
[src]

Formats the value using the given formatter. Read more

-

impl Read for Connection
[src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

+

impl Debug for Connection
[src]

Formats the value using the given formatter. Read more

+

impl Read for Connection
[src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

🔬 This is a nightly-only experimental API. (read_initializer)

Determines if this Reader can work with buffers of uninitialized memory. Read more

Read all bytes until EOF in this source, placing them into buf. Read more

Read all bytes until EOF in this source, appending them to buf. Read more

@@ -25,21 +25,21 @@ https://doc.rust-lang.org/nightly/std/str/struct.Utf8Error.html#examples

Transforms this Read instance to an [Iterator] over [char]s. Read more

Important traits for Chain<T, U>

Creates an adaptor which will chain this stream with another. Read more

Important traits for Take<T>

Creates an adaptor which will read at most limit bytes from it. Read more

-

impl AsyncRead for Connection
[src]

Prepares an uninitialized buffer to be safe to pass to read. Returns true if the supplied buffer was zeroed out. Read more

+

impl AsyncRead for Connection
[src]

Prepares an uninitialized buffer to be safe to pass to read. Returns true if the supplied buffer was zeroed out. Read more

Attempt to read from the AsyncRead into buf. Read more

-

Pull some bytes from this source into the specified Buf, returning how many bytes were read. Read more

+

Pull some bytes from this source into the specified Buf, returning how many bytes were read. Read more

Deprecated since 0.1.7

: Use tokio_codec::Decoder::framed instead

Provides a Stream and Sink interface for reading and writing to this Io object, using Decode and Encode to read and write the raw data. Read more

Helper method for splitting this read/write object into two halves. Read more

-

impl Write for Connection
[src]

Write a buffer into this object, returning how many bytes were written. Read more

-

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

+

impl Write for Connection
[src]

Write a buffer into this object, returning how many bytes were written. Read more

+

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

Attempts to write an entire buffer into this write. Read more

Writes a formatted string into this writer, returning any error encountered. Read more

Important traits for &'a mut R

Creates a "by reference" adaptor for this instance of Write. Read more

-

impl AsyncWrite for Connection
[src]

Initiates or attempts to shut down this writer, returning success when the I/O connection has completely shut down. Read more

+

impl AsyncWrite for Connection
[src]

Initiates or attempts to shut down this writer, returning success when the I/O connection has completely shut down. Read more

Attempt to write bytes from buf into the object. Read more

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more

-

Write a Buf into this value, returning how many bytes were written. Read more

+

Write a Buf into this value, returning how many bytes were written. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/client/struct.Pause.html b/static/api/actix-web/stable/actix_web/client/struct.Pause.html index cb8d6e9..1fec917 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.Pause.html +++ b/static/api/actix-web/stable/actix_web/client/struct.Pause.html @@ -10,11 +10,11 @@ Trait Implementations

impl Default for Pause
[src]

Returns the "default value" for a type. Read more

-

impl Message for Pause
[src]

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Pause> for ClientConnector
[src]

+

impl Message for Pause
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Pause> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/client/struct.Resume.html b/static/api/actix-web/stable/actix_web/client/struct.Resume.html index 80423c2..39eece2 100644 --- a/static/api/actix-web/stable/actix_web/client/struct.Resume.html +++ b/static/api/actix-web/stable/actix_web/client/struct.Resume.html @@ -3,11 +3,11 @@

Trait Implementations

-

impl Message for Resume
[src]

-

The type of value that this message will resolved with if it is successful. Read more

-

impl Handler<Resume> for ClientConnector
[src]

+

impl Message for Resume
[src]

+

The type of value that this message will resolved with if it is successful. Read more

+

impl Handler<Resume> for ClientConnector
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/dev/struct.Drain.html b/static/api/actix-web/stable/actix_web/dev/struct.Drain.html index 1046645..d9e0a38 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.Drain.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.Drain.html @@ -8,19 +8,19 @@

Trait Implementations

-

impl<A: Actor> ActorFuture for Drain<A>
[src]

-

The type of value that this future will resolved with if it is successful. Read more

-

-

The type of error that this future will resolve with if it fails in a normal fashion. Read more

-

+

impl<A: Actor> ActorFuture for Drain<A>
[src]

+

The type of value that this future will resolved with if it is successful. Read more

+

+

The type of error that this future will resolve with if it fails in a normal fashion. Read more

+

The actor within which this future runs

-

Map this future's result to a different type, returning a new future of the resulting type. Read more

-

Map this future's error to a different error, returning a new future.

-

Drop this future's error, returning a new future.

-

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

-

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

-

Execute another future after this one has resolved successfully.

-

Add timeout to futures chain. Read more

+

Map this future's result to a different type, returning a new future of the resulting type. Read more

+

Map this future's error to a different error, returning a new future.

+

Drop this future's error, returning a new future.

+

Map this future's error to any error implementing From for this future's Error, returning a new future. Read more

+

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more

+

Execute another future after this one has resolved successfully.

+

Add timeout to futures chain. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/dev/struct.FormConfig.html b/static/api/actix-web/stable/actix_web/dev/struct.FormConfig.html index 9d3814d..0e32431 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.FormConfig.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.FormConfig.html @@ -1,4 +1,4 @@ -actix_web::dev::FormConfig - Rust

Struct actix_web::dev::FormConfig[][src]

pub struct FormConfig<S> { /* fields omitted */ }

Form extractor configuration

+actix_web::dev::FormConfig - Rust

Struct actix_web::dev::FormConfig[][src]

pub struct FormConfig<S> { /* fields omitted */ }

Form extractor configuration

 #[macro_use] extern crate serde_derive;
@@ -29,13 +29,13 @@
                     

Methods

-

impl<S> FormConfig<S>
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

-

Important traits for &'a mut R

Set custom error handler

+

impl<S> FormConfig<S>
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

+

Important traits for &'a mut R

Set custom error handler

Trait Implementations

-

impl<S> Default for FormConfig<S>
[src]

Returns the "default value" for a type. Read more

+

impl<S> Default for FormConfig<S>
[src]

Returns the "default value" for a type. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/dev/struct.HttpResponseBuilder.html b/static/api/actix-web/stable/actix_web/dev/struct.HttpResponseBuilder.html index d4e1a3a..d6b4339 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.HttpResponseBuilder.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.HttpResponseBuilder.html @@ -8,7 +8,7 @@ builder-like pattern.

impl HttpResponseBuilder
[src]

Important traits for &'a mut R

Set HTTP status code of this response.

Important traits for &'a mut R

Set HTTP version of this response.

By default response's http version depends on request's version.

-

Important traits for &'a mut R

Set a header.

+

Important traits for &'a mut R

Set a header.

 use actix_web::{http, HttpRequest, HttpResponse};
@@ -29,7 +29,7 @@ ContentEncoding` value.

Important traits for &'a mut R

Force close connection, even if it is marked as keep-alive

Important traits for &'a mut R

Enables automatic chunked transfer encoding

Important traits for &'a mut R

Force disable chunked encoding

-

Important traits for &'a mut R

Set response content type

+

Important traits for &'a mut R

Set response content type

Important traits for &'a mut R

Set content length

Important traits for &'a mut R

Set a cookie

@@ -73,7 +73,7 @@ get paused.

Default write buffer capacity is 64kb

Set a body and generate HttpResponse.

HttpResponseBuilder can not be used after this call.

-

Set a streaming body and generate HttpResponse.

+

Set a streaming body and generate HttpResponse.

HttpResponseBuilder can not be used after this call.

Set a json body and generate HttpResponse

HttpResponseBuilder can not be used after this call.

diff --git a/static/api/actix-web/stable/actix_web/dev/struct.MessageBody.html b/static/api/actix-web/stable/actix_web/dev/struct.MessageBody.html index aea9755..b54c3d4 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.MessageBody.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.MessageBody.html @@ -9,7 +9,7 @@

Trait Implementations

-

impl<T> Future for MessageBody<T> where
    T: HttpMessage + 'static, 
[src]

+

impl<T> Future for MessageBody<T> where
    T: HttpMessage + 'static, 
[src]

The type of value that this future will resolved with if it is successful. Read more

The type of error that this future will resolve with if it fails in a normal fashion. Read more

diff --git a/static/api/actix-web/stable/actix_web/dev/struct.Payload.html b/static/api/actix-web/stable/actix_web/dev/struct.Payload.html index 9dcf60e..12559c2 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.Payload.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.Payload.html @@ -18,7 +18,7 @@ generation.

Payload - Receiver side of the stream

-

Put unused data back to payload

+

Put unused data back to payload

Set read buffer capacity

Default buffer capacity is 32Kb.

@@ -26,11 +26,11 @@ generation.

Trait Implementations

impl Debug for Payload
[src]

Formats the value using the given formatter. Read more

-

impl Stream for Payload
[src]

+

impl Stream for Payload
[src]

The type of item this stream will yield on success.

The type of error this stream may generate.

-

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

Converts this stream into a Future. Read more

Converts a stream of type T to a stream of type U. Read more

diff --git a/static/api/actix-web/stable/actix_web/dev/struct.PayloadBuffer.html b/static/api/actix-web/stable/actix_web/dev/struct.PayloadBuffer.html index 0a841cf..7f60310 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.PayloadBuffer.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.PayloadBuffer.html @@ -3,18 +3,18 @@

Methods

-

impl<S> PayloadBuffer<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create new PayloadBuffer instance

+

impl<S> PayloadBuffer<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create new PayloadBuffer instance

Important traits for &'a mut R

Get mutable reference to an inner stream.

-

Read first available chunk of bytes

+

Read first available chunk of bytes

Check if buffer contains enough bytes

Return reference to the first chunk of data

-

Read exact number of bytes

+

Read exact number of bytes

Remove specified amount if bytes from buffer

-

Copy buffered data

-

Read until specified ending

-

Read bytes until new line delimiter

-

Put unprocessed data back to the buffer

-

Get remaining data from the buffer

+

Copy buffered data

+

Read until specified ending

+

Read bytes until new line delimiter

+

Put unprocessed data back to the buffer

+

Get remaining data from the buffer

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/dev/struct.PayloadConfig.html b/static/api/actix-web/stable/actix_web/dev/struct.PayloadConfig.html index 10ed6b3..41315b2 100644 --- a/static/api/actix-web/stable/actix_web/dev/struct.PayloadConfig.html +++ b/static/api/actix-web/stable/actix_web/dev/struct.PayloadConfig.html @@ -1,16 +1,16 @@ -actix_web::dev::PayloadConfig - Rust

Struct actix_web::dev::PayloadConfig[][src]

pub struct PayloadConfig { /* fields omitted */ }

Payload configuration for request's payload.

+actix_web::dev::PayloadConfig - Rust

Struct actix_web::dev::PayloadConfig[][src]

pub struct PayloadConfig { /* fields omitted */ }

Payload configuration for request's payload.

Methods

-

impl PayloadConfig
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

-

Important traits for &'a mut R

Set required mime-type of the request. By default mime type is not +

impl PayloadConfig
[src]

Important traits for &'a mut R

Change max size of payload. By default max size is 256Kb

+

Important traits for &'a mut R

Set required mime-type of the request. By default mime type is not enforced.

Trait Implementations

-

impl Default for PayloadConfig
[src]

Returns the "default value" for a type. Read more

+

impl Default for PayloadConfig
[src]

Returns the "default value" for a type. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/dev/trait.Handler.html b/static/api/actix-web/stable/actix_web/dev/trait.Handler.html index 488e08a..bbbc8e2 100644 --- a/static/api/actix-web/stable/actix_web/dev/trait.Handler.html +++ b/static/api/actix-web/stable/actix_web/dev/trait.Handler.html @@ -21,7 +21,7 @@

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/dev/type.BodyStream.html b/static/api/actix-web/stable/actix_web/dev/type.BodyStream.html index e23866a..a37c70a 100644 --- a/static/api/actix-web/stable/actix_web/dev/type.BodyStream.html +++ b/static/api/actix-web/stable/actix_web/dev/type.BodyStream.html @@ -1,2 +1,2 @@ -actix_web::dev::BodyStream - Rust

Type Definition actix_web::dev::BodyStream[][src]

type BodyStream = Box<Stream<Item = Bytes, Error = Error>>;

Type represent streaming body

+actix_web::dev::BodyStream - Rust

Type Definition actix_web::dev::BodyStream[][src]

type BodyStream = Box<Stream<Item = Bytes, Error = Error>>;

Type represent streaming body

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/enum.Binary.html b/static/api/actix-web/stable/actix_web/enum.Binary.html index c9c2b19..2802d81 100644 --- a/static/api/actix-web/stable/actix_web/enum.Binary.html +++ b/static/api/actix-web/stable/actix_web/enum.Binary.html @@ -1,15 +1,15 @@ actix_web::Binary - Rust

Enum actix_web::Binary[][src]

pub enum Binary {
-    Bytes(Bytes),
+    Bytes(Bytes),
     Slice(&'static [u8]),
-    SharedVec(Arc<Vec<u8>>),
+    SharedVec(Arc<Vec<u8>>),
     // some variants omitted
 }

Represents various types of binary body. Content-Length header is set to length of the body.

Variants

-

Bytes body

+

Bytes body

Static slice

-

Shared vec body

+

Shared vec body

Methods @@ -17,7 +17,7 @@

impl Binary
[src]

Returns true if body is empty

Length of body in bytes

Create binary body from slice

-

Convert Binary to a Bytes instance

+

Convert Binary to a Bytes instance

Trait Implementations @@ -27,18 +27,18 @@

This method tests for !=.

impl Clone for Binary
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

impl Into<Bytes> for Binary
[src]

Performs the conversion.

+

impl Into<Bytes> for Binary
[src]

Performs the conversion.

impl From<&'static str> for Binary
[src]

Performs the conversion.

impl From<&'static [u8]> for Binary
[src]

Performs the conversion.

impl From<Vec<u8>> for Binary
[src]

Performs the conversion.

impl From<String> for Binary
[src]

Performs the conversion.

impl<'a> From<&'a String> for Binary
[src]

Performs the conversion.

-

impl From<Bytes> for Binary
[src]

Performs the conversion.

-

impl From<BytesMut> for Binary
[src]

Performs the conversion.

-

impl From<Arc<String>> for Binary
[src]

Performs the conversion.

-

impl<'a> From<&'a Arc<String>> for Binary
[src]

Performs the conversion.

-

impl From<Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

-

impl<'a> From<&'a Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

+

impl From<Bytes> for Binary
[src]

Performs the conversion.

+

impl From<BytesMut> for Binary
[src]

Performs the conversion.

+

impl From<Arc<String>> for Binary
[src]

Performs the conversion.

+

impl<'a> From<&'a Arc<String>> for Binary
[src]

Performs the conversion.

+

impl From<Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

+

impl<'a> From<&'a Arc<Vec<u8>>> for Binary
[src]

Performs the conversion.

impl AsRef<[u8]> for Binary
[src]

Important traits for &'a [u8]

Performs the conversion.

impl Responder for Binary
[src]

The associated item which can be returned.

diff --git a/static/api/actix-web/stable/actix_web/error/enum.CookieParseError.html b/static/api/actix-web/stable/actix_web/error/enum.CookieParseError.html index 40ec946..418ffff 100644 --- a/static/api/actix-web/stable/actix_web/error/enum.CookieParseError.html +++ b/static/api/actix-web/stable/actix_web/error/enum.CookieParseError.html @@ -1,4 +1,4 @@ -actix_web::error::CookieParseError - Rust

Enum actix_web::error::CookieParseError[][src]

pub enum CookieParseError {
+actix_web::error::CookieParseError - Rust

Enum actix_web::error::CookieParseError[][src]

pub enum CookieParseError {
     MissingPair,
     EmptyName,
     Utf8Error(Utf8Error),
@@ -13,20 +13,20 @@
                     

Methods

-

impl ParseError
[src]

Returns a description of this error as a string

+

impl ParseError
[src]

Returns a description of this error as a string

Trait Implementations

-

impl Copy for ParseError
[src]

impl From<Utf8Error> for ParseError
[src]

Performs the conversion.

-

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

-

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

-

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

-

The lower-level cause of this error, if any. Read more

-

impl Eq for ParseError
[src]

impl PartialEq<ParseError> for ParseError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

+

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl From<Utf8Error> for ParseError
[src]

Performs the conversion.

+

impl Eq for ParseError
[src]

impl PartialEq<ParseError> for ParseError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Copy for ParseError
[src]

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

+

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

impl ResponseError for ParseError
[src]

Return BadRequest for cookie::ParseError

Create response for error Read more

diff --git a/static/api/actix-web/stable/actix_web/error/enum.ParseError.html b/static/api/actix-web/stable/actix_web/error/enum.ParseError.html index 1a49f5a..ec28f5f 100644 --- a/static/api/actix-web/stable/actix_web/error/enum.ParseError.html +++ b/static/api/actix-web/stable/actix_web/error/enum.ParseError.html @@ -1,6 +1,6 @@ actix_web::error::ParseError - Rust

Enum actix_web::error::ParseError[][src]

pub enum ParseError {
     Method,
-    Uri(InvalidUri),
+    Uri(InvalidUri),
     Version,
     Header,
     TooLarge,
@@ -13,7 +13,7 @@
 

Variants

An invalid Method, such as GE.T.

-

An invalid Uri, such as exam ple.domain.

+

An invalid Uri, such as exam ple.domain.

An invalid HttpVersion, such as HTP/1.1

An invalid Header.

A message head is too large to be reasonable.

@@ -38,7 +38,7 @@ stream.

impl ResponseError for ParseError
[src]

Return BadRequest for ParseError

Create response for error Read more

impl From<IoError> for ParseError
[src]

Performs the conversion.

-

impl From<InvalidUri> for ParseError
[src]

Performs the conversion.

+

impl From<InvalidUri> for ParseError
[src]

Performs the conversion.

impl From<Utf8Error> for ParseError
[src]

Performs the conversion.

impl From<FromUtf8Error> for ParseError
[src]

Performs the conversion.

impl From<Error> for ParseError
[src]

Performs the conversion.

diff --git a/static/api/actix-web/stable/actix_web/error/enum.UrlParseError.html b/static/api/actix-web/stable/actix_web/error/enum.UrlParseError.html index d21502d..2dd0ccb 100644 --- a/static/api/actix-web/stable/actix_web/error/enum.UrlParseError.html +++ b/static/api/actix-web/stable/actix_web/error/enum.UrlParseError.html @@ -1,4 +1,4 @@ -actix_web::error::UrlParseError - Rust

Enum actix_web::error::UrlParseError[][src]

pub enum UrlParseError {
+actix_web::error::UrlParseError - Rust

Enum actix_web::error::UrlParseError[][src]

pub enum UrlParseError {
     EmptyHost,
     IdnaError,
     InvalidPort,
@@ -16,16 +16,16 @@
                 

Trait Implementations

-

impl Copy for ParseError
[src]

impl From<Errors> for ParseError
[src]

Performs the conversion.

-

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

-

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

-

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

-

The lower-level cause of this error, if any. Read more

+

impl Display for ParseError
[src]

Formats the value using the given formatter. Read more

+

impl From<Errors> for ParseError
[src]

Performs the conversion.

impl Eq for ParseError
[src]

impl PartialEq<ParseError> for ParseError
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

+

impl Error for ParseError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Copy for ParseError
[src]

impl Clone for ParseError
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

+

impl Debug for ParseError
[src]

Formats the value using the given formatter. Read more

impl From<ParseError> for ProtoError

Performs the conversion.

impl ResponseError for UrlParseError
[src]

InternalServerError for UrlParseError

Create response for error Read more

diff --git a/static/api/actix-web/stable/actix_web/error/trait.ResponseError.html b/static/api/actix-web/stable/actix_web/error/trait.ResponseError.html index 1ef9c68..f0498ec 100644 --- a/static/api/actix-web/stable/actix_web/error/trait.ResponseError.html +++ b/static/api/actix-web/stable/actix_web/error/trait.ResponseError.html @@ -17,7 +17,7 @@

impl ResponseError for TimerError
[src]

InternalServerError for TimerError

impl ResponseError for DeError
[src]

Return BAD_REQUEST for de::value::Error

impl ResponseError for Utf8Error
[src]

Return BAD_REQUEST for Utf8Error

-

impl ResponseError for HttpError
[src]

Return InternalServerError for HttpError, +

impl ResponseError for HttpError
[src]

Return InternalServerError for HttpError, Response generation can return HttpError, so it is internal error

impl ResponseError for Error
[src]

Return InternalServerError for io::Error

impl ResponseError for Canceled
[src]

InternalServerError for futures::Canceled

diff --git a/static/api/actix-web/stable/actix_web/fs/index.html b/static/api/actix-web/stable/actix_web/fs/index.html index ce4e88a..149e181 100644 --- a/static/api/actix-web/stable/actix_web/fs/index.html +++ b/static/api/actix-web/stable/actix_web/fs/index.html @@ -1,4 +1,4 @@ -actix_web::fs - Rust

Module actix_web::fs[][src]

Static files support

+actix_web::fs - Rust

Module actix_web::fs[][src]

Static files support

Structs

diff --git a/static/api/actix-web/stable/actix_web/fs/struct.ChunkedReadFile.html b/static/api/actix-web/stable/actix_web/fs/struct.ChunkedReadFile.html index d58e857..1bac658 100644 --- a/static/api/actix-web/stable/actix_web/fs/struct.ChunkedReadFile.html +++ b/static/api/actix-web/stable/actix_web/fs/struct.ChunkedReadFile.html @@ -1,14 +1,14 @@ -actix_web::fs::ChunkedReadFile - Rust

Struct actix_web::fs::ChunkedReadFile[][src]

pub struct ChunkedReadFile { /* fields omitted */ }

A helper created from a std::fs::File which reads the file +actix_web::fs::ChunkedReadFile - Rust

Struct actix_web::fs::ChunkedReadFile[][src]

pub struct ChunkedReadFile { /* fields omitted */ }

A helper created from a std::fs::File which reads the file chunk-by-chunk on a CpuPool.

Trait Implementations

-

impl Stream for ChunkedReadFile
[src]

+

impl Stream for ChunkedReadFile
[src]

The type of item this stream will yield on success.

The type of error this stream may generate.

-

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

+

Attempt to pull out the next value of this stream, returning None if the stream is finished. Read more

Important traits for Wait<S>

Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more

Converts this stream into a Future. Read more

Converts a stream of type T to a stream of type U. Read more

diff --git a/static/api/actix-web/stable/actix_web/fs/struct.Directory.html b/static/api/actix-web/stable/actix_web/fs/struct.Directory.html index 15410f2..cd860bb 100644 --- a/static/api/actix-web/stable/actix_web/fs/struct.Directory.html +++ b/static/api/actix-web/stable/actix_web/fs/struct.Directory.html @@ -1,4 +1,4 @@ -actix_web::fs::Directory - Rust

Struct actix_web::fs::Directory[][src]

pub struct Directory {
+actix_web::fs::Directory - Rust

Struct actix_web::fs::Directory[][src]

pub struct Directory {
     pub base: PathBuf,
     pub path: PathBuf,
 }

A directory; responds with the generated directory listing.

@@ -17,13 +17,13 @@

Methods

-

impl Directory
[src]

Create a new directory

-

Is this entry visible from this directory?

+

impl Directory
[src]

Create a new directory

+

Is this entry visible from this directory?

Trait Implementations

-

impl Debug for Directory
[src]

Formats the value using the given formatter. Read more

+

impl Debug for Directory
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/fs/struct.NamedFile.html b/static/api/actix-web/stable/actix_web/fs/struct.NamedFile.html index ce37f66..051e9f3 100644 --- a/static/api/actix-web/stable/actix_web/fs/struct.NamedFile.html +++ b/static/api/actix-web/stable/actix_web/fs/struct.NamedFile.html @@ -15,7 +15,7 @@ use actix_web::fs::{DefaultConfig, NamedFile}; let file = NamedFile::open_with_config("foo.txt", DefaultConfig);

-

Important traits for File

Returns reference to the underlying File object.

+

Important traits for &'a File

Returns reference to the underlying File object.

Retrieve the path of this file.

Examples

@@ -168,13 +168,13 @@ even though it takes &self rather than &mut self

impl<C: Debug> Debug for NamedFile<C>
[src]

Formats the value using the given formatter. Read more

impl<C> Deref for NamedFile<C>
[src]

The resulting type after dereferencing.

-

Important traits for File

Dereferences the value.

-

impl<C> DerefMut for NamedFile<C>
[src]

Important traits for File

Mutably dereferences the value.

-

impl<C: StaticFileConfig> Responder for NamedFile<C>
[src]

Important traits for &'a File

Dereferences the value.

+

impl<C> DerefMut for NamedFile<C>
[src]

Important traits for &'a File

Mutably dereferences the value.

+

impl<C: StaticFileConfig> Responder for NamedFile<C>
[src]

The associated item which can be returned.

The associated error which can be returned.

-

Convert itself to AsyncResult or Error.

+

Convert itself to AsyncResult or Error.

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/fs/struct.StaticFiles.html b/static/api/actix-web/stable/actix_web/fs/struct.StaticFiles.html index bf800e4..d5d0b97 100644 --- a/static/api/actix-web/stable/actix_web/fs/struct.StaticFiles.html +++ b/static/api/actix-web/stable/actix_web/fs/struct.StaticFiles.html @@ -1,4 +1,4 @@ -actix_web::fs::StaticFiles - Rust

Struct actix_web::fs::StaticFiles[][src]

pub struct StaticFiles<S, C = DefaultConfig> { /* fields omitted */ }

Static files handling

+actix_web::fs::StaticFiles - Rust

Struct actix_web::fs::StaticFiles[][src]

pub struct StaticFiles<S, C = DefaultConfig> { /* fields omitted */ }

Static files handling

StaticFile handler must be registered with App::handler() method, because StaticFile handler requires access sub-path information.

@@ -14,30 +14,30 @@ because StaticFile handler requires access sub-path information.

Methods

-

impl<S: 'static> StaticFiles<S>
[src]

Create new StaticFiles instance for specified base directory.

+

impl<S: 'static> StaticFiles<S>
[src]

Create new StaticFiles instance for specified base directory.

StaticFile uses CpuPool for blocking filesystem operations. By default pool with 20 threads is used. Pool size can be changed by setting ACTIX_CPU_POOL environment variable.

-

Create new StaticFiles instance for specified base directory and +

Create new StaticFiles instance for specified base directory and CpuPool.

-

impl<S: 'static, C: StaticFileConfig> StaticFiles<S, C>
[src]

Create new StaticFiles instance for specified base directory.

+

impl<S: 'static, C: StaticFileConfig> StaticFiles<S, C>
[src]

Create new StaticFiles instance for specified base directory.

Identical with new but allows to specify configiration to use.

-

Create new StaticFiles instance for specified base directory with config and +

Create new StaticFiles instance for specified base directory with config and CpuPool.

-

Show files listing for directories.

+

Show files listing for directories.

By default show files listing is disabled.

-

Set custom directory renderer

-

Set index file

+

Set custom directory renderer

+

Set index file

Redirects to specific index file for directory "/" instead of showing files listing.

-

Sets default handler which is used when no matched file could be found.

+

Sets default handler which is used when no matched file could be found.

Trait Implementations

-

impl<S: 'static, C: 'static + StaticFileConfig> Handler<S> for StaticFiles<S, C>
[src]

+

impl<S: 'static, C: 'static + StaticFileConfig> Handler<S> for StaticFiles<S, C>
[src]

The type of value that handler will return.

-

Handle request

+

Handle request

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT.html index 98497d2..4e96222 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCEPT - Rust

Constant actix_web::http::header::ACCEPT[][src]

pub const ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Accept),}

Advertises which content types the client is able to understand.

+actix_web::http::header::ACCEPT - Rust

Constant actix_web::http::header::ACCEPT[][src]

pub const ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Accept),}

Advertises which content types the client is able to understand.

The Accept request HTTP header advertises which content types, expressed as MIME types, the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_CHARSET.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_CHARSET.html index 69f4800..3659f82 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_CHARSET.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_CHARSET.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCEPT_CHARSET - Rust

Constant actix_web::http::header::ACCEPT_CHARSET[][src]

pub const ACCEPT_CHARSET: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptCharset),}

Advertises which character set the client is able to understand.

+actix_web::http::header::ACCEPT_CHARSET - Rust

Constant actix_web::http::header::ACCEPT_CHARSET[][src]

pub const ACCEPT_CHARSET: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptCharset),}

Advertises which character set the client is able to understand.

The Accept-Charset request HTTP header advertises which character set the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and informs the client of its diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_ENCODING.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_ENCODING.html index ee1a6e8..f346134 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_ENCODING.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_ENCODING.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCEPT_ENCODING - Rust

Constant actix_web::http::header::ACCEPT_ENCODING[][src]

pub const ACCEPT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptEncoding),}

Advertises which content encoding the client is able to understand.

+actix_web::http::header::ACCEPT_ENCODING - Rust

Constant actix_web::http::header::ACCEPT_ENCODING[][src]

pub const ACCEPT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptEncoding),}

Advertises which content encoding the client is able to understand.

The Accept-Encoding request HTTP header advertises which content encoding, usually a compression algorithm, the client is able to understand. Using content negotiation, the server selects one of the diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_LANGUAGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_LANGUAGE.html index 4688826..7b60075 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_LANGUAGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_LANGUAGE.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCEPT_LANGUAGE - Rust

Constant actix_web::http::header::ACCEPT_LANGUAGE[][src]

pub const ACCEPT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptLanguage),}

Advertises which languages the client is able to understand.

+actix_web::http::header::ACCEPT_LANGUAGE - Rust

Constant actix_web::http::header::ACCEPT_LANGUAGE[][src]

pub const ACCEPT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptLanguage),}

Advertises which languages the client is able to understand.

The Accept-Language request HTTP header advertises which languages the client is able to understand, and which locale variant is preferred. Using content negotiation, the server then selects one of the proposals, diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_RANGES.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_RANGES.html index 083a05e..adf2b09 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_RANGES.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCEPT_RANGES.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCEPT_RANGES - Rust

Constant actix_web::http::header::ACCEPT_RANGES[][src]

pub const ACCEPT_RANGES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptRanges),}

Marker used by the server to advertise partial request support.

+actix_web::http::header::ACCEPT_RANGES - Rust

Constant actix_web::http::header::ACCEPT_RANGES[][src]

pub const ACCEPT_RANGES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AcceptRanges),}

Marker used by the server to advertise partial request support.

The Accept-Ranges response HTTP header is a marker used by the server to advertise its support of partial requests. The value of this field indicates the unit that can be used to define a range.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html index 6dd614d..c7ca4a3 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS[][src]

pub const ACCESS_CONTROL_ALLOW_CREDENTIALS: HeaderName = HeaderName{inner:
+actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_CREDENTIALS[][src]

pub const ACCESS_CONTROL_ALLOW_CREDENTIALS: HeaderName = HeaderName{inner:
                Repr::Standard(StandardHeader::AccessControlAllowCredentials),}

Preflight response indicating if the response to the request can be exposed to the page.

The Access-Control-Allow-Credentials response header indicates whether diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html index 9dc27d8..b2616b9 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS[][src]

pub const ACCESS_CONTROL_ALLOW_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowHeaders),}

Preflight response indicating permitted HTTP headers.

+actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_HEADERS[][src]

pub const ACCESS_CONTROL_ALLOW_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowHeaders),}

Preflight response indicating permitted HTTP headers.

The Access-Control-Allow-Headers response header is used in response to a preflight request to indicate which HTTP headers will be available via Access-Control-Expose-Headers when making the actual request.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html index 8ed0d07..ca33eb2 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS[][src]

pub const ACCESS_CONTROL_ALLOW_METHODS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowMethods),}

Preflight header response indicating permitted access methods.

+actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_METHODS[][src]

pub const ACCESS_CONTROL_ALLOW_METHODS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowMethods),}

Preflight header response indicating permitted access methods.

The Access-Control-Allow-Methods response header specifies the method or methods allowed when accessing the resource in response to a preflight request.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html index 9f3124b..bd74a34 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html @@ -1,3 +1,3 @@ -actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN[][src]

pub const ACCESS_CONTROL_ALLOW_ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowOrigin),}

Indicates whether the response can be shared with resources with the +actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN - Rust

Constant actix_web::http::header::ACCESS_CONTROL_ALLOW_ORIGIN[][src]

pub const ACCESS_CONTROL_ALLOW_ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlAllowOrigin),}

Indicates whether the response can be shared with resources with the given origin.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html index 2ea1577..af7d58f 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.html @@ -1,3 +1,3 @@ -actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS[][src]

pub const ACCESS_CONTROL_EXPOSE_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlExposeHeaders),}

Indicates which headers can be exposed as part of the response by +actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_EXPOSE_HEADERS[][src]

pub const ACCESS_CONTROL_EXPOSE_HEADERS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlExposeHeaders),}

Indicates which headers can be exposed as part of the response by listing their names.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html index 3e0ce05..c514477 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_MAX_AGE.html @@ -1,2 +1,2 @@ -actix_web::http::header::ACCESS_CONTROL_MAX_AGE - Rust

Constant actix_web::http::header::ACCESS_CONTROL_MAX_AGE[][src]

pub const ACCESS_CONTROL_MAX_AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlMaxAge),}

Indicates how long the results of a preflight request can be cached.

+actix_web::http::header::ACCESS_CONTROL_MAX_AGE - Rust

Constant actix_web::http::header::ACCESS_CONTROL_MAX_AGE[][src]

pub const ACCESS_CONTROL_MAX_AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlMaxAge),}

Indicates how long the results of a preflight request can be cached.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html index 8d2277a..ea87078 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.html @@ -1,4 +1,4 @@ -actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS[][src]

pub const ACCESS_CONTROL_REQUEST_HEADERS: HeaderName = HeaderName{inner:
+actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_HEADERS[][src]

pub const ACCESS_CONTROL_REQUEST_HEADERS: HeaderName = HeaderName{inner:
                Repr::Standard(StandardHeader::AccessControlRequestHeaders),}

Informs the server which HTTP headers will be used when an actual request is made.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html index 17445a4..be5d9af 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.html @@ -1,3 +1,3 @@ -actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD[][src]

pub const ACCESS_CONTROL_REQUEST_METHOD: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlRequestMethod),}

Informs the server know which HTTP method will be used when the actual +actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD - Rust

Constant actix_web::http::header::ACCESS_CONTROL_REQUEST_METHOD[][src]

pub const ACCESS_CONTROL_REQUEST_METHOD: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AccessControlRequestMethod),}

Informs the server know which HTTP method will be used when the actual request is made.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.AGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.AGE.html index 5f2e64e..024b161 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.AGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.AGE.html @@ -1,4 +1,4 @@ -actix_web::http::header::AGE - Rust

Constant actix_web::http::header::AGE[][src]

pub const AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Age),}

Indicates the time in seconds the object has been in a proxy cache.

+actix_web::http::header::AGE - Rust

Constant actix_web::http::header::AGE[][src]

pub const AGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Age),}

Indicates the time in seconds the object has been in a proxy cache.

The Age header is usually close to zero. If it is Age: 0, it was probably just fetched from the origin server; otherwise It is usually calculated as a difference between the proxy's current date and the Date diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ALLOW.html b/static/api/actix-web/stable/actix_web/http/header/constant.ALLOW.html index 3847ae2..3c8860e 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ALLOW.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ALLOW.html @@ -1,4 +1,4 @@ -actix_web::http::header::ALLOW - Rust

Constant actix_web::http::header::ALLOW[][src]

pub const ALLOW: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Allow),}

Lists the set of methods support by a resource.

+actix_web::http::header::ALLOW - Rust

Constant actix_web::http::header::ALLOW[][src]

pub const ALLOW: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Allow),}

Lists the set of methods support by a resource.

This header must be sent if the server responds with a 405 Method Not Allowed status code to indicate which request methods can be used. An empty Allow header indicates that the resource allows no request diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ALT_SVC.html b/static/api/actix-web/stable/actix_web/http/header/constant.ALT_SVC.html index 224a23a..8c5fbce 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ALT_SVC.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ALT_SVC.html @@ -1,2 +1,2 @@ -actix_web::http::header::ALT_SVC - Rust

Constant actix_web::http::header::ALT_SVC[][src]

pub const ALT_SVC: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AltSvc),}

Advertises the availability of alternate services to clients.

+actix_web::http::header::ALT_SVC - Rust

Constant actix_web::http::header::ALT_SVC[][src]

pub const ALT_SVC: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::AltSvc),}

Advertises the availability of alternate services to clients.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.AUTHORIZATION.html b/static/api/actix-web/stable/actix_web/http/header/constant.AUTHORIZATION.html index 4582327..5750747 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.AUTHORIZATION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.AUTHORIZATION.html @@ -1,4 +1,4 @@ -actix_web::http::header::AUTHORIZATION - Rust

Constant actix_web::http::header::AUTHORIZATION[][src]

pub const AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Authorization),}

Contains the credentials to authenticate a user agent with a server.

+actix_web::http::header::AUTHORIZATION - Rust

Constant actix_web::http::header::AUTHORIZATION[][src]

pub const AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Authorization),}

Contains the credentials to authenticate a user agent with a server.

Usually this header is included after the server has responded with a 401 Unauthorized status and the WWW-Authenticate header.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CACHE_CONTROL.html b/static/api/actix-web/stable/actix_web/http/header/constant.CACHE_CONTROL.html index 59a8368..4e2a3c8 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CACHE_CONTROL.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CACHE_CONTROL.html @@ -1,4 +1,4 @@ -actix_web::http::header::CACHE_CONTROL - Rust

Constant actix_web::http::header::CACHE_CONTROL[][src]

pub const CACHE_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::CacheControl),}

Specifies directives for caching mechanisms in both requests and +actix_web::http::header::CACHE_CONTROL - Rust

Constant actix_web::http::header::CACHE_CONTROL[][src]

pub const CACHE_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::CacheControl),}

Specifies directives for caching mechanisms in both requests and responses.

Caching directives are unidirectional, meaning that a given directive in a request is not implying that the same directive is to be given in the diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONNECTION.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONNECTION.html index 9e70bc9..0b3daf0 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONNECTION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONNECTION.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONNECTION - Rust

Constant actix_web::http::header::CONNECTION[][src]

pub const CONNECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Connection),}

Controls whether or not the network connection stays open after the +actix_web::http::header::CONNECTION - Rust

Constant actix_web::http::header::CONNECTION[][src]

pub const CONNECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Connection),}

Controls whether or not the network connection stays open after the current transaction finishes.

If the value sent is keep-alive, the connection is persistent and not closed, allowing for subsequent requests to the same server to be done.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_DISPOSITION.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_DISPOSITION.html index c9354a9..a563ed6 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_DISPOSITION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_DISPOSITION.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_DISPOSITION - Rust

Constant actix_web::http::header::CONTENT_DISPOSITION[][src]

pub const CONTENT_DISPOSITION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentDisposition),}

Indicates if the content is expected to be displayed inline.

+actix_web::http::header::CONTENT_DISPOSITION - Rust

Constant actix_web::http::header::CONTENT_DISPOSITION[][src]

pub const CONTENT_DISPOSITION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentDisposition),}

Indicates if the content is expected to be displayed inline.

In a regular HTTP response, the Content-Disposition response header is a header indicating if the content is expected to be displayed inline in the browser, that is, as a Web page or as part of a Web page, or as an diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_ENCODING.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_ENCODING.html index 4d418d5..1ac312a 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_ENCODING.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_ENCODING.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_ENCODING - Rust

Constant actix_web::http::header::CONTENT_ENCODING[][src]

pub const CONTENT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentEncoding),}

Used to compress the media-type.

+actix_web::http::header::CONTENT_ENCODING - Rust

Constant actix_web::http::header::CONTENT_ENCODING[][src]

pub const CONTENT_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentEncoding),}

Used to compress the media-type.

When present, its value indicates what additional content encoding has been applied to the entity-body. It lets the client know, how to decode in order to obtain the media-type referenced by the Content-Type header.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LANGUAGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LANGUAGE.html index d9271d1..1c701d2 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LANGUAGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LANGUAGE.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_LANGUAGE - Rust

Constant actix_web::http::header::CONTENT_LANGUAGE[][src]

pub const CONTENT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLanguage),}

Used to describe the languages intended for the audience.

+actix_web::http::header::CONTENT_LANGUAGE - Rust

Constant actix_web::http::header::CONTENT_LANGUAGE[][src]

pub const CONTENT_LANGUAGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLanguage),}

Used to describe the languages intended for the audience.

This header allows a user to differentiate according to the users' own preferred language. For example, if "Content-Language: de-DE" is set, it says that the document is intended for German language speakers diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LENGTH.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LENGTH.html index 7ed0d30..b6ac917 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LENGTH.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LENGTH.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_LENGTH - Rust

Constant actix_web::http::header::CONTENT_LENGTH[][src]

pub const CONTENT_LENGTH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLength),}

Indicates the size fo the entity-body.

+actix_web::http::header::CONTENT_LENGTH - Rust

Constant actix_web::http::header::CONTENT_LENGTH[][src]

pub const CONTENT_LENGTH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLength),}

Indicates the size fo the entity-body.

The header value must be a decimal indicating the number of octets sent to the recipient.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LOCATION.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LOCATION.html index d19b31f..c9d7ccf 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LOCATION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_LOCATION.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_LOCATION - Rust

Constant actix_web::http::header::CONTENT_LOCATION[][src]

pub const CONTENT_LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLocation),}

Indicates an alternate location for the returned data.

+actix_web::http::header::CONTENT_LOCATION - Rust

Constant actix_web::http::header::CONTENT_LOCATION[][src]

pub const CONTENT_LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentLocation),}

Indicates an alternate location for the returned data.

The principal use case is to indicate the URL of the resource transmitted as the result of content negotiation.

Location and Content-Location are different: Location indicates the diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_RANGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_RANGE.html index 5711450..31d7058 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_RANGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_RANGE.html @@ -1,2 +1,2 @@ -actix_web::http::header::CONTENT_RANGE - Rust

Constant actix_web::http::header::CONTENT_RANGE[][src]

pub const CONTENT_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentRange),}

Indicates where in a full body message a partial message belongs.

+actix_web::http::header::CONTENT_RANGE - Rust

Constant actix_web::http::header::CONTENT_RANGE[][src]

pub const CONTENT_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentRange),}

Indicates where in a full body message a partial message belongs.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html index 9901884..81e4a53 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_SECURITY_POLICY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY[][src]

pub const CONTENT_SECURITY_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentSecurityPolicy),}

Allows controlling resources the user agent is allowed to load for a +actix_web::http::header::CONTENT_SECURITY_POLICY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY[][src]

pub const CONTENT_SECURITY_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentSecurityPolicy),}

Allows controlling resources the user agent is allowed to load for a given page.

With a few exceptions, policies mostly involve specifying server origins and script endpoints. This helps guard against cross-site scripting diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html index c7d794e..96cf3fc 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY[][src]

pub const CONTENT_SECURITY_POLICY_REPORT_ONLY: HeaderName = HeaderName{inner:
+actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY - Rust

Constant actix_web::http::header::CONTENT_SECURITY_POLICY_REPORT_ONLY[][src]

pub const CONTENT_SECURITY_POLICY_REPORT_ONLY: HeaderName = HeaderName{inner:
                Repr::Standard(StandardHeader::ContentSecurityPolicyReportOnly),}

Allows experimenting with policies by monitoring their effects.

The HTTP Content-Security-Policy-Report-Only response header allows web developers to experiment with policies by monitoring (but not enforcing) diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_TYPE.html b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_TYPE.html index 1bec59f..6c79b0f 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_TYPE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.CONTENT_TYPE.html @@ -1,4 +1,4 @@ -actix_web::http::header::CONTENT_TYPE - Rust

Constant actix_web::http::header::CONTENT_TYPE[][src]

pub const CONTENT_TYPE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentType),}

Used to indicate the media type of the resource.

+actix_web::http::header::CONTENT_TYPE - Rust

Constant actix_web::http::header::CONTENT_TYPE[][src]

pub const CONTENT_TYPE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ContentType),}

Used to indicate the media type of the resource.

In responses, a Content-Type header tells the client what the content type of the returned content actually is. Browsers will do MIME sniffing in some cases and will not necessarily follow the value of this header; diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.COOKIE.html b/static/api/actix-web/stable/actix_web/http/header/constant.COOKIE.html index d7297fa..bd4ab3b 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.COOKIE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.COOKIE.html @@ -1,4 +1,4 @@ -actix_web::http::header::COOKIE - Rust

Constant actix_web::http::header::COOKIE[][src]

pub const COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Cookie),}

Contains stored HTTP cookies previously sent by the server with the +actix_web::http::header::COOKIE - Rust

Constant actix_web::http::header::COOKIE[][src]

pub const COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Cookie),}

Contains stored HTTP cookies previously sent by the server with the Set-Cookie header.

The Cookie header might be omitted entirely, if the privacy setting of the browser are set to block them, for example.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.DATE.html b/static/api/actix-web/stable/actix_web/http/header/constant.DATE.html index 41ae670..ab36403 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.DATE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.DATE.html @@ -1,2 +1,2 @@ -actix_web::http::header::DATE - Rust

Constant actix_web::http::header::DATE[][src]

pub const DATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Date),}

Contains the date and time at which the message was originated.

+actix_web::http::header::DATE - Rust

Constant actix_web::http::header::DATE[][src]

pub const DATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Date),}

Contains the date and time at which the message was originated.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.DNT.html b/static/api/actix-web/stable/actix_web/http/header/constant.DNT.html index c36a647..9a0e5d9 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.DNT.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.DNT.html @@ -1,4 +1,4 @@ -actix_web::http::header::DNT - Rust

Constant actix_web::http::header::DNT[][src]

pub const DNT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Dnt),}

Indicates the client's tracking preference.

+actix_web::http::header::DNT - Rust

Constant actix_web::http::header::DNT[][src]

pub const DNT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Dnt),}

Indicates the client's tracking preference.

This header lets users indicate whether they would prefer privacy rather than personalized content.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ETAG.html b/static/api/actix-web/stable/actix_web/http/header/constant.ETAG.html index 6f67a22..b808242 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ETAG.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ETAG.html @@ -1,4 +1,4 @@ -actix_web::http::header::ETAG - Rust

Constant actix_web::http::header::ETAG[][src]

pub const ETAG: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Etag),}

Identifier for a specific version of a resource.

+actix_web::http::header::ETAG - Rust

Constant actix_web::http::header::ETAG[][src]

pub const ETAG: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Etag),}

Identifier for a specific version of a resource.

This header allows caches to be more efficient, and saves bandwidth, as a web server does not need to send a full response if the content has not changed. On the other side, if the content has changed, etags are diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.EXPECT.html b/static/api/actix-web/stable/actix_web/http/header/constant.EXPECT.html index c7605c9..39c4a75 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.EXPECT.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.EXPECT.html @@ -1,4 +1,4 @@ -actix_web::http::header::EXPECT - Rust

Constant actix_web::http::header::EXPECT[][src]

pub const EXPECT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expect),}

Indicates expectations that need to be fulfilled by the server in order +actix_web::http::header::EXPECT - Rust

Constant actix_web::http::header::EXPECT[][src]

pub const EXPECT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expect),}

Indicates expectations that need to be fulfilled by the server in order to properly handle the request.

The only expectation defined in the specification is Expect: 100-continue, to which the server shall respond with:

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.EXPIRES.html b/static/api/actix-web/stable/actix_web/http/header/constant.EXPIRES.html index 020be05..e51d239 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.EXPIRES.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.EXPIRES.html @@ -1,4 +1,4 @@ -actix_web::http::header::EXPIRES - Rust

Constant actix_web::http::header::EXPIRES[][src]

pub const EXPIRES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expires),}

Contains the date/time after which the response is considered stale.

+actix_web::http::header::EXPIRES - Rust

Constant actix_web::http::header::EXPIRES[][src]

pub const EXPIRES: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Expires),}

Contains the date/time after which the response is considered stale.

Invalid dates, like the value 0, represent a date in the past and mean that the resource is already expired.

If there is a Cache-Control header with the "max-age" or "s-max-age" diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.FORWARDED.html b/static/api/actix-web/stable/actix_web/http/header/constant.FORWARDED.html index fc8bca7..1e12742 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.FORWARDED.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.FORWARDED.html @@ -1,4 +1,4 @@ -actix_web::http::header::FORWARDED - Rust

Constant actix_web::http::header::FORWARDED[][src]

pub const FORWARDED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Forwarded),}

Contains information from the client-facing side of proxy servers that +actix_web::http::header::FORWARDED - Rust

Constant actix_web::http::header::FORWARDED[][src]

pub const FORWARDED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Forwarded),}

Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.

The alternative and de-facto standard versions of this header are the X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Proto headers.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.FROM.html b/static/api/actix-web/stable/actix_web/http/header/constant.FROM.html index 13cb874..2d26d22 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.FROM.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.FROM.html @@ -1,4 +1,4 @@ -actix_web::http::header::FROM - Rust

Constant actix_web::http::header::FROM[][src]

pub const FROM: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::From),}

Contains an Internet email address for a human user who controls the +actix_web::http::header::FROM - Rust

Constant actix_web::http::header::FROM[][src]

pub const FROM: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::From),}

Contains an Internet email address for a human user who controls the requesting user agent.

If you are running a robotic user agent (e.g. a crawler), the From header should be sent, so you can be contacted if problems occur on diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.HOST.html b/static/api/actix-web/stable/actix_web/http/header/constant.HOST.html index 6ba76e6..823c59a 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.HOST.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.HOST.html @@ -1,4 +1,4 @@ -actix_web::http::header::HOST - Rust

Constant actix_web::http::header::HOST[][src]

pub const HOST: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Host),}

Specifies the domain name of the server and (optionally) the TCP port +actix_web::http::header::HOST - Rust

Constant actix_web::http::header::HOST[][src]

pub const HOST: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Host),}

Specifies the domain name of the server and (optionally) the TCP port number on which the server is listening.

If no port is given, the default port for the service requested (e.g., "80" for an HTTP URL) is implied.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.IF_MATCH.html b/static/api/actix-web/stable/actix_web/http/header/constant.IF_MATCH.html index 03c6b6b..c793146 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.IF_MATCH.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.IF_MATCH.html @@ -1,4 +1,4 @@ -actix_web::http::header::IF_MATCH - Rust

Constant actix_web::http::header::IF_MATCH[][src]

pub const IF_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfMatch),}

Makes a request conditional based on the E-Tag.

+actix_web::http::header::IF_MATCH - Rust

Constant actix_web::http::header::IF_MATCH[][src]

pub const IF_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfMatch),}

Makes a request conditional based on the E-Tag.

For GET and HEAD methods, the server will send back the requested resource only if it matches one of the listed ETags. For PUT and other non-safe methods, it will only upload the resource in this case.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.IF_MODIFIED_SINCE.html b/static/api/actix-web/stable/actix_web/http/header/constant.IF_MODIFIED_SINCE.html index 78762fd..36c53d7 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.IF_MODIFIED_SINCE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.IF_MODIFIED_SINCE.html @@ -1,4 +1,4 @@ -actix_web::http::header::IF_MODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_MODIFIED_SINCE[][src]

pub const IF_MODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfModifiedSince),}

Makes a request conditional based on the modification date.

+actix_web::http::header::IF_MODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_MODIFIED_SINCE[][src]

pub const IF_MODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfModifiedSince),}

Makes a request conditional based on the modification date.

The If-Modified-Since request HTTP header makes the request conditional: the server will send back the requested resource, with a 200 status, only if it has been last modified after the given date. If the request diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.IF_NONE_MATCH.html b/static/api/actix-web/stable/actix_web/http/header/constant.IF_NONE_MATCH.html index 5bb5c9b..c9af84c 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.IF_NONE_MATCH.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.IF_NONE_MATCH.html @@ -1,4 +1,4 @@ -actix_web::http::header::IF_NONE_MATCH - Rust

Constant actix_web::http::header::IF_NONE_MATCH[][src]

pub const IF_NONE_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfNoneMatch),}

Makes a request conditional based on the E-Tag.

+actix_web::http::header::IF_NONE_MATCH - Rust

Constant actix_web::http::header::IF_NONE_MATCH[][src]

pub const IF_NONE_MATCH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfNoneMatch),}

Makes a request conditional based on the E-Tag.

The If-None-Match HTTP request header makes the request conditional. For GET and HEAD methods, the server will send back the requested resource, with a 200 status, only if it doesn't have an ETag matching the given diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.IF_RANGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.IF_RANGE.html index d415ced..d271475 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.IF_RANGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.IF_RANGE.html @@ -1,4 +1,4 @@ -actix_web::http::header::IF_RANGE - Rust

Constant actix_web::http::header::IF_RANGE[][src]

pub const IF_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfRange),}

Makes a request conditional based on range.

+actix_web::http::header::IF_RANGE - Rust

Constant actix_web::http::header::IF_RANGE[][src]

pub const IF_RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfRange),}

Makes a request conditional based on range.

The If-Range HTTP request header makes a range request conditional: if the condition is fulfilled, the range request will be issued and the server sends back a 206 Partial Content answer with the appropriate diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html b/static/api/actix-web/stable/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html index 3b62fcd..8b7a850 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.IF_UNMODIFIED_SINCE.html @@ -1,4 +1,4 @@ -actix_web::http::header::IF_UNMODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_UNMODIFIED_SINCE[][src]

pub const IF_UNMODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfUnmodifiedSince),}

Makes the request conditional based on the last modification date.

+actix_web::http::header::IF_UNMODIFIED_SINCE - Rust

Constant actix_web::http::header::IF_UNMODIFIED_SINCE[][src]

pub const IF_UNMODIFIED_SINCE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::IfUnmodifiedSince),}

Makes the request conditional based on the last modification date.

The If-Unmodified-Since request HTTP header makes the request conditional: the server will send back the requested resource, or accept it in the case of a POST or another non-safe method, only if it has not diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.LAST_MODIFIED.html b/static/api/actix-web/stable/actix_web/http/header/constant.LAST_MODIFIED.html index ddaf426..690eacc 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.LAST_MODIFIED.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.LAST_MODIFIED.html @@ -1,2 +1,2 @@ -actix_web::http::header::LAST_MODIFIED - Rust

Constant actix_web::http::header::LAST_MODIFIED[][src]

pub const LAST_MODIFIED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::LastModified),}

Content-Types that are acceptable for the response.

+actix_web::http::header::LAST_MODIFIED - Rust

Constant actix_web::http::header::LAST_MODIFIED[][src]

pub const LAST_MODIFIED: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::LastModified),}

Content-Types that are acceptable for the response.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.LINK.html b/static/api/actix-web/stable/actix_web/http/header/constant.LINK.html index 80421a5..bbb19b3 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.LINK.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.LINK.html @@ -1,3 +1,3 @@ -actix_web::http::header::LINK - Rust

Constant actix_web::http::header::LINK[][src]

pub const LINK: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Link),}

Allows the server to point an interested client to another resource +actix_web::http::header::LINK - Rust

Constant actix_web::http::header::LINK[][src]

pub const LINK: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Link),}

Allows the server to point an interested client to another resource containing metadata about the requested resource.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.LOCATION.html b/static/api/actix-web/stable/actix_web/http/header/constant.LOCATION.html index e15c559..2449cba 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.LOCATION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.LOCATION.html @@ -1,4 +1,4 @@ -actix_web::http::header::LOCATION - Rust

Constant actix_web::http::header::LOCATION[][src]

pub const LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Location),}

Indicates the URL to redirect a page to.

+actix_web::http::header::LOCATION - Rust

Constant actix_web::http::header::LOCATION[][src]

pub const LOCATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Location),}

Indicates the URL to redirect a page to.

The Location response header indicates the URL to redirect a page to. It only provides a meaning when served with a 3xx status response.

The HTTP method used to make the new request to fetch the page pointed diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.MAX_FORWARDS.html b/static/api/actix-web/stable/actix_web/http/header/constant.MAX_FORWARDS.html index 130cd39..c358fe1 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.MAX_FORWARDS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.MAX_FORWARDS.html @@ -1,3 +1,3 @@ -actix_web::http::header::MAX_FORWARDS - Rust

Constant actix_web::http::header::MAX_FORWARDS[][src]

pub const MAX_FORWARDS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::MaxForwards),}

Indicates the max number of intermediaries the request should be sent +actix_web::http::header::MAX_FORWARDS - Rust

Constant actix_web::http::header::MAX_FORWARDS[][src]

pub const MAX_FORWARDS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::MaxForwards),}

Indicates the max number of intermediaries the request should be sent through.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.ORIGIN.html b/static/api/actix-web/stable/actix_web/http/header/constant.ORIGIN.html index f4405c5..171350e 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.ORIGIN.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.ORIGIN.html @@ -1,4 +1,4 @@ -actix_web::http::header::ORIGIN - Rust

Constant actix_web::http::header::ORIGIN[][src]

pub const ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Origin),}

Indicates where a fetch originates from.

+actix_web::http::header::ORIGIN - Rust

Constant actix_web::http::header::ORIGIN[][src]

pub const ORIGIN: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Origin),}

Indicates where a fetch originates from.

It doesn't include any path information, but only the server name. It is sent with CORS requests, as well as with POST requests. It is similar to the Referer header, but, unlike this header, it doesn't disclose the diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.PRAGMA.html b/static/api/actix-web/stable/actix_web/http/header/constant.PRAGMA.html index 4443f23..caa6847 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.PRAGMA.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.PRAGMA.html @@ -1,4 +1,4 @@ -actix_web::http::header::PRAGMA - Rust

Constant actix_web::http::header::PRAGMA[][src]

pub const PRAGMA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Pragma),}

HTTP/1.0 header usually used for backwards compatibility.

+actix_web::http::header::PRAGMA - Rust

Constant actix_web::http::header::PRAGMA[][src]

pub const PRAGMA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Pragma),}

HTTP/1.0 header usually used for backwards compatibility.

The Pragma HTTP/1.0 general header is an implementation-specific header that may have various effects along the request-response chain. It is used for backwards compatibility with HTTP/1.0 caches where the diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHENTICATE.html b/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHENTICATE.html index 40f4a03..3e989c9 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHENTICATE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHENTICATE.html @@ -1,4 +1,4 @@ -actix_web::http::header::PROXY_AUTHENTICATE - Rust

Constant actix_web::http::header::PROXY_AUTHENTICATE[][src]

pub const PROXY_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthenticate),}

Defines the authentication method that should be used to gain access to +actix_web::http::header::PROXY_AUTHENTICATE - Rust

Constant actix_web::http::header::PROXY_AUTHENTICATE[][src]

pub const PROXY_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthenticate),}

Defines the authentication method that should be used to gain access to a proxy.

Unlike www-authenticate, the proxy-authenticate header field applies only to the next outbound client on the response chain. This is because diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHORIZATION.html b/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHORIZATION.html index f9ed9b1..e4c6f61 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHORIZATION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.PROXY_AUTHORIZATION.html @@ -1,4 +1,4 @@ -actix_web::http::header::PROXY_AUTHORIZATION - Rust

Constant actix_web::http::header::PROXY_AUTHORIZATION[][src]

pub const PROXY_AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthorization),}

Contains the credentials to authenticate a user agent to a proxy server.

+actix_web::http::header::PROXY_AUTHORIZATION - Rust

Constant actix_web::http::header::PROXY_AUTHORIZATION[][src]

pub const PROXY_AUTHORIZATION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ProxyAuthorization),}

Contains the credentials to authenticate a user agent to a proxy server.

This header is usually included after the server has responded with a 407 Proxy Authentication Required status and the Proxy-Authenticate header.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS.html b/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS.html index 0ecac1a..baf75e8 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS.html @@ -1,4 +1,4 @@ -actix_web::http::header::PUBLIC_KEY_PINS - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS[][src]

pub const PUBLIC_KEY_PINS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPins),}

Associates a specific cryptographic public key with a certain server.

+actix_web::http::header::PUBLIC_KEY_PINS - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS[][src]

pub const PUBLIC_KEY_PINS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPins),}

Associates a specific cryptographic public key with a certain server.

This decreases the risk of MITM attacks with forged certificates. If one or several keys are pinned and none of them are used by the server, the browser will not accept the response as legitimate, and will not display diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html b/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html index e1e54e7..104a52d 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.html @@ -1,4 +1,4 @@ -actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY[][src]

pub const PUBLIC_KEY_PINS_REPORT_ONLY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPinsReportOnly),}

Sends reports of pinning violation to the report-uri specified in the +actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY - Rust

Constant actix_web::http::header::PUBLIC_KEY_PINS_REPORT_ONLY[][src]

pub const PUBLIC_KEY_PINS_REPORT_ONLY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::PublicKeyPinsReportOnly),}

Sends reports of pinning violation to the report-uri specified in the header.

Unlike Public-Key-Pins, this header still allows browsers to connect to the server if the pinning is violated.

diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.RANGE.html b/static/api/actix-web/stable/actix_web/http/header/constant.RANGE.html index 0964090..3867c7d 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.RANGE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.RANGE.html @@ -1,4 +1,4 @@ -actix_web::http::header::RANGE - Rust

Constant actix_web::http::header::RANGE[][src]

pub const RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Range),}

Indicates the part of a document that the server should return.

+actix_web::http::header::RANGE - Rust

Constant actix_web::http::header::RANGE[][src]

pub const RANGE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Range),}

Indicates the part of a document that the server should return.

Several parts can be requested with one Range header at once, and the server may send back these ranges in a multipart document. If the server sends back ranges, it uses the 206 Partial Content for the response. If diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.REFERER.html b/static/api/actix-web/stable/actix_web/http/header/constant.REFERER.html index 15b6207..94c0299 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.REFERER.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.REFERER.html @@ -1,4 +1,4 @@ -actix_web::http::header::REFERER - Rust

Constant actix_web::http::header::REFERER[][src]

pub const REFERER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Referer),}

Contains the address of the previous web page from which a link to the +actix_web::http::header::REFERER - Rust

Constant actix_web::http::header::REFERER[][src]

pub const REFERER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Referer),}

Contains the address of the previous web page from which a link to the currently requested page was followed.

The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.REFERRER_POLICY.html b/static/api/actix-web/stable/actix_web/http/header/constant.REFERRER_POLICY.html index 75a069c..8347716 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.REFERRER_POLICY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.REFERRER_POLICY.html @@ -1,3 +1,3 @@ -actix_web::http::header::REFERRER_POLICY - Rust

Constant actix_web::http::header::REFERRER_POLICY[][src]

pub const REFERRER_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ReferrerPolicy),}

Governs which referrer information should be included with requests +actix_web::http::header::REFERRER_POLICY - Rust

Constant actix_web::http::header::REFERRER_POLICY[][src]

pub const REFERRER_POLICY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::ReferrerPolicy),}

Governs which referrer information should be included with requests made.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.REFRESH.html b/static/api/actix-web/stable/actix_web/http/header/constant.REFRESH.html index 1bc373e..aa37153 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.REFRESH.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.REFRESH.html @@ -1,3 +1,3 @@ -actix_web::http::header::REFRESH - Rust

Constant actix_web::http::header::REFRESH[][src]

pub const REFRESH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Refresh),}

Informs the web browser that the current page or frame should be +actix_web::http::header::REFRESH - Rust

Constant actix_web::http::header::REFRESH[][src]

pub const REFRESH: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Refresh),}

Informs the web browser that the current page or frame should be refreshed.

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.RETRY_AFTER.html b/static/api/actix-web/stable/actix_web/http/header/constant.RETRY_AFTER.html index a4d41b2..a125616 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.RETRY_AFTER.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.RETRY_AFTER.html @@ -1,4 +1,4 @@ -actix_web::http::header::RETRY_AFTER - Rust

Constant actix_web::http::header::RETRY_AFTER[][src]

pub const RETRY_AFTER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::RetryAfter),}

The Retry-After response HTTP header indicates how long the user agent +actix_web::http::header::RETRY_AFTER - Rust

Constant actix_web::http::header::RETRY_AFTER[][src]

pub const RETRY_AFTER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::RetryAfter),}

The Retry-After response HTTP header indicates how long the user agent should wait before making a follow-up request. There are two main cases this header is used:

    diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html index 1b23dd4..859435f 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_ACCEPT.html @@ -1,4 +1,4 @@ -actix_web::http::header::SEC_WEBSOCKET_ACCEPT - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_ACCEPT[][src]

    pub const SEC_WEBSOCKET_ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketAccept),}

    The |Sec-WebSocket-Accept| header field is used in the WebSocket +actix_web::http::header::SEC_WEBSOCKET_ACCEPT - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_ACCEPT[][src]

    pub const SEC_WEBSOCKET_ACCEPT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketAccept),}

    The |Sec-WebSocket-Accept| header field is used in the WebSocket opening handshake. It is sent from the server to the client to confirm that the server is willing to initiate the WebSocket connection.

    diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html index eab2e70..4f1eb30 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.html @@ -1,4 +1,4 @@ -actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS[][src]

    pub const SEC_WEBSOCKET_EXTENSIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketExtensions),}

    The |Sec-WebSocket-Extensions| header field is used in the WebSocket +actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_EXTENSIONS[][src]

    pub const SEC_WEBSOCKET_EXTENSIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketExtensions),}

    The |Sec-WebSocket-Extensions| header field is used in the WebSocket opening handshake. It is initially sent from the client to the server, and then subsequently sent from the server to the client, to agree on a set of protocol-level extensions to use for the duration diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html index d5bab50..68d8b18 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_KEY.html @@ -1,4 +1,4 @@ -actix_web::http::header::SEC_WEBSOCKET_KEY - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_KEY[][src]

    pub const SEC_WEBSOCKET_KEY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketKey),}

    The |Sec-WebSocket-Key| header field is used in the WebSocket opening +actix_web::http::header::SEC_WEBSOCKET_KEY - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_KEY[][src]

    pub const SEC_WEBSOCKET_KEY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketKey),}

    The |Sec-WebSocket-Key| header field is used in the WebSocket opening handshake. It is sent from the client to the server to provide part of the information used by the server to prove that it received a valid WebSocket opening handshake. This helps ensure that the server diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html index 550623d..6c249fd 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_PROTOCOL.html @@ -1,4 +1,4 @@ -actix_web::http::header::SEC_WEBSOCKET_PROTOCOL - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_PROTOCOL[][src]

    pub const SEC_WEBSOCKET_PROTOCOL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketProtocol),}

    The |Sec-WebSocket-Protocol| header field is used in the WebSocket +actix_web::http::header::SEC_WEBSOCKET_PROTOCOL - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_PROTOCOL[][src]

    pub const SEC_WEBSOCKET_PROTOCOL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketProtocol),}

    The |Sec-WebSocket-Protocol| header field is used in the WebSocket opening handshake. It is sent from the client to the server and back from the server to the client to confirm the subprotocol of the connection. This enables scripts to both select a subprotocol and be diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html index 3060ce0..4d587fa 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SEC_WEBSOCKET_VERSION.html @@ -1,4 +1,4 @@ -actix_web::http::header::SEC_WEBSOCKET_VERSION - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_VERSION[][src]

    pub const SEC_WEBSOCKET_VERSION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketVersion),}

    The |Sec-WebSocket-Version| header field is used in the WebSocket +actix_web::http::header::SEC_WEBSOCKET_VERSION - Rust

    Constant actix_web::http::header::SEC_WEBSOCKET_VERSION[][src]

    pub const SEC_WEBSOCKET_VERSION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SecWebSocketVersion),}

    The |Sec-WebSocket-Version| header field is used in the WebSocket opening handshake. It is sent from the client to the server to indicate the protocol version of the connection. This enables servers to correctly interpret the opening handshake and subsequent diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SERVER.html b/static/api/actix-web/stable/actix_web/http/header/constant.SERVER.html index eb8b219..4805c87 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SERVER.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SERVER.html @@ -1,4 +1,4 @@ -actix_web::http::header::SERVER - Rust

    Constant actix_web::http::header::SERVER[][src]

    pub const SERVER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Server),}

    Contains information about the software used by the origin server to +actix_web::http::header::SERVER - Rust

    Constant actix_web::http::header::SERVER[][src]

    pub const SERVER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Server),}

    Contains information about the software used by the origin server to handle the request.

    Overly long and detailed Server values should be avoided as they potentially reveal internal implementation details that might make it diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.SET_COOKIE.html b/static/api/actix-web/stable/actix_web/http/header/constant.SET_COOKIE.html index 50c06f7..9cbc369 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.SET_COOKIE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.SET_COOKIE.html @@ -1,2 +1,2 @@ -actix_web::http::header::SET_COOKIE - Rust

    Constant actix_web::http::header::SET_COOKIE[][src]

    pub const SET_COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SetCookie),}

    Used to send cookies from the server to the user agent.

    +actix_web::http::header::SET_COOKIE - Rust

    Constant actix_web::http::header::SET_COOKIE[][src]

    pub const SET_COOKIE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::SetCookie),}

    Used to send cookies from the server to the user agent.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html b/static/api/actix-web/stable/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html index 4adb11e..4b1d278 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.STRICT_TRANSPORT_SECURITY.html @@ -1,2 +1,2 @@ -actix_web::http::header::STRICT_TRANSPORT_SECURITY - Rust

    Constant actix_web::http::header::STRICT_TRANSPORT_SECURITY[][src]

    pub const STRICT_TRANSPORT_SECURITY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::StrictTransportSecurity),}

    Tells the client to communicate with HTTPS instead of using HTTP.

    +actix_web::http::header::STRICT_TRANSPORT_SECURITY - Rust

    Constant actix_web::http::header::STRICT_TRANSPORT_SECURITY[][src]

    pub const STRICT_TRANSPORT_SECURITY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::StrictTransportSecurity),}

    Tells the client to communicate with HTTPS instead of using HTTP.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.TE.html b/static/api/actix-web/stable/actix_web/http/header/constant.TE.html index 7053b16..715201c 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.TE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.TE.html @@ -1,4 +1,4 @@ -actix_web::http::header::TE - Rust

    Constant actix_web::http::header::TE[][src]

    pub const TE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Te),}

    Informs the server of transfer encodings willing to be accepted as part +actix_web::http::header::TE - Rust

    Constant actix_web::http::header::TE[][src]

    pub const TE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Te),}

    Informs the server of transfer encodings willing to be accepted as part of the response.

    See also the Transfer-Encoding response header for more details on transfer encodings. Note that chunked is always acceptable for HTTP/1.1 diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.TRAILER.html b/static/api/actix-web/stable/actix_web/http/header/constant.TRAILER.html index 4d797e4..9abc75e 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.TRAILER.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.TRAILER.html @@ -1,3 +1,3 @@ -actix_web::http::header::TRAILER - Rust

    Constant actix_web::http::header::TRAILER[][src]

    pub const TRAILER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Trailer),}

    Allows the sender to include additional fields at the end of chunked +actix_web::http::header::TRAILER - Rust

    Constant actix_web::http::header::TRAILER[][src]

    pub const TRAILER: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Trailer),}

    Allows the sender to include additional fields at the end of chunked messages.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.TRANSFER_ENCODING.html b/static/api/actix-web/stable/actix_web/http/header/constant.TRANSFER_ENCODING.html index 85f0ac6..a4b7bc0 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.TRANSFER_ENCODING.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.TRANSFER_ENCODING.html @@ -1,4 +1,4 @@ -actix_web::http::header::TRANSFER_ENCODING - Rust

    Constant actix_web::http::header::TRANSFER_ENCODING[][src]

    pub const TRANSFER_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::TransferEncoding),}

    Specifies the form of encoding used to safely transfer the entity to the +actix_web::http::header::TRANSFER_ENCODING - Rust

    Constant actix_web::http::header::TRANSFER_ENCODING[][src]

    pub const TRANSFER_ENCODING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::TransferEncoding),}

    Specifies the form of encoding used to safely transfer the entity to the client.

    transfer-encoding is a hop-by-hop header, that is applying to a message between two nodes, not to a resource itself. Each segment of a diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE.html b/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE.html index 0928ec9..1ab7f37 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE.html @@ -1,2 +1,2 @@ -actix_web::http::header::UPGRADE - Rust

    Constant actix_web::http::header::UPGRADE[][src]

    pub const UPGRADE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Upgrade),}

    Used as part of the exchange to upgrade the protocol.

    +actix_web::http::header::UPGRADE - Rust

    Constant actix_web::http::header::UPGRADE[][src]

    pub const UPGRADE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Upgrade),}

    Used as part of the exchange to upgrade the protocol.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html b/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html index 69e7fa8..53a5c0b 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.UPGRADE_INSECURE_REQUESTS.html @@ -1,3 +1,3 @@ -actix_web::http::header::UPGRADE_INSECURE_REQUESTS - Rust

    Constant actix_web::http::header::UPGRADE_INSECURE_REQUESTS[][src]

    pub const UPGRADE_INSECURE_REQUESTS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UpgradeInsecureRequests),}

    Sends a signal to the server expressing the client’s preference for an +actix_web::http::header::UPGRADE_INSECURE_REQUESTS - Rust

    Constant actix_web::http::header::UPGRADE_INSECURE_REQUESTS[][src]

    pub const UPGRADE_INSECURE_REQUESTS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UpgradeInsecureRequests),}

    Sends a signal to the server expressing the client’s preference for an encrypted and authenticated response.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.USER_AGENT.html b/static/api/actix-web/stable/actix_web/http/header/constant.USER_AGENT.html index 6e3e554..94d5d33 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.USER_AGENT.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.USER_AGENT.html @@ -1,3 +1,3 @@ -actix_web::http::header::USER_AGENT - Rust

    Constant actix_web::http::header::USER_AGENT[][src]

    pub const USER_AGENT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UserAgent),}

    Contains a string that allows identifying the requesting client's +actix_web::http::header::USER_AGENT - Rust

    Constant actix_web::http::header::USER_AGENT[][src]

    pub const USER_AGENT: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::UserAgent),}

    Contains a string that allows identifying the requesting client's software.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.VARY.html b/static/api/actix-web/stable/actix_web/http/header/constant.VARY.html index eaa1b01..1748e5e 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.VARY.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.VARY.html @@ -1,4 +1,4 @@ -actix_web::http::header::VARY - Rust

    Constant actix_web::http::header::VARY[][src]

    pub const VARY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Vary),}

    Determines how to match future requests with cached responses.

    +actix_web::http::header::VARY - Rust

    Constant actix_web::http::header::VARY[][src]

    pub const VARY: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Vary),}

    Determines how to match future requests with cached responses.

    The vary HTTP response header determines how to match future request headers to decide whether a cached response can be used rather than requesting a fresh one from the origin server. It is used by the server diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.VIA.html b/static/api/actix-web/stable/actix_web/http/header/constant.VIA.html index c204bae..07fb0ad 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.VIA.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.VIA.html @@ -1,4 +1,4 @@ -actix_web::http::header::VIA - Rust

    Constant actix_web::http::header::VIA[][src]

    pub const VIA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Via),}

    Added by proxies to track routing.

    +actix_web::http::header::VIA - Rust

    Constant actix_web::http::header::VIA[][src]

    pub const VIA: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Via),}

    Added by proxies to track routing.

    The via general header is added by proxies, both forward and reverse proxies, and can appear in the request headers and the response headers. It is used for tracking message forwards, avoiding request loops, and diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.WARNING.html b/static/api/actix-web/stable/actix_web/http/header/constant.WARNING.html index 69d5c93..c14196f 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.WARNING.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.WARNING.html @@ -1,4 +1,4 @@ -actix_web::http::header::WARNING - Rust

    Constant actix_web::http::header::WARNING[][src]

    pub const WARNING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Warning),}

    General HTTP header contains information about possible problems with +actix_web::http::header::WARNING - Rust

    Constant actix_web::http::header::WARNING[][src]

    pub const WARNING: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::Warning),}

    General HTTP header contains information about possible problems with the status of the message.

    More than one warning header may appear in a response. Warning header fields can in general be applied to any message, however some warn-codes diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.WWW_AUTHENTICATE.html b/static/api/actix-web/stable/actix_web/http/header/constant.WWW_AUTHENTICATE.html index 57001ae..475abd9 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.WWW_AUTHENTICATE.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.WWW_AUTHENTICATE.html @@ -1,3 +1,3 @@ -actix_web::http::header::WWW_AUTHENTICATE - Rust

    Constant actix_web::http::header::WWW_AUTHENTICATE[][src]

    pub const WWW_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::WwwAuthenticate),}

    Defines the authentication method that should be used to gain access to +actix_web::http::header::WWW_AUTHENTICATE - Rust

    Constant actix_web::http::header::WWW_AUTHENTICATE[][src]

    pub const WWW_AUTHENTICATE: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::WwwAuthenticate),}

    Defines the authentication method that should be used to gain access to a resource.

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html b/static/api/actix-web/stable/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html index 0f6429c..c0dac69 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.X_CONTENT_TYPE_OPTIONS.html @@ -1,4 +1,4 @@ -actix_web::http::header::X_CONTENT_TYPE_OPTIONS - Rust

    Constant actix_web::http::header::X_CONTENT_TYPE_OPTIONS[][src]

    pub const X_CONTENT_TYPE_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XContentTypeOptions),}

    Marker used by the server to indicate that the MIME types advertised in +actix_web::http::header::X_CONTENT_TYPE_OPTIONS - Rust

    Constant actix_web::http::header::X_CONTENT_TYPE_OPTIONS[][src]

    pub const X_CONTENT_TYPE_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XContentTypeOptions),}

    Marker used by the server to indicate that the MIME types advertised in the content-type headers should not be changed and be followed.

    This allows to opt-out of MIME type sniffing, or, in other words, it is a way to say that the webmasters knew what they were doing.

    diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html b/static/api/actix-web/stable/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html index 33b72b6..343e616 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.X_DNS_PREFETCH_CONTROL.html @@ -1,4 +1,4 @@ -actix_web::http::header::X_DNS_PREFETCH_CONTROL - Rust

    Constant actix_web::http::header::X_DNS_PREFETCH_CONTROL[][src]

    pub const X_DNS_PREFETCH_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XDnsPrefetchControl),}

    Controls DNS prefetching.

    +actix_web::http::header::X_DNS_PREFETCH_CONTROL - Rust

    Constant actix_web::http::header::X_DNS_PREFETCH_CONTROL[][src]

    pub const X_DNS_PREFETCH_CONTROL: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XDnsPrefetchControl),}

    Controls DNS prefetching.

    The x-dns-prefetch-control HTTP response header controls DNS prefetching, a feature by which browsers proactively perform domain name resolution on both links that the user may choose to follow as well as diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.X_FRAME_OPTIONS.html b/static/api/actix-web/stable/actix_web/http/header/constant.X_FRAME_OPTIONS.html index 9755313..bd997d8 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.X_FRAME_OPTIONS.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.X_FRAME_OPTIONS.html @@ -1,4 +1,4 @@ -actix_web::http::header::X_FRAME_OPTIONS - Rust

    Constant actix_web::http::header::X_FRAME_OPTIONS[][src]

    pub const X_FRAME_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XFrameOptions),}

    Indicates whether or not a browser should be allowed to render a page in +actix_web::http::header::X_FRAME_OPTIONS - Rust

    Constant actix_web::http::header::X_FRAME_OPTIONS[][src]

    pub const X_FRAME_OPTIONS: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XFrameOptions),}

    Indicates whether or not a browser should be allowed to render a page in a frame.

    Sites can use this to avoid clickjacking attacks, by ensuring that their content is not embedded into other sites.

    diff --git a/static/api/actix-web/stable/actix_web/http/header/constant.X_XSS_PROTECTION.html b/static/api/actix-web/stable/actix_web/http/header/constant.X_XSS_PROTECTION.html index 5c94325..4c13c36 100644 --- a/static/api/actix-web/stable/actix_web/http/header/constant.X_XSS_PROTECTION.html +++ b/static/api/actix-web/stable/actix_web/http/header/constant.X_XSS_PROTECTION.html @@ -1,4 +1,4 @@ -actix_web::http::header::X_XSS_PROTECTION - Rust

    Constant actix_web::http::header::X_XSS_PROTECTION[][src]

    pub const X_XSS_PROTECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XXssProtection),}

    Stop pages from loading when an XSS attack is detected.

    +actix_web::http::header::X_XSS_PROTECTION - Rust

    Constant actix_web::http::header::X_XSS_PROTECTION[][src]

    pub const X_XSS_PROTECTION: HeaderName = HeaderName{inner: Repr::Standard(StandardHeader::XXssProtection),}

    Stop pages from loading when an XSS attack is detected.

    The HTTP X-XSS-Protection response header is a feature of Internet Explorer, Chrome and Safari that stops pages from loading when they detect reflected cross-site scripting (XSS) attacks. Although these diff --git a/static/api/actix-web/stable/actix_web/http/header/enum.Entry.html b/static/api/actix-web/stable/actix_web/http/header/enum.Entry.html index 9645c07..44fdead 100644 --- a/static/api/actix-web/stable/actix_web/http/header/enum.Entry.html +++ b/static/api/actix-web/stable/actix_web/http/header/enum.Entry.html @@ -1,4 +1,4 @@ -actix_web::http::header::Entry - Rust

    Enum actix_web::http::header::Entry[][src]

    pub enum Entry<'a, T> where
        T: 'a, 
    { +actix_web::http::header::Entry - Rust

    Enum actix_web::http::header::Entry[][src]

    pub enum Entry<'a, T> where
        T: 'a, 
    { Occupied(OccupiedEntry<'a, T>), Vacant(VacantEntry<'a, T>), }

    A view into a single location in a HeaderMap, which may be vacant or occupied.

    @@ -10,7 +10,7 @@

    Methods

    -

    impl<'a, T> Entry<'a, T>
    [src]

    Important traits for &'a mut R

    Ensures a value is in the entry by inserting the default if empty.

    +

    impl<'a, T> Entry<'a, T>
    [src]

    Important traits for &'a mut R

    Ensures a value is in the entry by inserting the default if empty.

    Returns a mutable reference to the first value in the entry.

    Examples

    @@ -32,7 +32,7 @@
     
     assert_eq!(map["content-length"], 2);
     assert_eq!(map["x-hello"], 1);
    -

    Important traits for &'a mut R

    Ensures a value is in the entry by inserting the result of the default +

    Important traits for &'a mut R

    Ensures a value is in the entry by inserting the result of the default function if empty.

    The default function is not called if the entry exists in the map. Returns a mutable reference to the first value in the entry.

    @@ -58,7 +58,7 @@ Returns a mutable reference to the first value in the entry.

    assert_eq!(res, "world");
    -

    Returns a reference to the entry's key

    +

    Returns a reference to the entry's key

    Examples

     let mut map = HeaderMap::new();
    @@ -68,7 +68,7 @@ Returns a mutable reference to the first value in the entry.

    Trait Implementations

-

impl<'a, T> Debug for Entry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+

impl<'a, T> Debug for Entry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.Drain.html b/static/api/actix-web/stable/actix_web/http/header/struct.Drain.html index 52b36dc..bb71ef2 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.Drain.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.Drain.html @@ -1,67 +1,67 @@ -actix_web::http::header::Drain - Rust

Struct actix_web::http::header::Drain[][src]

pub struct Drain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A drain iterator for HeaderMap.

+actix_web::http::header::Drain - Rust

Struct actix_web::http::header::Drain[][src]

pub struct Drain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A drain iterator for HeaderMap.

Trait Implementations

-

impl<'a, T> Iterator for Drain<'a, T>
[src]

+

impl<'a, T> Drop for Drain<'a, T>
[src]

Executes the destructor for this type. Read more

+

impl<'a, T> Sync for Drain<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for Drain<'a, T>
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Send for Drain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for Drain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> Sync for Drain<'a, T> where
    T: Sync
[src]

impl<'a, T> Drop for Drain<'a, T>
[src]

Executes the destructor for this type. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for Drain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for Drain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.GetAll.html b/static/api/actix-web/stable/actix_web/http/header/struct.GetAll.html index d9c5872..069f716 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.GetAll.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.GetAll.html @@ -1,10 +1,10 @@ -actix_web::http::header::GetAll - Rust

Struct actix_web::http::header::GetAll[][src]

pub struct GetAll<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view to all values stored in a single entry.

+actix_web::http::header::GetAll - Rust

Struct actix_web::http::header::GetAll[][src]

pub struct GetAll<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view to all values stored in a single entry.

This struct is returned by HeaderMap::get_all.

Methods

-

impl<'a, T> GetAll<'a, T> where
    T: 'a, 
[src]

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

+

impl<'a, T> GetAll<'a, T> where
    T: 'a, 
[src]

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

Values are iterated in insertion order.

Examples

@@ -21,20 +21,20 @@
                 

Trait Implementations

-

impl<'a, 'b, T> IntoIterator for &'b GetAll<'a, T> where
    'b: 'a, 
[src]

+

impl<'a, T> PartialEq<GetAll<'a, T>> for GetAll<'a, T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<'a, 'b, T> IntoIterator for &'b GetAll<'a, T> where
    'b: 'a, 
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

-

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

-

impl<'a, T> IntoIterator for GetAll<'a, T>
[src]

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> IntoIterator for GetAll<'a, T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

-

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

-

impl<'a, T> Debug for GetAll<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> PartialEq<GetAll<'a, T>> for GetAll<'a, T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> Debug for GetAll<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.HeaderMap.html b/static/api/actix-web/stable/actix_web/http/header/struct.HeaderMap.html index a59563f..56978be 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.HeaderMap.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.HeaderMap.html @@ -1,4 +1,4 @@ -actix_web::http::header::HeaderMap - Rust

Struct actix_web::http::header::HeaderMap[][src]

pub struct HeaderMap<T = HeaderValue> { /* fields omitted */ }

A set of HTTP headers

+actix_web::http::header::HeaderMap - Rust

Struct actix_web::http::header::HeaderMap[][src]

pub struct HeaderMap<T = HeaderValue> { /* fields omitted */ }

A set of HTTP headers

HeaderMap is an multimap of HeaderName to values.

Examples

Basic usage

@@ -21,7 +21,7 @@

Methods

-

impl HeaderMap<HeaderValue>
[src]

Create an empty HeaderMap.

+

impl HeaderMap<HeaderValue>
[src]

Create an empty HeaderMap.

The map will be created without any capacity. This function will not allocate.

Examples

@@ -30,7 +30,7 @@ allocate.

assert!(map.is_empty()); assert_eq!(0, map.capacity());

-

impl<T> HeaderMap<T>
[src]

Create an empty HeaderMap with the specified capacity.

+

impl<T> HeaderMap<T>
[src]

Create an empty HeaderMap with the specified capacity.

The returned map will allocate internal storage in order to hold about capacity elements without reallocating. However, this is a "best effort" as there are usage patterns that could cause additional @@ -42,7 +42,7 @@ allocations before capacity headers are stored in the map.

assert!(map.is_empty()); assert_eq!(12, map.capacity()); -

Returns the number of headers stored in the map.

+

Returns the number of headers stored in the map.

This number represents the total number of values stored in the map. This number can be greater than or equal to the number of keys stored given that a single key may have more than one associated value.

@@ -60,7 +60,7 @@ stored given that a single key may have more than one associated value.

map.append(ACCEPT, "text/html".parse().unwrap()); assert_eq!(3, map.len()); -

Returns the number of keys stored in the map.

+

Returns the number of keys stored in the map.

This number will be less than or equal to len() as each key may have more than one associated value.

Examples

@@ -77,7 +77,7 @@ more than one associated value.

map.insert(ACCEPT, "text/html".parse().unwrap()); assert_eq!(2, map.keys_len()); -

Returns true if the map contains no elements.

+

Returns true if the map contains no elements.

Examples

 let mut map = HeaderMap::new();
@@ -87,7 +87,7 @@ more than one associated value.

map.insert(HOST, "hello.world".parse().unwrap()); assert!(!map.is_empty());
-

Clears the map, removing all key-value pairs. Keeps the allocated memory +

Clears the map, removing all key-value pairs. Keeps the allocated memory for reuse.

Examples

@@ -97,7 +97,7 @@ for reuse.

map.clear(); assert!(map.is_empty()); assert!(map.capacity() > 0);
-

Returns the number of headers the map can hold without reallocating.

+

Returns the number of headers the map can hold without reallocating.

This number is an approximation as certain usage patterns could cause additional allocations before the returned capacity is filled.

Examples

@@ -108,7 +108,7 @@ additional allocations before the returned capacity is filled.

map.insert(HOST, "hello.world".parse().unwrap()); assert_eq!(6, map.capacity()); -

Reserves capacity for at least additional more headers to be inserted +

Reserves capacity for at least additional more headers to be inserted into the HeaderMap.

The header map may reserve more space to avoid frequent reallocations. Like with with_capacity, this will be a "best effort" to avoid @@ -121,7 +121,7 @@ reached.

 let mut map = HeaderMap::new();
 map.reserve(10);
-

Returns a reference to the value associated with the key.

+

Returns a reference to the value associated with the key.

If there are multiple values associated with the key, then the first one is returned. Use get_all to get all values associated with a given key. Returns None if there are no values associated with the key.

@@ -136,7 +136,7 @@ key. Returns None if there are no values associated with the key.map.append(HOST, "world".parse().unwrap()); assert_eq!(map.get("host").unwrap(), &"hello"); -

Returns a mutable reference to the value associated with the key.

+

Returns a mutable reference to the value associated with the key.

If there are multiple values associated with the key, then the first one is returned. Use entry to get all values associated with a given key. Returns None if there are no values associated with the key.

@@ -147,7 +147,7 @@ key. Returns None if there are no values associated with the key.map.get_mut("host").unwrap().push_str("-world"); assert_eq!(map.get(HOST).unwrap(), &"hello-world"); -

Returns a view of all values associated with a key.

+

Returns a view of all values associated with a key.

The returned view does not incur any allocations and allows iterating the values associated with the key. See GetAll for more details. Returns None if there are no values associated with the key.

@@ -164,7 +164,7 @@ Returns None if there are no values associated with the key.

assert_eq!(&"hello", iter.next().unwrap()); assert_eq!(&"goodbye", iter.next().unwrap()); assert!(iter.next().is_none()); -

Returns true if the map contains a value for the specified key.

+

Returns true if the map contains a value for the specified key.

Examples

 let mut map = HeaderMap::new();
@@ -172,7 +172,7 @@ Returns None if there are no values associated with the key.

map.insert(HOST, "world".parse().unwrap()); assert!(map.contains_key("host"));
-

Important traits for Iter<'a, T>

An iterator visiting all key-value pairs.

+

Important traits for Iter<'a, T>

An iterator visiting all key-value pairs.

The iteration order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded once per associated value. So, if a key has 3 associated values, it will be yielded 3 times.

@@ -187,7 +187,7 @@ value. So, if a key has 3 associated values, it will be yielded 3 times.

for (key, value) in map.iter() { println!("{:?}: {:?}", key, value); } -

An iterator visiting all key-value pairs, with mutable value references.

+

An iterator visiting all key-value pairs, with mutable value references.

The iterator order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded once per associated value, so if a key has 3 associated values, it will be yielded 3 times.

@@ -202,7 +202,7 @@ so if a key has 3 associated values, it will be yielded 3 times.

for (key, value) in map.iter_mut() { value.push_str("-boop"); } -

Important traits for Keys<'a, T>

An iterator visiting all keys.

+

Important traits for Keys<'a, T>

An iterator visiting all keys.

The iteration order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded only once even if it has multiple associated values.

@@ -217,7 +217,7 @@ has multiple associated values.

for key in map.keys() { println!("{:?}", key); } -

Important traits for Values<'a, T>

An iterator visiting all values.

+

Important traits for Values<'a, T>

An iterator visiting all values.

The iteration order is arbitrary, but consistent across platforms for the same crate version.

Examples

@@ -231,7 +231,7 @@ the same crate version.

for value in map.values() { println!("{:?}", value); } -

An iterator visiting all values mutably.

+

An iterator visiting all values mutably.

The iteration order is arbitrary, but consistent across platforms for the same crate version.

Examples

@@ -245,7 +245,7 @@ the same crate version.

for value in map.values_mut() { value.push_str("-boop"); } -

Important traits for Drain<'a, T>

Clears the map, returning all entries as an iterator.

+

Important traits for Drain<'a, T>

Clears the map, returning all entries as an iterator.

The internal memory is kept for reuse.

Examples

@@ -269,7 +269,7 @@ the same crate version.

assert_eq!("content-length", key); assert_eq!("123", vals.next().unwrap()); assert!(vals.next().is_none());
-

Gets the given key's corresponding entry in the map for in-place +

Gets the given key's corresponding entry in the map for in-place manipulation.

Examples

@@ -289,7 +289,7 @@ manipulation.

assert_eq!(map["content-length"], 2); assert_eq!(map["x-hello"], 1);
-

Inserts a key-value pair into the map.

+

Inserts a key-value pair into the map.

If the map did not previously have this key present, then None is returned.

If the map did have this key present, the new value is associated with @@ -308,7 +308,7 @@ without being identical.

let mut prev = map.insert(HOST, "earth".parse().unwrap()).unwrap(); assert_eq!("world", prev); -

Inserts a key-value pair into the map.

+

Inserts a key-value pair into the map.

If the map did not previously have this key present, then false is returned.

If the map did have this key present, the new value is pushed to the end @@ -327,7 +327,7 @@ identical.

let mut i = values.iter(); assert_eq!("world", *i.next().unwrap()); assert_eq!("earth", *i.next().unwrap()); -

Removes a key from the map, returning the value associated with the key.

+

Removes a key from the map, returning the value associated with the key.

Returns None if the map does not contain the key. If there are multiple values associated with the key, then the first one is returned. See remove_entry_mult on OccupiedEntry for an API that yields all @@ -345,17 +345,60 @@ values.

Trait Implementations

-

impl<T> IntoIterator for HeaderMap<T>
[src]

+

impl<T> Default for HeaderMap<T>
[src]

Returns the "default value" for a type. Read more

+

impl<T> Eq for HeaderMap<T> where
    T: Eq
[src]

impl<T> PartialEq<HeaderMap<T>> for HeaderMap<T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T> Extend<(Option<HeaderName>, T)> for HeaderMap<T>
[src]

Extend a HeaderMap with the contents of another HeaderMap.

+

This function expects the yielded items to follow the same structure as +IntoIter.

+

Panics

+

This panics if the first yielded item does not have a HeaderName.

+

Examples

+
+let mut map = HeaderMap::new();
+
+map.insert(ACCEPT, "text/plain".parse().unwrap());
+map.insert(HOST, "hello.world".parse().unwrap());
+
+let mut extra = HeaderMap::new();
+
+extra.insert(HOST, "foo.bar".parse().unwrap());
+extra.insert(COOKIE, "hello".parse().unwrap());
+extra.append(COOKIE, "world".parse().unwrap());
+
+map.extend(extra);
+
+assert_eq!(map["host"], "foo.bar");
+assert_eq!(map["accept"], "text/plain");
+assert_eq!(map["cookie"], "hello");
+
+let v = map.get_all("host");
+assert_eq!(1, v.iter().count());
+
+let v = map.get_all("cookie");
+assert_eq!(2, v.iter().count());
+

impl<T> Extend<(HeaderName, T)> for HeaderMap<T>
[src]

Extends a collection with the contents of an iterator. Read more

+

impl<'a, K, T> Index<K> for HeaderMap<T> where
    K: AsHeaderName
[src]

+

The returned type after indexing.

+

Important traits for &'a mut R

Panics

+

Using the index operator will cause a panic if the header you're querying isn't set.

+

impl<'a, T> IntoIterator for &'a HeaderMap<T>
[src]

The type of the elements being iterated over.

-

+

Which kind of iterator are we turning this into?

-

Important traits for IntoIter<T>

Creates a consuming iterator, that is, one that moves keys and values +

Important traits for Iter<'a, T>

Creates an iterator from a value. Read more

+

impl<T> IntoIterator for HeaderMap<T>
[src]

+

The type of the elements being iterated over.

+

+

Which kind of iterator are we turning this into?

+

Important traits for IntoIter<T>

Creates a consuming iterator, that is, one that moves keys and values out of the map in arbitary order. The map cannot be used after calling this.

For each yielded item that has None provided for the HeaderName, then the associated header name is the same as that of the previously yielded item. The first yielded item will have HeaderName set.

-

Examples

+

Examples

Basic usage.

@@ -388,57 +431,15 @@ yielded item. The first yielded item will have HeaderName set.

assert_eq!(iter.next(), Some((None, "html".parse().unwrap()))); assert_eq!(iter.next(), Some((None, "xml".parse().unwrap()))); assert!(iter.next().is_none());
-

impl<'a, T> IntoIterator for &'a mut HeaderMap<T>
[src]

+

impl<'a, T> IntoIterator for &'a mut HeaderMap<T>
[src]

The type of the elements being iterated over.

-

+

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

impl<'a, T> IntoIterator for &'a HeaderMap<T>
[src]

-

The type of the elements being iterated over.

-

-

Which kind of iterator are we turning this into?

-

Important traits for Iter<'a, T>

Creates an iterator from a value. Read more

-

impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
[src]

Creates a value from an iterator. Read more

-

impl<T> Debug for HeaderMap<T> where
    T: Debug
[src]

Formats the value using the given formatter. Read more

-

impl<T> Eq for HeaderMap<T> where
    T: Eq
[src]

impl<T> Default for HeaderMap<T>
[src]

Returns the "default value" for a type. Read more

-

impl<T> PartialEq<HeaderMap<T>> for HeaderMap<T> where
    T: PartialEq<T>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

impl<T> Extend<(HeaderName, T)> for HeaderMap<T>
[src]

Extends a collection with the contents of an iterator. Read more

-

impl<T> Extend<(Option<HeaderName>, T)> for HeaderMap<T>
[src]

Extend a HeaderMap with the contents of another HeaderMap.

-

This function expects the yielded items to follow the same structure as -IntoIter.

-

Panics

-

This panics if the first yielded item does not have a HeaderName.

-

Examples

-
-let mut map = HeaderMap::new();
-
-map.insert(ACCEPT, "text/plain".parse().unwrap());
-map.insert(HOST, "hello.world".parse().unwrap());
-
-let mut extra = HeaderMap::new();
-
-extra.insert(HOST, "foo.bar".parse().unwrap());
-extra.insert(COOKIE, "hello".parse().unwrap());
-extra.append(COOKIE, "world".parse().unwrap());
-
-map.extend(extra);
-
-assert_eq!(map["host"], "foo.bar");
-assert_eq!(map["accept"], "text/plain");
-assert_eq!(map["cookie"], "hello");
-
-let v = map.get_all("host");
-assert_eq!(1, v.iter().count());
-
-let v = map.get_all("cookie");
-assert_eq!(2, v.iter().count());
-

impl<T> Clone for HeaderMap<T> where
    T: Clone
[src]

Returns a copy of the value. Read more

+

Creates an iterator from a value. Read more

+

impl<T> Clone for HeaderMap<T> where
    T: Clone
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

impl<'a, K, T> Index<K> for HeaderMap<T> where
    K: AsHeaderName
[src]

-

The returned type after indexing.

-

Important traits for &'a mut R

Performs the indexing (container[index]) operation.

+

impl<T> Debug for HeaderMap<T> where
    T: Debug
[src]

Formats the value using the given formatter. Read more

+

impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
[src]

Creates a value from an iterator. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.HeaderName.html b/static/api/actix-web/stable/actix_web/http/header/struct.HeaderName.html index 5d703a9..d930faa 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.HeaderName.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.HeaderName.html @@ -1,4 +1,4 @@ -actix_web::http::header::HeaderName - Rust

Struct actix_web::http::header::HeaderName[][src]

pub struct HeaderName { /* fields omitted */ }

Represents an HTTP header field name

+actix_web::http::header::HeaderName - Rust

Struct actix_web::http::header::HeaderName[][src]

pub struct HeaderName { /* fields omitted */ }

Represents an HTTP header field name

Header field names identify the header. Header sets may include multiple headers with the same name. The HTTP specification defines a number of standard headers, but HTTP messages may include non-standard header names as @@ -15,9 +15,9 @@ computation and the comparison operation.

Methods

-

impl HeaderName
[src]

Converts a slice of bytes to an HTTP header name.

+

impl HeaderName
[src]

Converts a slice of bytes to an HTTP header name.

This function normalizes the input.

-

Converts a slice of bytes to an HTTP header name.

+

Converts a slice of bytes to an HTTP header name.

This function expects the input to only contain lowercase characters. This is useful when decoding HTTP/2.0 headers. The HTTP/2.0 specification requires that all headers be represented in lower case.

@@ -30,7 +30,7 @@ specification requires that all headers be represented in lower case.

// Parsing a header that contains uppercase characters assert!(HeaderName::from_lowercase(b"Content-Length").is_err()); -

Converts a static string to a HTTP header name.

+

Converts a static string to a HTTP header name.

This function panics when the static string is a invalid header.

This function requires the static string to only contain lowercase characters, numerals and symbols, as per the HTTP/2.0 specification @@ -55,40 +55,22 @@ and header names internal representation within this library.

// Parsing a header that contains invalid uppercase characters. let a = HeaderName::from_static("foobar"); let b = HeaderName::from_static("FOOBAR"); // This line panics! -

Returns a str representation of the header.

+

Returns a str representation of the header.

The returned string will always be lower case.

Trait Implementations

-

impl Borrow<str> for HeaderName
[src]

Immutably borrows from an owned value. Read more

-

impl<'a> From<&'a HeaderName> for HeaderName
[src]

Performs the conversion.

-

impl From<HeaderName> for Bytes
[src]

Performs the conversion.

-

impl From<HeaderName> for HeaderValue
[src]

Performs the conversion.

-

impl Debug for HeaderName
[src]

Formats the value using the given formatter. Read more

-

impl Eq for HeaderName
[src]

impl FromStr for HeaderName
[src]

-

The associated error which can be returned from parsing.

-

Parses a string s to return a value of this type. Read more

-

impl<'a> HttpTryFrom<&'a str> for HeaderName
[src]

-

Associated error with the conversion this implementation represents.

-

impl<'a> HttpTryFrom<&'a [u8]> for HeaderName
[src]

-

Associated error with the conversion this implementation represents.

-

impl HttpTryFrom<HeaderName> for HeaderValue
[src]

-

Associated error with the conversion this implementation represents.

-

impl HttpTryFrom<Bytes> for HeaderName
[src]

-

Associated error with the conversion this implementation represents.

-

impl HttpTryFrom<HeaderName> for HeaderName
[src]

-

Associated error with the conversion this implementation represents.

-

impl AsRef<str> for HeaderName
[src]

Performs the conversion.

-

impl AsRef<[u8]> for HeaderName
[src]

Important traits for &'a [u8]

Performs the conversion.

-

impl<'a> IntoHeaderName for &'a HeaderName
[src]

impl IntoHeaderName for HeaderName
[src]

impl<'a> PartialEq<&'a str> for HeaderName
[src]

Performs a case-insensitive comparison of the string against the header +

impl Eq for HeaderName
[src]

impl<'a> PartialEq<HeaderName> for &'a str
[src]

Performs a case-insensitive comparison of the string against the header name

This method tests for !=.

-

impl<'a> PartialEq<HeaderName> for &'a HeaderName
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

-

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Send for Iter<'a, T> where
    T: Sync
[src]

impl<'a, T> Debug for Iter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> Sync for Iter<'a, T> where
    T: Sync
[src]

\ No newline at end of file +

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for Iter<'a, T> where
    T: Sync
[src]

impl<'a, T> Debug for Iter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+
\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.Keys.html b/static/api/actix-web/stable/actix_web/http/header/struct.Keys.html index c5c4809..254a399 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.Keys.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.Keys.html @@ -1,70 +1,72 @@ -actix_web::http::header::Keys - Rust

Struct actix_web::http::header::Keys[][src]

pub struct Keys<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator over HeaderMap keys.

+actix_web::http::header::Keys - Rust

Struct actix_web::http::header::Keys[][src]

pub struct Keys<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator over HeaderMap keys.

Each header name is yielded only once, even if it has more than one associated value.

Trait Implementations

-

impl<'a, T> Iterator for Keys<'a, T>
[src]

+

impl<'a, T> ExactSizeIterator for Keys<'a, T>
[src]

Returns the exact number of times the iterator will iterate. Read more

+

🔬 This is a nightly-only experimental API. (exact_size_is_empty)

Returns whether the iterator is empty. Read more

+

impl<'a, T> Iterator for Keys<'a, T>
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Debug for Keys<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Debug for Keys<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.LanguageTag.html b/static/api/actix-web/stable/actix_web/http/header/struct.LanguageTag.html index 28bd587..b497ad6 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.LanguageTag.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.LanguageTag.html @@ -1,10 +1,10 @@ -actix_web::http::header::LanguageTag - Rust

Struct actix_web::http::header::LanguageTag[]

pub struct LanguageTag {
+actix_web::http::header::LanguageTag - Rust

Struct actix_web::http::header::LanguageTag[]

pub struct LanguageTag {
     pub language: Option<String>,
     pub extlangs: Vec<String>,
     pub script: Option<String>,
     pub region: Option<String>,
     pub variants: Vec<String>,
-    pub extensions: BTreeMap<u8, Vec<String>>,
+    pub extensions: BTreeMap<u8, Vec<String>>,
     pub privateuse: Vec<String>,
 }

A language tag as described in BCP47.

Language tags are used to help identify languages, whether spoken, @@ -55,7 +55,7 @@ covered by other available subtags.

Extensions provide a mechanism for extending language tags for use in various applications. They are intended to identify information that is commonly used in association with languages or language tags but @@ -108,17 +108,17 @@ not validated.

Trait Implementations

-

impl Default for LanguageTag

Returns the "default value" for a type. Read more

-

impl Display for LanguageTag

Formats the value using the given formatter. Read more

-

impl Debug for LanguageTag

Formats the value using the given formatter. Read more

+

impl Display for LanguageTag

Formats the value using the given formatter. Read more

+

impl Default for LanguageTag

Returns the "default value" for a type. Read more

impl Eq for LanguageTag

impl PartialEq<LanguageTag> for LanguageTag

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

impl Clone for LanguageTag

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

impl FromStr for LanguageTag

The associated error which can be returned from parsing.

Parses a string s to return a value of this type. Read more

+

impl Clone for LanguageTag

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

impl Debug for LanguageTag

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.OccupiedEntry.html b/static/api/actix-web/stable/actix_web/http/header/struct.OccupiedEntry.html index 3240f41..c0a8c97 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.OccupiedEntry.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.OccupiedEntry.html @@ -1,10 +1,10 @@ -actix_web::http::header::OccupiedEntry - Rust

Struct actix_web::http::header::OccupiedEntry[][src]

pub struct OccupiedEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single occupied location in a HeaderMap.

+actix_web::http::header::OccupiedEntry - Rust

Struct actix_web::http::header::OccupiedEntry[][src]

pub struct OccupiedEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single occupied location in a HeaderMap.

This struct is returned as part of the Entry enum.

Methods

-

impl<'a, T> OccupiedEntry<'a, T>
[src]

Returns a reference to the entry's key.

+

impl<'a, T> OccupiedEntry<'a, T>
[src]

Returns a reference to the entry's key.

Examples

 let mut map = HeaderMap::new();
@@ -13,7 +13,7 @@
 if let Entry::Occupied(e) = map.entry("host").unwrap() {
     assert_eq!("host", e.key());
 }
-

Important traits for &'a mut R

Get a reference to the first value in the entry.

+

Important traits for &'a mut R

Get a reference to the first value in the entry.

Values are stored in insertion order.

Panics

get panics if there are no values associated with the entry.

@@ -29,7 +29,7 @@ assert_eq!(e.get(), &"hello.world"); }

-

Important traits for &'a mut R

Get a mutable reference to the first value in the entry.

+

Important traits for &'a mut R

Get a mutable reference to the first value in the entry.

Values are stored in insertion order.

Panics

get_mut panics if there are no values associated with the entry.

@@ -42,7 +42,7 @@ e.get_mut().push_str("-2"); assert_eq!(e.get(), &"hello.world-2"); } -

Important traits for &'a mut R

Converts the OccupiedEntry into a mutable reference to the first +

Important traits for &'a mut R

Converts the OccupiedEntry into a mutable reference to the first value.

The lifetime of the returned reference is bound to the original map.

Panics

@@ -58,7 +58,7 @@ value.

} assert_eq!("hello.world-2", map["host"]); -

Sets the value of the entry.

+

Sets the value of the entry.

All previous values associated with the entry are removed and the first one is returned. See insert_mult for an API that returns all values.

Examples

@@ -72,7 +72,7 @@ one is returned. See insert_mult for an API that returns all values } assert_eq!("earth", map["host"]); -

Important traits for ValueDrain<'a, T>

Sets the value of the entry.

+

Important traits for ValueDrain<'a, T>

Sets the value of the entry.

This function does the same as insert except it returns an iterator that yields all values previously associated with the key.

Examples

@@ -89,7 +89,7 @@ that yields all values previously associated with the key.

} assert_eq!("earth", map["host"]); -

Insert the value into the entry.

+

Insert the value into the entry.

The new value is appended to the end of the entry's value list. All previous values associated with the entry are retained.

Examples

@@ -105,7 +105,7 @@ previous values associated with the entry are retained.

let mut i = values.iter(); assert_eq!("world", *i.next().unwrap()); assert_eq!("earth", *i.next().unwrap()); -

Remove the entry from the map.

+

Remove the entry from the map.

All values associated with the entry are removed and the first one is returned. See remove_entry_mult for an API that returns all values.

Examples

@@ -119,7 +119,7 @@ returned. See remove_entry_mult for an API that returns all values. } assert!(!map.contains_key("host")); -

Remove the entry from the map.

+

Remove the entry from the map.

The key and all values associated with the entry are removed and the first one is returned. See remove_entry_mult for an API that returns all values.

@@ -135,10 +135,10 @@ all values.

} assert!(!map.contains_key("host")); -

Remove the entry from the map.

+

Remove the entry from the map.

The key and all values associated with the entry are removed and returned.

-

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

+

Important traits for ValueIter<'a, T>

Returns an iterator visiting all values associated with the entry.

Values are iterated in insertion order.

Examples

@@ -152,7 +152,7 @@ returned.

assert_eq!(&"earth", iter.next().unwrap()); assert!(iter.next().is_none()); }
-

Important traits for ValueIterMut<'a, T>

Returns an iterator mutably visiting all values associated with the +

Important traits for ValueIterMut<'a, T>

Returns an iterator mutably visiting all values associated with the entry.

Values are iterated in insertion order.

Examples

@@ -175,22 +175,22 @@ entry.

Trait Implementations

-

impl<'a, 'b, T> IntoIterator for &'b OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

+

impl<'a, 'b, T> IntoIterator for &'b OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

-

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

-

impl<'a, 'b, T> IntoIterator for &'b mut OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

+

Important traits for ValueIter<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, 'b, T> IntoIterator for &'b mut OccupiedEntry<'a, T> where
    'b: 'a, 
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

-

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

-

impl<'a, T> IntoIterator for OccupiedEntry<'a, T>
[src]

+

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> IntoIterator for OccupiedEntry<'a, T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

-

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

-

impl<'a, T> Debug for OccupiedEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+

Important traits for ValueIterMut<'a, T>

Creates an iterator from a value. Read more

+

impl<'a, T> Debug for OccupiedEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.ToStrError.html b/static/api/actix-web/stable/actix_web/http/header/struct.ToStrError.html index 2238852..db8bd5e 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.ToStrError.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.ToStrError.html @@ -1,14 +1,14 @@ -actix_web::http::header::ToStrError - Rust

Struct actix_web::http::header::ToStrError[][src]

pub struct ToStrError { /* fields omitted */ }

A possible error when converting a HeaderValue to a string representation.

+actix_web::http::header::ToStrError - Rust

Struct actix_web::http::header::ToStrError[][src]

pub struct ToStrError { /* fields omitted */ }

A possible error when converting a HeaderValue to a string representation.

Header field values may contain opaque bytes, in which case it is not possible to represent the value as a string.

Trait Implementations

-

impl Display for ToStrError
[src]

Formats the value using the given formatter. Read more

-

impl Debug for ToStrError
[src]

Formats the value using the given formatter. Read more

-

impl Error for ToStrError
[src]

This method is soft-deprecated. Read more

-

The lower-level cause of this error, if any. Read more

+

impl Display for ToStrError
[src]

Formats the value using the given formatter. Read more

+

impl Error for ToStrError
[src]

This method is soft-deprecated. Read more

+

The lower-level cause of this error, if any. Read more

+

impl Debug for ToStrError
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.VacantEntry.html b/static/api/actix-web/stable/actix_web/http/header/struct.VacantEntry.html index a6e42b8..fad8a61 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.VacantEntry.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.VacantEntry.html @@ -1,16 +1,16 @@ -actix_web::http::header::VacantEntry - Rust

Struct actix_web::http::header::VacantEntry[][src]

pub struct VacantEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single empty location in a HeaderMap.

+actix_web::http::header::VacantEntry - Rust

Struct actix_web::http::header::VacantEntry[][src]

pub struct VacantEntry<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A view into a single empty location in a HeaderMap.

This struct is returned as part of the Entry enum.

Methods

-

impl<'a, T> VacantEntry<'a, T>
[src]

Returns a reference to the entry's key

+

impl<'a, T> VacantEntry<'a, T>
[src]

Returns a reference to the entry's key

Examples

 let mut map = HeaderMap::new();
 
 assert_eq!(map.entry("x-hello").unwrap().key().as_str(), "x-hello");
-

Take ownership of the key

+

Take ownership of the key

Examples

 let mut map = HeaderMap::new();
@@ -18,7 +18,7 @@
 if let Entry::Vacant(v) = map.entry("x-hello").unwrap() {
     assert_eq!(v.into_key().as_str(), "x-hello");
 }
-

Important traits for &'a mut R

Insert the value into the entry.

+

Important traits for &'a mut R

Insert the value into the entry.

The value will be associated with this entry's key. A mutable reference to the inserted value will be returned.

Examples

@@ -30,7 +30,7 @@ to the inserted value will be returned.

} assert_eq!(map["x-hello"], "world"); -

Insert the value into the entry.

+

Insert the value into the entry.

The value will be associated with this entry's key. The new OccupiedEntry is returned, allowing for further manipulation.

Examples

@@ -47,7 +47,7 @@ to the inserted value will be returned.

Trait Implementations

-

impl<'a, T> Debug for VacantEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+

impl<'a, T> Debug for VacantEntry<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.ValueDrain.html b/static/api/actix-web/stable/actix_web/http/header/struct.ValueDrain.html index 556371c..eed0338 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.ValueDrain.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.ValueDrain.html @@ -1,67 +1,67 @@ -actix_web::http::header::ValueDrain - Rust

Struct actix_web::http::header::ValueDrain[][src]

pub struct ValueDrain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An drain iterator of all values associated with a single header name.

+actix_web::http::header::ValueDrain - Rust

Struct actix_web::http::header::ValueDrain[][src]

pub struct ValueDrain<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An drain iterator of all values associated with a single header name.

Trait Implementations

-

impl<'a, T> Iterator for ValueDrain<'a, T>
[src]

+

impl<'a, T> Drop for ValueDrain<'a, T>
[src]

Executes the destructor for this type. Read more

+

impl<'a, T> Sync for ValueDrain<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for ValueDrain<'a, T>
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Send for ValueDrain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueDrain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> Sync for ValueDrain<'a, T> where
    T: Sync
[src]

impl<'a, T> Drop for ValueDrain<'a, T>
[src]

Executes the destructor for this type. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Send for ValueDrain<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueDrain<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.ValueIter.html b/static/api/actix-web/stable/actix_web/http/header/struct.ValueIter.html index 2a3e9d6..291faed 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.ValueIter.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.ValueIter.html @@ -1,72 +1,72 @@ -actix_web::http::header::ValueIter - Rust

Struct actix_web::http::header::ValueIter[][src]

pub struct ValueIter<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator of all values associated with a single header name.

+actix_web::http::header::ValueIter - Rust

Struct actix_web::http::header::ValueIter[][src]

pub struct ValueIter<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

An iterator of all values associated with a single header name.

Trait Implementations

-

impl<'a, T> Iterator for ValueIter<'a, T> where
    T: 'a, 
[src]

+

impl<'a, T> Iterator for ValueIter<'a, T> where
    T: 'a, 
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Debug for ValueIter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> DoubleEndedIterator for ValueIter<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> DoubleEndedIterator for ValueIter<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

This is the reverse version of [try_fold()]: it takes elements starting from the back of the iterator. Read more

An iterator method that reduces the iterator's elements to a single, final value, starting from the back. Read more

Searches for an element of an iterator from the back that satisfies a predicate. Read more

+

impl<'a, T> Debug for ValueIter<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.ValueIterMut.html b/static/api/actix-web/stable/actix_web/http/header/struct.ValueIterMut.html index 3d2b4ad..d371717 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.ValueIterMut.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.ValueIterMut.html @@ -1,70 +1,70 @@ -actix_web::http::header::ValueIterMut - Rust

Struct actix_web::http::header::ValueIterMut[][src]

pub struct ValueIterMut<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A mutable iterator of all values associated with a single header name.

+actix_web::http::header::ValueIterMut - Rust

Struct actix_web::http::header::ValueIterMut[][src]

pub struct ValueIterMut<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

A mutable iterator of all values associated with a single header name.

Trait Implementations

-

impl<'a, T> Iterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

+

impl<'a, T> Sync for ValueIterMut<'a, T> where
    T: Sync
[src]

impl<'a, T> Iterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

+

Advances the iterator and returns the next value. Read more

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Send for ValueIterMut<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueIterMut<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

-

impl<'a, T> Sync for ValueIterMut<'a, T> where
    T: Sync
[src]

impl<'a, T> DoubleEndedIterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> DoubleEndedIterator for ValueIterMut<'a, T> where
    T: 'a, 
[src]

Removes and returns an element from the end of the iterator. Read more

This is the reverse version of [try_fold()]: it takes elements starting from the back of the iterator. Read more

An iterator method that reduces the iterator's elements to a single, final value, starting from the back. Read more

Searches for an element of an iterator from the back that satisfies a predicate. Read more

+

impl<'a, T> Send for ValueIterMut<'a, T> where
    T: Send
[src]

impl<'a, T> Debug for ValueIterMut<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/struct.Values.html b/static/api/actix-web/stable/actix_web/http/header/struct.Values.html index 1224ea6..9fb5b51 100644 --- a/static/api/actix-web/stable/actix_web/http/header/struct.Values.html +++ b/static/api/actix-web/stable/actix_web/http/header/struct.Values.html @@ -1,69 +1,69 @@ -actix_web::http::header::Values - Rust

Struct actix_web::http::header::Values[][src]

pub struct Values<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

HeaderMap value iterator.

+actix_web::http::header::Values - Rust

Struct actix_web::http::header::Values[][src]

pub struct Values<'a, T> where
    T: 'a, 
{ /* fields omitted */ }

HeaderMap value iterator.

Each value contained in the HeaderMap will be yielded.

Trait Implementations

-

impl<'a, T> Iterator for Values<'a, T>
[src]

+

impl<'a, T> Iterator for Values<'a, T>
[src]

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

+

Advances the iterator and returns the next value. Read more

+

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

-

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

-

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

-

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

-

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

-

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

-

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

-

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

-

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

-

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

-

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

-

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

-

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

-

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

-

Important traits for Flatten<I>

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

-

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

-

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

-

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

+

Important traits for StepBy<I>

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

+

Important traits for Chain<A, B>

Takes two iterators and creates a new iterator over both in sequence. Read more

+

Important traits for Zip<A, B>

'Zips up' two iterators into a single iterator of pairs. Read more

+

Important traits for Map<I, F>

Takes a closure and creates an iterator which calls that closure on each element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Important traits for Filter<I, P>

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

+

Important traits for FilterMap<I, F>

Creates an iterator that both filters and maps. Read more

+

Important traits for Enumerate<I>

Creates an iterator which gives the current iteration count as well as the next value. Read more

+

Important traits for Peekable<I>

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

+

Important traits for SkipWhile<I, P>

Creates an iterator that [skip]s elements based on a predicate. Read more

+

Important traits for TakeWhile<I, P>

Creates an iterator that yields elements based on a predicate. Read more

+

Important traits for Skip<I>

Creates an iterator that skips the first n elements. Read more

+

Important traits for Take<I>

Creates an iterator that yields its first n elements. Read more

+

Important traits for Scan<I, St, F>

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

+

Important traits for FlatMap<I, U, F>

Creates an iterator that works like map, but flattens nested structure. Read more

+

Important traits for Flatten<I>

Creates an iterator that flattens nested structure. Read more

+

Important traits for Fuse<I>

Creates an iterator which ends after the first [None]. Read more

+

Important traits for Inspect<I, F>

Do something with each element of an iterator, passing the value on. Read more

+

Important traits for &'a mut R

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

-

An iterator method that applies a function, producing a single, final value. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

+
fn collect<B>(self) -> B where
    B: FromIterator<Self::Item>, 
1.0.0
[src]

Transforms an iterator into a collection. Read more

+

Consumes an iterator, creating two collections from it. Read more

+

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

+

An iterator method that applies a function, producing a single, final value. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the specified function. Read more

-

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

-

Returns the element that gives the minimum value from the specified function. Read more

-

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

-

Important traits for Rev<I>

Reverses an iterator's direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

-

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Lexicographically compares the elements of this Iterator with those of another. Read more

-

Determines if the elements of this Iterator are equal to those of another. Read more

-

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

-

impl<'a, T> Debug for Values<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the specified function. Read more

+

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

+

Returns the element that gives the minimum value from the specified function. Read more

+

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

+

Important traits for Rev<I>

Reverses an iterator's direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Important traits for Cloned<I>

Creates an iterator which [clone]s all of its elements. Read more

+

Important traits for Cycle<I>

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Lexicographically compares the elements of this Iterator with those of another. Read more

+

Determines if the elements of this Iterator are equal to those of another. Read more

+

Determines if the elements of this Iterator are unequal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

+

impl<'a, T> Debug for Values<'a, T> where
    T: 'a + Debug
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/header/trait.AsHeaderName.html b/static/api/actix-web/stable/actix_web/http/header/trait.AsHeaderName.html index d4fc529..74072f7 100644 --- a/static/api/actix-web/stable/actix_web/http/header/trait.AsHeaderName.html +++ b/static/api/actix-web/stable/actix_web/http/header/trait.AsHeaderName.html @@ -1,16 +1,16 @@ -actix_web::http::header::AsHeaderName - Rust

Trait actix_web::http::header::AsHeaderName[][src]

pub trait AsHeaderName: Sealed { }

A marker trait used to identify values that can be used as search keys +actix_web::http::header::AsHeaderName - Rust

Trait actix_web::http::header::AsHeaderName[][src]

pub trait AsHeaderName: Sealed { }

A marker trait used to identify values that can be used as search keys to a HeaderMap.

Implementations on Foreign Types

-

impl AsHeaderName for String
[src]

impl<'a> AsHeaderName for &'a str
[src]

impl<'a> AsHeaderName for &'a String
[src]

+

impl<'a> AsHeaderName for &'a String
[src]

impl<'a> AsHeaderName for &'a str
[src]

impl AsHeaderName for String
[src]

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/header/trait.IntoHeaderName.html b/static/api/actix-web/stable/actix_web/http/header/trait.IntoHeaderName.html index 070e4c8..7568c5a 100644 --- a/static/api/actix-web/stable/actix_web/http/header/trait.IntoHeaderName.html +++ b/static/api/actix-web/stable/actix_web/http/header/trait.IntoHeaderName.html @@ -1,16 +1,16 @@ -actix_web::http::header::IntoHeaderName - Rust

Trait actix_web::http::header::IntoHeaderName[][src]

pub trait IntoHeaderName: Sealed { }

A marker trait used to identify values that can be used as insert keys +actix_web::http::header::IntoHeaderName - Rust

Trait actix_web::http::header::IntoHeaderName[][src]

pub trait IntoHeaderName: Sealed { }

A marker trait used to identify values that can be used as insert keys to a HeaderMap.

Implementations on Foreign Types

-

impl IntoHeaderName for &'static str
[src]

+

impl IntoHeaderName for &'static str
[src]

Implementors

\ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/http/struct.Cookie.html b/static/api/actix-web/stable/actix_web/http/struct.Cookie.html index 90f6656..8a39101 100644 --- a/static/api/actix-web/stable/actix_web/http/struct.Cookie.html +++ b/static/api/actix-web/stable/actix_web/http/struct.Cookie.html @@ -1,4 +1,4 @@ -actix_web::http::Cookie - Rust

Struct actix_web::http::Cookie[][src]

pub struct Cookie<'c> { /* fields omitted */ }

Representation of an HTTP cookie.

+actix_web::http::Cookie - Rust

Struct actix_web::http::Cookie[][src]

pub struct Cookie<'c> { /* fields omitted */ }

Representation of an HTTP cookie.

Constructing a Cookie

To construct a cookie with only a name/value, use the new method:

@@ -24,14 +24,14 @@ and CookieBuilder methods:<

Methods

-

impl Cookie<'static>
[src]

Creates a new Cookie with the given name and value.

+

impl Cookie<'static>
[src]

Creates a new Cookie with the given name and value.

Example

 use cookie::Cookie;
 
 let cookie = Cookie::new("name", "value");
 assert_eq!(cookie.name_value(), ("name", "value"));
-

Creates a new Cookie with the given name and an empty value.

+

Creates a new Cookie with the given name and an empty value.

Example

 use cookie::Cookie;
@@ -39,7 +39,7 @@ and CookieBuilder methods:<
 let cookie = Cookie::named("name");
 assert_eq!(cookie.name(), "name");
 assert!(cookie.value().is_empty());
-

Creates a new CookieBuilder instance from the given key and value +

Creates a new CookieBuilder instance from the given key and value strings.

Example

@@ -47,7 +47,7 @@ strings.

let c = Cookie::build("foo", "bar").finish(); assert_eq!(c.name_value(), ("foo", "bar"));
-

impl<'c> Cookie<'c>
[src]

Parses a Cookie from the given HTTP cookie header value string. Does +

impl<'c> Cookie<'c>
[src]

Parses a Cookie from the given HTTP cookie header value string. Does not perform any percent-decoding.

Example

@@ -55,8 +55,8 @@ not perform any percent-decoding.

let c = Cookie::parse("foo=bar%20baz; HttpOnly").unwrap(); assert_eq!(c.name_value(), ("foo", "bar%20baz")); -assert_eq!(c.http_only(), true);
-

Parses a Cookie from the given HTTP cookie header value string where +assert_eq!(c.http_only(), Some(true)); +

Parses a Cookie from the given HTTP cookie header value string where the name and value fields are percent-encoded. Percent-decodes the name/value fields.

This API requires the percent-encode feature to be enabled on this @@ -67,8 +67,8 @@ crate.

let c = Cookie::parse_encoded("foo=bar%20baz; HttpOnly").unwrap(); assert_eq!(c.name_value(), ("foo", "bar baz")); -assert_eq!(c.http_only(), true); -

Wraps self in an EncodedCookie: a cost-free wrapper around Cookie +assert_eq!(c.http_only(), Some(true)); +

Wraps self in an EncodedCookie: a cost-free wrapper around Cookie whose Display implementation percent-encodes the name and value of the wrapped Cookie.

This method is only available when the percent-encode feature is @@ -79,7 +79,7 @@ enabled.

let mut c = Cookie::new("my name", "this; value?"); assert_eq!(&c.encoded().to_string(), "my%20name=this%3B%20value%3F"); -

Converts self into a Cookie with a static lifetime. This method +

Converts self into a Cookie with a static lifetime. This method results in at most one allocation.

Example

@@ -88,49 +88,83 @@ results in at most one allocation.

let c = Cookie::new("a", "b"); let owned_cookie = c.into_owned(); assert_eq!(owned_cookie.name_value(), ("a", "b"));
-

Returns the name of self.

+

Returns the name of self.

Example

 use cookie::Cookie;
 
 let c = Cookie::new("name", "value");
 assert_eq!(c.name(), "name");
-

Returns the value of self.

+

Returns the value of self.

Example

 use cookie::Cookie;
 
 let c = Cookie::new("name", "value");
 assert_eq!(c.value(), "value");
-

Returns the name and value of self as a tuple of (name, value).

+

Returns the name and value of self as a tuple of (name, value).

Example

 use cookie::Cookie;
 
 let c = Cookie::new("name", "value");
 assert_eq!(c.name_value(), ("name", "value"));
-

Returns whether this cookie was marked HttpOnly or not.

+

Returns whether this cookie was marked HttpOnly or not. Returns +Some(true) when the cookie was explicitly set (manually or parsed) as +HttpOnly, Some(false) when http_only was manually set to false, +and None otherwise.

Example

 use cookie::Cookie;
 
 let c = Cookie::parse("name=value; httponly").unwrap();
-assert_eq!(c.http_only(), true);
-

Returns whether this cookie was marked Secure or not.

+assert_eq!(c.http_only(), Some(true)); + +let mut c = Cookie::new("name", "value"); +assert_eq!(c.http_only(), None); + +let mut c = Cookie::new("name", "value"); +assert_eq!(c.http_only(), None); + +// An explicitly set "false" value. +c.set_http_only(false); +assert_eq!(c.http_only(), Some(false)); + +// An explicitly set "true" value. +c.set_http_only(true); +assert_eq!(c.http_only(), Some(true)); +

Returns whether this cookie was marked Secure or not. Returns +Some(true) when the cookie was explicitly set (manually or parsed) as +Secure, Some(false) when secure was manually set to false, and +None otherwise.

Example

 use cookie::Cookie;
 
 let c = Cookie::parse("name=value; Secure").unwrap();
-assert_eq!(c.secure(), true);
-

Returns the SameSite attribute of this cookie if one was specified.

+assert_eq!(c.secure(), Some(true)); + +let mut c = Cookie::parse("name=value").unwrap(); +assert_eq!(c.secure(), None); + +let mut c = Cookie::new("name", "value"); +assert_eq!(c.secure(), None); + +// An explicitly set "false" value. +c.set_secure(false); +assert_eq!(c.secure(), Some(false)); + +// An explicitly set "true" value. +c.set_secure(true); +assert_eq!(c.secure(), Some(true)); +

Returns the SameSite attribute of this cookie if one was specified.

Example

 use cookie::{Cookie, SameSite};
 
 let c = Cookie::parse("name=value; SameSite=Lax").unwrap();
 assert_eq!(c.same_site(), Some(SameSite::Lax));
-

Returns the specified max-age of the cookie if one was specified.

+

Returns the specified max-age of the cookie if one was specified.

Example

 use cookie::Cookie;
@@ -140,7 +174,7 @@ results in at most one allocation.

let c = Cookie::parse("name=value; Max-Age=3600").unwrap(); assert_eq!(c.max_age().map(|age| age.num_hours()), Some(1));
-

Returns the Path of the cookie if one was specified.

+

Returns the Path of the cookie if one was specified.

Example

 use cookie::Cookie;
@@ -153,7 +187,7 @@ results in at most one allocation.

let c = Cookie::parse("name=value; path=/sub").unwrap(); assert_eq!(c.path(), Some("/sub"));
-

Returns the Domain of the cookie if one was specified.

+

Returns the Domain of the cookie if one was specified.

Example

 use cookie::Cookie;
@@ -163,7 +197,7 @@ results in at most one allocation.

let c = Cookie::parse("name=value; Domain=crates.io").unwrap(); assert_eq!(c.domain(), Some("crates.io"));
-

Returns the Expires time of the cookie if one was specified.

+

Returns the Expires time of the cookie if one was specified.

Example

 use cookie::Cookie;
@@ -175,7 +209,7 @@ results in at most one allocation.

let cookie_str = format!("name=value; Expires={}", expire_time); let c = Cookie::parse(cookie_str).unwrap(); assert_eq!(c.expires().map(|t| t.tm_year), Some(117));
-

Sets the name of self to name.

+

Sets the name of self to name.

Example

 use cookie::Cookie;
@@ -185,7 +219,7 @@ results in at most one allocation.

c.set_name("foo"); assert_eq!(c.name(), "foo");
-

Sets the value of self to value.

+

Sets the value of self to value.

Example

 use cookie::Cookie;
@@ -195,27 +229,27 @@ results in at most one allocation.

c.set_value("bar"); assert_eq!(c.value(), "bar");
-

Sets the value of http_only in self to value.

+

Sets the value of http_only in self to value.

Example

 use cookie::Cookie;
 
 let mut c = Cookie::new("name", "value");
-assert_eq!(c.http_only(), false);
+assert_eq!(c.http_only(), None);
 
 c.set_http_only(true);
-assert_eq!(c.http_only(), true);
-

Sets the value of secure in self to value.

+assert_eq!(c.http_only(), Some(true)); +

Sets the value of secure in self to value.

Example

 use cookie::Cookie;
 
 let mut c = Cookie::new("name", "value");
-assert_eq!(c.secure(), false);
+assert_eq!(c.secure(), None);
 
 c.set_secure(true);
-assert_eq!(c.secure(), true);
-

Sets the value of same_site in self to value.

+assert_eq!(c.secure(), Some(true)); +

Sets the value of same_site in self to value.

Example

 use cookie::{Cookie, SameSite};
@@ -225,7 +259,7 @@ results in at most one allocation.

c.set_same_site(SameSite::Strict); assert_eq!(c.same_site(), Some(SameSite::Strict));
-

Sets the value of max_age in self to value.

+

Sets the value of max_age in self to value.

Example

 extern crate time;
@@ -238,7 +272,7 @@ results in at most one allocation.

c.set_max_age(Duration::hours(10)); assert_eq!(c.max_age(), Some(Duration::hours(10)));
-

Sets the path of self to path.

+

Sets the path of self to path.

Example

 use cookie::Cookie;
@@ -248,7 +282,7 @@ results in at most one allocation.

c.set_path("/"); assert_eq!(c.path(), Some("/"));
-

Sets the domain of self to domain.

+

Sets the domain of self to domain.

Example

 use cookie::Cookie;
@@ -258,7 +292,7 @@ results in at most one allocation.

c.set_domain("rust-lang.org"); assert_eq!(c.domain(), Some("rust-lang.org"));
-

Sets the expires field of self to time.

+

Sets the expires field of self to time.

Example

 extern crate time;
@@ -273,7 +307,7 @@ results in at most one allocation.

c.set_expires(now); assert!(c.expires().is_some())
-

Makes self a "permanent" cookie by extending its expiration and max +

Makes self a "permanent" cookie by extending its expiration and max age 20 years into the future.

Example

@@ -289,7 +323,7 @@ age 20 years into the future.

c.make_permanent(); assert!(c.expires().is_some()); assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
-

Returns the name of self as a string slice of the raw string self +

Returns the name of self as a string slice of the raw string self was originally parsed from. If self was not originally parsed from a raw string, returns None.

This method differs from name in that it returns a @@ -309,7 +343,7 @@ you're unsure if you need a longer lifetime, use name }; assert_eq!(name, Some("foo")); -

Returns the value of self as a string slice of the raw string self +

Returns the value of self as a string slice of the raw string self was originally parsed from. If self was not originally parsed from a raw string, returns None.

This method differs from value in that it returns a @@ -329,7 +363,7 @@ you're unsure if you need a longer lifetime, use valueassert_eq!(value, Some("bar")); -

Returns the Domain of self as a string slice of the raw string +

Returns the Domain of self as a string slice of the raw string self was originally parsed from. If self was not originally parsed from a raw string, or if self doesn't contain a Domain, or if the Domain has changed since parsing, returns None.

@@ -376,7 +410,7 @@ required, or you're unsure if you need a longer lifetime, use

Trait Implementations

-

impl<'c> Display for Cookie<'c>
[src]

Formats the cookie self as a Set-Cookie header value.

+

impl<'c> Display for Cookie<'c>
[src]

Formats the cookie self as a Set-Cookie header value.

Example

 use cookie::Cookie;
@@ -386,15 +420,15 @@ required, or you're unsure if you need a longer lifetime, use
     .finish();
 
 assert_eq!(&cookie.to_string(), "foo=bar; Path=/");
-

impl<'c> Debug for Cookie<'c>
[src]

Formats the value using the given formatter. Read more

-

impl<'a, 'b> PartialEq<Cookie<'b>> for Cookie<'a>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

impl<'a, 'b> PartialEq<Cookie<'b>> for Cookie<'a>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

impl<'c> Clone for Cookie<'c>
[src]

Returns a copy of the value. Read more

+

impl<'c> Clone for Cookie<'c>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

impl FromStr for Cookie<'static>
[src]

+

impl FromStr for Cookie<'static>
[src]

The associated error which can be returned from parsing.

-

Parses a string s to return a value of this type. Read more

+

Parses a string s to return a value of this type. Read more

+

impl<'c> Debug for Cookie<'c>
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/struct.CookieBuilder.html b/static/api/actix-web/stable/actix_web/http/struct.CookieBuilder.html index 056a256..ec46ad9 100644 --- a/static/api/actix-web/stable/actix_web/http/struct.CookieBuilder.html +++ b/static/api/actix-web/stable/actix_web/http/struct.CookieBuilder.html @@ -1,4 +1,4 @@ -actix_web::http::CookieBuilder - Rust

Struct actix_web::http::CookieBuilder[][src]

pub struct CookieBuilder { /* fields omitted */ }

Structure that follows the builder pattern for building Cookie structs.

+actix_web::http::CookieBuilder - Rust

Struct actix_web::http::CookieBuilder[][src]

pub struct CookieBuilder { /* fields omitted */ }

Structure that follows the builder pattern for building Cookie structs.

To construct a cookie:

  1. Call Cookie::build to start building.
  2. @@ -23,7 +23,7 @@

    Methods

    -

    impl CookieBuilder
    [src]

    Creates a new CookieBuilder instance from the given name and value.

    +

    impl CookieBuilder
    [src]

    Creates a new CookieBuilder instance from the given name and value.

    This method is typically called indirectly via Cookie::build.

    Example

    @@ -32,7 +32,7 @@ let c = Cookie::build("foo", "bar").finish(); assert_eq!(c.name_value(), ("foo", "bar")); -

    Sets the expires field in the cookie being built.

    +

    Sets the expires field in the cookie being built.

    Example

     extern crate time;
    @@ -44,7 +44,7 @@
         .finish();
     
     assert!(c.expires().is_some());
    -

    Sets the max_age field in the cookie being built.

    +

    Sets the max_age field in the cookie being built.

    Example

     extern crate time;
    @@ -57,7 +57,7 @@
         .finish();
     
     assert_eq!(c.max_age(), Some(Duration::seconds(30 * 60)));
    -

    Sets the domain field in the cookie being built.

    +

    Sets the domain field in the cookie being built.

    Example

     use cookie::Cookie;
    @@ -67,7 +67,7 @@
         .finish();
     
     assert_eq!(c.domain(), Some("www.rust-lang.org"));
    -

    Sets the path field in the cookie being built.

    +

    Sets the path field in the cookie being built.

    Example

     use cookie::Cookie;
    @@ -77,7 +77,7 @@
         .finish();
     
     assert_eq!(c.path(), Some("/"));
    -

    Sets the secure field in the cookie being built.

    +

    Sets the secure field in the cookie being built.

    Example

     use cookie::Cookie;
    @@ -86,8 +86,8 @@
         .secure(true)
         .finish();
     
    -assert_eq!(c.secure(), true);
    -

    Sets the http_only field in the cookie being built.

    +assert_eq!(c.secure(), Some(true)); +

    Sets the http_only field in the cookie being built.

    Example

     use cookie::Cookie;
    @@ -96,8 +96,8 @@
         .http_only(true)
         .finish();
     
    -assert_eq!(c.http_only(), true);
    -

    Sets the same_site field in the cookie being built.

    +assert_eq!(c.http_only(), Some(true)); +

    Sets the same_site field in the cookie being built.

    Example

     use cookie::{Cookie, SameSite};
    @@ -107,7 +107,7 @@
         .finish();
     
     assert_eq!(c.same_site(), Some(SameSite::Strict));
    -

    Makes the cookie being built 'permanent' by extending its expiration and +

    Makes the cookie being built 'permanent' by extending its expiration and max age 20 years into the future.

    Example

    @@ -121,7 +121,7 @@ max age 20 years into the future.

    .finish(); assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
    -

    Finishes building and returns the built Cookie.

    +

    Finishes building and returns the built Cookie.

    Example

     use cookie::Cookie;
    @@ -138,9 +138,9 @@ max age 20 years into the future.

    Trait Implementations

    -

    impl Debug for CookieBuilder
    [src]

    Formats the value using the given formatter. Read more

    -

    impl Clone for CookieBuilder
    [src]

    Returns a copy of the value. Read more

    +

    impl Clone for CookieBuilder
    [src]

    Returns a copy of the value. Read more

    Performs copy-assignment from source. Read more

    +

    impl Debug for CookieBuilder
    [src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/struct.Method.html b/static/api/actix-web/stable/actix_web/http/struct.Method.html index 283de41..bf8a7c3 100644 --- a/static/api/actix-web/stable/actix_web/http/struct.Method.html +++ b/static/api/actix-web/stable/actix_web/http/struct.Method.html @@ -1,4 +1,4 @@ -actix_web::http::Method - Rust

    Struct actix_web::http::Method[][src]

    pub struct Method(_);

    The Request Method (VERB)

    +actix_web::http::Method - Rust

    Struct actix_web::http::Method[][src]

    pub struct Method(_);

    The Request Method (VERB)

    This type also contains constants for a number of common HTTP methods such as GET, POST, etc.

    Currently includes 8 variants representing the 8 methods defined in @@ -15,7 +15,7 @@ and an Extension variant for all extensions.

    Methods

    -

    impl Method
    [src]

    +

    impl Method
    [src]

     GET: Method = Method(Get)

    GET

    @@ -51,45 +51,57 @@ and an Extension variant for all extensions.

     TRACE: Method = Method(Trace)

    TRACE

    -

    Converts a slice of bytes to an HTTP method.

    -

    Whether a method is considered "safe", meaning the request is +

    Converts a slice of bytes to an HTTP method.

    +

    Whether a method is considered "safe", meaning the request is essentially read-only.

    See the spec for more words.

    -

    Whether a method is considered "idempotent", meaning the request has +

    Whether a method is considered "idempotent", meaning the request has the same result if executed multiple times.

    See the spec for more words.

    -

    Return a &str representation of the HTTP method

    +

    Return a &str representation of the HTTP method

    Trait Implementations

    -

    impl Display for Method
    [src]

    Formats the value using the given formatter. Read more

    -

    impl Debug for Method
    [src]

    Formats the value using the given formatter. Read more

    -

    impl Eq for Method
    [src]

    impl FromStr for Method
    [src]

    -

    The associated error which can be returned from parsing.

    -

    Parses a string s to return a value of this type. Read more

    -

    impl<'a> HttpTryFrom<&'a [u8]> for Method
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl HttpTryFrom<Method> for Method
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl<'a> HttpTryFrom<&'a str> for Method
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl Default for Method
    [src]

    Returns the "default value" for a type. Read more

    -

    impl AsRef<str> for Method
    [src]

    Performs the conversion.

    -

    impl PartialEq<str> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    impl Default for Method
    [src]

    Returns the "default value" for a type. Read more

    +

    impl Eq for Method
    [src]

    impl PartialEq<Method> for str
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    This method tests for !=.

    -

    impl<'a> PartialEq<&'a str> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    impl<'a> PartialEq<Method> for &'a Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    This method tests for !=.

    -

    impl PartialEq<Method> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    impl Clone for Method
    [src]

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    impl Hash for Method
    [src]

    Feeds this value into the given [Hasher]. Read more

    +

    impl PartialEq<Method> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl PartialEq<str> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl<'a> PartialEq<&'a str> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl<'a> PartialEq<Method> for &'a str
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl<'a> PartialEq<&'a Method> for Method
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl Hash for Method
    [src]

    Feeds this value into the given [Hasher]. Read more

    Feeds a slice of this type into the given [Hasher]. Read more

    +

    impl FromStr for Method
    [src]

    +

    The associated error which can be returned from parsing.

    +

    Parses a string s to return a value of this type. Read more

    +

    impl Display for Method
    [src]

    Formats the value using the given formatter. Read more

    +

    impl AsRef<str> for Method
    [src]

    Performs the conversion.

    +

    impl Clone for Method
    [src]

    Returns a copy of the value. Read more

    +

    Performs copy-assignment from source. Read more

    +

    impl<'a> HttpTryFrom<&'a [u8]> for Method
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl<'a> HttpTryFrom<&'a str> for Method
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl HttpTryFrom<Method> for Method
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl Debug for Method
    [src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/struct.StatusCode.html b/static/api/actix-web/stable/actix_web/http/struct.StatusCode.html index 9bc3fca..9877217 100644 --- a/static/api/actix-web/stable/actix_web/http/struct.StatusCode.html +++ b/static/api/actix-web/stable/actix_web/http/struct.StatusCode.html @@ -1,4 +1,4 @@ -actix_web::http::StatusCode - Rust

    Struct actix_web::http::StatusCode[][src]

    pub struct StatusCode(_);

    An HTTP status code (status-code in RFC 7230 et al.).

    +actix_web::http::StatusCode - Rust

    Struct actix_web::http::StatusCode[][src]

    pub struct StatusCode(_);

    An HTTP status code (status-code in RFC 7230 et al.).

    This type contains constants for all common status codes. It allows status codes in the range [100, 599].

    IANA maintain the Hypertext Transfer Protocol (HTTP) Status Code @@ -16,7 +16,7 @@ inexplicably not in the register).

    Methods

    -

    impl StatusCode
    [src]

    Converts a u16 to a status code.

    +

    impl StatusCode
    [src]

    Converts a u16 to a status code.

    The function validates the correctness of the supplied u16. It must be greater or equal to 100 but less than 600.

    Example

    @@ -28,8 +28,8 @@ greater or equal to 100 but less than 600.

    let err = StatusCode::from_u16(99); assert!(err.is_err());

    -

    Converts a &u8 to a status code

    -

    Returns the u16 corresponding to this StatusCode.

    +

    Converts a &u8 to a status code

    +

    Returns the u16 corresponding to this StatusCode.

    Note

    This is the same as the From<StatusCode> implementation, but included as an inherent method because that implementation doesn't @@ -39,14 +39,14 @@ relying on inference.

     let status = http::StatusCode::OK;
     assert_eq!(status.as_u16(), 200);
    -

    Returns a &str representation of the StatusCode

    +

    Returns a &str representation of the StatusCode

    The return value only includes a numerical representation of the status code. The canonical reason is not included.

    Example

     let status = http::StatusCode::OK;
     assert_eq!(status.as_str(), "200");
    -

    Get the standardised reason-phrase for this status code.

    +

    Get the standardised reason-phrase for this status code.

    This is mostly here for servers writing responses, but could potentially have application at other times.

    The reason phrase is defined as being exclusively for human readers. You should avoid @@ -57,12 +57,12 @@ this canonical reason phrase really is the only reason phrase you’ll find.

     let status = http::StatusCode::OK;
     assert_eq!(status.canonical_reason(), Some("OK"));
    -

    Check if status is within 100-199.

    -

    Check if status is within 200-299.

    -

    Check if status is within 300-399.

    -

    Check if status is within 400-499.

    -

    Check if status is within 500-599.

    -

    impl StatusCode
    [src]

    +

    Check if status is within 100-199.

    +

    Check if status is within 200-299.

    +

    Check if status is within 300-399.

    +

    Check if status is within 400-499.

    +

    Check if status is within 500-599.

    +

    impl StatusCode
    [src]

     CONTINUE: StatusCode = StatusCode(100)

    100 Continue @@ -366,45 +366,45 @@ this canonical reason phrase really is the only reason phrase you’ll find.

    Trait Implementations

    -

    impl Ord for StatusCode
    [src]

    This method returns an Ordering between self and other. Read more

    +

    impl Default for StatusCode
    [src]

    Returns the "default value" for a type. Read more

    +

    impl Eq for StatusCode
    [src]

    impl PartialEq<StatusCode> for StatusCode
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl PartialEq<StatusCode> for u16
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl PartialEq<u16> for StatusCode
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl Hash for StatusCode
    [src]

    Feeds this value into the given [Hasher]. Read more

    +

    Feeds a slice of this type into the given [Hasher]. Read more

    +

    impl FromStr for StatusCode
    [src]

    +

    The associated error which can be returned from parsing.

    +

    Parses a string s to return a value of this type. Read more

    +

    impl Ord for StatusCode
    [src]

    This method returns an Ordering between self and other. Read more

    Compares and returns the maximum of two values. Read more

    Compares and returns the minimum of two values. Read more

    -

    impl From<StatusCode> for u16
    [src]

    Performs the conversion.

    -

    impl Display for StatusCode
    [src]

    Formats the status code, including the canonical reason.

    +

    impl PartialOrd<StatusCode> for StatusCode
    [src]

    This method returns an ordering between self and other values if one exists. Read more

    +

    This method tests less than (for self and other) and is used by the < operator. Read more

    +

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

    +

    This method tests greater than (for self and other) and is used by the > operator. Read more

    +

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

    +

    impl Display for StatusCode
    [src]

    Formats the status code, including the canonical reason.

    Example

     assert_eq!(format!("{}", StatusCode::OK), "200 OK");
    -

    Formats the value using the given formatter. Read more

    -

    impl Debug for StatusCode
    [src]

    Formats the value using the given formatter. Read more

    -

    impl Eq for StatusCode
    [src]

    impl FromStr for StatusCode
    [src]

    -

    The associated error which can be returned from parsing.

    -

    Parses a string s to return a value of this type. Read more

    -

    impl Copy for StatusCode
    [src]

    impl PartialOrd<StatusCode> for StatusCode
    [src]

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

    -

    impl HttpTryFrom<StatusCode> for StatusCode
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl<'a> HttpTryFrom<&'a [u8]> for StatusCode
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl HttpTryFrom<u16> for StatusCode
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl<'a> HttpTryFrom<&'a str> for StatusCode
    [src]

    -

    Associated error with the conversion this implementation represents.

    -

    impl Default for StatusCode
    [src]

    Returns the "default value" for a type. Read more

    -

    impl PartialEq<StatusCode> for StatusCode
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    impl PartialEq<StatusCode> for u16
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    impl PartialEq<u16> for StatusCode
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    impl Clone for StatusCode
    [src]

    Returns a copy of the value. Read more

    +

    Formats the value using the given formatter. Read more

    +

    impl From<StatusCode> for u16
    [src]

    Performs the conversion.

    +

    impl Copy for StatusCode
    [src]

    impl Clone for StatusCode
    [src]

    Returns a copy of the value. Read more

    Performs copy-assignment from source. Read more

    -

    impl Hash for StatusCode
    [src]

    Feeds this value into the given [Hasher]. Read more

    -

    Feeds a slice of this type into the given [Hasher]. Read more

    +

    impl HttpTryFrom<StatusCode> for StatusCode
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl<'a> HttpTryFrom<&'a [u8]> for StatusCode
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl<'a> HttpTryFrom<&'a str> for StatusCode
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl HttpTryFrom<u16> for StatusCode
    [src]

    +

    Associated error with the conversion this implementation represents.

    +

    impl Debug for StatusCode
    [src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/http/struct.Version.html b/static/api/actix-web/stable/actix_web/http/struct.Version.html index 028d3fc..e966d2f 100644 --- a/static/api/actix-web/stable/actix_web/http/struct.Version.html +++ b/static/api/actix-web/stable/actix_web/http/struct.Version.html @@ -1,9 +1,9 @@ -actix_web::http::Version - Rust

    Struct actix_web::http::Version[][src]

    pub struct Version(_);

    Represents a version of the HTTP spec.

    +actix_web::http::Version - Rust

    Struct actix_web::http::Version[][src]

    pub struct Version(_);

    Represents a version of the HTTP spec.

    Methods

    -

    impl Version
    [src]

    +

    impl Version
    [src]

     HTTP_09: Version = Version(Http::Http09)

    HTTP/0.9

    @@ -23,22 +23,22 @@

    Trait Implementations

    -

    impl Ord for Version
    [src]

    This method returns an Ordering between self and other. Read more

    +

    impl Default for Version
    [src]

    Returns the "default value" for a type. Read more

    +

    impl Eq for Version
    [src]

    impl PartialEq<Version> for Version
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    +

    This method tests for !=.

    +

    impl Hash for Version
    [src]

    Feeds this value into the given [Hasher]. Read more

    +

    Feeds a slice of this type into the given [Hasher]. Read more

    +

    impl Ord for Version
    [src]

    This method returns an Ordering between self and other. Read more

    Compares and returns the maximum of two values. Read more

    Compares and returns the minimum of two values. Read more

    -

    impl Debug for Version
    [src]

    Formats the value using the given formatter. Read more

    -

    impl Eq for Version
    [src]

    impl Copy for Version
    [src]

    impl PartialOrd<Version> for Version
    [src]

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

    -

    impl Default for Version
    [src]

    Returns the "default value" for a type. Read more

    -

    impl PartialEq<Version> for Version
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    impl Clone for Version
    [src]

    Returns a copy of the value. Read more

    +

    impl PartialOrd<Version> for Version
    [src]

    This method returns an ordering between self and other values if one exists. Read more

    +

    This method tests less than (for self and other) and is used by the < operator. Read more

    +

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

    +

    This method tests greater than (for self and other) and is used by the > operator. Read more

    +

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

    +

    impl Copy for Version
    [src]

    impl Clone for Version
    [src]

    Returns a copy of the value. Read more

    Performs copy-assignment from source. Read more

    -

    impl Hash for Version
    [src]

    Feeds this value into the given [Hasher]. Read more

    -

    Feeds a slice of this type into the given [Hasher]. Read more

    +

    impl Debug for Version
    [src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/index.html b/static/api/actix-web/stable/actix_web/index.html index 5192aaa..45c92a1 100644 --- a/static/api/actix-web/stable/actix_web/index.html +++ b/static/api/actix-web/stable/actix_web/index.html @@ -68,9 +68,9 @@ support dependency
  3. brotli - enables brotli compression support, requires c compiler
  4. -
  5. flate-c - enables gzip, deflate compression support, requires +
  6. flate2-c - enables gzip, deflate compression support, requires c compiler
  7. -
  8. flate-rust - experimental rust based implementation for +
  9. flate2-rust - experimental rust based implementation for gzip, deflate compression.
  10. Re-exports

    diff --git a/static/api/actix-web/stable/actix_web/middleware/cors/struct.CorsBuilder.html b/static/api/actix-web/stable/actix_web/middleware/cors/struct.CorsBuilder.html index 9bfe456..6f688d8 100644 --- a/static/api/actix-web/stable/actix_web/middleware/cors/struct.CorsBuilder.html +++ b/static/api/actix-web/stable/actix_web/middleware/cors/struct.CorsBuilder.html @@ -35,13 +35,13 @@ checked in a case-sensitive manner.

    Resource Processing Model.

    Defaults to All.

    Builder panics if supplied origin is not valid uri.

    -

    Set a list of methods which the allowed origins are allowed to access +

    Set a list of methods which the allowed origins are allowed to access for requests.

    This is the list of methods in the Resource Processing Model.

    Defaults to [GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]

    -

    Set an allowed header

    -

    Set a list of header field names which can be used when +

    Set an allowed header

    +

    Set a list of header field names which can be used when this resource is accessed by allowed origins.

    If All is set, whatever is requested by the client in Access-Control-Request-Headers will be echoed back in the @@ -49,7 +49,7 @@ this resource is accessed by allowed origins.

    This is the list of headers in the Resource Processing Model.

    Defaults to All.

    -

    Set a list of headers which are safe to expose to the API of a CORS API +

    Set a list of headers which are safe to expose to the API of a CORS API specification. This corresponds to the Access-Control-Expose-Headers response header.

    This is the list of exposed headers in the diff --git a/static/api/actix-web/stable/actix_web/middleware/session/index.html b/static/api/actix-web/stable/actix_web/middleware/session/index.html index 743e5b0..9af4761 100644 --- a/static/api/actix-web/stable/actix_web/middleware/session/index.html +++ b/static/api/actix-web/stable/actix_web/middleware/session/index.html @@ -1,4 +1,4 @@ -actix_web::middleware::session - Rust

    Module actix_web::middleware::session[][src]

    User sessions.

    +actix_web::middleware::session - Rust

    Module actix_web::middleware::session[][src]

    User sessions.

    Actix provides a general solution for session management. The SessionStorage middleware can be used with different backend types to store session diff --git a/static/api/actix-web/stable/actix_web/middleware/session/struct.CookieSessionBackend.html b/static/api/actix-web/stable/actix_web/middleware/session/struct.CookieSessionBackend.html index 357a2e1..9f602e7 100644 --- a/static/api/actix-web/stable/actix_web/middleware/session/struct.CookieSessionBackend.html +++ b/static/api/actix-web/stable/actix_web/middleware/session/struct.CookieSessionBackend.html @@ -1,4 +1,4 @@ -actix_web::middleware::session::CookieSessionBackend - Rust

    Struct actix_web::middleware::session::CookieSessionBackend[][src]

    pub struct CookieSessionBackend(_);

    Use cookies for session storage.

    +actix_web::middleware::session::CookieSessionBackend - Rust

    Struct actix_web::middleware::session::CookieSessionBackend[][src]

    pub struct CookieSessionBackend(_);

    Use cookies for session storage.

    CookieSessionBackend creates sessions which are limited to storing fewer than 4000 bytes of data (as the payload must fit into a single cookie). An Internal Server Error is generated if the session contains more @@ -30,18 +30,19 @@ cause troubles when reading cookie, if they are not properly percent encoded.

    Methods

    -

    impl CookieSessionBackend
    [src]

    Construct new signed CookieSessionBackend instance.

    +

    impl CookieSessionBackend
    [src]

    Construct new signed CookieSessionBackend instance.

    Panics if key length is less than 32 bytes.

    -

    Construct new private CookieSessionBackend instance.

    +

    Construct new private CookieSessionBackend instance.

    Panics if key length is less than 32 bytes.

    -

    Sets the path field in the session cookie being built.

    -

    Sets the name field in the session cookie being built.

    -

    Sets the domain field in the session cookie being built.

    -

    Sets the secure field in the session cookie being built.

    +

    Sets the path field in the session cookie being built.

    +

    Sets the name field in the session cookie being built.

    +

    Sets the domain field in the session cookie being built.

    +

    Sets the secure field in the session cookie being built.

    If the secure field is set, a cookie will only be transmitted when the connection is secure - i.e. https

    -

    Sets the same_site field in the session cookie being built.

    -

    Sets the max-age field in the session cookie being built.

    +

    Sets the http_only field in the session cookie being built.

    +

    Sets the same_site field in the session cookie being built.

    +

    Sets the max-age field in the session cookie being built.

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/middleware/struct.DefaultHeaders.html b/static/api/actix-web/stable/actix_web/middleware/struct.DefaultHeaders.html index 98ef57e..514a5bb 100644 --- a/static/api/actix-web/stable/actix_web/middleware/struct.DefaultHeaders.html +++ b/static/api/actix-web/stable/actix_web/middleware/struct.DefaultHeaders.html @@ -19,7 +19,7 @@ Methods

    impl DefaultHeaders
    [src]

    Construct DefaultHeaders middleware.

    -

    Set a header.

    +

    Set a header.

    Set CONTENT-TYPE header if response does not contain this header.

    diff --git a/static/api/actix-web/stable/actix_web/middleware/struct.Logger.html b/static/api/actix-web/stable/actix_web/middleware/struct.Logger.html index 27fe210..5432d92 100644 --- a/static/api/actix-web/stable/actix_web/middleware/struct.Logger.html +++ b/static/api/actix-web/stable/actix_web/middleware/struct.Logger.html @@ -8,7 +8,7 @@ Default Logger could be created with default method, i default format:

    This example is not tested
    - %a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
    + %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
     extern crate env_logger;
    @@ -50,7 +50,7 @@ default format:

    impl Default for Logger
    [src]

    Create Logger middleware with format:

    This example is not tested
    -%a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
    +%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T

    impl<S> Middleware<S> for Logger
    [src]

    Method is called when request is ready. It may return future, which should resolve before next middleware get called. Read more

    Method is called after body stream get sent to peer.

    Method is called when handler returns response, but before sending http message to peer. Read more

    diff --git a/static/api/actix-web/stable/actix_web/multipart/struct.Field.html b/static/api/actix-web/stable/actix_web/multipart/struct.Field.html index 06aeb84..70be5b1 100644 --- a/static/api/actix-web/stable/actix_web/multipart/struct.Field.html +++ b/static/api/actix-web/stable/actix_web/multipart/struct.Field.html @@ -3,14 +3,14 @@

    Methods

    -

    impl<S> Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    Get a map of headers

    +

    impl<S> Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    Get a map of headers

    Get the content type of the field

    Get the content disposition of the field, if it exists

    Trait Implementations

    -

    impl<S> Stream for Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    +

    impl<S> Stream for Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    The type of item this stream will yield on success.

    The type of error this stream may generate.

    diff --git a/static/api/actix-web/stable/actix_web/multipart/struct.Multipart.html b/static/api/actix-web/stable/actix_web/multipart/struct.Multipart.html index eac58df..2b8c4fe 100644 --- a/static/api/actix-web/stable/actix_web/multipart/struct.Multipart.html +++ b/static/api/actix-web/stable/actix_web/multipart/struct.Multipart.html @@ -8,12 +8,12 @@ is used for nested multipart streams.

    Methods

impl Multipart<()>
[src]

Extract boundary info from headers.

-

impl<S> Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create multipart instance for boundary.

+

impl<S> Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

Create multipart instance for boundary.

Trait Implementations

-

impl<S> Stream for Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

+

impl<S> Stream for Multipart<S> where
    S: Stream<Item = Bytes, Error = PayloadError>, 
[src]

The type of item this stream will yield on success.

The type of error this stream may generate.

diff --git a/static/api/actix-web/stable/actix_web/server/struct.HttpServer.html b/static/api/actix-web/stable/actix_web/server/struct.HttpServer.html index da54fcb..9fb0f66 100644 --- a/static/api/actix-web/stable/actix_web/server/struct.HttpServer.html +++ b/static/api/actix-web/stable/actix_web/server/struct.HttpServer.html @@ -22,7 +22,7 @@ generation. Check [ConnectionInfo](./dev/struct.ConnectionInfo. html#method.host) documentation for more information.

Stop actix system.

SystemExit message stops currently running system.

-

Set alternative address for ProcessSignals actor.

+

Set alternative address for ProcessSignals actor.

Disable signal handling

Timeout for graceful workers shutdown.

After receiving a stop signal, workers have this much time to finish @@ -98,21 +98,21 @@ that it is similar to start() method. This method blocks.

Start new asynchronous actor, returns address of newly created actor. Read more

Start new asynchronous actor, returns address of newly created actor.

Use create method, if you need Context object during actor initialization. Read more

-

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support +

impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>
[src]

Signals support Handle SIGINT, SIGTERM, SIGQUIT signals and stop actix system message to System actor.

-

+

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

+

Method is called for every message received by this Actor

+

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

+

Method is called for every message received by this Actor

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/server/struct.PauseServer.html b/static/api/actix-web/stable/actix_web/server/struct.PauseServer.html index c564eea..0a61100 100644 --- a/static/api/actix-web/stable/actix_web/server/struct.PauseServer.html +++ b/static/api/actix-web/stable/actix_web/server/struct.PauseServer.html @@ -5,11 +5,11 @@ All opened connection remains active.

Trait Implementations

-

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

+

impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Message for PauseServer
[src]

-

The type of value that this message will resolved with if it is successful. Read more

+

Method is called for every message received by this Actor

+

impl Message for PauseServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/server/struct.Request.html b/static/api/actix-web/stable/actix_web/server/struct.Request.html index c5f9507..6957a6d 100644 --- a/static/api/actix-web/stable/actix_web/server/struct.Request.html +++ b/static/api/actix-web/stable/actix_web/server/struct.Request.html @@ -3,7 +3,7 @@

Methods

-

impl Request
[src]

Read the Request Uri.

+

impl Request
[src]

Read the Request Uri.

Read the Request method.

Read the Request Version.

The target path of this Request.

diff --git a/static/api/actix-web/stable/actix_web/server/struct.ResumeServer.html b/static/api/actix-web/stable/actix_web/server/struct.ResumeServer.html index 25c6af8..a2a5e26 100644 --- a/static/api/actix-web/stable/actix_web/server/struct.ResumeServer.html +++ b/static/api/actix-web/stable/actix_web/server/struct.ResumeServer.html @@ -3,11 +3,11 @@

Trait Implementations

-

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

+

impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Message for ResumeServer
[src]

-

The type of value that this message will resolved with if it is successful. Read more

+

Method is called for every message received by this Actor

+

impl Message for ResumeServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/server/struct.StopServer.html b/static/api/actix-web/stable/actix_web/server/struct.StopServer.html index 2b60da9..5535016 100644 --- a/static/api/actix-web/stable/actix_web/server/struct.StopServer.html +++ b/static/api/actix-web/stable/actix_web/server/struct.StopServer.html @@ -12,11 +12,11 @@

Trait Implementations

-

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

+

impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>
[src]

The type of value that this handle will return

-

Method is called for every message received by this Actor

-

impl Message for StopServer
[src]

-

The type of value that this message will resolved with if it is successful. Read more

+

Method is called for every message received by this Actor

+

impl Message for StopServer
[src]

+

The type of value that this message will resolved with if it is successful. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/server/trait.IntoHttpHandler.html b/static/api/actix-web/stable/actix_web/server/trait.IntoHttpHandler.html index 2db39fc..10544d7 100644 --- a/static/api/actix-web/stable/actix_web/server/trait.IntoHttpHandler.html +++ b/static/api/actix-web/stable/actix_web/server/trait.IntoHttpHandler.html @@ -19,8 +19,8 @@ Implementors

    -
  • impl<S: 'static> IntoHttpHandler for App<S> type Handler = HttpApplication<S>;
  • -
  • impl<'a, S: 'static> IntoHttpHandler for &'a mut App<S> type Handler = HttpApplication<S>;
  • +
  • impl<S: 'static> IntoHttpHandler for App<S> type Handler = HttpApplication<S>;
  • +
  • impl<'a, S: 'static> IntoHttpHandler for &'a mut App<S> type Handler = HttpApplication<S>;
  • impl<T: HttpHandler> IntoHttpHandler for T type Handler = T;
  • impl<S: 'static> IntoHttpHandler for TestApp<S> type Handler = HttpApplication<S>;

Struct actix_web::Form[][src]

pub struct Form<T>(pub T);

Extract typed information from the request's body.

+actix_web::Form - Rust

Struct actix_web::Form[][src]

pub struct Form<T>(pub T);

Extract typed information from the request's body.

To extract typed information from request's body, the type T must implement the Deserialize trait from serde.

FormConfig allows to configure extraction @@ -23,23 +23,33 @@ process.

Methods

-

impl<T> Form<T>
[src]

Deconstruct to an inner value

+

impl<T> Form<T>
[src]

Deconstruct to an inner value

Trait Implementations

-

impl<T> Deref for Form<T>
[src]

+

impl<T: PartialEq> PartialEq for Form<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Form<T>
[src]

impl<T: PartialOrd> PartialOrd for Form<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Form<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> Deref for Form<T>
[src]

The resulting type after dereferencing.

-

Important traits for &'a mut R

Dereferences the value.

-

impl<T> DerefMut for Form<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

-

impl<T, S> FromRequest<S> for Form<T> where
    T: DeserializeOwned + 'static,
    S: 'static, 
[src]

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Form<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Form<T> where
    T: DeserializeOwned + 'static,
    S: 'static, 
[src]

Configuration for conversion process

Future that resolves to a Self

-

Convert request to a Self

+

Convert request to a Self

Convert request to a Self Read more

-

impl<T: Debug> Debug for Form<T>
[src]

Formats the value using the given formatter. Read more

-

impl<T: Display> Display for Form<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Debug> Debug for Form<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Form<T>
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/struct.HttpContext.html b/static/api/actix-web/stable/actix_web/struct.HttpContext.html index 98f1e91..f1974ab 100644 --- a/static/api/actix-web/stable/actix_web/struct.HttpContext.html +++ b/static/api/actix-web/stable/actix_web/struct.HttpContext.html @@ -11,27 +11,27 @@

Indicate end of streaming payload. Also this method calls Self::close.

Returns drain future

Check if connection still open

-

Handle of the running future

+

Handle of the running future

SpawnHandle is the handle returned by AsyncContext::spawn() method.

Trait Implementations

-

impl<A, S> ActorContext for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Immediately stop processing incoming messages and switch to a stopping state Read more

-

Terminate actor execution

-

Actor execution state

-

impl<A, S> AsyncContext<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

-

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

-

Cancel future. handle is a value returned by spawn method.

-

Return Address of the context

-

Check if context is paused (waiting for future completion or stopping)

-

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

-

This method is similar to add_stream but it skips stream errors. Read more

-

Send message msg to self.

-

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

-

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

-

Spawns job to execute closure with specified interval

-

impl<A, S> AsyncContextParts<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
    A: Actor<Context = HttpContext<A, S>> + Handler<M>,
    M: Message + Send + 'static,
    M::Result: Send
[src]

Pack message into suitable envelope

+

impl<A, S> ActorContext for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Immediately stop processing incoming messages and switch to a stopping state Read more

+

Terminate actor execution

+

Actor execution state

+

impl<A, S> AsyncContext<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

+

Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

+

Cancel future. handle is a value returned by spawn method.

+

Return Address of the context

+

Check if context is paused (waiting for future completion or stopping)

+

This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

+

This method is similar to add_stream but it skips stream errors. Read more

+

Send message msg to self.

+

Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

+

Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

+

Spawns job to execute closure with specified interval

+

impl<A, S> AsyncContextParts<A> for HttpContext<A, S> where
    A: Actor<Context = Self>, 
[src]

impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
    A: Actor<Context = HttpContext<A, S>> + Handler<M>,
    M: Message + Send + 'static,
    M::Result: Send
[src]

Pack message into suitable envelope

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/struct.HttpRequest.html b/static/api/actix-web/stable/actix_web/struct.HttpRequest.html index cc82e19..62a2ac6 100644 --- a/static/api/actix-web/stable/actix_web/struct.HttpRequest.html +++ b/static/api/actix-web/stable/actix_web/struct.HttpRequest.html @@ -9,7 +9,7 @@

Mutable reference to a the request's extensions

Create http response

Create http response builder

-

Read the Request Uri.

+

Read the Request Uri.

Read the Request method.

Read the Request Version.

The target path of this Request.

@@ -55,7 +55,7 @@ access the matched value for that segment.

Methods from Deref<Target = Request>

-

Read the Request Uri.

+

Read the Request Uri.

Read the Request method.

Read the Request Version.

The target path of this Request.

diff --git a/static/api/actix-web/stable/actix_web/struct.HttpResponse.html b/static/api/actix-web/stable/actix_web/struct.HttpResponse.html index e97c22a..bab7c1c 100644 --- a/static/api/actix-web/stable/actix_web/struct.HttpResponse.html +++ b/static/api/actix-web/stable/actix_web/struct.HttpResponse.html @@ -14,7 +14,7 @@

Get the headers from the response

Get a mutable reference to the headers

Get an iterator for the cookies set by this response

-

Add a cookie to this response

+

Add a cookie to this response

Remove all cookies with the given name from this response. Returns the number of cookies removed.

Get the response status code

@@ -50,8 +50,8 @@ the number of cookies removed.

impl From<&'static [u8]> for HttpResponse
[src]

Performs the conversion.

impl From<String> for HttpResponse
[src]

Performs the conversion.

impl<'a> From<&'a String> for HttpResponse
[src]

Performs the conversion.

-

impl From<Bytes> for HttpResponse
[src]

Performs the conversion.

-

impl From<BytesMut> for HttpResponse
[src]

Performs the conversion.

+

impl From<Bytes> for HttpResponse
[src]

Performs the conversion.

+

impl From<BytesMut> for HttpResponse
[src]

Performs the conversion.

impl From<Error> for HttpResponse
[src]

Convert Error to a HttpResponse instance

Performs the conversion.

diff --git a/static/api/actix-web/stable/actix_web/struct.Path.html b/static/api/actix-web/stable/actix_web/struct.Path.html index 29f6939..fda2b5d 100644 --- a/static/api/actix-web/stable/actix_web/struct.Path.html +++ b/static/api/actix-web/stable/actix_web/struct.Path.html @@ -1,4 +1,4 @@ -actix_web::Path - Rust

Struct actix_web::Path[][src]

pub struct Path<T> { /* fields omitted */ }

Extract typed information from the request's path.

+actix_web::Path - Rust

Struct actix_web::Path[][src]

pub struct Path<T> { /* fields omitted */ }

Extract typed information from the request's path.

Example

 use actix_web::{http, App, Path, Result};
@@ -43,24 +43,34 @@ implements Deserialize trait from serde.

Methods

-

impl<T> Path<T>
[src]

Deconstruct to an inner value

+

impl<T> Path<T>
[src]

Deconstruct to an inner value

Trait Implementations

-

impl<T> AsRef<T> for Path<T>
[src]

Important traits for &'a mut R

Performs the conversion.

-

impl<T> Deref for Path<T>
[src]

+

impl<T: PartialEq> PartialEq for Path<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Path<T>
[src]

impl<T: PartialOrd> PartialOrd for Path<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Path<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> AsRef<T> for Path<T>
[src]

Important traits for &'a mut R

Performs the conversion.

+

impl<T> Deref for Path<T>
[src]

The resulting type after dereferencing.

-

Important traits for &'a mut R

Dereferences the value.

-

impl<T> DerefMut for Path<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

-

impl<T, S> FromRequest<S> for Path<T> where
    T: DeserializeOwned
[src]

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Path<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Path<T> where
    T: DeserializeOwned
[src]

Configuration for conversion process

Future that resolves to a Self

-

Convert request to a Self

+

Convert request to a Self

Convert request to a Self Read more

-

impl<T: Debug> Debug for Path<T>
[src]

Formats the value using the given formatter. Read more

-

impl<T: Display> Display for Path<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Debug> Debug for Path<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Path<T>
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/struct.Query.html b/static/api/actix-web/stable/actix_web/struct.Query.html index 10943e9..78192c4 100644 --- a/static/api/actix-web/stable/actix_web/struct.Query.html +++ b/static/api/actix-web/stable/actix_web/struct.Query.html @@ -1,4 +1,4 @@ -actix_web::Query - Rust

Struct actix_web::Query[][src]

pub struct Query<T>(_);

Extract typed information from from the request's query.

+actix_web::Query - Rust

Struct actix_web::Query[][src]

pub struct Query<T>(_);

Extract typed information from from the request's query.

Example

 #[macro_use] extern crate serde_derive;
@@ -33,23 +33,33 @@
                     

Methods

-

impl<T> Query<T>
[src]

Deconstruct to a inner value

+

impl<T> Query<T>
[src]

Deconstruct to a inner value

Trait Implementations

-

impl<T> Deref for Query<T>
[src]

+

impl<T: PartialEq> PartialEq for Query<T>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

+

This method tests for !=.

+

impl<T: Eq> Eq for Query<T>
[src]

impl<T: PartialOrd> PartialOrd for Query<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

+

This method tests less than (for self and other) and is used by the < operator. Read more

+

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

+

This method tests greater than (for self and other) and is used by the > operator. Read more

+

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

+

impl<T: Ord> Ord for Query<T>
[src]

This method returns an Ordering between self and other. Read more

+

Compares and returns the maximum of two values. Read more

+

Compares and returns the minimum of two values. Read more

+

impl<T> Deref for Query<T>
[src]

The resulting type after dereferencing.

-

Important traits for &'a mut R

Dereferences the value.

-

impl<T> DerefMut for Query<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

-

impl<T, S> FromRequest<S> for Query<T> where
    T: DeserializeOwned
[src]

+

Important traits for &'a mut R

Dereferences the value.

+

impl<T> DerefMut for Query<T>
[src]

Important traits for &'a mut R

Mutably dereferences the value.

+

impl<T, S> FromRequest<S> for Query<T> where
    T: DeserializeOwned
[src]

Configuration for conversion process

Future that resolves to a Self

-

Convert request to a Self

+

Convert request to a Self

Convert request to a Self Read more

-

impl<T: Debug> Debug for Query<T>
[src]

Formats the value using the given formatter. Read more

-

impl<T: Display> Display for Query<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Debug> Debug for Query<T>
[src]

Formats the value using the given formatter. Read more

+

impl<T: Display> Display for Query<T>
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/struct.Request.html b/static/api/actix-web/stable/actix_web/struct.Request.html index e48cfbd..48d1970 100644 --- a/static/api/actix-web/stable/actix_web/struct.Request.html +++ b/static/api/actix-web/stable/actix_web/struct.Request.html @@ -3,7 +3,7 @@

Methods

-

impl Request
[src]

Read the Request Uri.

+

impl Request
[src]

Read the Request Uri.

Read the Request method.

Read the Request Version.

The target path of this Request.

diff --git a/static/api/actix-web/stable/actix_web/struct.State.html b/static/api/actix-web/stable/actix_web/struct.State.html index df69bed..a472219 100644 --- a/static/api/actix-web/stable/actix_web/struct.State.html +++ b/static/api/actix-web/stable/actix_web/struct.State.html @@ -1,4 +1,4 @@ -actix_web::State - Rust

Struct actix_web::State[][src]

pub struct State<S>(_);

Access an application state

+actix_web::State - Rust

Struct actix_web::State[][src]

pub struct State<S>(_);

Access an application state

S - application state type

Example

@@ -31,14 +31,14 @@
                 

Trait Implementations

-

impl<S> Deref for State<S>
[src]

+

impl<S> Deref for State<S>
[src]

The resulting type after dereferencing.

-

Important traits for &'a mut R

Dereferences the value.

-

impl<S> FromRequest<S> for State<S>
[src]

+

Important traits for &'a mut R

Dereferences the value.

+

impl<S> FromRequest<S> for State<S>
[src]

Configuration for conversion process

Future that resolves to a Self

-

Convert request to a Self

+

Convert request to a Self

Convert request to a Self Read more

diff --git a/static/api/actix-web/stable/actix_web/test/struct.TestRequest.html b/static/api/actix-web/stable/actix_web/test/struct.TestRequest.html index 26d5840..8f70059 100644 --- a/static/api/actix-web/stable/actix_web/test/struct.TestRequest.html +++ b/static/api/actix-web/stable/actix_web/test/struct.TestRequest.html @@ -26,13 +26,13 @@

impl TestRequest<()>
[src]

Create TestRequest and set request uri

Create TestRequest and set header

-

Create TestRequest and set header

+

Create TestRequest and set header

impl<S: 'static> TestRequest<S>
[src]

Start HttpRequest build process with application state

Set HTTP version of this request

Set HTTP method of this request

Set HTTP Uri of this request

Set a header

-

Set a header

+

Set a header

Set request path pattern parameter

Set request payload

Set request's prefix

diff --git a/static/api/actix-web/stable/actix_web/trait.FromRequest.html b/static/api/actix-web/stable/actix_web/trait.FromRequest.html index 8063935..5a5f3c9 100644 --- a/static/api/actix-web/stable/actix_web/trait.FromRequest.html +++ b/static/api/actix-web/stable/actix_web/trait.FromRequest.html @@ -1,4 +1,4 @@ -actix_web::FromRequest - Rust

Trait actix_web::FromRequest[][src]

pub trait FromRequest<S>: Sized {
+actix_web::FromRequest - Rust

Trait actix_web::FromRequest[][src]

pub trait FromRequest<S>: Sized {
     type Config: Default;
     type Result: Into<AsyncResult<Self>>;
     fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result;
@@ -30,7 +30,7 @@
                 

Implementations on Foreign Types

-

impl<S: 'static> FromRequest<S> for Bytes
[src]

Request payload extractor.

+

impl<S: 'static> FromRequest<S> for Bytes
[src]

Request payload extractor.

Loads request's payload and construct Bytes instance.

PayloadConfig allows to configure extraction process.

@@ -50,7 +50,7 @@ extraction process.

}

-

impl<S: 'static> FromRequest<S> for String
[src]

Extract text information from the request's body.

+

impl<S: 'static> FromRequest<S> for String
[src]

Extract text information from the request's body.

Text extractor automatically decode body according to the request's charset.

PayloadConfig allows to configure extraction process.

@@ -73,42 +73,127 @@ extraction process.

}

-

impl<S, A: FromRequest<S> + 'static> FromRequest<S> for (A,) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static> FromRequest<S> for (A, B) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static> FromRequest<S> for (A, B, C) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static, I: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H, I) where
    S: 'static, 
[src]

FromRequest implementation for tuple

-

-

-

+

impl<T: 'static, S: 'static> FromRequest<S> for Option<T> where
    T: FromRequest<S>, 
[src]

Optionally extract a field from the request

+

If the FromRequest for T fails, return None rather than returning an error response

+

Example

+
+extern crate rand;
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+use actix_web::error::ErrorBadRequest;
+
+#[derive(Debug, Deserialize)]
+struct Thing { name: String }
+
+impl<S> FromRequest<S> for Thing {
+    type Config = ();
+    type Result = Result<Thing, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+        if rand::random() {
+            Ok(Thing { name: "thingy".into() })
+        } else {
+            Err(ErrorBadRequest("no luck"))
+        }
+
+    }
+}
+
+/// extract text data from request
+fn index(supplied_thing: Option<Thing>) -> Result<String> {
+    match supplied_thing {
+        // Puns not intended
+        Some(thing) => Ok(format!("Got something: {:?}", thing)),
+        None => Ok(format!("No thing!"))
+    }
+}
+
+fn main() {
+    let app = App::new().resource("/users/:first", |r| {
+        r.method(http::Method::POST).with(index)
+    });
+}
+

+

+

impl<T: 'static, S: 'static> FromRequest<S> for Result<T, Error> where
    T: FromRequest<S>, 
[src]

Optionally extract a field from the request or extract the Error if unsuccessful

+

If the FromRequest for T fails, inject Err into handler rather than returning an error response

+

Example

+
+extern crate rand;
+#[macro_use] extern crate serde_derive;
+use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
+use actix_web::error::ErrorBadRequest;
+
+#[derive(Debug, Deserialize)]
+struct Thing { name: String }
+
+impl<S> FromRequest<S> for Thing {
+    type Config = ();
+    type Result = Result<Thing, Error>;
+
+    #[inline]
+    fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
+        if rand::random() {
+            Ok(Thing { name: "thingy".into() })
+        } else {
+            Err(ErrorBadRequest("no luck"))
+        }
+
+    }
+}
+
+/// extract text data from request
+fn index(supplied_thing: Result<Thing>) -> Result<String> {
+    match supplied_thing {
+        Ok(thing) => Ok(format!("Got thing: {:?}", thing)),
+        Err(e) => Ok(format!("Error extracting thing: {}", e))
+    }
+}
+
+fn main() {
+    let app = App::new().resource("/users/:first", |r| {
+        r.method(http::Method::POST).with(index)
+    });
+}
+

+

+

impl<S, A: FromRequest<S> + 'static> FromRequest<S> for (A,) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static> FromRequest<S> for (A, B) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static> FromRequest<S> for (A, B, C) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

impl<S, A: FromRequest<S> + 'static, B: FromRequest<S> + 'static, C: FromRequest<S> + 'static, D: FromRequest<S> + 'static, E: FromRequest<S> + 'static, F: FromRequest<S> + 'static, G: FromRequest<S> + 'static, H: FromRequest<S> + 'static, I: FromRequest<S> + 'static> FromRequest<S> for (A, B, C, D, E, F, G, H, I) where
    S: 'static, 
[src]

FromRequest implementation for tuple

+

+

+

Implementors

-

Type of message payload stream

+

Type of message payload stream

Required Methods diff --git a/static/api/actix-web/stable/actix_web/trait.Responder.html b/static/api/actix-web/stable/actix_web/trait.Responder.html index 041d61e..55f6358 100644 --- a/static/api/actix-web/stable/actix_web/trait.Responder.html +++ b/static/api/actix-web/stable/actix_web/trait.Responder.html @@ -35,9 +35,9 @@

impl<'a> Responder for &'a String
[src]

-

impl Responder for Bytes
[src]

impl Responder for Bytes
[src]

-

impl Responder for BytesMut
[src]

impl Responder for BytesMut
[src]

@@ -51,7 +51,7 @@
  • impl Responder for HttpResponseBuilder type Item = HttpResponse; type Error = Error;
  • impl<T: Serialize> Responder for Json<T> type Item = HttpResponse; type Error = Error;
  • impl<T> Responder for InternalError<T> where
        T: Send + Sync + Debug + Display + 'static, 
    type Item = HttpResponse; type Error = Error;
  • -
  • impl<C: StaticFileConfig> Responder for NamedFile<C> type Item = HttpResponse; type Error = Error;
  • +
  • impl<C: StaticFileConfig> Responder for NamedFile<C> type Item = HttpResponse; type Error = Error;
  • \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/ws/enum.Message.html b/static/api/actix-web/stable/actix_web/ws/enum.Message.html index 30c9129..531412d 100644 --- a/static/api/actix-web/stable/actix_web/ws/enum.Message.html +++ b/static/api/actix-web/stable/actix_web/ws/enum.Message.html @@ -16,8 +16,8 @@

    Trait Implementations

    -

    impl Message for Message
    [src]

    -

    The type of value that this message will resolved with if it is successful. Read more

    +

    impl Message for Message
    [src]

    +

    The type of value that this message will resolved with if it is successful. Read more

    impl Debug for Message
    [src]

    Formats the value using the given formatter. Read more

    impl PartialEq for Message
    [src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    This method tests for !=.

    diff --git a/static/api/actix-web/stable/actix_web/ws/fn.start.html b/static/api/actix-web/stable/actix_web/ws/fn.start.html index afbea47..24c6153 100644 --- a/static/api/actix-web/stable/actix_web/ws/fn.start.html +++ b/static/api/actix-web/stable/actix_web/ws/fn.start.html @@ -1,2 +1,2 @@ -actix_web::ws::start - Rust

    Function actix_web::ws::start[][src]

    pub fn start<A, S>(
        req: &HttpRequest<S>,
        actor: A
    ) -> Result<HttpResponse, Error> where
        A: Actor<Context = WebsocketContext<A, S>> + StreamHandler<Message, ProtocolError>,
        S: 'static, 

    Do websocket handshake and start actor

    +actix_web::ws::start - Rust

    Function actix_web::ws::start[][src]

    pub fn start<A, S>(
        req: &HttpRequest<S>,
        actor: A
    ) -> Result<HttpResponse, Error> where
        A: Actor<Context = WebsocketContext<A, S>> + StreamHandler<Message, ProtocolError>,
        S: 'static, 

    Do websocket handshake and start actor

    \ No newline at end of file diff --git a/static/api/actix-web/stable/actix_web/ws/struct.Client.html b/static/api/actix-web/stable/actix_web/ws/struct.Client.html index afbd9fa..3f2f73f 100644 --- a/static/api/actix-web/stable/actix_web/ws/struct.Client.html +++ b/static/api/actix-web/stable/actix_web/ws/struct.Client.html @@ -9,13 +9,13 @@

    Create new websocket connection with custom ClientConnector

    Set supported websocket protocols

    Set cookie for handshake request

    -

    Set request Origin

    +

    Set request Origin

    Set max frame size

    By default max size is set to 64kb

    Set write buffer capacity

    Default buffer capacity is 32kb

    Disable payload masking. By default ws client masks frame payload.

    -

    Set request header

    +

    Set request header

    Set websocket handshake timeout

    Handshake timeout is a total time for successful handshake. Default value is 5 seconds.

    diff --git a/static/api/actix-web/stable/actix_web/ws/struct.Frame.html b/static/api/actix-web/stable/actix_web/ws/struct.Frame.html index 9cef3c1..c7b1c23 100644 --- a/static/api/actix-web/stable/actix_web/ws/struct.Frame.html +++ b/static/api/actix-web/stable/actix_web/ws/struct.Frame.html @@ -5,7 +5,7 @@

    impl Frame
    [src]

    Destruct frame

    Create a new Close control frame.

    -

    Parse the input stream into a frame.

    +

    Parse the input stream into a frame.

    Parse the payload of a close frame.

    Generate binary representation

    diff --git a/static/api/actix-web/stable/actix_web/ws/struct.WebsocketContext.html b/static/api/actix-web/stable/actix_web/ws/struct.WebsocketContext.html index 519fe7b..e9fc936 100644 --- a/static/api/actix-web/stable/actix_web/ws/struct.WebsocketContext.html +++ b/static/api/actix-web/stable/actix_web/ws/struct.WebsocketContext.html @@ -3,7 +3,7 @@

    Methods

    -

    impl<A, S: 'static> WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Create a new Websocket context from a request and an actor

    +

    impl<A, S: 'static> WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Create a new Websocket context from a request and an actor

    Create a new Websocket context

    impl<A, S> WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Write payload

    This is a low-level function that accepts framed messages that should @@ -19,32 +19,32 @@ that handle the framing for you.

    Send pong frame

    Send close frame

    Check if connection still open

    -

    Handle of the running future

    +

    Handle of the running future

    SpawnHandle is the handle returned by AsyncContext::spawn() method.

    Trait Implementations

    -

    impl<A, S> ActorContext for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Immediately stop processing incoming messages and switch to a stopping state Read more

    -

    Terminate actor execution

    -

    Actor execution state

    -

    impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

    -

    Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

    -

    Cancel future. handle is a value returned by spawn method.

    -

    Return Address of the context

    -

    Check if context is paused (waiting for future completion or stopping)

    -

    This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

    -

    This method is similar to add_stream but it skips stream errors. Read more

    -

    Send message msg to self.

    -

    Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

    -

    Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

    -

    Spawns job to execute closure with specified interval

    +

    impl<A, S> ActorContext for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Immediately stop processing incoming messages and switch to a stopping state Read more

    +

    Terminate actor execution

    +

    Actor execution state

    +

    impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    Spawn async future into context. Returns handle of the item, could be used for cancelling execution. Read more

    +

    Spawn future into the context. Stop processing any of incoming events until this future resolves. Read more

    +

    Cancel future. handle is a value returned by spawn method.

    +

    Return Address of the context

    +

    Check if context is paused (waiting for future completion or stopping)

    +

    This method register stream to an actor context and allows to handle Stream in similar way as normal actor messages. Read more

    +

    This method is similar to add_stream but it skips stream errors. Read more

    +

    Send message msg to self.

    +

    Send message msg to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called. Read more

    +

    Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called. Read more

    +

    Spawns job to execute closure with specified interval

    impl<A, S> WsWriter for WebsocketContext<A, S> where
        A: Actor<Context = Self>,
        S: 'static, 
    [src]

    Send text frame

    Send binary frame

    Send ping frame

    Send pong frame

    Send close frame

    -

    impl<A, S> AsyncContextParts<A> for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
        A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
        M: ActixMessage + Send + 'static,
        M::Result: Send
    [src]

    Pack message into suitable envelope

    +

    impl<A, S> AsyncContextParts<A> for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    [src]

    impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
        A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
        M: ActixMessage + Send + 'static,
        M::Result: Send
    [src]

    Pack message into suitable envelope

    Auto Trait Implementations diff --git a/static/api/actix-web/stable/actix_web/ws/struct.WsStream.html b/static/api/actix-web/stable/actix_web/ws/struct.WsStream.html index 7b8cf1f..1c0baa2 100644 --- a/static/api/actix-web/stable/actix_web/ws/struct.WsStream.html +++ b/static/api/actix-web/stable/actix_web/ws/struct.WsStream.html @@ -3,14 +3,14 @@

    Methods

    -

    impl<S> WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    Create new websocket frames stream

    +

    impl<S> WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    Create new websocket frames stream

    Set max frame size

    By default max size is set to 64kb

    Trait Implementations

    -

    impl<S> Stream for WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    +

    impl<S> Stream for WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    [src]

    The type of item this stream will yield on success.

    The type of error this stream may generate.

    diff --git a/static/api/actix-web/stable/aliases.js b/static/api/actix-web/stable/aliases.js index 3174937..a135492 100644 --- a/static/api/actix-web/stable/aliases.js +++ b/static/api/actix-web/stable/aliases.js @@ -1,2 +1,4 @@ var ALIASES = {}; ALIASES['actix_web'] = {}; +ALIASES['actix_web'] = {}; +ALIASES['actix_web'] = {}; diff --git a/static/api/actix-web/stable/dark.css b/static/api/actix-web/stable/dark.css index 9d1ece1..7d4a819 100644 --- a/static/api/actix-web/stable/dark.css +++ b/static/api/actix-web/stable/dark.css @@ -9,4 +9,4 @@ * option. This file may not be copied, modified, or distributed * except according to those terms. */ -body{background-color:#353535;color:#ddd;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock p>code,.docblock-short p>code{background-color:#2A2A2A;}pre{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table{border-color:#ddd;}.docblock table td{border-top-color:#ddd;border-bottom-color:#ddd;}.docblock table th{border-top-color:#ddd;border-bottom-color:#ddd;}:target{background:#494a3d;}:target>.in-band{background:#494a3d;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.content .highlighted{color:#eee !important;background-color:#333;}.content .highlighted a,.content .highlighted span{color:#eee !important;}.content .highlighted.trait{background-color:#013191;}.content .highlighted.mod,.content .highlighted.externcrate{background-color:#afc6e4;}.content .highlighted.mod{background-color:#803a1b;}.content .highlighted.externcrate{background-color:#396bac;}.content .highlighted.enum{background-color:#5b4e68;}.content .highlighted.struct{background-color:#194e9f;}.content .highlighted.union{background-color:#b7bd49;}.content .highlighted.fn,.content .highlighted.method,.content .highlighted.tymethod{background-color:#4950ed;}.content .highlighted.type{background-color:#38902c;}.content .highlighted.foreigntype{background-color:#b200d6;}.content .highlighted.macro{background-color:#217d1c;}.content .highlighted.constant,.content .highlighted.static{background-color:#0063cc;}.content .highlighted.primitive{background-color:#00708a;}.content .highlighted.keyword{background-color:#884719;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav{border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}.docblock a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.stability a{color:#D2991D;}a.test-arrow{color:#dedede;}.collapse-toggle{color:#999;}.search-input{color:#111;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;background-color:#f0f0f0;}.search-input:focus{border-color:#008dfd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#404040;}.stab.deprecated{background:#F3DFFF;border-color:#7F0087;color:#404040;}.stab.portability{background:#C4ECFF;border-color:#7BA5DB;color:#404040;}.module-item .stab{color:#ddd;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);color:black;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label{color:#999;}:target>code{background-color:#494a3d;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.6);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.6);}.information>.compile_fail:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:rgba(255,142,0,1);}.search-failed>a{color:#0089ff;}.tooltip .tooltiptext{background-color:black;color:#fff;}.tooltip .tooltiptext::after{border-color:transparent black transparent transparent;}.important-traits .tooltip .tooltiptext{background-color:white;color:black;border-color:black;}#titles>div{border-bottom-color:#ccc;}#titles>div.selected{border-bottom-color:#0078ee;}#titles>div:hover{border-bottom-color:#0089ff;}#titles>div>div.count{color:#888;}.modal{background-color:rgba(0,0,0,0.3);}.modal-content{background-color:#272727;border-color:#999;}.modal-content>.close{background-color:#272727;border-color:#999;}.modal-content>.close:hover{background-color:#ff1f1f;color:white;}.modal-content>.whiter{background-color:#272727;}.modal-content>.close:hover+.whiter{background-color:#ff1f1f;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu{border-color:#e0e0e0;background:#f0f0f0;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus{border-color:#ffb900;}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results td span.alias{color:#fff;}.search-results td span.grey{color:#ccc;} \ No newline at end of file +body{background-color:#353535;color:#ddd;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock p>code,.docblock-short p>code{background-color:#2A2A2A;}pre{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table{border-color:#ddd;}.docblock table td{border-top-color:#ddd;border-bottom-color:#ddd;}.docblock table th{border-top-color:#ddd;border-bottom-color:#ddd;}:target{background:#494a3d;}:target>.in-band{background:#494a3d;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.content .highlighted{color:#eee !important;background-color:#616161;}.content .highlighted a,.content .highlighted span{color:#eee !important;}.content .highlighted.trait{background-color:#013191;}.content .highlighted.mod,.content .highlighted.externcrate{background-color:#afc6e4;}.content .highlighted.mod{background-color:#803a1b;}.content .highlighted.externcrate{background-color:#396bac;}.content .highlighted.enum{background-color:#5b4e68;}.content .highlighted.struct{background-color:#194e9f;}.content .highlighted.union{background-color:#b7bd49;}.content .highlighted.fn,.content .highlighted.method,.content .highlighted.tymethod{background-color:#4950ed;}.content .highlighted.type{background-color:#38902c;}.content .highlighted.foreigntype{background-color:#b200d6;}.content .highlighted.macro{background-color:#217d1c;}.content .highlighted.constant,.content .highlighted.static{background-color:#0063cc;}.content .highlighted.primitive{background-color:#00708a;}.content .highlighted.keyword{background-color:#884719;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav{border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}.docblock a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.stability a{color:#D2991D;}a.test-arrow{color:#dedede;}.collapse-toggle{color:#999;}.search-input{color:#111;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;background-color:#f0f0f0;}.search-input:focus{border-color:#008dfd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#404040;}.stab.deprecated{background:#F3DFFF;border-color:#7F0087;color:#404040;}.stab.portability{background:#C4ECFF;border-color:#7BA5DB;color:#404040;}.module-item .stab{color:#ddd;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);color:black;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label{color:#999;}:target>code{background-color:#494a3d;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.6);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.6);}.information>.compile_fail:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:rgba(255,142,0,1);}.search-failed>a{color:#0089ff;}.tooltip .tooltiptext{background-color:black;color:#fff;}.tooltip .tooltiptext::after{border-color:transparent black transparent transparent;}.important-traits .tooltip .tooltiptext{background-color:white;color:black;border-color:black;}#titles>div{border-bottom-color:#ccc;}#titles>div.selected{border-bottom-color:#0078ee;}#titles>div:hover{border-bottom-color:#0089ff;}#titles>div>div.count{color:#888;}.modal{background-color:rgba(0,0,0,0.3);}.modal-content{background-color:#272727;border-color:#999;}.modal-content>.close{background-color:#272727;border-color:#999;}.modal-content>.close:hover{background-color:#ff1f1f;color:white;}.modal-content>.whiter{background-color:#272727;}.modal-content>.close:hover+.whiter{background-color:#ff1f1f;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu{border-color:#e0e0e0;background:#f0f0f0;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus{border-color:#ffb900;}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results td span.alias{color:#fff;}.search-results td span.grey{color:#ccc;} \ No newline at end of file diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js index 15c0b1c..3734551 100644 --- a/static/api/actix-web/stable/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/dev/trait.ToEnvelope.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
        A: Actor<Context = HttpContext<A, S>> + Handler<M>,
        M: Message + Send + 'static,
        M::Result: Send
    ",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
        A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
        M: ActixMessage + Send + 'static,
        M::Result: Send
    ",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; +implementors["actix_web"] = [{text:"impl<A, M, S> ToEnvelope<A, M> for HttpContext<A, S> where
        A: Actor<Context = HttpContext<A, S>> + Handler<M>,
        M: Message + Send + 'static,
        M::Result: Send
    ",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, M, S> ToEnvelope<A, M> for WebsocketContext<A, S> where
        A: Actor<Context = WebsocketContext<A, S>> + Handler<M>,
        M: ActixMessage + Send + 'static,
        M::Result: Send
    ",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/fut/trait.IntoActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorContext.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorContext.js new file mode 100644 index 0000000..5bb5dbc --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> ActorContext for HttpContext<A, S> where
        A: Actor<Context = Self>, 
    ",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> ActorContext for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    ",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorFuture.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorFuture.js new file mode 100644 index 0000000..f4cc37b --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorFuture.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A: Actor> ActorFuture for Drain<A>",synthetic:false,types:["actix_web::context::Drain"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorStream.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.ActorStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.AsyncContext.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.AsyncContext.js new file mode 100644 index 0000000..de2245f --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.AsyncContext.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<A, S> AsyncContext<A> for HttpContext<A, S> where
        A: Actor<Context = Self>, 
    ",synthetic:false,types:["actix_web::context::HttpContext"]},{text:"impl<A, S> AsyncContext<A> for WebsocketContext<A, S> where
        A: Actor<Context = Self>, 
    ",synthetic:false,types:["actix_web::ws::context::WebsocketContext"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Handler.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Handler.js new file mode 100644 index 0000000..48fa42d --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Handler.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Handler<Pause> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Resume> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl Handler<Connect> for ClientConnector",synthetic:false,types:["actix_web::client::connector::ClientConnector"]},{text:"impl<H: IntoHttpHandler> Handler<Signal> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<PauseServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<ResumeServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},{text:"impl<H: IntoHttpHandler> Handler<StopServer> for HttpServer<H>",synthetic:false,types:["actix_web::server::srv::HttpServer"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Message.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Message.js new file mode 100644 index 0000000..5c9a978 --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.Message.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl Message for ClientConnectorStats",synthetic:false,types:["actix_web::client::connector::ClientConnectorStats"]},{text:"impl Message for Resume",synthetic:false,types:["actix_web::client::connector::Resume"]},{text:"impl Message for Connect",synthetic:false,types:["actix_web::client::connector::Connect"]},{text:"impl Message for Pause",synthetic:false,types:["actix_web::client::connector::Pause"]},{text:"impl Message for PauseServer",synthetic:false,types:["actix_web::server::PauseServer"]},{text:"impl Message for ResumeServer",synthetic:false,types:["actix_web::server::ResumeServer"]},{text:"impl Message for StopServer",synthetic:false,types:["actix_web::server::StopServer"]},{text:"impl Message for Message",synthetic:false,types:["actix_web::ws::Message"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.WrapStream.js b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.WrapStream.js new file mode 100644 index 0000000..33dc9f8 --- /dev/null +++ b/static/api/actix-web/stable/implementors/actix_web/actix/actix/trait.WrapStream.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/core/cmp/trait.Eq.js b/static/api/actix-web/stable/implementors/core/cmp/trait.Eq.js index ae61981..00b5d63 100644 --- a/static/api/actix-web/stable/implementors/core/cmp/trait.Eq.js +++ b/static/api/actix-web/stable/implementors/core/cmp/trait.Eq.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl Eq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl<T: Eq> Eq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Eq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Eq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Eq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},]; +implementors["actix_web"] = [{text:"impl<T: Eq> Eq for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Eq> Eq for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Eq> Eq for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl Eq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl<T: Eq> Eq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl Eq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Eq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl Eq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/implementors/core/cmp/trait.Ord.js b/static/api/actix-web/stable/implementors/core/cmp/trait.Ord.js new file mode 100644 index 0000000..ab5f18e --- /dev/null +++ b/static/api/actix-web/stable/implementors/core/cmp/trait.Ord.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: Ord> Ord for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: Ord> Ord for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: Ord> Ord for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/core/cmp/trait.PartialEq.js b/static/api/actix-web/stable/implementors/core/cmp/trait.PartialEq.js index a82773b..63d921e 100644 --- a/static/api/actix-web/stable/implementors/core/cmp/trait.PartialEq.js +++ b/static/api/actix-web/stable/implementors/core/cmp/trait.PartialEq.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl PartialEq for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl PartialEq for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl PartialEq for DispositionType",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl PartialEq for DispositionParam",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl PartialEq for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl PartialEq for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl PartialEq for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl PartialEq for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl PartialEq for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl PartialEq for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl PartialEq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl PartialEq for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl PartialEq for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl PartialEq for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl PartialEq for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl PartialEq for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T: PartialEq> PartialEq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl PartialEq for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl PartialEq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl PartialEq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl PartialEq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl PartialEq for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},{text:"impl PartialEq for Message",synthetic:false,types:["actix_web::ws::Message"]},]; +implementors["actix_web"] = [{text:"impl PartialEq for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl PartialEq for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl<T: PartialEq> PartialEq for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: PartialEq> PartialEq for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: PartialEq> PartialEq for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},{text:"impl PartialEq for DispositionType",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionType"]},{text:"impl PartialEq for DispositionParam",synthetic:false,types:["actix_web::header::common::content_disposition::DispositionParam"]},{text:"impl PartialEq for ContentDisposition",synthetic:false,types:["actix_web::header::common::content_disposition::ContentDisposition"]},{text:"impl PartialEq for Charset",synthetic:false,types:["actix_web::header::shared::charset::Charset"]},{text:"impl PartialEq for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl PartialEq for ExtendedValue",synthetic:false,types:["actix_web::header::ExtendedValue"]},{text:"impl PartialEq for ConnectionType",synthetic:false,types:["actix_web::httpresponse::ConnectionType"]},{text:"impl PartialEq for ResourceType",synthetic:false,types:["actix_web::router::ResourceType"]},{text:"impl PartialEq for ResourceDef",synthetic:false,types:["actix_web::router::ResourceDef"]},{text:"impl PartialEq for ExpectError",synthetic:false,types:["actix_web::error::ExpectError"]},{text:"impl PartialEq for ContentTypeError",synthetic:false,types:["actix_web::error::ContentTypeError"]},{text:"impl PartialEq for UriSegmentError",synthetic:false,types:["actix_web::error::UriSegmentError"]},{text:"impl PartialEq for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl PartialEq for StaticFileError",synthetic:false,types:["actix_web::error::StaticFileError"]},{text:"impl<T: PartialEq> PartialEq for AllOrSome<T>",synthetic:false,types:["actix_web::middleware::cors::AllOrSome"]},{text:"impl PartialEq for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl PartialEq for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl PartialEq for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl PartialEq for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl PartialEq for HandshakeError",synthetic:false,types:["actix_web::ws::HandshakeError"]},{text:"impl PartialEq for Message",synthetic:false,types:["actix_web::ws::Message"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/implementors/core/cmp/trait.PartialOrd.js b/static/api/actix-web/stable/implementors/core/cmp/trait.PartialOrd.js new file mode 100644 index 0000000..64f981a --- /dev/null +++ b/static/api/actix-web/stable/implementors/core/cmp/trait.PartialOrd.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["actix_web"] = [{text:"impl<T: PartialOrd> PartialOrd for Path<T>",synthetic:false,types:["actix_web::extractor::Path"]},{text:"impl<T: PartialOrd> PartialOrd for Query<T>",synthetic:false,types:["actix_web::extractor::Query"]},{text:"impl<T: PartialOrd> PartialOrd for Form<T>",synthetic:false,types:["actix_web::extractor::Form"]},]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/static/api/actix-web/stable/implementors/core/convert/trait.From.js b/static/api/actix-web/stable/implementors/core/convert/trait.From.js index 1724704..276e794 100644 --- a/static/api/actix-web/stable/implementors/core/convert/trait.From.js +++ b/static/api/actix-web/stable/implementors/core/convert/trait.From.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl<T> From<T> for Body where
        T: Into<Binary>, 
    ",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<Box<ActorHttpContext>> for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<&'static str> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<&'static [u8]> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Vec<u8>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<BytesMut> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<T> From<T> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<AsyncResult<T>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<T, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<Box<Future<Item = T, Error = Error>>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T> From<Box<Future<Item = T, Error = Error>>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<'a> From<&'a str> for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<HttpResponseBuilder> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static str> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static [u8]> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<Bytes> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<BytesMut> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a ClientResponse> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl From<ResolverError> for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl From<Error> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl From<ClientConnectorError> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder",synthetic:false,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl From<Error> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T: ResponseError> From<T> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<Error> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<IoError> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<InvalidUri> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Utf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<FromUtf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<IoError> for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl From<ParseError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl From<PayloadError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<JsonError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<PayloadError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<ContentTypeError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<UrlParseError> for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl From<usize> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Option<usize>> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<UrlParseError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<SendRequestError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<ProtocolError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl From<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl From<CloseCode> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl<T: Into<String>> From<(CloseCode, T)> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl From<PayloadError> for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},]; +implementors["actix_web"] = [{text:"impl<T> From<T> for Body where
        T: Into<Binary>, 
    ",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<Box<ActorHttpContext>> for Body",synthetic:false,types:["actix_web::body::Body"]},{text:"impl From<&'static str> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<&'static [u8]> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Vec<u8>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a String> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<BytesMut> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<String>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl From<Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<'a> From<&'a Arc<Vec<u8>>> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl<T> From<T> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<AsyncResult<T>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<T, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T, E: Into<Error>> From<Result<Box<Future<Item = T, Error = Error>>, E>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<T> From<Box<Future<Item = T, Error = Error>>> for AsyncResult<T>",synthetic:false,types:["actix_web::handler::AsyncResult"]},{text:"impl<'a> From<&'a str> for ContentEncoding",synthetic:false,types:["actix_web::header::ContentEncoding"]},{text:"impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<HttpResponseBuilder> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static str> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<&'static [u8]> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a String> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<Bytes> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl From<BytesMut> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<'a> From<&'a ClientResponse> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl<'a, S> From<&'a HttpRequest<S>> for HttpResponseBuilder",synthetic:false,types:["actix_web::httpresponse::HttpResponseBuilder"]},{text:"impl From<ResolverError> for ClientConnectorError",synthetic:false,types:["actix_web::client::connector::ClientConnectorError"]},{text:"impl From<Error> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl From<ClientConnectorError> for SendRequestError",synthetic:false,types:["actix_web::client::pipeline::SendRequestError"]},{text:"impl<'a, S: 'static> From<&'a HttpRequest<S>> for ClientRequestBuilder",synthetic:false,types:["actix_web::client::request::ClientRequestBuilder"]},{text:"impl From<Error> for HttpResponse",synthetic:false,types:["actix_web::httpresponse::HttpResponse"]},{text:"impl<T: ResponseError> From<T> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<Error> for Error",synthetic:false,types:["actix_web::error::Error"]},{text:"impl From<IoError> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<InvalidUri> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Utf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<FromUtf8Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<Error> for ParseError",synthetic:false,types:["actix_web::error::ParseError"]},{text:"impl From<IoError> for PayloadError",synthetic:false,types:["actix_web::error::PayloadError"]},{text:"impl From<ParseError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for MultipartError",synthetic:false,types:["actix_web::error::MultipartError"]},{text:"impl From<PayloadError> for UrlencodedError",synthetic:false,types:["actix_web::error::UrlencodedError"]},{text:"impl From<PayloadError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<JsonError> for JsonPayloadError",synthetic:false,types:["actix_web::error::JsonPayloadError"]},{text:"impl From<PayloadError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<ContentTypeError> for ReadlinesError",synthetic:false,types:["actix_web::error::ReadlinesError"]},{text:"impl From<UrlParseError> for UrlGenerationError",synthetic:false,types:["actix_web::error::UrlGenerationError"]},{text:"impl From<usize> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Option<usize>> for KeepAlive",synthetic:false,types:["actix_web::server::KeepAlive"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<UrlParseError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<SendRequestError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<ProtocolError> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<Error> for ClientError",synthetic:false,types:["actix_web::ws::client::ClientError"]},{text:"impl From<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl From<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},{text:"impl From<CloseCode> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl<T: Into<String>> From<(CloseCode, T)> for CloseReason",synthetic:false,types:["actix_web::ws::proto::CloseReason"]},{text:"impl From<PayloadError> for ProtocolError",synthetic:false,types:["actix_web::ws::ProtocolError"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/implementors/core/convert/trait.Into.js b/static/api/actix-web/stable/implementors/core/convert/trait.Into.js index a1b758d..983fc87 100644 --- a/static/api/actix-web/stable/implementors/core/convert/trait.Into.js +++ b/static/api/actix-web/stable/implementors/core/convert/trait.Into.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl Into<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl Into<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Into<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},]; +implementors["actix_web"] = [{text:"impl Into<Bytes> for Binary",synthetic:false,types:["actix_web::body::Binary"]},{text:"impl Into<u8> for OpCode",synthetic:false,types:["actix_web::ws::proto::OpCode"]},{text:"impl Into<u16> for CloseCode",synthetic:false,types:["actix_web::ws::proto::CloseCode"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/implementors/futures/stream/trait.Stream.js b/static/api/actix-web/stable/implementors/futures/stream/trait.Stream.js index c78c03b..f2e7b5d 100644 --- a/static/api/actix-web/stable/implementors/futures/stream/trait.Stream.js +++ b/static/api/actix-web/stable/implementors/futures/stream/trait.Stream.js @@ -1,5 +1,5 @@ (function() {var implementors = {}; -implementors["actix_web"] = [{text:"impl Stream for Payload",synthetic:false,types:["actix_web::payload::Payload"]},{text:"impl Stream for Box<Pipeline>",synthetic:false,types:["alloc::boxed::Box"]},{text:"impl Stream for ChunkedReadFile",synthetic:false,types:["actix_web::fs::ChunkedReadFile"]},{text:"impl<S> Stream for Multipart<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::multipart::Multipart"]},{text:"impl<S> Stream for Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::multipart::Field"]},{text:"impl Stream for ClientReader",synthetic:false,types:["actix_web::ws::client::ClientReader"]},{text:"impl<S> Stream for WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::ws::WsStream"]},]; +implementors["actix_web"] = [{text:"impl Stream for Payload",synthetic:false,types:["actix_web::payload::Payload"]},{text:"impl Stream for Box<Pipeline>",synthetic:false,types:["alloc::boxed::Box"]},{text:"impl Stream for ChunkedReadFile",synthetic:false,types:["actix_web::fs::ChunkedReadFile"]},{text:"impl<S> Stream for Multipart<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::multipart::Multipart"]},{text:"impl<S> Stream for Field<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::multipart::Field"]},{text:"impl Stream for ClientReader",synthetic:false,types:["actix_web::ws::client::ClientReader"]},{text:"impl<S> Stream for WsStream<S> where
        S: Stream<Item = Bytes, Error = PayloadError>, 
    ",synthetic:false,types:["actix_web::ws::WsStream"]},]; if (window.register_implementors) { window.register_implementors(implementors); diff --git a/static/api/actix-web/stable/main.js b/static/api/actix-web/stable/main.js index b1338d2..628afea 100644 --- a/static/api/actix-web/stable/main.js +++ b/static/api/actix-web/stable/main.js @@ -8,4 +8,4 @@ * , at your * option. This file may not be copied, modified, or distributed * except according to those terms. - */(function(){"use strict";var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword"];var search_input=document.getElementsByClassName('search-input')[0];var currentTab=0;var themesWidth=null;if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position;};}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1;};}function getPageId(){var id=document.location.href.split('#')[1];if(id){return id.split('?')[0].split('&')[0];}return null;}function hasClass(elem,className){if(elem&&className&&elem.className){var elemClass=elem.className;var start=elemClass.indexOf(className);if(start===-1){return false;}else if(elemClass.length===className.length){return true;}else{if(start>0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0){elem.className+=' '+className;}else{elem.className=className;}}}function removeClass(elem,className){if(elem&&className&&elem.className){elem.className=(" "+elem.className+" ").replace(" "+className+" "," ").trim();}}function isHidden(elem){return(elem.offsetParent===null)}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];if(sidebar){addClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div);}}var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display="none";}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];removeClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(filler){filler.remove();}document.getElementsByTagName("body")[0].style.marginTop='';var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display=null;}}var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");onEach(document.getElementsByClassName('js-only'),function(e){removeClass(e,'js-only');});function getQueryStringParams(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1]);});return params;}function browserSupportsHistoryApi(){return document.location.protocol!="file:"&&window.history&&typeof window.history.pushState==="function";}function highlightSourceLines(ev){hideSidebar();var search=document.getElementById("search");var i,from,to,match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(match){from=parseInt(match[1],10);to=Math.min(50000,parseInt(match[2]||match[1],10));from=Math.min(from,to);var elem=document.getElementById(from);if(!elem){return;}if(ev===null){var x=document.getElementById(from);if(x){x.scrollIntoView();}}onEach(document.getElementsByClassName('line-numbers'),function(e){onEach(e.getElementsByTagName('span'),function(i_e){removeClass(i_e,'line-highlighted');});});for(i=from;i<=to;++i){addClass(document.getElementById(i),'line-highlighted');}}else if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");var hash=ev.newURL.slice(ev.newURL.indexOf('#')+1);if(browserSupportsHistoryApi()){history.replaceState(hash,"","?search=#"+hash);}var elem=document.getElementById(hash);if(elem){elem.scrollIntoView();}}}highlightSourceLines(null);window.onhashchange=highlightSourceLines;function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined")return ev.key;var c=ev.charCode||ev.keyCode;if(c==27)return"Escape";return String.fromCharCode(c);}function displayHelp(display,ev){if(display===true){if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur");}}else if(!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur");}}function handleEscape(ev,help){hideModal();var search=document.getElementById("search");if(!hasClass(help,"hidden")){displayHelp(false,ev);}else if(!hasClass(search,"hidden")){ev.preventDefault();addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");}defocusSearchBar();}function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return;}var help=document.getElementById("help");if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;case"s":case"S":displayHelp(false,ev);hideModal();ev.preventDefault();focusSearchBar();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":if(ev.shiftKey){hideModal();displayHelp(true,ev);}break;}}}document.onkeypress=handleShortcut;document.onkeydown=handleShortcut;document.onclick=function(ev){if(hasClass(ev.target,'collapse-toggle')){collapseDocs(ev.target,"toggle");}else if(hasClass(ev.target.parentNode,'collapse-toggle')){collapseDocs(ev.target.parentNode,"toggle");}else if(ev.target.tagName==='SPAN'&&hasClass(ev.target.parentNode,'line-numbers')){var prev_id=0;var set_fragment=function(name){if(browserSupportsHistoryApi()){history.replaceState(null,null,'#'+name);window.hashchange();}else{location.replace('#'+name);}};var cur_id=parseInt(ev.target.id,10);if(ev.shiftKey&&prev_id){if(prev_id>cur_id){var tmp=prev_id;prev_id=cur_id;cur_id=tmp;}set_fragment(prev_id+'-'+cur_id);}else{prev_id=cur_id;set_fragment(cur_id);}}else if(!hasClass(document.getElementById("help"),"hidden")){addClass(document.getElementById("help"),"hidden");removeClass(document.body,"blur");}};var x=document.getElementsByClassName('version-selector');if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped='',len=rootPath.match(/\.\.\//g).length+1;for(i=0;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;if(isType!==true||obj.type){var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;if(obj.ty===TY_KEYWORD){obj.fullPath+='|k';}obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break;}}}}return out;}function sortResults(results,isType){var ar=[];for(var entry in results){if(results.hasOwnProperty(entry)){ar.push(results[entry]);}}results=ar;var nresults=results.length;for(var i=0;ib?+1:-1);}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b;}a=aaa.index;b=bbb.index;if(a!==b){return a-b;}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1;}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1;}a=(aaa.item.desc==='');b=(bbb.item.desc==='');if(a!==b){return a-b;}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b;}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1);}return 0;});for(var i=0;i'));return{name:val.substring(0,val.indexOf('<')),generics:values.split(/\s*,\s*/),};}return{name:val,generics:[],};}function checkGenerics(obj,val){var lev_distance=MAX_LEV_DISTANCE+1;if(val.generics.length>0){if(obj.g&&obj.g.length>=val.generics.length){var elems=obj.g.slice(0);var total=0;var done=0;for(var y=0;y=val.generics.length){var elems=obj.g.slice(0);var allFound=true;var x;for(var y=0;allFound===true&&y0){for(var x=0;x0){for(var x=0;x0){for(var i=0;ipath.length){return MAX_LEV_DISTANCE+1;}for(var i=0;ipath.length){break;}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break;}lev_total+=lev;}if(aborted===false){ret_lev=Math.min(ret_lev,Math.round(lev_total/startsWith.length));}}return ret_lev;}function typePassesFilter(filter,type){if(filter<0)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return(name=="associatedconstant");case"fn":return(name=="method"||name=="tymethod");case"type":return(name=="primitive"||name=="keyword");}return false;}function generateId(ty){if(ty.parent&&ty.parent.name){return itemTypes[ty.ty]+ty.path+ty.parent.name+ty.name;}return itemTypes[ty.ty]+ty.path+ty.name;}var nSearchWords=searchWords.length;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(var i=0;i")>-1){var trimmer=function(s){return s.trim();};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(var i=0;i1?paths.length-1:1);for(j=0;j1){var lev=checkPath(startsWith,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue;}else if(lev>0){lev_add=1;}}var returned=MAX_LEV_DISTANCE+1;var in_args=MAX_LEV_DISTANCE+1;var index=-1;var lev=MAX_LEV_DISTANCE+1;var fullId=generateId(ty);if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||searchWords[j].replace(/_/g,"").indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=searchWords[j].replace(/_/g,"").indexOf(val);}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){lev=MAX_LEV_DISTANCE+1;}else{lev+=1;}}if((in_args=findArg(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){in_args=MAX_LEV_DISTANCE+1;}}if((returned=checkReturned(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){returned=MAX_LEV_DISTANCE+1;}}lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].startsWith(val)){if(val.length<6){lev-=1;}else{lev=0;}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,};}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args);}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,};}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned);}if(index!==-1||lev<=MAX_LEV_DISTANCE){if(index!==-1&&paths.length<2){lev=0;}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,};}results[fullId].lev=Math.min(results[fullId].lev,lev);}}}var ret={'in_args':sortResults(results_in_args,true),'returned':sortResults(results_returned,true),'others':sortResults(results),};if(ALIASES&&ALIASES[window.currentCrate]&&ALIASES[window.currentCrate][query.raw]){var aliases=ALIASES[window.currentCrate][query.raw];for(var i=0;iMAX_RESULTS){ret['others'].pop();}}}return ret;}function validateResult(name,path,keys,parent){for(var i=0;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false;}}return true;}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,'constant');query=query.substring(matches[0].length);}return{raw:raw,query:query,type:type,id:query+type};}function initSearchNav(){var hoverTimeout;var click_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}var dst=e.target.getElementsByTagName('a');if(dst.length<1){return;}dst=dst[0];if(window.location.pathname===dst.pathname){addClass(document.getElementById('search'),'hidden');removeClass(document.getElementById('main'),'hidden');document.location.href=dst.href;}};var mouseover_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}clearTimeout(hoverTimeout);hoverTimeout=setTimeout(function(){onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){removeClass(i_e,'highlighted');});});addClass(el,'highlighted');},20);};onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){i_e.onclick=click_func;i_e.onmouseover=mouseover_func;});});search_input.onkeydown=function(e){var actives=[[],[],[]];var current=0;onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('highlighted'),function(e){actives[current].push(e);});current+=1;});if(e.which===38){if(!actives[currentTab].length||!actives[currentTab][0].previousElementSibling){return;}addClass(actives[currentTab][0].previousElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}else if(e.which===40){if(!actives[currentTab].length){var results=document.getElementsByClassName('search-results');if(results.length>0){var res=results[currentTab].getElementsByClassName('result');if(res.length>0){addClass(res[0],'highlighted');}}}else if(actives[currentTab][0].nextElementSibling){addClass(actives[currentTab][0].nextElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}}else if(e.which===13){if(actives[currentTab].length){document.location.href=actives[currentTab][0].getElementsByTagName('a')[0].href;}}else if(e.which===9){if(e.shiftKey){printTab(currentTab>0?currentTab-1:2);}else{printTab(currentTab>1?0:currentTab+1);}e.preventDefault();}else if(e.which===16){}else if(e.which===27){removeClass(actives[currentTab][0],'highlighted');search_input.value='';defocusSearchBar();}else if(actives[currentTab].length>0){removeClass(actives[currentTab][0],'highlighted');}};}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;if(type==='mod'){displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+name+'/index.html';}else if(type==="primitive"||type==="keyword"){displayPath="";href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}else if(type==="externcrate"){displayPath="";href=rootPath+name+'/index.html';}else if(item.parent!==undefined){var myparent=item.parent;var anchor='#'+type+'.'+name;var parentType=itemTypes[myparent.ty];if(parentType==="primitive"){displayPath=myparent.name+'::';}else{displayPath=item.path+'::'+myparent.name+'::';}href=rootPath+item.path.replace(/::/g,'/')+'/'+parentType+'.'+myparent.name+'.html'+anchor;}else{displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}return[displayPath,href];}function escape(content){var h1=document.createElement('h1');h1.textContent=content;return h1.innerHTML;}function pathSplitter(path){var tmp=''+path.replace(/::/g,'::');if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6);}return tmp;}function addTab(array,query,display){var extraStyle='';if(display===false){extraStyle=' style="display: none;"';}var output='';var duplicates={};var length=0;if(array.length>0){output='';array.forEach(function(item){var name,type;name=item.name;type=itemTypes[item.ty];if(item.is_alias!==true){if(duplicates[item.fullPath]){return;}duplicates[item.fullPath]=true;}length+=1;output+='';});output+='
    '+''+(item.is_alias===true?(''+item.alias+'  - see '):'')+item.displayPath+''+name+''+''+''+escape(item.desc)+' 
    ';}else{output='
    No results :(
    '+'Try on DuckDuckGo?
    ';}return[output,length];}function makeTabHeader(tabNb,text,nbElems){if(currentTab===tabNb){return'
    '+text+'
    ('+nbElems+')
    ';}return'
    '+text+'
    ('+nbElems+')
    ';}function showResults(results){if(results['others'].length===1&&getCurrentValue('rustdoc-go-to-only-result')==="true"){var elem=document.createElement('a');elem.href=results['others'][0].href;elem.style.display='none';document.body.appendChild(elem);elem.click();}var query=getQuery(search_input.value);currentResults=query.id;var ret_others=addTab(results['others'],query);var ret_in_args=addTab(results['in_args'],query,false);var ret_returned=addTab(results['returned'],query,false);var output='

    Results for '+escape(query.query)+(query.type?' (type: '+escape(query.type)+')':'')+'

    '+'
    '+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+'
    '+ret_others[0]+ret_in_args[0]+ret_returned[0]+'
    ';addClass(document.getElementById('main'),'hidden');var search=document.getElementById('search');removeClass(search,'hidden');search.innerHTML=output;var tds=search.getElementsByTagName('td');var td_width=0;if(tds.length>0){td_width=tds[0].offsetWidth;}var width=search.offsetWidth-40-td_width;onEach(search.getElementsByClassName('desc'),function(e){e.style.width=width+'px';});initSearchNav();var elems=document.getElementById('titles').childNodes;elems[0].onclick=function(){printTab(0);};elems[1].onclick=function(){printTab(1);};elems[2].onclick=function(){printTab(2);};printTab(currentTab);}function execSearch(query,searchWords){var queries=query.raw.split(",");var results={'in_args':[],'returned':[],'others':[],};for(var i=0;i1){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev;}}return start;}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1;}}}return ret;}return{'in_args':mergeArrays(results['in_args']),'returned':mergeArrays(results['returned']),'others':mergeArrays(results['others']),};}else{return{'in_args':results['in_args'][0],'returned':results['returned'][0],'others':results['others'][0],};}}function search(e){var params=getQueryStringParams();var query=getQuery(search_input.value.trim());if(e){e.preventDefault();}if(query.query.length===0||query.id===currentResults){if(query.query.length>0){putBackSearch(search_input);}return;}document.title="Results for "+query.query+" - Rust";if(browserSupportsHistoryApi()){if(!history.state&&!params.search){history.pushState(query,"","?search="+encodeURIComponent(query.raw));}else{history.replaceState(query,"","?search="+encodeURIComponent(query.raw));}}showResults(execSearch(query,index));}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];for(var crate in rawSearchIndex){if(!rawSearchIndex.hasOwnProperty(crate)){continue;}searchWords.push(crate);searchIndex.push({crate:crate,ty:1,name:crate,path:"",desc:rawSearchIndex[crate].doc,type:null,});var items=rawSearchIndex[crate].items;var paths=rawSearchIndex[crate].paths;var len=paths.length;for(var i=0;i"+labelForToggleButton(false)+"
    ]";var func=function(e){var next=e.nextElementSibling;if(hasClass(e,'impl')&&next&&hasClass(next,'docblock')){next=next.nextElementSibling;}if(!next){return;}if((checkIfThereAreMethods(next.childNodes)||hasClass(e,'method'))&&(hasClass(next,'docblock')||hasClass(e,'impl')||(hasClass(next,'stability')&&hasClass(next.nextElementSibling,'docblock')))){insertAfter(toggle.cloneNode(true),e.childNodes[e.childNodes.length-1]);}};onEach(document.getElementsByClassName('method'),func);onEach(document.getElementsByClassName('impl'),func);onEach(document.getElementsByClassName('impl-items'),function(e){onEach(e.getElementsByClassName('associatedconstant'),func);});function createToggle(otherMessage,extraClass){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';if(!otherMessage){span.innerHTML=' Expand description';}else{span.innerHTML=otherMessage;span.style.fontSize='20px';}var mainToggle=toggle.cloneNode(true);mainToggle.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper';if(extraClass){wrapper.className+=' '+extraClass;}wrapper.appendChild(mainToggle);return wrapper;}onEach(document.getElementsByClassName('docblock'),function(e){if(hasClass(e,'autohide')){var wrap=e.previousElementSibling;if(wrap&&hasClass(wrap,'toggle-wrapper')){var toggle=wrap.childNodes[0];var extra=false;if(e.childNodes[0].tagName==='H3'){extra=true;}e.style.display='none';addClass(wrap,'collapsed');onEach(toggle.getElementsByClassName('inner'),function(e){e.innerHTML=labelForToggleButton(true);});onEach(toggle.getElementsByClassName('toggle-label'),function(e){e.style.display='inline-block';if(extra===true){i_e.innerHTML=" Show "+e.childNodes[0].innerHTML;}});}}if(e.parentNode.id==="main"){var otherMessage;var extraClass;if(hasClass(e,"type-decl")){otherMessage=' Show declaration';}else if(hasClass(e.childNodes[0],"impl-items")){extraClass="marg-left";}e.parentNode.insertBefore(createToggle(otherMessage,extraClass),e);if(otherMessage&&getCurrentValue('rustdoc-item-declarations')!=="false"){collapseDocs(e.previousSibling.childNodes[0],"toggle");}}});function createToggleWrapper(tog){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';span.innerHTML=' Expand attributes';tog.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper toggle-attributes';wrapper.appendChild(tog);return wrapper;}function printTab(nb){if(nb===0||nb===1||nb===2){currentTab=nb;}var nb_copy=nb;onEach(document.getElementById('titles').childNodes,function(elem){if(nb_copy===0){addClass(elem,'selected');}else{removeClass(elem,'selected');}nb_copy-=1;});onEach(document.getElementById('results').childNodes,function(elem){if(nb===0){elem.style.display='';}else{elem.style.display='none';}nb-=1;});}onEach(document.getElementById('main').getElementsByClassName('attributes'),function(i_e){i_e.parentNode.insertBefore(createToggleWrapper(toggle.cloneNode(true)),i_e);if(getCurrentValue("rustdoc-item-attributes")!=="false"){collapseDocs(i_e.previousSibling.childNodes[0],"toggle");}});onEach(document.getElementsByClassName('rust-example-rendered'),function(e){if(hasClass(e,'compile_fail')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#f00';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}else if(hasClass(e,'ignore')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#ff9200';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}});function showModal(content){var modal=document.createElement('div');modal.id="important";addClass(modal,'modal');modal.innerHTML='';document.getElementsByTagName('body')[0].appendChild(modal);document.getElementById('modal-close').onclick=hideModal;modal.onclick=hideModal;}function hideModal(){var modal=document.getElementById("important");if(modal){modal.parentNode.removeChild(modal);}}onEach(document.getElementsByClassName('important-traits'),function(e){e.onclick=function(){showModal(e.lastElementChild.innerHTML);};});function putBackSearch(search_input){if(search_input.value!==""){addClass(document.getElementById("main"),"hidden");removeClass(document.getElementById("search"),"hidden");if(browserSupportsHistoryApi()){history.replaceState(search_input.value,"","?search="+encodeURIComponent(search_input.value));}}}if(search_input){search_input.onfocus=function(){putBackSearch(this);};}var params=getQueryStringParams();if(params&¶ms.search){addClass(document.getElementById("main"),"hidden");var search=document.getElementById("search");removeClass(search,"hidden");search.innerHTML='

    Loading search results...

    ';}var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName('sidebar')[0];if(hasClass(sidebar,"mobile")===true){hideSidebar();}else{showSidebar();}};}window.onresize=function(){hideSidebar();};autoCollapse(getPageId(),getCurrentValue("rustdoc-collapse")==="true");}());function focusSearchBar(){document.getElementsByClassName('search-input')[0].focus();}function defocusSearchBar(){document.getElementsByClassName('search-input')[0].blur();} \ No newline at end of file + */(function(){"use strict";var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword"];var search_input=document.getElementsByClassName('search-input')[0];var currentTab=0;var themesWidth=null;if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position;};}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1;};}function getPageId(){var id=document.location.href.split('#')[1];if(id){return id.split('?')[0].split('&')[0];}return null;}function hasClass(elem,className){if(elem&&className&&elem.className){var elemClass=elem.className;var start=elemClass.indexOf(className);if(start===-1){return false;}else if(elemClass.length===className.length){return true;}else{if(start>0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0&&elemClass[start-1]!==' '){return false;}var end=start+className.length;return!(end0){elem.className+=' '+className;}else{elem.className=className;}}}function removeClass(elem,className){if(elem&&className&&elem.className){elem.className=(" "+elem.className+" ").replace(" "+className+" "," ").trim();}}function isHidden(elem){return(elem.offsetParent===null)}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];if(sidebar){addClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div);}}var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display="none";}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it");}var sidebar=document.getElementsByClassName('sidebar')[0];removeClass(sidebar,'mobile');var filler=document.getElementById("sidebar-filler");if(filler){filler.remove();}document.getElementsByTagName("body")[0].style.marginTop='';var themePicker=document.getElementsByClassName("theme-picker");if(themePicker&&themePicker.length>0){themePicker[0].style.display=null;}}var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");onEach(document.getElementsByClassName('js-only'),function(e){removeClass(e,'js-only');});function getQueryStringParams(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1]);});return params;}function browserSupportsHistoryApi(){return document.location.protocol!="file:"&&window.history&&typeof window.history.pushState==="function";}function highlightSourceLines(ev){hideSidebar();var search=document.getElementById("search");var i,from,to,match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(match){from=parseInt(match[1],10);to=Math.min(50000,parseInt(match[2]||match[1],10));from=Math.min(from,to);var elem=document.getElementById(from);if(!elem){return;}if(ev===null){var x=document.getElementById(from);if(x){x.scrollIntoView();}}onEach(document.getElementsByClassName('line-numbers'),function(e){onEach(e.getElementsByTagName('span'),function(i_e){removeClass(i_e,'line-highlighted');});});for(i=from;i<=to;++i){addClass(document.getElementById(i),'line-highlighted');}}else if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");var hash=ev.newURL.slice(ev.newURL.indexOf('#')+1);if(browserSupportsHistoryApi()){history.replaceState(hash,"","?search=#"+hash);}var elem=document.getElementById(hash);if(elem){elem.scrollIntoView();}}}highlightSourceLines(null);window.onhashchange=highlightSourceLines;function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined")return ev.key;var c=ev.charCode||ev.keyCode;if(c==27)return"Escape";return String.fromCharCode(c);}function displayHelp(display,ev){if(display===true){if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur");}}else if(!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur");}}function handleEscape(ev,help){hideModal();var search=document.getElementById("search");if(!hasClass(help,"hidden")){displayHelp(false,ev);}else if(!hasClass(search,"hidden")){ev.preventDefault();addClass(search,"hidden");removeClass(document.getElementById("main"),"hidden");}defocusSearchBar();}function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return;}var help=document.getElementById("help");if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev,help);break;case"s":case"S":displayHelp(false,ev);hideModal();ev.preventDefault();focusSearchBar();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":if(ev.shiftKey){hideModal();displayHelp(true,ev);}break;}}}document.onkeypress=handleShortcut;document.onkeydown=handleShortcut;document.onclick=function(ev){if(hasClass(ev.target,'collapse-toggle')){collapseDocs(ev.target,"toggle");}else if(hasClass(ev.target.parentNode,'collapse-toggle')){collapseDocs(ev.target.parentNode,"toggle");}else if(ev.target.tagName==='SPAN'&&hasClass(ev.target.parentNode,'line-numbers')){var prev_id=0;var set_fragment=function(name){if(browserSupportsHistoryApi()){history.replaceState(null,null,'#'+name);window.hashchange();}else{location.replace('#'+name);}};var cur_id=parseInt(ev.target.id,10);if(ev.shiftKey&&prev_id){if(prev_id>cur_id){var tmp=prev_id;prev_id=cur_id;cur_id=tmp;}set_fragment(prev_id+'-'+cur_id);}else{prev_id=cur_id;set_fragment(cur_id);}}else if(!hasClass(document.getElementById("help"),"hidden")){addClass(document.getElementById("help"),"hidden");removeClass(document.body,"blur");}};var x=document.getElementsByClassName('version-selector');if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped='',len=rootPath.match(/\.\.\//g).length+1;for(i=0;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;if(isType!==true||obj.type){var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+='|'+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break;}}}}return out;}function sortResults(results,isType){var ar=[];for(var entry in results){if(results.hasOwnProperty(entry)){ar.push(results[entry]);}}results=ar;var nresults=results.length;for(var i=0;ib?+1:-1);}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b;}a=aaa.index;b=bbb.index;if(a!==b){return a-b;}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1;}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1;}a=(aaa.item.desc==='');b=(bbb.item.desc==='');if(a!==b){return a-b;}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b;}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1);}return 0;});for(var i=0;i'));return{name:val.substring(0,val.indexOf('<')),generics:values.split(/\s*,\s*/),};}return{name:val,generics:[],};}function checkGenerics(obj,val){var lev_distance=MAX_LEV_DISTANCE+1;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=obj[GENERICS_DATA].slice(0);var total=0;var done=0;for(var y=0;yGENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=obj[GENERICS_DATA].slice(0);var allFound=true;var x;for(var y=0;allFound===true&&yGENERICS_DATA&&obj[GENERICS_DATA].length!==0){var tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev;}}else{return 0;}}if(literalSearch===true){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){for(var x=0;x0){for(var i=0;iOUTPUT_DATA){var tmp=checkType(obj.type[OUTPUT_DATA],val,literalSearch);if(literalSearch===true&&tmp===true){return true;}lev_distance=Math.min(tmp,lev_distance);if(lev_distance===0){return 0;}}return literalSearch===true?false:lev_distance;}function checkPath(startsWith,lastElem,ty){if(startsWith.length===0){return 0;}var ret_lev=MAX_LEV_DISTANCE+1;var path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase());}if(startsWith.length>path.length){return MAX_LEV_DISTANCE+1;}for(var i=0;ipath.length){break;}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break;}lev_total+=lev;}if(aborted===false){ret_lev=Math.min(ret_lev,Math.round(lev_total/startsWith.length));}}return ret_lev;}function typePassesFilter(filter,type){if(filter<0)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return(name=="associatedconstant");case"fn":return(name=="method"||name=="tymethod");case"type":return(name=="primitive"||name=="keyword");}return false;}function generateId(ty){if(ty.parent&&ty.parent.name){return itemTypes[ty.ty]+ty.path+ty.parent.name+ty.name;}return itemTypes[ty.ty]+ty.path+ty.name;}var nSearchWords=searchWords.length;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(var i=0;i")>-1){var trimmer=function(s){return s.trim();};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(var i=0;iOUTPUT_DATA?type[OUTPUT_DATA].name:"";var returned=checkReturned(ty,output,true);if(output.name==="*"||returned===true){var in_args=false;var module=false;if(input==="*"){module=true;}else{var allFound=true;for(var it=0;allFound===true&&it1?paths.length-1:1);for(j=0;j1){var lev=checkPath(startsWith,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue;}else if(lev>0){lev_add=1;}}var returned=MAX_LEV_DISTANCE+1;var in_args=MAX_LEV_DISTANCE+1;var index=-1;var lev=MAX_LEV_DISTANCE+1;var fullId=generateId(ty);if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||searchWords[j].replace(/_/g,"").indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=searchWords[j].replace(/_/g,"").indexOf(val);}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){lev=MAX_LEV_DISTANCE+1;}else{lev+=1;}}if((in_args=findArg(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){in_args=MAX_LEV_DISTANCE+1;}}if((returned=checkReturned(ty,valGenerics))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)===false){returned=MAX_LEV_DISTANCE+1;}}lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].startsWith(val)){if(val.length<6){lev-=1;}else{lev=0;}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,};}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args);}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,};}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned);}if(index!==-1||lev<=MAX_LEV_DISTANCE){if(index!==-1&&paths.length<2){lev=0;}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,};}results[fullId].lev=Math.min(results[fullId].lev,lev);}}}var ret={'in_args':sortResults(results_in_args,true),'returned':sortResults(results_returned,true),'others':sortResults(results),};if(ALIASES&&ALIASES[window.currentCrate]&&ALIASES[window.currentCrate][query.raw]){var aliases=ALIASES[window.currentCrate][query.raw];for(var i=0;iMAX_RESULTS){ret['others'].pop();}}}return ret;}function validateResult(name,path,keys,parent){for(var i=0;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false;}}return true;}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,'constant');query=query.substring(matches[0].length);}return{raw:raw,query:query,type:type,id:query+type};}function initSearchNav(){var hoverTimeout;var click_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}var dst=e.target.getElementsByTagName('a');if(dst.length<1){return;}dst=dst[0];if(window.location.pathname===dst.pathname){addClass(document.getElementById('search'),'hidden');removeClass(document.getElementById('main'),'hidden');document.location.href=dst.href;}};var mouseover_func=function(e){var el=e.target;while(el.tagName!=='TR'){el=el.parentNode;}clearTimeout(hoverTimeout);hoverTimeout=setTimeout(function(){onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){removeClass(i_e,'highlighted');});});addClass(el,'highlighted');},20);};onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('result'),function(i_e){i_e.onclick=click_func;i_e.onmouseover=mouseover_func;});});search_input.onkeydown=function(e){var actives=[[],[],[]];var current=0;onEach(document.getElementsByClassName('search-results'),function(e){onEach(e.getElementsByClassName('highlighted'),function(e){actives[current].push(e);});current+=1;});if(e.which===38){if(!actives[currentTab].length||!actives[currentTab][0].previousElementSibling){return;}addClass(actives[currentTab][0].previousElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}else if(e.which===40){if(!actives[currentTab].length){var results=document.getElementsByClassName('search-results');if(results.length>0){var res=results[currentTab].getElementsByClassName('result');if(res.length>0){addClass(res[0],'highlighted');}}}else if(actives[currentTab][0].nextElementSibling){addClass(actives[currentTab][0].nextElementSibling,'highlighted');removeClass(actives[currentTab][0],'highlighted');}}else if(e.which===13){if(actives[currentTab].length){document.location.href=actives[currentTab][0].getElementsByTagName('a')[0].href;}}else if(e.which===9){if(e.shiftKey){printTab(currentTab>0?currentTab-1:2);}else{printTab(currentTab>1?0:currentTab+1);}e.preventDefault();}else if(e.which===16){}else if(e.which===27){removeClass(actives[currentTab][0],'highlighted');search_input.value='';defocusSearchBar();}else if(actives[currentTab].length>0){removeClass(actives[currentTab][0],'highlighted');}};}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;if(type==='mod'){displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+name+'/index.html';}else if(type==="primitive"||type==="keyword"){displayPath="";href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}else if(type==="externcrate"){displayPath="";href=rootPath+name+'/index.html';}else if(item.parent!==undefined){var myparent=item.parent;var anchor='#'+type+'.'+name;var parentType=itemTypes[myparent.ty];if(parentType==="primitive"){displayPath=myparent.name+'::';}else{displayPath=item.path+'::'+myparent.name+'::';}href=rootPath+item.path.replace(/::/g,'/')+'/'+parentType+'.'+myparent.name+'.html'+anchor;}else{displayPath=item.path+'::';href=rootPath+item.path.replace(/::/g,'/')+'/'+type+'.'+name+'.html';}return[displayPath,href];}function escape(content){var h1=document.createElement('h1');h1.textContent=content;return h1.innerHTML;}function pathSplitter(path){var tmp=''+path.replace(/::/g,'::');if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6);}return tmp;}function addTab(array,query,display){var extraStyle='';if(display===false){extraStyle=' style="display: none;"';}var output='';var duplicates={};var length=0;if(array.length>0){output='';array.forEach(function(item){var name,type;name=item.name;type=itemTypes[item.ty];if(item.is_alias!==true){if(duplicates[item.fullPath]){return;}duplicates[item.fullPath]=true;}length+=1;output+='';});output+='
    '+''+(item.is_alias===true?(''+item.alias+'  - see '):'')+item.displayPath+''+name+''+''+''+escape(item.desc)+' 
    ';}else{output='
    No results :(
    '+'Try on DuckDuckGo?
    ';}return[output,length];}function makeTabHeader(tabNb,text,nbElems){if(currentTab===tabNb){return'
    '+text+'
    ('+nbElems+')
    ';}return'
    '+text+'
    ('+nbElems+')
    ';}function showResults(results){if(results['others'].length===1&&getCurrentValue('rustdoc-go-to-only-result')==="true"){var elem=document.createElement('a');elem.href=results['others'][0].href;elem.style.display='none';document.body.appendChild(elem);elem.click();}var query=getQuery(search_input.value);currentResults=query.id;var ret_others=addTab(results['others'],query);var ret_in_args=addTab(results['in_args'],query,false);var ret_returned=addTab(results['returned'],query,false);var output='

    Results for '+escape(query.query)+(query.type?' (type: '+escape(query.type)+')':'')+'

    '+'
    '+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+'
    '+ret_others[0]+ret_in_args[0]+ret_returned[0]+'
    ';addClass(document.getElementById('main'),'hidden');var search=document.getElementById('search');removeClass(search,'hidden');search.innerHTML=output;var tds=search.getElementsByTagName('td');var td_width=0;if(tds.length>0){td_width=tds[0].offsetWidth;}var width=search.offsetWidth-40-td_width;onEach(search.getElementsByClassName('desc'),function(e){e.style.width=width+'px';});initSearchNav();var elems=document.getElementById('titles').childNodes;elems[0].onclick=function(){printTab(0);};elems[1].onclick=function(){printTab(1);};elems[2].onclick=function(){printTab(2);};printTab(currentTab);}function execSearch(query,searchWords){var queries=query.raw.split(",");var results={'in_args':[],'returned':[],'others':[],};for(var i=0;i1){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev;}}return start;}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1;}}}return ret;}return{'in_args':mergeArrays(results['in_args']),'returned':mergeArrays(results['returned']),'others':mergeArrays(results['others']),};}else{return{'in_args':results['in_args'][0],'returned':results['returned'][0],'others':results['others'][0],};}}function search(e){var params=getQueryStringParams();var query=getQuery(search_input.value.trim());if(e){e.preventDefault();}if(query.query.length===0||query.id===currentResults){if(query.query.length>0){putBackSearch(search_input);}return;}document.title="Results for "+query.query+" - Rust";if(browserSupportsHistoryApi()){if(!history.state&&!params.search){history.pushState(query,"","?search="+encodeURIComponent(query.raw));}else{history.replaceState(query,"","?search="+encodeURIComponent(query.raw));}}showResults(execSearch(query,index));}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];for(var crate in rawSearchIndex){if(!rawSearchIndex.hasOwnProperty(crate)){continue;}searchWords.push(crate);searchIndex.push({crate:crate,ty:1,name:crate,path:"",desc:rawSearchIndex[crate].doc,type:null,});var items=rawSearchIndex[crate].items;var paths=rawSearchIndex[crate].paths;var len=paths.length;for(var i=0;i"+labelForToggleButton(false)+"
    ]";var func=function(e){var next=e.nextElementSibling;if(hasClass(e,'impl')&&next&&hasClass(next,'docblock')){next=next.nextElementSibling;}if(!next){return;}if((checkIfThereAreMethods(next.childNodes)||hasClass(e,'method'))&&(hasClass(next,'docblock')||hasClass(e,'impl')||(hasClass(next,'stability')&&hasClass(next.nextElementSibling,'docblock')))){insertAfter(toggle.cloneNode(true),e.childNodes[e.childNodes.length-1]);}};onEach(document.getElementsByClassName('method'),func);onEach(document.getElementsByClassName('impl'),func);onEach(document.getElementsByClassName('impl-items'),function(e){onEach(e.getElementsByClassName('associatedconstant'),func);});function createToggle(otherMessage,fontSize,extraClass){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';if(!otherMessage){span.innerHTML=' Expand description';}else{span.innerHTML=otherMessage;}if(fontSize){span.style.fontSize=fontSize;}var mainToggle=toggle.cloneNode(true);mainToggle.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper';if(extraClass){wrapper.className+=' '+extraClass;}wrapper.appendChild(mainToggle);return wrapper;}onEach(document.getElementsByClassName('docblock'),function(e){if(hasClass(e,'autohide')){var wrap=e.previousElementSibling;if(wrap&&hasClass(wrap,'toggle-wrapper')){var toggle=wrap.childNodes[0];var extra=false;if(e.childNodes[0].tagName==='H3'){extra=true;}e.style.display='none';addClass(wrap,'collapsed');onEach(toggle.getElementsByClassName('inner'),function(e){e.innerHTML=labelForToggleButton(true);});onEach(toggle.getElementsByClassName('toggle-label'),function(e){e.style.display='inline-block';if(extra===true){i_e.innerHTML=" Show "+e.childNodes[0].innerHTML;}});}}if(e.parentNode.id==="main"){var otherMessage;var fontSize;var extraClass;if(hasClass(e,"type-decl")){fontSize="20px";otherMessage=' Show declaration';}else if(hasClass(e,"non-exhaustive")){otherMessage=' This ';if(hasClass(e,"non-exhaustive-struct")){otherMessage+='struct';}else if(hasClass(e,"non-exhaustive-enum")){otherMessage+='enum';}else if(hasClass(e,"non-exhaustive-type")){otherMessage+='type';}otherMessage+=' is marked as non-exhaustive';}else if(hasClass(e.childNodes[0],"impl-items")){extraClass="marg-left";}e.parentNode.insertBefore(createToggle(otherMessage,fontSize,extraClass),e);if(otherMessage&&getCurrentValue('rustdoc-item-declarations')!=="false"){collapseDocs(e.previousSibling.childNodes[0],"toggle");}}});function createToggleWrapper(tog){var span=document.createElement('span');span.className='toggle-label';span.style.display='none';span.innerHTML=' Expand attributes';tog.appendChild(span);var wrapper=document.createElement('div');wrapper.className='toggle-wrapper toggle-attributes';wrapper.appendChild(tog);return wrapper;}function printTab(nb){if(nb===0||nb===1||nb===2){currentTab=nb;}var nb_copy=nb;onEach(document.getElementById('titles').childNodes,function(elem){if(nb_copy===0){addClass(elem,'selected');}else{removeClass(elem,'selected');}nb_copy-=1;});onEach(document.getElementById('results').childNodes,function(elem){if(nb===0){elem.style.display='';}else{elem.style.display='none';}nb-=1;});}onEach(document.getElementById('main').getElementsByClassName('attributes'),function(i_e){i_e.parentNode.insertBefore(createToggleWrapper(toggle.cloneNode(true)),i_e);if(getCurrentValue("rustdoc-item-attributes")!=="false"){collapseDocs(i_e.previousSibling.childNodes[0],"toggle");}});onEach(document.getElementsByClassName('rust-example-rendered'),function(e){if(hasClass(e,'compile_fail')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#f00';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}else if(hasClass(e,'ignore')){e.addEventListener("mouseover",function(event){e.previousElementSibling.childNodes[0].style.color='#ff9200';});e.addEventListener("mouseout",function(event){e.previousElementSibling.childNodes[0].style.color='';});}});function showModal(content){var modal=document.createElement('div');modal.id="important";addClass(modal,'modal');modal.innerHTML='';document.getElementsByTagName('body')[0].appendChild(modal);document.getElementById('modal-close').onclick=hideModal;modal.onclick=hideModal;}function hideModal(){var modal=document.getElementById("important");if(modal){modal.parentNode.removeChild(modal);}}onEach(document.getElementsByClassName('important-traits'),function(e){e.onclick=function(){showModal(e.lastElementChild.innerHTML);};});function putBackSearch(search_input){if(search_input.value!==""){addClass(document.getElementById("main"),"hidden");removeClass(document.getElementById("search"),"hidden");if(browserSupportsHistoryApi()){history.replaceState(search_input.value,"","?search="+encodeURIComponent(search_input.value));}}}if(search_input){search_input.onfocus=function(){putBackSearch(this);};}var params=getQueryStringParams();if(params&¶ms.search){addClass(document.getElementById("main"),"hidden");var search=document.getElementById("search");removeClass(search,"hidden");search.innerHTML='

    Loading search results...

    ';}var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName('sidebar')[0];if(hasClass(sidebar,"mobile")===true){hideSidebar();}else{showSidebar();}};}window.onresize=function(){hideSidebar();};autoCollapse(getPageId(),getCurrentValue("rustdoc-collapse")==="true");}());function focusSearchBar(){document.getElementsByClassName('search-input')[0].focus();}function defocusSearchBar(){document.getElementsByClassName('search-input')[0].blur();} \ No newline at end of file diff --git a/static/api/actix-web/stable/rustdoc.css b/static/api/actix-web/stable/rustdoc.css index 104b4b9..d86b9fc 100644 --- a/static/api/actix-web/stable/rustdoc.css +++ b/static/api/actix-web/stable/rustdoc.css @@ -9,4 +9,4 @@ * option. This file may not be copied, modified, or distributed * except according to those terms. */ -@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff")format('woff');}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:400;src:local('Source Serif Pro'),url("SourceSerifPro-Regular.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:italic;font-weight:400;src:url("Heuristica-Italic.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:700;src:local('Source Serif Pro Bold'),url("SourceSerifPro-Bold.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.woff")format('woff');}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}body{font:16px/1.4 "Source Serif Pro",Georgia,Times,"Times New Roman",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod):not(.important),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{border-bottom:1px dashed;margin-top:0;position:relative;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){border-bottom:1px solid;}h3.impl,h3.method,h4.method,h3.type,h4.type,h4.associatedconstant{font-weight:600;margin-top:10px;margin-bottom:10px;position:relative;}h3.impl,h3.method,h3.type{padding-left:15px;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.content table :not(code)>a,.collapse-toggle,ul.item-list>li>.out-of-band{font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:0;}p{margin:0 0 .6em 0;}summary{outline:none;}code,pre{font-family:"Source Code Pro",Menlo,Monaco,Consolas,"DejaVu Sans Mono",Inconsolata,monospace;white-space:pre-wrap;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.2em;}.docblock pre code,.docblock-short pre code,.docblock code.spotlight{padding:0;}.docblock code.spotlight :last-child{padding-bottom:0.6em;}pre{padding:14px;}.source .content pre{padding:20px;}img{max-width:100%;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;min-width:70em;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;height:100vh;overflow:auto;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.js-only,.hidden{display:none !important;}.sidebar img{margin:20px auto;display:block;margin-top:10px;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-child{font-weight:500;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{margin-top:0;margin-bottom:8px;text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}#search{margin-left:230px;position:relative;}#results{position:absolute;right:0;left:0;overflow:auto;}#results>table{width:100%;table-layout:fixed;}.content pre.line-numbers{float:left;border:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short p{display:inline;}.docblock-short.nowrap{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock-short code{white-space:nowrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}#main>.docblock h1{font-size:1.3em;}#main>.docblock h2{font-size:1.15em;}#main>.docblock h3,#main>.docblock h4,#main>.docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{font-size:23px;margin:0px;padding:0px;text-align:right;display:inline-block;font-weight:normal;position:absolute;right:0;}h3.impl>.out-of-band{font-size:21px;}h4.method>.out-of-band{font-size:19px;}ul.item-list>li>.out-of-band{font-size:19px;}h4>code,h3>code,.invisible>code{max-width:calc(100% - 41px);display:block;}.in-band,code{z-index:5;}.invisible{width:100%;display:inline-block;}.content .in-band{margin:0px;padding:0px;}.in-band>code{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:100%;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .item-list li{margin-bottom:1em;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content .method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.important-traits){margin-left:40px;margin-bottom:15px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .stability{margin-bottom:.6em;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items>h4{border-bottom:0;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.toggle-wrapper.marg-left>.collapse-toggle{left:-24px;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .stability code{font-size:90%;}nav{border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-7px;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-20px;}.small-section-header>.anchor:not(.field){left:-28px;}.anchor:before{content:'\2002\00a7\2002';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.stability a{text-decoration:underline;}.block a.current.crate{font-weight:500;}.search-container{position:relative;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{width:calc(100% - 34px);-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;}.search-input:focus{border-radius:2px;border:0;outline:0;box-shadow:0 0 8px #078dd8;}.search-results .desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results a{display:block;}.content .search-results td:first-child{padding-right:0;width:75%;}.content .search-results td:first-child a{padding-right:10px;}.content .search-results td:first-child a span{float:left;}tr.result span.primitive::after{content:' (primitive type)';font-style:italic;}tr.result span.keyword::after{content:' (keyword)';font-style:italic;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:20px;padding-left:17px;}.stab{display:table;border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;}.stab p{display:inline;}.stab summary{display:list-item;}.stab .microscope{font-size:1.5em;}.module-item .stab{display:inline;border-width:0;padding:0;margin:0;background:inherit !important;}.module-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;position:absolute;right:0;top:0;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.collapse-toggle{font-weight:300;position:absolute;left:-23px;top:0;}h3>.collapse-toggle,h4>.collapse-toggle{font-size:0.8em;top:5px;}.toggle-wrapper>.collapse-toggle{left:-24px;margin-top:0px;}.toggle-wrapper{position:relative;margin-top:0;}.toggle-wrapper.collapsed{height:25px;transition:height .2s;margin-bottom:.6em;}.collapse-toggle>.inner{display:inline-block;width:1.2ch;text-align:center;}.ghost{display:none;}.ghost+.since{position:initial;display:table-cell;}.since+.srclink{display:table-cell;padding-left:10px;}.item-spacer{width:100%;height:12px;}span.since{position:initial;font-size:20px;margin-right:5px;}.toggle-wrapper>.collapse-toggle{left:0;}.variant+.toggle-wrapper+.docblock>p{margin-top:5px;}.sub-variant,.sub-variant>h3{margin-top:0 !important;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.enum>.toggle-wrapper+.docblock,.struct>.toggle-wrapper+.docblock{margin-left:30px;margin-bottom:20px;margin-top:5px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}.enum>.collapsed,.struct>.collapsed{margin-bottom:25px;}#main>.variant,#main>.structfield{display:block;}.attributes{display:block;margin-top:0px !important;margin-right:0px;margin-bottom:0px !important;margin-left:30px;}.toggle-attributes.collapsed{margin-bottom:0;}.impl-items>.toggle-attributes{margin-left:20px;}.impl-items .attributes{font-weight:500;}:target>code{opacity:1;}@media (max-width:700px){body{padding-top:0px;}.sidebar{height:45px;min-height:40px;width:calc(100%+30px);margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:1;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar img{width:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.sidebar-elems{position:fixed;z-index:1;left:0;top:45px;bottom:0;overflow-y:auto;border-right:1px solid;display:none;}.sidebar>.block.version{border-bottom:none;margin-top:12px;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main{margin-top:45px;padding:0;}.content .in-band{width:100%;}.content h4>.out-of-band{position:inherit;}.toggle-wrapper>.collapse-toggle{left:0px;}.toggle-wrapper{height:1.5em;}#search{margin-left:0;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{display:flex;}.anchor{display:none !important;}}@media print{nav.sub,.content .out-of-band,.collapse-toggle{display:none;}}.information{position:absolute;left:-20px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip .tooltiptext{width:120px;display:none;text-align:center;padding:5px 3px;border-radius:6px;margin-left:5px;top:-5px;left:105%;z-index:1;}.tooltip:hover .tooltiptext{display:inline;}.tooltip .tooltiptext::after{content:" ";position:absolute;top:50%;left:11px;margin-top:-5px;border-width:5px;border-style:solid;}.important-traits .tooltip .tooltiptext{border:1px solid;}pre.rust{position:relative;tab-width:4;-moz-tab-width:4;}.search-failed{text-align:center;margin-top:20px;}#titles{height:35px;}#titles>div{float:left;width:33.3%;text-align:center;border-bottom:1px solid;font-size:18px;cursor:pointer;}#titles>div.selected{border-bottom:3px solid;}#titles>div:hover{border-bottom:3px solid;}#titles>div>div.count{display:inline-block;font-size:16px;}.important-traits{cursor:pointer;z-index:2;}h4>.important-traits{position:absolute;left:-44px;top:2px;}@media (max-width:700px){h4>.important-traits{position:absolute;left:-22px;top:24px;}#titles>div>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.show-it{display:block;width:246px;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}.collapse-toggle{left:-20px;}.impl>.collapse-toggle{left:-10px;}}@media (max-width:416px){#titles{height:73px;}#titles>div{height:73px;}}.modal{position:fixed;width:100vw;height:100vh;z-index:10000;top:0;left:0;}.modal-content{display:block;max-width:60%;min-width:200px;padding:8px;top:40%;position:absolute;left:50%;transform:translate(-50%,-40%);border:1px solid;border-radius:4px;border-top-right-radius:0;}.modal-content>.docblock{margin:0;}h3.important{margin:0;margin-bottom:13px;font-size:19px;}.modal-content>.docblock>code.content{margin:0;padding:0;font-size:20px;}.modal-content>.close{position:absolute;font-weight:900;right:-25px;top:-1px;font-size:18px;width:25px;padding-right:2px;border-top-right-radius:5px;border-bottom-right-radius:5px;text-align:center;border:1px solid;border-right:0;cursor:pointer;}.modal-content>.whiter{height:25px;position:absolute;width:3px;right:-2px;top:0px;}#main>div.important-traits{position:absolute;left:-24px;margin-top:16px;}.content>.methods>div.important-traits{position:absolute;left:-42px;margin-top:2px;}kbd{display:inline-block;padding:3px 5px;font:15px "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu{position:absolute;right:0;top:10px;outline:none;}#theme-picker,#settings-menu{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}@media (max-width:700px){.theme-picker{left:10px;top:54px;z-index:1;}}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;} \ No newline at end of file +@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff")format('woff');}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:400;src:local('Source Serif Pro'),url("SourceSerifPro-Regular.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:italic;font-weight:400;src:url("Heuristica-Italic.woff")format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:700;src:local('Source Serif Pro Bold'),url("SourceSerifPro-Bold.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.woff")format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.woff")format('woff');}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}body{font:16px/1.4 "Source Serif Pro",Georgia,Times,"Times New Roman",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod):not(.important),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{border-bottom:1px dashed;margin-top:0;position:relative;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){border-bottom:1px solid;}h3.impl,h3.method,h4.method,h3.type,h4.type,h4.associatedconstant{font-weight:600;margin-top:10px;margin-bottom:10px;position:relative;}h3.impl,h3.method,h3.type{padding-left:15px;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.content table :not(code)>a,.collapse-toggle,ul.item-list>li>.out-of-band{font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:0;}p{margin:0 0 .6em 0;}summary{outline:none;}code,pre{font-family:"Source Code Pro",Menlo,Monaco,Consolas,"DejaVu Sans Mono",Inconsolata,monospace;white-space:pre-wrap;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.2em;}.docblock pre code,.docblock-short pre code,.docblock code.spotlight{padding:0;}.docblock code.spotlight :last-child{padding-bottom:0.6em;}pre{padding:14px;}.source .content pre{padding:20px;}img{max-width:100%;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;min-width:70em;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;height:100vh;overflow:auto;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.js-only,.hidden{display:none !important;}.sidebar img{margin:20px auto;display:block;margin-top:10px;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-child{font-weight:500;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{margin-top:0;margin-bottom:8px;text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}#search{margin-left:230px;position:relative;}#results{position:absolute;right:0;left:0;overflow:auto;}#results>table{width:100%;table-layout:fixed;}.content pre.line-numbers{float:left;border:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short p{display:inline;}.docblock-short.nowrap{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock-short code{white-space:nowrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}#main>.docblock h1{font-size:1.3em;}#main>.docblock h2{font-size:1.15em;}#main>.docblock h3,#main>.docblock h4,#main>.docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{font-size:23px;margin:0px;padding:0px;text-align:right;display:inline-block;font-weight:normal;position:absolute;right:0;}h3.impl>.out-of-band{font-size:21px;}h4.method>.out-of-band{font-size:19px;}ul.item-list>li>.out-of-band{font-size:19px;}h4>code,h3>code,.invisible>code{max-width:calc(100% - 41px);display:block;}.in-band,code{z-index:5;}.invisible{width:100%;display:inline-block;}.content .in-band{margin:0px;padding:0px;}.in-band>code{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:100%;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .item-list li{margin-bottom:1em;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content .method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.important-traits){margin-left:40px;margin-bottom:15px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .stability{margin-bottom:.6em;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items>h4{border-bottom:0;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.toggle-wrapper.marg-left>.collapse-toggle{left:-24px;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .stability code{font-size:90%;}nav{border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-7px;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-20px;}.small-section-header>.anchor:not(.field){left:-28px;}.anchor:before{content:'\2002\00a7\2002';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.stability a{text-decoration:underline;}.block a.current.crate{font-weight:500;}.search-container{position:relative;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{width:calc(100% - 34px);-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;}.search-input:focus{border-radius:2px;border:0;outline:0;box-shadow:0 0 8px #078dd8;}.search-results .desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results a{display:block;}.content .search-results td:first-child{padding-right:0;width:75%;}.content .search-results td:first-child a{padding-right:10px;}.content .search-results td:first-child a span{float:left;}tr.result span.primitive::after{content:' (primitive type)';font-style:italic;}tr.result span.keyword::after{content:' (keyword)';font-style:italic;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:20px;padding-left:17px;}.stab{display:table;border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;}.stab p{display:inline;}.stab summary{display:list-item;}.stab .microscope{font-size:1.5em;}.module-item .stab{display:inline;border-width:0;padding:0;margin:0;background:inherit !important;}.module-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;position:absolute;right:0;top:0;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.collapse-toggle{font-weight:300;position:absolute;left:-23px;top:0;}h3>.collapse-toggle,h4>.collapse-toggle{font-size:0.8em;top:5px;}.toggle-wrapper>.collapse-toggle{left:-24px;margin-top:0px;}.toggle-wrapper{position:relative;margin-top:0;}.toggle-wrapper.collapsed{height:25px;transition:height .2s;margin-bottom:.6em;}.collapse-toggle>.inner{display:inline-block;width:1.2ch;text-align:center;}.ghost{display:none;}.ghost+.since{position:initial;display:table-cell;}.since+.srclink{display:table-cell;padding-left:10px;}.item-spacer{width:100%;height:12px;}span.since{position:initial;font-size:20px;margin-right:5px;}.toggle-wrapper>.collapse-toggle{left:0;}.variant+.toggle-wrapper+.docblock>p{margin-top:5px;}.sub-variant,.sub-variant>h3{margin-top:0 !important;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.enum>.toggle-wrapper+.docblock,.struct>.toggle-wrapper+.docblock{margin-left:30px;margin-bottom:20px;margin-top:5px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}.enum>.collapsed,.struct>.collapsed{margin-bottom:25px;}#main>.variant,#main>.structfield{display:block;}.attributes{display:block;margin-top:0px !important;margin-right:0px;margin-bottom:0px !important;margin-left:30px;}.toggle-attributes.collapsed{margin-bottom:0;}.impl-items>.toggle-attributes{margin-left:20px;}.impl-items .attributes{font-weight:500;}:target>code{opacity:1;}@media (max-width:700px){body{padding-top:0px;}.sidebar{height:45px;min-height:40px;width:calc(100%+30px);margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:1;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar img{width:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.sidebar-elems{position:fixed;z-index:1;left:0;top:45px;bottom:0;overflow-y:auto;border-right:1px solid;display:none;}.sidebar>.block.version{border-bottom:none;margin-top:12px;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main{margin-top:45px;padding:0;}.content .in-band{width:100%;}.content h4>.out-of-band{position:inherit;}.toggle-wrapper>.collapse-toggle{left:0px;}.toggle-wrapper{height:1.5em;}#search{margin-left:0;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{display:flex;}.anchor{display:none !important;}}@media print{nav.sub,.content .out-of-band,.collapse-toggle{display:none;}}.information{position:absolute;left:-20px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip .tooltiptext{width:120px;display:none;text-align:center;padding:5px 3px;border-radius:6px;margin-left:5px;top:-5px;left:105%;z-index:1;}.tooltip:hover .tooltiptext{display:inline;}.tooltip .tooltiptext::after{content:" ";position:absolute;top:50%;left:11px;margin-top:-5px;border-width:5px;border-style:solid;}.important-traits .tooltip .tooltiptext{border:1px solid;}pre.rust{position:relative;tab-width:4;-moz-tab-width:4;}.search-failed{text-align:center;margin-top:20px;}#titles{height:35px;}#titles>div{float:left;width:33.3%;text-align:center;border-bottom:1px solid;font-size:18px;cursor:pointer;}#titles>div.selected{border-bottom:3px solid;}#titles>div:hover{border-bottom:3px solid;}#titles>div>div.count{display:inline-block;font-size:16px;}.important-traits{cursor:pointer;z-index:2;}h4>.important-traits{position:absolute;left:-44px;top:2px;}@media (max-width:700px){h4>.important-traits{position:absolute;left:-22px;top:24px;}#titles>div>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.show-it{display:block;width:246px;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}.collapse-toggle{left:-20px;}.impl>.collapse-toggle{left:-10px;}}@media (max-width:416px){#titles{height:73px;}#titles>div{height:73px;}}.modal{position:fixed;width:100vw;height:100vh;z-index:10000;top:0;left:0;}.modal-content{display:block;max-width:60%;min-width:200px;padding:8px;top:40%;position:absolute;left:50%;transform:translate(-50%,-40%);border:1px solid;border-radius:4px;border-top-right-radius:0;}.modal-content>.docblock{margin:0;}h3.important{margin:0;margin-bottom:13px;font-size:19px;}.modal-content>.docblock>code.content{margin:0;padding:0;font-size:20px;}.modal-content>.close{position:absolute;font-weight:900;right:-25px;top:-1px;font-size:18px;width:25px;padding-right:2px;border-top-right-radius:5px;border-bottom-right-radius:5px;text-align:center;border:1px solid;border-right:0;cursor:pointer;}.modal-content>.whiter{height:25px;position:absolute;width:3px;right:-2px;top:0px;}#main>div.important-traits{position:absolute;left:-24px;margin-top:16px;}.content>.methods>div.important-traits{position:absolute;left:-42px;margin-top:2px;}kbd{display:inline-block;padding:3px 5px;font:15px "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu{position:absolute;right:0;top:10px;outline:none;}#theme-picker,#settings-menu{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}@media (max-width:700px){.theme-picker{left:10px;top:54px;z-index:1;}}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}.non-exhaustive{margin-bottom:1em;} \ No newline at end of file diff --git a/static/api/actix-web/stable/search-index.js b/static/api/actix-web/stable/search-index.js index 6bbcc00..2ed8a9f 100644 --- a/static/api/actix-web/stable/search-index.js +++ b/static/api/actix-web/stable/search-index.js @@ -1,3 +1,3 @@ -var searchIndex = {}; -searchIndex["actix_web"] = {"doc":"Actix web is a small, pragmatic, and extremely fast web framework for Rust.","items":[[3,"App","actix_web","Structure that follows the builder pattern for building application instances.",null,null],[3,"HttpContext","","Execution context for http actors",null,null],[3,"Extensions","","A type map of request extensions.",null,null],[3,"Form","","Extract typed information from the request's body.",null,null],[12,"0","","",0,null],[3,"Path","","Extract typed information from the request's path.",null,null],[3,"Query","","Extract typed information from from the request's query.",null,null],[3,"State","","Access an application state",null,null],[3,"HttpRequest","","An HTTP Request",null,null],[3,"HttpResponse","","An HTTP Response",null,null],[3,"Json","","Json helper",null,null],[12,"0","","",1,null],[3,"Scope","","Resources scope",null,null],[3,"Request","","Request's context",null,null],[4,"Binary","","Represents various types of binary body. `Content-Length` header is set to length of the body.",null,null],[13,"Bytes","","Bytes body",2,null],[13,"Slice","","Static slice",2,null],[13,"SharedVec","","Shared vec body",2,null],[4,"Body","","Represents various types of http message body.",null,null],[13,"Empty","","Empty response. `Content-Length` header is set to `0`",3,null],[13,"Binary","","Specific response body.",3,null],[13,"Streaming","","Unspecified streaming response. Developer is responsible for setting right `Content-Length` or `Transfer-Encoding` headers.",3,null],[13,"Actor","","Special body type for actor response.",3,null],[4,"Either","","Combines two different responder types into a single type",null,null],[13,"A","","First branch of the type",4,null],[13,"B","","Second branch of the type",4,null],[11,"new","","Create application with empty state. Application can be configured with a builder-like pattern.",5,{"o":{"n":"app"}}],[11,"default","","",5,{"o":{"n":"self"}}],[11,"with_state","","Create application with specified state. Application can be configured with a builder-like pattern.",5,{"i":[{"n":"s"}],"o":{"n":"app"}}],[11,"state","","Get reference to the application state",5,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"prefix","","Set application prefix.",5,{"i":[{"n":"self"},{"n":"p"}],"o":{"n":"app"}}],[11,"filter","","Add match predicate to application.",5,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"app"}}],[11,"route","","Configure route for a specific path.",5,{"i":[{"n":"self"},{"n":"str"},{"n":"method"},{"n":"f"}],"o":{"n":"app"}}],[11,"scope","","Configure scope for common root path.",5,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"app"}}],[11,"resource","","Configure resource for a specific path.",5,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"app"}}],[11,"default_resource","","Default resource to be used if no matching route could be found.",5,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"app"}}],[11,"default_encoding","","Set default content encoding. `ContentEncoding::Auto` is set by default.",5,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"app"}}],[11,"external_resource","","Register an external resource.",5,{"i":[{"n":"self"},{"n":"t"},{"n":"u"}],"o":{"n":"app"}}],[11,"handler","","Configure handler for specific path prefix.",5,{"i":[{"n":"self"},{"n":"str"},{"n":"h"}],"o":{"n":"app"}}],[11,"middleware","","Register a middleware.",5,{"i":[{"n":"self"},{"n":"m"}],"o":{"n":"app"}}],[11,"configure","","Run external configuration as part of the application building process",5,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"app"}}],[11,"finish","","Finish application configuration and create `HttpHandler` object.",5,{"i":[{"n":"self"}],"o":{"n":"httpapplication"}}],[11,"boxed","","Convenience method for creating `Box` instances.",5,{"i":[{"n":"self"}],"o":{"g":["httphandler"],"n":"box"}}],[11,"into_handler","","",5,{"i":[{"n":"self"}],"o":{"n":"httpapplication"}}],[11,"fmt","","",2,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",2,{"i":[{"n":"self"},{"n":"binary"}],"o":{"n":"bool"}}],[11,"ne","","",2,{"i":[{"n":"self"},{"n":"binary"}],"o":{"n":"bool"}}],[11,"is_streaming","","Does this body streaming.",3,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_binary","","Is this binary body.",3,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_empty","","Is this binary empy.",3,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"from_slice","","Create body from slice (copy)",3,null],[11,"eq","","",3,{"i":[{"n":"self"},{"n":"body"}],"o":{"n":"bool"}}],[11,"fmt","","",3,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",3,{"i":[{"n":"t"}],"o":{"n":"body"}}],[11,"from","","",3,{"i":[{"g":["actorhttpcontext"],"n":"box"}],"o":{"n":"body"}}],[11,"is_empty","","Returns `true` if body is empty",2,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"len","","Length of body in bytes",2,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"from_slice","","Create binary body from slice",2,null],[11,"take","","Convert Binary to a Bytes instance",2,{"i":[{"n":"self"}],"o":{"n":"bytes"}}],[11,"clone","","",2,{"i":[{"n":"self"}],"o":{"n":"binary"}}],[11,"into","","",2,{"i":[{"n":"self"}],"o":{"n":"bytes"}}],[11,"from","","",2,{"i":[{"n":"str"}],"o":{"n":"binary"}}],[11,"from","","",2,null],[11,"from","","",2,{"i":[{"g":["u8"],"n":"vec"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"string"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"string"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"bytes"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"bytesmut"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"g":["string"],"n":"arc"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"arc"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"g":["vec"],"n":"arc"}],"o":{"n":"binary"}}],[11,"from","","",2,{"i":[{"n":"arc"}],"o":{"n":"binary"}}],[11,"as_ref","","",2,null],[11,"respond_to","","",2,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[11,"stop","","",6,{"i":[{"n":"self"}]}],[11,"terminate","","",6,{"i":[{"n":"self"}]}],[11,"state","","",6,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"spawn","","",6,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[11,"wait","","",6,{"i":[{"n":"self"},{"n":"f"}]}],[11,"cancel_future","","",6,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"address","","",6,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"create","","Create a new HTTP Context from a request and an actor",6,{"i":[{"n":"httprequest"},{"n":"a"}],"o":{"n":"body"}}],[11,"with_factory","","Create a new HTTP Context",6,{"i":[{"n":"httprequest"},{"n":"f"}],"o":{"n":"body"}}],[11,"state","","Shared application state",6,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"request","","Incoming request",6,{"i":[{"n":"self"}],"o":{"n":"httprequest"}}],[11,"write","","Write payload",6,{"i":[{"n":"self"},{"n":"b"}]}],[11,"write_eof","","Indicate end of streaming payload. Also this method calls `Self::close`.",6,{"i":[{"n":"self"}]}],[11,"drain","","Returns drain future",6,{"i":[{"n":"self"}],"o":{"n":"drain"}}],[11,"connected","","Check if connection still open",6,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"handle","","Handle of the running future",6,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"parts","","",6,{"i":[{"n":"self"}],"o":{"n":"contextparts"}}],[11,"pack","","",6,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[11,"insert","","Insert a type into this `Extensions`.",7,{"i":[{"n":"self"},{"n":"t"}]}],[11,"get","","Get a reference to a type previously inserted on this `Extensions`.",7,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"get_mut","","Get a mutable reference to a type previously inserted on this `Extensions`.",7,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"remove","","Remove a type from this `Extensions`.",7,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"clear","","Clear the `Extensions` of all inserted extensions.",7,{"i":[{"n":"self"}]}],[11,"fmt","","",7,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"as_ref","","",8,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref","","",8,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref_mut","","",8,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"into_inner","","Deconstruct to an inner value",8,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"from_request","","",8,null],[11,"fmt","","",8,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",8,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"deref","","",9,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref_mut","","",9,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"into_inner","","Deconstruct to a inner value",9,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"from_request","","",9,null],[11,"fmt","","",9,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",9,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"into_inner","","Deconstruct to an inner value",0,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref","","",0,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref_mut","","",0,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"from_request","","",0,null],[11,"fmt","","",0,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",0,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",4,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"respond_to","","",4,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["asyncresult","error"],"n":"result"}}],[11,"poll","","",4,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"respond_to","","",10,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["asyncresult","error"],"n":"result"}}],[11,"deref","","",11,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"from_request","","",11,null],[11,"Ok","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Created","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Accepted","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NonAuthoritativeInformation","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NoContent","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"ResetContent","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"PartialContent","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"MultiStatus","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"AlreadyReported","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"MultipleChoices","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"MovedPermanenty","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"MovedPermanently","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Found","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"SeeOther","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NotModified","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"UseProxy","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"TemporaryRedirect","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"PermanentRedirect","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"BadRequest","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NotFound","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Unauthorized","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"PaymentRequired","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Forbidden","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"MethodNotAllowed","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NotAcceptable","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"ProxyAuthenticationRequired","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"RequestTimeout","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Conflict","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"Gone","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"LengthRequired","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"PreconditionFailed","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"PayloadTooLarge","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"UriTooLong","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"UnsupportedMediaType","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"RangeNotSatisfiable","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"ExpectationFailed","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"InternalServerError","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"NotImplemented","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"BadGateway","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"ServiceUnavailable","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"GatewayTimeout","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"VersionNotSupported","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"VariantAlsoNegotiates","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"InsufficientStorage","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"LoopDetected","","",10,{"o":{"n":"httpresponsebuilder"}}],[11,"headers","","",12,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"payload","","",12,{"i":[{"n":"self"}],"o":{"n":"payload"}}],[11,"deref","","",12,{"i":[{"n":"self"}],"o":{"n":"request"}}],[11,"state","","Shared application state",12,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"request","","Server request",12,{"i":[{"n":"self"}],"o":{"n":"request"}}],[11,"extensions","","Request extensions",12,{"i":[{"n":"self"}],"o":{"g":["extensions"],"n":"ref"}}],[11,"extensions_mut","","Mutable reference to a the request's extensions",12,{"i":[{"n":"self"}],"o":{"g":["extensions"],"n":"refmut"}}],[11,"response","","Create http response",12,{"i":[{"n":"self"},{"n":"statuscode"},{"n":"body"}],"o":{"n":"httpresponse"}}],[11,"build_response","","Create http response builder",12,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"httpresponsebuilder"}}],[11,"uri","","Read the Request Uri.",12,{"i":[{"n":"self"}],"o":{"n":"uri"}}],[11,"method","","Read the Request method.",12,{"i":[{"n":"self"}],"o":{"n":"method"}}],[11,"version","","Read the Request Version.",12,{"i":[{"n":"self"}],"o":{"n":"version"}}],[11,"path","","The target path of this Request.",12,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"connection_info","","Get ConnectionInfo for the correct request.",12,{"i":[{"n":"self"}],"o":{"g":["connectioninfo"],"n":"ref"}}],[11,"url_for","","Generate url for named resource",12,{"i":[{"n":"self"},{"n":"str"},{"n":"u"}],"o":{"g":["url","urlgenerationerror"],"n":"result"}}],[11,"url_for_static","","Generate url for named resource",12,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["url","urlgenerationerror"],"n":"result"}}],[11,"resource","","This method returns reference to current `RouteInfo` object.",12,{"i":[{"n":"self"}],"o":{"n":"resourceinfo"}}],[11,"peer_addr","","Peer socket address",12,{"i":[{"n":"self"}],"o":{"g":["socketaddr"],"n":"option"}}],[11,"query","","url query parameters.",12,{"i":[{"n":"self"}],"o":{"g":["hashmap"],"n":"ref"}}],[11,"query_string","","The query string in the URL.",12,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"cookies","","Load request cookies.",12,{"i":[{"n":"self"}],"o":{"g":["ref","cookieparseerror"],"n":"result"}}],[11,"cookie","","Return request cookie.",12,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["cookie"],"n":"option"}}],[11,"match_info","","Get a reference to the Params object.",12,{"i":[{"n":"self"}],"o":{"n":"params"}}],[11,"set_read_buffer_capacity","","Set read buffer capacity",12,{"i":[{"n":"self"},{"n":"usize"}]}],[11,"drop","","",12,{"i":[{"n":"self"}]}],[11,"clone","","",12,{"i":[{"n":"self"}],"o":{"n":"httprequest"}}],[11,"from_request","","",12,null],[11,"fmt","","",12,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"build","","Create http response builder with specific status.",10,{"i":[{"n":"statuscode"}],"o":{"n":"httpresponsebuilder"}}],[11,"build_from","","Create http response builder",10,{"i":[{"n":"t"}],"o":{"n":"httpresponsebuilder"}}],[11,"new","","Constructs a response",10,{"i":[{"n":"statuscode"}],"o":{"n":"httpresponse"}}],[11,"with_body","","Constructs a response with body",10,{"i":[{"n":"statuscode"},{"n":"b"}],"o":{"n":"httpresponse"}}],[11,"from_error","","Constructs an error response",10,{"i":[{"n":"error"}],"o":{"n":"httpresponse"}}],[11,"into_builder","","Convert `HttpResponse` to a `HttpResponseBuilder`",10,{"i":[{"n":"self"}],"o":{"n":"httpresponsebuilder"}}],[11,"error","","The source `error` for this response",10,{"i":[{"n":"self"}],"o":{"g":["error"],"n":"option"}}],[11,"version","","Get the HTTP version of this response",10,{"i":[{"n":"self"}],"o":{"g":["version"],"n":"option"}}],[11,"headers","","Get the headers from the response",10,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"headers_mut","","Get a mutable reference to the headers",10,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"cookies","","Get an iterator for the cookies set by this response",10,{"i":[{"n":"self"}],"o":{"n":"cookieiter"}}],[11,"add_cookie","","Add a cookie to this response",10,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"g":["httperror"],"n":"result"}}],[11,"del_cookie","","Remove all cookies with the given name from this response. Returns the number of cookies removed.",10,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"usize"}}],[11,"status","","Get the response status code",10,{"i":[{"n":"self"}],"o":{"n":"statuscode"}}],[11,"status_mut","","Set the `StatusCode` for this response",10,{"i":[{"n":"self"}],"o":{"n":"statuscode"}}],[11,"reason","","Get custom reason for the response",10,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"set_reason","","Set the custom reason for the response",10,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"self"}}],[11,"set_connection_type","","Set connection type",10,{"i":[{"n":"self"},{"n":"connectiontype"}],"o":{"n":"self"}}],[11,"upgrade","","Connection upgrade status",10,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"keep_alive","","Keep-alive status for this connection",10,{"i":[{"n":"self"}],"o":{"g":["bool"],"n":"option"}}],[11,"chunked","","is chunked encoding enabled",10,{"i":[{"n":"self"}],"o":{"g":["bool"],"n":"option"}}],[11,"content_encoding","","Content encoding",10,{"i":[{"n":"self"}],"o":{"g":["contentencoding"],"n":"option"}}],[11,"set_content_encoding","","Set content encoding",10,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"self"}}],[11,"body","","Get body os this response",10,{"i":[{"n":"self"}],"o":{"n":"body"}}],[11,"set_body","","Set a body",10,{"i":[{"n":"self"},{"n":"b"}]}],[11,"replace_body","","Set a body and return previous body value",10,{"i":[{"n":"self"},{"n":"b"}],"o":{"n":"body"}}],[11,"response_size","","Size of response in bytes, excluding HTTP headers",10,{"i":[{"n":"self"}],"o":{"n":"u64"}}],[11,"write_buffer_capacity","","Set write buffer capacity",10,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"set_write_buffer_capacity","","Set write buffer capacity",10,{"i":[{"n":"self"},{"n":"usize"}]}],[11,"fmt","","",10,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",10,{"i":[{"n":"result"}],"o":{"n":"self"}}],[11,"from","","",10,{"i":[{"n":"httpresponsebuilder"}],"o":{"n":"self"}}],[11,"from","","",10,{"i":[{"n":"str"}],"o":{"n":"self"}}],[11,"from","","",10,null],[11,"from","","",10,{"i":[{"n":"string"}],"o":{"n":"self"}}],[11,"from","","",10,{"i":[{"n":"string"}],"o":{"n":"self"}}],[11,"from","","",10,{"i":[{"n":"bytes"}],"o":{"n":"self"}}],[11,"from","","",10,{"i":[{"n":"bytesmut"}],"o":{"n":"self"}}],[11,"into_inner","","Deconstruct to an inner value",1,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref","","",1,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"deref_mut","","",1,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"fmt","","",1,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",1,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"respond_to","","",1,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[11,"from_request","","",1,null],[11,"new","","Create a new scope",13,{"i":[{"n":"str"}],"o":{"n":"scope"}}],[11,"filter","","Add match predicate to scope.",13,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"self"}}],[11,"with_state","","Create nested scope with new state.",13,{"i":[{"n":"self"},{"n":"str"},{"n":"t"},{"n":"f"}],"o":{"n":"scope"}}],[11,"nested","","Create nested scope.",13,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"scope"}}],[11,"route","","Configure route for a specific path.",13,{"i":[{"n":"self"},{"n":"str"},{"n":"method"},{"n":"f"}],"o":{"n":"scope"}}],[11,"resource","","Configure resource for a specific path.",13,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"scope"}}],[11,"default_resource","","Default resource to be used if no matching route could be found.",13,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"scope"}}],[11,"middleware","","Register a scope middleware",13,{"i":[{"n":"self"},{"n":"m"}],"o":{"n":"scope"}}],[0,"client","","Http client api",null,null],[3,"ClientConnector","actix_web::client","`ClientConnector` type is responsible for transport layer of a client connection.",null,null],[3,"ClientConnectorStats","","Client connector usage stats",null,null],[12,"waits","","Number of waited-on connections",14,null],[12,"wait_queue","","Size of the wait queue",14,null],[12,"reused","","Number of reused connections",14,null],[12,"opened","","Number of opened connections",14,null],[12,"closed","","Number of closed connections",14,null],[12,"errors","","Number of connections with errors",14,null],[12,"timeouts","","Number of connection timeouts",14,null],[3,"Connect","","`Connect` type represents a message that can be sent to `ClientConnector` with a connection request.",null,null],[3,"Connection","","HTTP client connection",null,null],[3,"Pause","","Pause connection process for `ClientConnector`",null,null],[3,"Resume","","Resume connection process for `ClientConnector`",null,null],[3,"SendRequest","","`SendRequest` is a `Future` which represents an asynchronous request sending process.",null,null],[3,"ClientRequest","","An HTTP Client Request",null,null],[3,"ClientRequestBuilder","","An HTTP Client request builder",null,null],[3,"ClientResponse","","An HTTP Client response",null,null],[4,"ClientConnectorError","","A set of errors that can occur while connecting to an HTTP host",null,null],[13,"InvalidUrl","","Invalid URL",15,null],[13,"SslIsNotSupported","","SSL feature is not enabled",15,null],[13,"SslError","","SSL error",15,null],[13,"Resolver","","Resolver error",15,null],[13,"Timeout","","Connection took too long",15,null],[13,"Disconnected","","Connector has been disconnected",15,null],[13,"IoError","","Connection IO error",15,null],[4,"SendRequestError","","A set of errors that can occur during request sending and response reading",null,null],[13,"Timeout","","Response took too long",16,null],[13,"Connector","","Failed to connect to host",16,null],[13,"ParseError","","Error parsing response",16,null],[13,"Io","","Error reading response payload",16,null],[5,"get","","Create request builder for `GET` requests",null,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[5,"head","","Create request builder for `HEAD` requests",null,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[5,"post","","Create request builder for `POST` requests",null,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[5,"put","","Create request builder for `PUT` requests",null,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[5,"delete","","Create request builder for `DELETE` requests",null,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"default","","",14,{"o":{"n":"clientconnectorstats"}}],[11,"fmt","","",17,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"new","","Create `Connect` message for specified `Uri`",17,{"i":[{"n":"u"}],"o":{"g":["connect","httperror"],"n":"result"}}],[11,"conn_timeout","","Connection timeout, i.e. max time to connect to remote host. Set to 1 second by default.",17,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"wait_timeout","","If connection pool limits are enabled, wait time indicates max time to wait for a connection to become available. Set to 5 seconds by default.",17,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"new","","Create message with pause duration parameter",18,{"i":[{"n":"duration"}],"o":{"n":"pause"}}],[11,"default","","",18,{"o":{"n":"pause"}}],[11,"cause","","",15,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",15,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",15,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",15,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",15,{"i":[{"n":"resolvererror"}],"o":{"n":"clientconnectorerror"}}],[11,"started","","",19,null],[11,"default","","",19,{"o":{"n":"clientconnector"}}],[11,"with_connector","","Create `ClientConnector` actor with custom `SslConnector` instance.",19,{"i":[{"n":"sslconnector"}],"o":{"n":"clientconnector"}}],[11,"limit","","Set total number of simultaneous connections.",19,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"limit_per_host","","Set total number of simultaneous connections to the same endpoint.",19,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"conn_keep_alive","","Set keep-alive period for opened connection.",19,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"conn_lifetime","","Set max lifetime period for connection.",19,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"stats","","Subscribe for connector stats. Only one subscriber is supported.",19,{"i":[{"n":"self"},{"g":["clientconnectorstats"],"n":"recipient"}],"o":{"n":"self"}}],[11,"resolver","","Use custom resolver actor",19,{"i":[{"n":"self"},{"g":["resolver"],"n":"addr"}],"o":{"n":"self"}}],[11,"handle","","",19,null],[11,"handle","","",19,null],[11,"handle","","",19,null],[11,"fmt","","",20,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"stream","","Raw IO stream",20,{"i":[{"n":"self"}],"o":{"n":"iostream"}}],[11,"from_stream","","Create a new connection from an IO Stream",20,{"i":[{"n":"t"}],"o":{"n":"connection"}}],[11,"close","","Close connection",20,{"i":[{"n":"self"}]}],[11,"release","","Release this connection to the connection pool",20,{"i":[{"n":"self"}]}],[11,"read","","",20,null],[11,"write","","",20,null],[11,"flush","","",20,{"i":[{"n":"self"}],"o":{"n":"result"}}],[11,"shutdown","","",20,{"i":[{"n":"self"}],"o":{"g":["error"],"n":"poll"}}],[11,"cause","","",16,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",16,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",16,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",16,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",16,{"i":[{"n":"error"}],"o":{"n":"sendrequesterror"}}],[11,"from","","",16,{"i":[{"n":"clientconnectorerror"}],"o":{"n":"sendrequesterror"}}],[11,"timeout","","Set request timeout",21,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"conn_timeout","","Set connection timeout",21,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"wait_timeout","","Set wait timeout",21,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"poll","","",21,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"default","","",22,{"o":{"n":"clientrequest"}}],[11,"get","","Create request builder for `GET` request",22,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"head","","Create request builder for `HEAD` request",22,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"post","","Create request builder for `POST` request",22,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"put","","Create request builder for `PUT` request",22,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"delete","","Create request builder for `DELETE` request",22,{"i":[{"n":"u"}],"o":{"n":"clientrequestbuilder"}}],[11,"build","","Create client request builder",22,{"o":{"n":"clientrequestbuilder"}}],[11,"build_from","","Create client request builder",22,{"i":[{"n":"t"}],"o":{"n":"clientrequestbuilder"}}],[11,"uri","","Get the request URI",22,{"i":[{"n":"self"}],"o":{"n":"uri"}}],[11,"set_uri","","Set client request URI",22,{"i":[{"n":"self"},{"n":"uri"}]}],[11,"method","","Get the request method",22,{"i":[{"n":"self"}],"o":{"n":"method"}}],[11,"set_method","","Set HTTP `Method` for the request",22,{"i":[{"n":"self"},{"n":"method"}]}],[11,"version","","Get HTTP version for the request",22,{"i":[{"n":"self"}],"o":{"n":"version"}}],[11,"set_version","","Set http `Version` for the request",22,{"i":[{"n":"self"},{"n":"version"}]}],[11,"headers","","Get the headers from the request",22,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"headers_mut","","Get a mutable reference to the headers",22,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"chunked","","is chunked encoding enabled",22,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"upgrade","","is upgrade request",22,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"content_encoding","","Content encoding",22,{"i":[{"n":"self"}],"o":{"n":"contentencoding"}}],[11,"response_decompress","","Decompress response payload",22,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"write_buffer_capacity","","Requested write buffer capacity",22,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"body","","Get body of this response",22,{"i":[{"n":"self"}],"o":{"n":"body"}}],[11,"set_body","","Set a body",22,{"i":[{"n":"self"},{"n":"b"}]}],[11,"send","","Send request",22,{"i":[{"n":"self"}],"o":{"n":"sendrequest"}}],[11,"fmt","","",22,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"uri","","Set HTTP URI of request.",23,{"i":[{"n":"self"},{"n":"u"}],"o":{"n":"self"}}],[11,"method","","Set HTTP method of this request.",23,{"i":[{"n":"self"},{"n":"method"}],"o":{"n":"self"}}],[11,"get_method","","Set HTTP method of this request.",23,{"i":[{"n":"self"}],"o":{"n":"method"}}],[11,"version","","Set HTTP version of this request.",23,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"self"}}],[11,"header","","Append a header.",23,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"set_header","","Set a header.",23,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"set_header_if_none","","Set a header only if it is not yet set.",23,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"content_encoding","","Set content encoding.",23,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"self"}}],[11,"chunked","","Enables automatic chunked transfer encoding",23,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"upgrade","","Enable connection upgrade",23,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"content_type","","Set request's content type",23,{"i":[{"n":"self"},{"n":"v"}],"o":{"n":"self"}}],[11,"content_length","","Set content length",23,{"i":[{"n":"self"},{"n":"u64"}],"o":{"n":"self"}}],[11,"cookie","","Set a cookie",23,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"n":"self"}}],[11,"no_default_headers","","Do not add default request headers. By default `Accept-Encoding` and `User-Agent` headers are set.",23,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"disable_decompress","","Disable automatic decompress response body",23,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"write_buffer_capacity","","Set write buffer capacity",23,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"timeout","","Set request timeout",23,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"with_connector","","Send request using custom connector",23,{"i":[{"n":"self"},{"g":["clientconnector"],"n":"addr"}],"o":{"n":"self"}}],[11,"with_connection","","Send request using existing `Connection`",23,{"i":[{"n":"self"},{"n":"connection"}],"o":{"n":"self"}}],[11,"if_true","","This method calls provided closure with builder reference if value is `true`.",23,{"i":[{"n":"self"},{"n":"bool"},{"n":"f"}],"o":{"n":"self"}}],[11,"if_some","","This method calls provided closure with builder reference if value is `Some`.",23,{"i":[{"n":"self"},{"n":"option"},{"n":"f"}],"o":{"n":"self"}}],[11,"body","","Set a body and generate `ClientRequest`.",23,{"i":[{"n":"self"},{"n":"b"}],"o":{"g":["clientrequest","error"],"n":"result"}}],[11,"json","","Set a JSON body and generate `ClientRequest`",23,{"i":[{"n":"self"},{"n":"t"}],"o":{"g":["clientrequest","error"],"n":"result"}}],[11,"form","","Set a urlencoded body and generate `ClientRequest`",23,{"i":[{"n":"self"},{"n":"t"}],"o":{"g":["clientrequest","error"],"n":"result"}}],[11,"streaming","","Set a streaming body and generate `ClientRequest`.",23,{"i":[{"n":"self"},{"n":"s"}],"o":{"g":["clientrequest","error"],"n":"result"}}],[11,"finish","","Set an empty body and generate `ClientRequest`",23,{"i":[{"n":"self"}],"o":{"g":["clientrequest","error"],"n":"result"}}],[11,"take","","This method construct new `ClientRequestBuilder`",23,{"i":[{"n":"self"}],"o":{"n":"clientrequestbuilder"}}],[11,"fmt","","",23,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",23,{"i":[{"n":"httprequest"}],"o":{"n":"clientrequestbuilder"}}],[11,"headers","","Get the headers from the response.",24,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"payload","","",24,{"i":[{"n":"self"}],"o":{"g":["pipeline"],"n":"box"}}],[11,"version","","Get the HTTP version of this response.",24,{"i":[{"n":"self"}],"o":{"n":"version"}}],[11,"status","","Get the status from the server.",24,{"i":[{"n":"self"}],"o":{"n":"statuscode"}}],[11,"cookies","","Load response cookies.",24,{"i":[{"n":"self"}],"o":{"g":["vec","cookieparseerror"],"n":"result"}}],[11,"cookie","","Return request cookie.",24,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["cookie"],"n":"option"}}],[11,"fmt","","",24,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",16,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[0,"error","actix_web","Error and Result module",null,null],[4,"UrlParseError","actix_web::error","Errors that can occur during parsing.",null,null],[13,"EmptyHost","","",25,null],[13,"IdnaError","","",25,null],[13,"InvalidPort","","",25,null],[13,"InvalidIpv4Address","","",25,null],[13,"InvalidIpv6Address","","",25,null],[13,"InvalidDomainCharacter","","",25,null],[13,"RelativeUrlWithoutBase","","",25,null],[13,"RelativeUrlWithCannotBeABaseBase","","",25,null],[13,"SetHostOnCannotBeABaseUrl","","",25,null],[13,"Overflow","","",25,null],[4,"CookieParseError","","Enum corresponding to a parsing error.",null,null],[13,"MissingPair","","The cookie did not contain a name/value pair.",26,null],[13,"EmptyName","","The cookie's name was empty.",26,null],[13,"Utf8Error","","Decoding the cookie's name or value resulted in invalid UTF-8.",26,null],[3,"Error","","General purpose actix web error.",null,null],[3,"InternalError","","Helper type that can wrap any error and generate custom response.",null,null],[4,"ParseError","","A set of errors that can occur during parsing HTTP streams",null,null],[13,"Method","","An invalid `Method`, such as `GE.T`.",27,null],[13,"Uri","","An invalid `Uri`, such as `exam ple.domain`.",27,null],[13,"Version","","An invalid `HttpVersion`, such as `HTP/1.1`",27,null],[13,"Header","","An invalid `Header`.",27,null],[13,"TooLarge","","A message head is too large to be reasonable.",27,null],[13,"Incomplete","","A message reached EOF, but is not complete.",27,null],[13,"Status","","An invalid `Status`, such as `1337 ELITE`.",27,null],[13,"Timeout","","A timeout occurred waiting for an IO event.",27,null],[13,"Io","","An `io::Error` that occurred while trying to read or write to a network stream.",27,null],[13,"Utf8","","Parsing a field as string failed",27,null],[4,"PayloadError","","A set of errors that can occur during payload parsing",null,null],[13,"Incomplete","","A payload reached EOF, but is not complete.",28,null],[13,"EncodingCorrupted","","Content encoding stream corruption",28,null],[13,"Overflow","","A payload reached size limit.",28,null],[13,"UnknownLength","","A payload length is unknown.",28,null],[13,"Io","","Io error",28,null],[13,"Http2","","Http2 error",28,null],[4,"MultipartError","","A set of errors that can occur during parsing multipart streams",null,null],[13,"NoContentType","","Content-Type header is not found",29,null],[13,"ParseContentType","","Can not parse Content-Type header",29,null],[13,"Boundary","","Multipart boundary is not found",29,null],[13,"Incomplete","","Multipart stream is incomplete",29,null],[13,"Parse","","Error during field parsing",29,null],[13,"Payload","","Payload error",29,null],[4,"ExpectError","","Error during handling `Expect` header",null,null],[13,"Encoding","","Expect header value can not be converted to utf8",30,null],[13,"UnknownExpect","","Unknown expect value",30,null],[4,"ContentTypeError","","A set of error that can occure during parsing content type",null,null],[13,"ParseError","","Can not parse content type",31,null],[13,"UnknownEncoding","","Unknown content encoding",31,null],[4,"UrlencodedError","","A set of errors that can occur during parsing urlencoded payloads",null,null],[13,"Chunked","","Can not decode chunked transfer encoding",32,null],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",32,null],[13,"UnknownLength","","Payload size is now known",32,null],[13,"ContentType","","Content type error",32,null],[13,"Parse","","Parse error",32,null],[13,"Payload","","Payload error",32,null],[4,"JsonPayloadError","","A set of errors that can occur during parsing json payloads",null,null],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",33,null],[13,"ContentType","","Content type error",33,null],[13,"Deserialize","","Deserialize error",33,null],[13,"Payload","","Payload error",33,null],[4,"ReadlinesError","","Error type returned when reading body as lines.",null,null],[13,"EncodingError","","Error when decoding a line.",34,null],[13,"PayloadError","","Payload error.",34,null],[13,"LimitOverflow","","Line limit exceeded.",34,null],[13,"ContentTypeError","","ContentType error.",34,null],[4,"UriSegmentError","","Errors which can occur when attempting to interpret a segment string as a valid path segment.",null,null],[13,"BadStart","","The segment started with the wrapped invalid character.",35,null],[13,"BadChar","","The segment contained the wrapped invalid character.",35,null],[13,"BadEnd","","The segment ended with the wrapped invalid character.",35,null],[4,"UrlGenerationError","","Errors which can occur when attempting to generate resource uri.",null,null],[13,"ResourceNotFound","","Resource not found",36,null],[13,"NotEnoughElements","","Not all path pattern covered",36,null],[13,"ParseError","","URL parse error",36,null],[4,"StaticFileError","","Errors which can occur when serving static files.",null,null],[13,"IsNotDirectory","","Path is not a directory",37,null],[13,"IsDirectory","","Cannot render directory",37,null],[5,"ErrorBadRequest","","Helper function that creates wrapper of any error and generate BAD REQUEST response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorUnauthorized","","Helper function that creates wrapper of any error and generate UNAUTHORIZED response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorForbidden","","Helper function that creates wrapper of any error and generate FORBIDDEN response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorNotFound","","Helper function that creates wrapper of any error and generate NOT FOUND response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorMethodNotAllowed","","Helper function that creates wrapper of any error and generate METHOD NOT ALLOWED response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorRequestTimeout","","Helper function that creates wrapper of any error and generate REQUEST TIMEOUT response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorConflict","","Helper function that creates wrapper of any error and generate CONFLICT response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorGone","","Helper function that creates wrapper of any error and generate GONE response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorPreconditionFailed","","Helper function that creates wrapper of any error and generate PRECONDITION FAILED response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorExpectationFailed","","Helper function that creates wrapper of any error and generate EXPECTATION FAILED response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorInternalServerError","","Helper function that creates wrapper of any error and generate INTERNAL SERVER ERROR response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorNotImplemented","","Helper function that creates wrapper of any error and generate NOT IMPLEMENTED response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorBadGateway","","Helper function that creates wrapper of any error and generate BAD GATEWAY response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorServiceUnavailable","","Helper function that creates wrapper of any error and generate SERVICE UNAVAILABLE response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[5,"ErrorGatewayTimeout","","Helper function that creates wrapper of any error and generate GATEWAY TIMEOUT response.",null,{"i":[{"n":"t"}],"o":{"n":"error"}}],[6,"Result","","A specialized `Result` for actix web operations",null,null],[8,"ResponseError","","Error that can be converted to `HttpResponse`",null,null],[11,"error_response","","Create response for error",38,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","Deprecated way to reference the underlying response error.",39,{"i":[{"n":"self"}],"o":{"n":"responseerror"}}],[11,"as_fail","","Returns a reference to the underlying cause of this `Error` as `Fail`",39,{"i":[{"n":"self"}],"o":{"n":"fail"}}],[11,"as_response_error","","Returns the reference to the underlying `ResponseError`.",39,{"i":[{"n":"self"}],"o":{"n":"responseerror"}}],[11,"backtrace","","Returns a reference to the Backtrace carried by this error, if it carries one.",39,{"i":[{"n":"self"}],"o":{"n":"backtrace"}}],[11,"downcast_ref","","Attempts to downcast this `Error` to a particular `Fail` type by reference.",39,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"fmt","","",39,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",39,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","actix_web","",10,{"i":[{"n":"error"}],"o":{"n":"self"}}],[11,"from","actix_web::error","",39,{"i":[{"n":"t"}],"o":{"n":"error"}}],[11,"from","","",39,{"i":[{"n":"error"}],"o":{"n":"error"}}],[11,"cause","","",27,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",27,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",27,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",27,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",27,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"from","","",27,{"i":[{"n":"ioerror"}],"o":{"n":"parseerror"}}],[11,"from","","",27,{"i":[{"n":"invaliduri"}],"o":{"n":"parseerror"}}],[11,"from","","",27,{"i":[{"n":"utf8error"}],"o":{"n":"parseerror"}}],[11,"from","","",27,{"i":[{"n":"fromutf8error"}],"o":{"n":"parseerror"}}],[11,"from","","",27,{"i":[{"n":"error"}],"o":{"n":"parseerror"}}],[11,"cause","","",28,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",28,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",28,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",28,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",28,{"i":[{"n":"ioerror"}],"o":{"n":"payloaderror"}}],[11,"error_response","","",28,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"error_response","","",26,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","",29,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",29,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",29,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",29,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",29,{"i":[{"n":"parseerror"}],"o":{"n":"multiparterror"}}],[11,"from","","",29,{"i":[{"n":"payloaderror"}],"o":{"n":"multiparterror"}}],[11,"error_response","","",29,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","",30,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",30,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",30,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",30,{"i":[{"n":"self"},{"n":"expecterror"}],"o":{"n":"bool"}}],[11,"fmt","","",30,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",30,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","",31,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",31,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",31,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",31,{"i":[{"n":"self"},{"n":"contenttypeerror"}],"o":{"n":"bool"}}],[11,"fmt","","",31,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",31,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","",32,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",32,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",32,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",32,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",32,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"from","","",32,{"i":[{"n":"payloaderror"}],"o":{"n":"urlencodederror"}}],[11,"cause","","",33,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",33,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",33,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",33,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",33,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"from","","",33,{"i":[{"n":"payloaderror"}],"o":{"n":"jsonpayloaderror"}}],[11,"from","","",33,{"i":[{"n":"jsonerror"}],"o":{"n":"jsonpayloaderror"}}],[11,"from","","",34,{"i":[{"n":"payloaderror"}],"o":{"n":"self"}}],[11,"from","","",34,{"i":[{"n":"contenttypeerror"}],"o":{"n":"self"}}],[11,"cause","","",35,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",35,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",35,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",35,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",35,{"i":[{"n":"self"},{"n":"urisegmenterror"}],"o":{"n":"bool"}}],[11,"ne","","",35,{"i":[{"n":"self"},{"n":"urisegmenterror"}],"o":{"n":"bool"}}],[11,"error_response","","",35,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"cause","","",36,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",36,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",36,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",36,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",36,{"i":[{"n":"self"},{"n":"urlgenerationerror"}],"o":{"n":"bool"}}],[11,"ne","","",36,{"i":[{"n":"self"},{"n":"urlgenerationerror"}],"o":{"n":"bool"}}],[11,"from","","",36,{"i":[{"n":"urlparseerror"}],"o":{"n":"self"}}],[11,"cause","","",37,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",37,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",37,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",37,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",37,{"i":[{"n":"self"},{"n":"staticfileerror"}],"o":{"n":"bool"}}],[11,"error_response","","",37,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"new","","Create `InternalError` instance",40,{"i":[{"n":"t"},{"n":"statuscode"}],"o":{"n":"self"}}],[11,"from_response","","Create `InternalError` with predefined `HttpResponse`.",40,{"i":[{"n":"t"},{"n":"httpresponse"}],"o":{"n":"self"}}],[11,"backtrace","","",40,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",40,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",40,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",40,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"respond_to","","",40,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[0,"fs","actix_web","Static files support",null,null],[3,"DefaultConfig","actix_web::fs","Default content disposition as described in StaticFileConfig",null,null],[3,"NamedFile","","A file with an associated name.",null,null],[3,"ChunkedReadFile","","A helper created from a `std::fs::File` which reads the file chunk-by-chunk on a `CpuPool`.",null,null],[3,"Directory","","A directory; responds with the generated directory listing.",null,null],[12,"base","","Base directory",41,null],[12,"path","","Path of subdirectory to generate listing for",41,null],[3,"StaticFiles","","Static files handling",null,null],[5,"file_extension_to_mime","","Return the MIME type associated with a filename extension (case-insensitive). If `ext` is empty or no associated type for the extension was found, returns the type `application/octet-stream`.",null,{"i":[{"n":"str"}],"o":{"n":"mime"}}],[8,"StaticFileConfig","","Describes `StaticFiles` configiration",null,null],[11,"content_disposition_map","","Describes mapping for mime type to content disposition header",42,{"i":[{"n":"name"}],"o":{"n":"dispositiontype"}}],[11,"is_use_etag","","Describes whether Actix should attempt to calculate `ETag`",42,{"o":{"n":"bool"}}],[11,"is_use_last_modifier","","Describes whether Actix should use last modified date of file.",42,{"o":{"n":"bool"}}],[11,"is_method_allowed","","Describes allowed methods to access static resources.",42,{"i":[{"n":"method"}],"o":{"n":"bool"}}],[11,"default","","",43,{"o":{"n":"defaultconfig"}}],[11,"fmt","","",44,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"open","","Attempts to open a file in read-only mode.",44,{"i":[{"n":"p"}],"o":{"g":["namedfile"],"n":"result"}}],[11,"open_with_config","","Attempts to open a file in read-only mode using provided configiration.",44,{"i":[{"n":"p"},{"n":"c"}],"o":{"g":["namedfile"],"n":"result"}}],[11,"file","","Returns reference to the underlying `File` object.",44,{"i":[{"n":"self"}],"o":{"n":"file"}}],[11,"path","","Retrieve the path of this file.",44,{"i":[{"n":"self"}],"o":{"n":"path"}}],[11,"set_cpu_pool","","Set `CpuPool` to use",44,{"i":[{"n":"self"},{"n":"cpupool"}],"o":{"n":"self"}}],[11,"set_status_code","","Set response Status Code",44,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"self"}}],[11,"set_content_type","","Set the MIME Content-Type for serving this file. By default the Content-Type is inferred from the filename extension.",44,{"i":[{"n":"self"},{"n":"mime"}],"o":{"n":"self"}}],[11,"set_content_disposition","","Set the Content-Disposition for serving this file. This allows changing the inline/attachment disposition as well as the filename sent to the peer. By default the disposition is `inline` for text, image, and video content types, and `attachment` otherwise, and the filename is taken from the path provided in the `open` method after converting it to UTF-8 using to_string_lossy.",44,{"i":[{"n":"self"},{"n":"contentdisposition"}],"o":{"n":"self"}}],[11,"set_content_encoding","","Set content encoding for serving this file",44,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"self"}}],[11,"deref","","",44,{"i":[{"n":"self"}],"o":{"n":"file"}}],[11,"deref_mut","","",44,{"i":[{"n":"self"}],"o":{"n":"file"}}],[11,"respond_to","","",44,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[11,"poll","","",45,{"i":[{"n":"self"}],"o":{"g":["option","error"],"n":"poll"}}],[11,"fmt","","",41,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"new","","Create a new directory",41,{"i":[{"n":"pathbuf"},{"n":"pathbuf"}],"o":{"n":"directory"}}],[11,"is_visible","","Is this entry visible from this directory?",41,{"i":[{"n":"self"},{"n":"result"}],"o":{"n":"bool"}}],[11,"new","","Create new `StaticFiles` instance for specified base directory.",46,{"i":[{"n":"t"}],"o":{"g":["staticfiles","error"],"n":"result"}}],[11,"with_pool","","Create new `StaticFiles` instance for specified base directory and `CpuPool`.",46,{"i":[{"n":"t"},{"n":"cpupool"}],"o":{"g":["staticfiles","error"],"n":"result"}}],[11,"with_config","","Create new `StaticFiles` instance for specified base directory.",46,{"i":[{"n":"t"},{"n":"c"}],"o":{"g":["staticfiles","error"],"n":"result"}}],[11,"with_config_pool","","Create new `StaticFiles` instance for specified base directory with config and `CpuPool`.",46,{"i":[{"n":"t"},{"n":"cpupool"},{"n":"c"}],"o":{"g":["staticfiles","error"],"n":"result"}}],[11,"show_files_listing","","Show files listing for directories.",46,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"files_listing_renderer","","Set custom directory renderer",46,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"self"}}],[11,"index_file","","Set index file",46,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"staticfiles"}}],[11,"default_handler","","Sets default handler which is used when no matched file could be found.",46,{"i":[{"n":"self"},{"n":"h"}],"o":{"n":"staticfiles"}}],[11,"handle","","",46,null],[0,"middleware","actix_web","Middlewares",null,null],[3,"DefaultHeaders","actix_web::middleware","`Middleware` for setting default response headers.",null,null],[3,"ErrorHandlers","","`Middleware` for allowing custom handlers for responses.",null,null],[3,"Logger","","`Middleware` for logging request and response info to the terminal.",null,null],[4,"Started","","Middleware start result",null,null],[13,"Done","","Middleware is completed, continue to next middleware",47,null],[13,"Response","","New http response got generated. If middleware generates response handler execution halts.",47,null],[13,"Future","","Execution completed, runs future to completion.",47,null],[4,"Response","","Middleware execution result",null,null],[13,"Done","","New http response got generated",48,null],[13,"Future","","Result is a future that resolves to a new http response",48,null],[4,"Finished","","Middleware finish result",null,null],[13,"Done","","Execution completed",49,null],[13,"Future","","Execution completed, but run future to completion",49,null],[11,"new","","Create `Logger` middleware with the specified `format`.",50,{"i":[{"n":"str"}],"o":{"n":"logger"}}],[11,"exclude","","Ignore and do not log access info for specified path.",50,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"self"}}],[11,"default","","Create `Logger` middleware with format:",50,{"o":{"n":"logger"}}],[11,"start","","",50,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"finish","","",50,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"n":"finished"}}],[0,"cors","","Cross-origin resource sharing (CORS) for Actix applications",null,null],[3,"Cors","actix_web::middleware::cors","`Middleware` for Cross-origin resource sharing support",null,null],[3,"CorsBuilder","","Structure that follows the builder pattern for building `Cors` middleware structs.",null,null],[4,"CorsError","","A set of errors that can occur during processing CORS",null,null],[13,"MissingOrigin","","The HTTP request header `Origin` is required but was not provided",51,null],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",51,null],[13,"MissingRequestMethod","","The request header `Access-Control-Request-Method` is required but is missing",51,null],[13,"BadRequestMethod","","The request header `Access-Control-Request-Method` has an invalid value",51,null],[13,"BadRequestHeaders","","The request header `Access-Control-Request-Headers` has an invalid value",51,null],[13,"MissingRequestHeaders","","The request header `Access-Control-Request-Headers` is required but is missing.",51,null],[13,"OriginNotAllowed","","Origin is not allowed to make this request",51,null],[13,"MethodNotAllowed","","Requested method is not allowed",51,null],[13,"HeadersNotAllowed","","One or more headers requested are not allowed",51,null],[4,"AllOrSome","","An enum signifying that some of type T is allowed, or `All` (everything is allowed).",null,null],[13,"All","","Everything is allowed. Usually equivalent to the \"*\" value.",52,null],[13,"Some","","Only some of `T` is allowed",52,null],[11,"fmt","","",51,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"cause","","",51,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",51,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",51,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",51,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"clone","","",52,{"i":[{"n":"self"}],"o":{"n":"allorsome"}}],[11,"fmt","","",52,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",52,{"i":[{"n":"self"},{"n":"allorsome"}],"o":{"n":"bool"}}],[11,"ne","","",52,{"i":[{"n":"self"},{"n":"allorsome"}],"o":{"n":"bool"}}],[11,"default","","",52,{"o":{"n":"self"}}],[11,"is_all","","Returns whether this is an `All` variant",52,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_some","","Returns whether this is a `Some` variant",52,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"as_ref","","Returns &T",52,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"clone","","",53,{"i":[{"n":"self"}],"o":{"n":"cors"}}],[11,"default","","",53,{"o":{"n":"cors"}}],[11,"build","","Build a new CORS middleware instance",53,{"o":{"n":"corsbuilder"}}],[11,"for_app","","Create CorsBuilder for a specified application.",53,{"i":[{"n":"app"}],"o":{"n":"corsbuilder"}}],[11,"register","","This method register cors middleware with resource and adds route for OPTIONS preflight requests.",53,{"i":[{"n":"self"},{"n":"resource"}]}],[11,"start","","",53,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"response","","",53,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[11,"allowed_origin","","Add an origin that are allowed to make requests. Will be verified against the `Origin` request header.",54,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"corsbuilder"}}],[11,"allowed_methods","","Set a list of methods which the allowed origins are allowed to access for requests.",54,{"i":[{"n":"self"},{"n":"u"}],"o":{"n":"corsbuilder"}}],[11,"allowed_header","","Set an allowed header",54,{"i":[{"n":"self"},{"n":"h"}],"o":{"n":"corsbuilder"}}],[11,"allowed_headers","","Set a list of header field names which can be used when this resource is accessed by allowed origins.",54,{"i":[{"n":"self"},{"n":"u"}],"o":{"n":"corsbuilder"}}],[11,"expose_headers","","Set a list of headers which are safe to expose to the API of a CORS API specification. This corresponds to the `Access-Control-Expose-Headers` response header.",54,{"i":[{"n":"self"},{"n":"u"}],"o":{"n":"corsbuilder"}}],[11,"max_age","","Set a maximum time for which this CORS request maybe cached. This value is set as the `Access-Control-Max-Age` header.",54,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"corsbuilder"}}],[11,"send_wildcard","","Set a wildcard origins",54,{"i":[{"n":"self"}],"o":{"n":"corsbuilder"}}],[11,"supports_credentials","","Allows users to make authenticated requests",54,{"i":[{"n":"self"}],"o":{"n":"corsbuilder"}}],[11,"disable_vary_header","","Disable `Vary` header support.",54,{"i":[{"n":"self"}],"o":{"n":"corsbuilder"}}],[11,"disable_preflight","","Disable preflight request support.",54,{"i":[{"n":"self"}],"o":{"n":"corsbuilder"}}],[11,"resource","","Configure resource for a specific path.",54,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"corsbuilder"}}],[11,"finish","","Finishes building and returns the built `Cors` instance.",54,{"i":[{"n":"self"}],"o":{"n":"cors"}}],[11,"register","","Finishes building Cors middleware and register middleware for application",54,{"i":[{"n":"self"}],"o":{"n":"app"}}],[0,"csrf","actix_web::middleware","A filter for cross-site request forgery (CSRF).",null,null],[3,"CsrfFilter","actix_web::middleware::csrf","A middleware that filters cross-site requests.",null,null],[4,"CsrfError","","Potential cross-site request forgery detected.",null,null],[13,"MissingOrigin","","The HTTP request header `Origin` was required but not provided.",55,null],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",55,null],[13,"CsrDenied","","The cross-site request was denied.",55,null],[11,"fmt","","",55,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"cause","","",55,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",55,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",55,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",55,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"default","","",56,{"o":{"n":"csrffilter"}}],[11,"new","","Start building a `CsrfFilter`.",56,{"o":{"n":"csrffilter"}}],[11,"allowed_origin","","Add an origin that is allowed to make requests. Will be verified against the `Origin` request header.",56,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"csrffilter"}}],[11,"allow_xhr","","Allow all requests with an `X-Requested-With` header.",56,{"i":[{"n":"self"}],"o":{"n":"csrffilter"}}],[11,"allow_missing_origin","","Allow requests if the expected `Origin` header is missing (and there is no `Referer` to fall back on).",56,{"i":[{"n":"self"}],"o":{"n":"csrffilter"}}],[11,"allow_upgrade","","Allow cross-site upgrade requests (for example to open a WebSocket).",56,{"i":[{"n":"self"}],"o":{"n":"csrffilter"}}],[11,"start","","",56,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"default","actix_web::middleware","",57,{"o":{"n":"self"}}],[11,"new","","Construct `DefaultHeaders` middleware.",57,{"o":{"n":"defaultheaders"}}],[11,"header","","Set a header.",57,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"content_type","","Set CONTENT-TYPE header if response does not contain this header.",57,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"response","","",57,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[11,"default","","",58,{"o":{"n":"self"}}],[11,"new","","Construct new `ErrorHandlers` instance",58,{"o":{"n":"self"}}],[11,"handler","","Register error handler for specified status code",58,{"i":[{"n":"self"},{"n":"statuscode"},{"n":"f"}],"o":{"n":"self"}}],[11,"response","","",58,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[0,"identity","","Request identity service for Actix applications.",null,null],[3,"IdentityService","actix_web::middleware::identity","Request identity middleware",null,null],[3,"CookieIdentityPolicy","","Use cookies for request identity storage.",null,null],[8,"RequestIdentity","","The helper trait to obtain your identity from a request.",null,null],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",59,{"i":[{"n":"self"}],"o":{"g":["string"],"n":"option"}}],[10,"remember","","Remember identity.",59,{"i":[{"n":"self"},{"n":"string"}]}],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",59,{"i":[{"n":"self"}]}],[8,"Identity","","An identity",null,null],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",60,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[10,"remember","","Remember identity.",60,{"i":[{"n":"self"},{"n":"string"}]}],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",60,{"i":[{"n":"self"}]}],[10,"write","","Write session to storage backend.",60,{"i":[{"n":"self"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[8,"IdentityPolicy","","Identity policy definition.",null,null],[16,"Identity","","The associated identity",61,null],[16,"Future","","The return type of the middleware",61,null],[10,"from_request","","Parse the session from request and load data from a service identity.",61,null],[11,"identity","actix_web","",12,{"i":[{"n":"self"}],"o":{"g":["string"],"n":"option"}}],[11,"remember","","",12,{"i":[{"n":"self"},{"n":"string"}]}],[11,"forget","","",12,{"i":[{"n":"self"}]}],[11,"new","actix_web::middleware::identity","Create new identity service with specified backend.",62,{"i":[{"n":"t"}],"o":{"n":"self"}}],[11,"start","","",62,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"response","","",62,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[11,"new","","Construct new `CookieIdentityPolicy` instance.",63,null],[11,"path","","Sets the `path` field in the session cookie being built.",63,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookieidentitypolicy"}}],[11,"name","","Sets the `name` field in the session cookie being built.",63,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookieidentitypolicy"}}],[11,"domain","","Sets the `domain` field in the session cookie being built.",63,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookieidentitypolicy"}}],[11,"secure","","Sets the `secure` field in the session cookie being built.",63,{"i":[{"n":"self"},{"n":"bool"}],"o":{"n":"cookieidentitypolicy"}}],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",63,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"cookieidentitypolicy"}}],[11,"from_request","","",63,null],[0,"session","actix_web::middleware","User sessions.",null,null],[3,"Session","actix_web::middleware::session","The high-level interface you use to modify session data.",null,null],[3,"SessionStorage","","Session storage middleware",null,null],[3,"CookieSession","","Session that uses signed cookies as session storage",null,null],[3,"CookieSessionBackend","","Use cookies for session storage.",null,null],[4,"CookieSessionError","","Errors that can occur during handling cookie session",null,null],[13,"Overflow","","Size of the serialized session is greater than 4000 bytes.",64,null],[13,"Serialize","","Fail to serialize session.",64,null],[8,"RequestSession","","The helper trait to obtain your session data from a request.",null,null],[10,"session","","Get the session from the request",65,{"i":[{"n":"self"}],"o":{"n":"session"}}],[11,"session","actix_web","",12,{"i":[{"n":"self"}],"o":{"n":"session"}}],[11,"get","actix_web::middleware::session","Get a `value` from the session.",66,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["option"],"n":"result"}}],[11,"set","","Set a `value` from the session.",66,{"i":[{"n":"self"},{"n":"str"},{"n":"t"}],"o":{"n":"result"}}],[11,"remove","","Remove value from the session.",66,{"i":[{"n":"self"},{"n":"str"}]}],[11,"clear","","Clear the session.",66,{"i":[{"n":"self"}]}],[11,"from_request","","",66,null],[11,"new","","Create session storage",67,{"i":[{"n":"t"}],"o":{"n":"sessionstorage"}}],[11,"start","","",67,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"response","","",67,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[11,"cause","","",64,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",64,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",64,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",64,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"signed","","Construct new signed `CookieSessionBackend` instance.",68,null],[11,"private","","Construct new private `CookieSessionBackend` instance.",68,null],[11,"path","","Sets the `path` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookiesessionbackend"}}],[11,"name","","Sets the `name` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookiesessionbackend"}}],[11,"domain","","Sets the `domain` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"cookiesessionbackend"}}],[11,"secure","","Sets the `secure` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"bool"}],"o":{"n":"cookiesessionbackend"}}],[11,"same_site","","Sets the `same_site` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"samesite"}],"o":{"n":"cookiesessionbackend"}}],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",68,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"cookiesessionbackend"}}],[8,"Middleware","actix_web::middleware","Middleware definition",null,null],[11,"start","","Method is called when request is ready. It may return future, which should resolve before next middleware get called.",69,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["started"],"n":"result"}}],[11,"response","","Method is called when handler returns response, but before sending http message to peer.",69,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"g":["response"],"n":"result"}}],[11,"finish","","Method is called after body stream get sent to peer.",69,{"i":[{"n":"self"},{"n":"httprequest"},{"n":"httpresponse"}],"o":{"n":"finished"}}],[0,"multipart","actix_web","Multipart requests support",null,null],[3,"Multipart","actix_web::multipart","The server-side implementation of `multipart/form-data` requests.",null,null],[3,"Field","","A single field in a multipart stream",null,null],[4,"MultipartItem","","",null,null],[13,"Field","","Multipart field",70,null],[13,"Nested","","Nested multipart stream",70,null],[11,"boundary","","Extract boundary info from headers.",71,{"i":[{"n":"headermap"}],"o":{"g":["string","multiparterror"],"n":"result"}}],[11,"new","","Create multipart instance for boundary.",71,{"i":[{"g":["string","multiparterror"],"n":"result"},{"n":"s"}],"o":{"n":"multipart"}}],[11,"poll","","",71,{"i":[{"n":"self"}],"o":{"g":["option"],"n":"poll"}}],[11,"headers","","Get a map of headers",72,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"content_type","","Get the content type of the field",72,{"i":[{"n":"self"}],"o":{"n":"mime"}}],[11,"content_disposition","","Get the content disposition of the field, if it exists",72,{"i":[{"n":"self"}],"o":{"g":["contentdisposition"],"n":"option"}}],[11,"poll","","",72,{"i":[{"n":"self"}],"o":{"g":["option"],"n":"poll"}}],[11,"fmt","","",72,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[0,"pred","actix_web","Route match predicates",null,null],[3,"AnyPredicate","actix_web::pred","Matches if any of supplied predicate matches.",null,null],[3,"AllPredicate","","Matches if all of supplied predicate matches.",null,null],[5,"Any","","Return predicate that matches if any of supplied predicate matches.",null,{"i":[{"n":"p"}],"o":{"n":"anypredicate"}}],[5,"All","","Return predicate that matches if all of supplied predicate matches.",null,{"i":[{"n":"p"}],"o":{"n":"allpredicate"}}],[5,"Not","","Return predicate that matches if supplied predicate does not match.",null,{"i":[{"n":"p"}],"o":{"n":"notpredicate"}}],[5,"Get","","Predicate to match GET http method",null,{"o":{"n":"methodpredicate"}}],[5,"Post","","Predicate to match POST http method",null,{"o":{"n":"methodpredicate"}}],[5,"Put","","Predicate to match PUT http method",null,{"o":{"n":"methodpredicate"}}],[5,"Delete","","Predicate to match DELETE http method",null,{"o":{"n":"methodpredicate"}}],[5,"Head","","Predicate to match HEAD http method",null,{"o":{"n":"methodpredicate"}}],[5,"Options","","Predicate to match OPTIONS http method",null,{"o":{"n":"methodpredicate"}}],[5,"Connect","","Predicate to match CONNECT http method",null,{"o":{"n":"methodpredicate"}}],[5,"Patch","","Predicate to match PATCH http method",null,{"o":{"n":"methodpredicate"}}],[5,"Trace","","Predicate to match TRACE http method",null,{"o":{"n":"methodpredicate"}}],[5,"Method","","Predicate to match specified http method",null,{"i":[{"n":"method"}],"o":{"n":"methodpredicate"}}],[5,"Header","","Return predicate that matches if request contains specified header and value.",null,{"i":[{"n":"str"},{"n":"str"}],"o":{"n":"headerpredicate"}}],[5,"Host","","Return predicate that matches if request contains specified Host name.",null,{"i":[{"n":"h"}],"o":{"n":"hostpredicate"}}],[8,"Predicate","","Trait defines resource route predicate. Predicate can modify request object. It is also possible to to store extra attributes on request by using `Extensions` container, Extensions container available via `HttpRequest::extensions()` method.",null,null],[10,"check","","Check if request matches predicate",73,{"i":[{"n":"self"},{"n":"request"},{"n":"s"}],"o":{"n":"bool"}}],[11,"or","","Add new predicate to list of predicates to check",74,{"i":[{"n":"self"},{"n":"p"}],"o":{"n":"self"}}],[11,"check","","",74,{"i":[{"n":"self"},{"n":"request"},{"n":"s"}],"o":{"n":"bool"}}],[11,"and","","Add new predicate to list of predicates to check",75,{"i":[{"n":"self"},{"n":"p"}],"o":{"n":"self"}}],[11,"check","","",75,{"i":[{"n":"self"},{"n":"request"},{"n":"s"}],"o":{"n":"bool"}}],[0,"server","actix_web","Http server",null,null],[3,"Request","actix_web::server","Request's context",null,null],[3,"ServerSettings","","Various server settings",null,null],[3,"HttpServer","","An HTTP Server",null,null],[3,"PauseServer","","Pause accepting incoming connections",null,null],[3,"ResumeServer","","Resume accepting incoming connections",null,null],[3,"StopServer","","Stop incoming connection processing, stop all workers and exit.",null,null],[12,"graceful","","Whether to try and shut down gracefully",76,null],[4,"KeepAlive","","Server keep-alive setting",null,null],[13,"Timeout","","Keep alive in seconds",77,null],[13,"Tcp","","Use `SO_KEEPALIVE` socket option, value in seconds",77,null],[13,"Os","","Relay on OS to shutdown tcp connection",77,null],[13,"Disabled","","Disabled",77,null],[5,"new","","Create new http server with application factory.",null,{"i":[{"n":"f"}],"o":{"n":"httpserver"}}],[11,"headers","actix_web","",78,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"payload","","",78,{"i":[{"n":"self"}],"o":{"n":"payload"}}],[11,"uri","","Read the Request Uri.",78,{"i":[{"n":"self"}],"o":{"n":"uri"}}],[11,"method","","Read the Request method.",78,{"i":[{"n":"self"}],"o":{"n":"method"}}],[11,"version","","Read the Request Version.",78,{"i":[{"n":"self"}],"o":{"n":"version"}}],[11,"path","","The target path of this Request.",78,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"headers","","Returns Request's headers.",78,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"headers_mut","","Returns mutable Request's headers.",78,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"peer_addr","","Peer socket address",78,{"i":[{"n":"self"}],"o":{"g":["socketaddr"],"n":"option"}}],[11,"keep_alive","","Checks if a connection should be kept alive.",78,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"extensions","","Request extensions",78,{"i":[{"n":"self"}],"o":{"g":["extensions"],"n":"ref"}}],[11,"extensions_mut","","Mutable reference to a the request's extensions",78,{"i":[{"n":"self"}],"o":{"g":["extensions"],"n":"refmut"}}],[11,"upgrade","","Check if request requires connection upgrade",78,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"connection_info","","Get ConnectionInfo for the correct request.",78,{"i":[{"n":"self"}],"o":{"g":["connectioninfo"],"n":"ref"}}],[11,"server_settings","","Server settings",78,{"i":[{"n":"self"}],"o":{"n":"serversettings"}}],[11,"clone","actix_web::server","",79,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"default","","",79,{"o":{"n":"self"}}],[11,"local_addr","","Returns the socket address of the local half of this TCP connection",79,{"i":[{"n":"self"}],"o":{"g":["socketaddr"],"n":"option"}}],[11,"secure","","Returns true if connection is secure(https)",79,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"host","","Returns host header value",79,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"cpu_pool","","Returns default `CpuPool` for server",79,{"i":[{"n":"self"}],"o":{"n":"cpupool"}}],[11,"new","","Create new http server with application factory",80,{"i":[{"n":"f"}],"o":{"n":"self"}}],[11,"workers","","Set number of workers to start.",80,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"backlog","","Set the maximum number of pending connections.",80,{"i":[{"n":"self"},{"n":"i32"}],"o":{"n":"self"}}],[11,"keep_alive","","Set server keep-alive setting.",80,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"self"}}],[11,"server_hostname","","Set server host name.",80,{"i":[{"n":"self"},{"n":"string"}],"o":{"n":"self"}}],[11,"system_exit","","Stop actix system.",80,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"signals","","Set alternative address for `ProcessSignals` actor.",80,{"i":[{"n":"self"},{"g":["processsignals"],"n":"addr"}],"o":{"n":"self"}}],[11,"disable_signals","","Disable signal handling",80,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"shutdown_timeout","","Timeout for graceful workers shutdown.",80,{"i":[{"n":"self"},{"n":"u16"}],"o":{"n":"self"}}],[11,"no_http2","","Disable `HTTP/2` support",80,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"addrs","","Get addresses of bound sockets.",80,{"i":[{"n":"self"}],"o":{"g":["socketaddr"],"n":"vec"}}],[11,"addrs_with_scheme","","Get addresses of bound sockets and the scheme for it.",80,{"i":[{"n":"self"}],"o":{"n":"vec"}}],[11,"listen","","Use listener for accepting incoming connection requests",80,{"i":[{"n":"self"},{"n":"tcplistener"}],"o":{"n":"self"}}],[11,"listen_tls","","Use listener for accepting incoming tls connection requests",80,{"i":[{"n":"self"},{"n":"tcplistener"},{"n":"tlsacceptor"}],"o":{"n":"self"}}],[11,"listen_ssl","","Use listener for accepting incoming tls connection requests",80,{"i":[{"n":"self"},{"n":"tcplistener"},{"n":"sslacceptorbuilder"}],"o":{"n":"result"}}],[11,"bind","","The socket address to bind",80,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"result"}}],[11,"bind_tls","","The ssl socket address to bind",80,{"i":[{"n":"self"},{"n":"s"},{"n":"tlsacceptor"}],"o":{"n":"result"}}],[11,"bind_ssl","","Start listening for incoming tls connections.",80,{"i":[{"n":"self"},{"n":"s"},{"n":"sslacceptorbuilder"}],"o":{"n":"result"}}],[11,"start","","Start listening for incoming connections.",80,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"run","","Spawn new thread and start listening for incoming connections.",80,{"i":[{"n":"self"}]}],[11,"start_incoming","","Start listening for incoming connections from a stream.",80,{"i":[{"n":"self"},{"n":"s"},{"n":"bool"}],"o":{"n":"addr"}}],[11,"handle","","",80,{"i":[{"n":"self"},{"n":"signal"},{"n":"context"}]}],[11,"handle","","",80,{"i":[{"n":"self"},{"n":"pauseserver"},{"n":"context"}]}],[11,"handle","","",80,{"i":[{"n":"self"},{"n":"resumeserver"},{"n":"context"}]}],[11,"handle","","",80,null],[8,"HttpHandler","","Low level http request handler",null,null],[16,"Task","","Request handling task",81,null],[10,"handle","","Handle request",81,{"i":[{"n":"self"},{"n":"request"}],"o":{"g":["request"],"n":"result"}}],[8,"HttpHandlerTask","","Low level http request handler",null,null],[11,"poll_completed","","Poll task, this method is used before or after io object is available",82,{"i":[{"n":"self"}],"o":{"g":["error"],"n":"poll"}}],[10,"poll_io","","Poll task when io object is available",82,{"i":[{"n":"self"},{"n":"writer"}],"o":{"g":["bool","error"],"n":"poll"}}],[11,"disconnected","","Connection is disconnected",82,{"i":[{"n":"self"}]}],[8,"IntoHttpHandler","","Conversion helper trait",null,null],[16,"Handler","","The associated type which is result of conversion.",83,null],[10,"into_handler","","Convert into `HttpHandler` object.",83,null],[11,"fmt","","",77,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",77,{"i":[{"n":"self"},{"n":"keepalive"}],"o":{"n":"bool"}}],[11,"ne","","",77,{"i":[{"n":"self"},{"n":"keepalive"}],"o":{"n":"bool"}}],[11,"clone","","",77,{"i":[{"n":"self"}],"o":{"n":"keepalive"}}],[11,"from","","",77,{"i":[{"n":"usize"}],"o":{"n":"self"}}],[11,"from","","",77,{"i":[{"g":["usize"],"n":"option"}],"o":{"n":"self"}}],[0,"test","actix_web","Various helpers for Actix applications to use during testing.",null,null],[3,"TestServer","actix_web::test","The `TestServer` type.",null,null],[3,"TestServerBuilder","","An `TestServer` builder",null,null],[3,"TestApp","","Test application helper for testing request handlers.",null,null],[3,"TestRequest","","Test `HttpRequest` builder",null,null],[11,"new","","Start new test server",84,{"i":[{"n":"f"}],"o":{"n":"self"}}],[11,"build","","Create test server builder",84,{"o":{"n":"testserverbuilder"}}],[11,"build_with_state","","Create test server builder with specific state factory",84,{"i":[{"n":"f"}],"o":{"n":"testserverbuilder"}}],[11,"with_factory","","Start new test server with application factory",84,{"i":[{"n":"f"}],"o":{"n":"self"}}],[11,"unused_addr","","Get firat available unused address",84,{"o":{"n":"socketaddr"}}],[11,"addr","","Construct test server url",84,{"i":[{"n":"self"}],"o":{"n":"socketaddr"}}],[11,"url","","Construct test server url",84,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"string"}}],[11,"execute","","Execute future on current core",84,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"result"}}],[11,"ws","","Connect to websocket server",84,{"i":[{"n":"self"}],"o":{"g":["clienterror"],"n":"result"}}],[11,"get","","Create `GET` request",84,{"i":[{"n":"self"}],"o":{"n":"clientrequestbuilder"}}],[11,"post","","Create `POST` request",84,{"i":[{"n":"self"}],"o":{"n":"clientrequestbuilder"}}],[11,"head","","Create `HEAD` request",84,{"i":[{"n":"self"}],"o":{"n":"clientrequestbuilder"}}],[11,"client","","Connect to test http server",84,{"i":[{"n":"self"},{"n":"method"},{"n":"str"}],"o":{"n":"clientrequestbuilder"}}],[11,"drop","","",84,{"i":[{"n":"self"}]}],[11,"new","","Create a new test server",85,{"i":[{"n":"f"}],"o":{"n":"testserverbuilder"}}],[11,"ssl","","Create ssl server",85,{"i":[{"n":"self"},{"n":"sslacceptorbuilder"}],"o":{"n":"self"}}],[11,"start","","Configure test application and run test server",85,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"testserver"}}],[11,"handler","","Register handler for \"/\"",86,{"i":[{"n":"self"},{"n":"f"}]}],[11,"middleware","","Register middleware",86,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"testapp"}}],[11,"resource","","Register resource. This method is similar to `App::resource()` method.",86,{"i":[{"n":"self"},{"n":"str"},{"n":"f"}],"o":{"n":"testapp"}}],[11,"into_handler","","",86,{"i":[{"n":"self"}],"o":{"n":"httpapplication"}}],[11,"default","","",87,{"o":{"n":"testrequest"}}],[11,"with_uri","","Create TestRequest and set request uri",87,{"i":[{"n":"str"}],"o":{"n":"testrequest"}}],[11,"with_hdr","","Create TestRequest and set header",87,{"i":[{"n":"h"}],"o":{"n":"testrequest"}}],[11,"with_header","","Create TestRequest and set header",87,{"i":[{"n":"k"},{"n":"v"}],"o":{"n":"testrequest"}}],[11,"with_state","","Start HttpRequest build process with application state",87,{"i":[{"n":"s"}],"o":{"n":"testrequest"}}],[11,"version","","Set HTTP version of this request",87,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"self"}}],[11,"method","","Set HTTP method of this request",87,{"i":[{"n":"self"},{"n":"method"}],"o":{"n":"self"}}],[11,"uri","","Set HTTP Uri of this request",87,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"self"}}],[11,"set","","Set a header",87,{"i":[{"n":"self"},{"n":"h"}],"o":{"n":"self"}}],[11,"header","","Set a header",87,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"param","","Set request path pattern parameter",87,{"i":[{"n":"self"},{"n":"str"},{"n":"str"}],"o":{"n":"self"}}],[11,"set_payload","","Set request payload",87,{"i":[{"n":"self"},{"n":"b"}],"o":{"n":"self"}}],[11,"prefix","","Set request's prefix",87,{"i":[{"n":"self"},{"n":"u16"}],"o":{"n":"self"}}],[11,"finish","","Complete request creation and generate `HttpRequest` instance",87,{"i":[{"n":"self"}],"o":{"n":"httprequest"}}],[11,"request","","Complete request creation and generate server `Request` instance",87,{"i":[{"n":"self"}],"o":{"n":"request"}}],[11,"run","","This method generates `HttpRequest` instance and runs handler with generated request.",87,{"i":[{"n":"self"},{"n":"h"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[11,"run_async","","This method generates `HttpRequest` instance and runs handler with generated request.",87,{"i":[{"n":"self"},{"n":"h"}],"o":{"g":["httpresponse"],"n":"result"}}],[0,"ws","actix_web","`WebSocket` support for Actix",null,null],[3,"Client","actix_web::ws","`WebSocket` client",null,null],[3,"ClientHandshake","","Future that implementes client websocket handshake process.",null,null],[3,"ClientReader","","Websocket reader client",null,null],[3,"ClientWriter","","Websocket writer client",null,null],[3,"WebsocketContext","","Execution context for `WebSockets` actors",null,null],[3,"Frame","","A struct representing a `WebSocket` frame.",null,null],[3,"FramedMessage","","`WebSocket` message with framing.",null,null],[3,"CloseReason","","Reason for closing the connection",null,null],[12,"code","","Exit code",88,null],[12,"description","","Optional description of the exit code",88,null],[3,"WsStream","","Maps `Payload` stream into stream of `ws::Message` items",null,null],[4,"ClientError","","Websocket client error",null,null],[13,"InvalidUrl","","Invalid url",89,null],[13,"InvalidResponseStatus","","Invalid response status",89,null],[13,"InvalidUpgradeHeader","","Invalid upgrade header",89,null],[13,"InvalidConnectionHeader","","Invalid connection header",89,null],[13,"MissingConnectionHeader","","Missing CONNECTION header",89,null],[13,"MissingWebSocketAcceptHeader","","Missing SEC-WEBSOCKET-ACCEPT header",89,null],[13,"InvalidChallengeResponse","","Invalid challenge response",89,null],[13,"Http","","Http parsing error",89,null],[13,"Url","","Url parsing error",89,null],[13,"ResponseParseError","","Response parsing error",89,null],[13,"SendRequest","","Send request error",89,null],[13,"Protocol","","Protocol error",89,null],[13,"Io","","IO Error",89,null],[13,"Disconnected","","\"Disconnected\"",89,null],[4,"CloseCode","","Status code used to indicate why an endpoint is closing the `WebSocket` connection.",null,null],[13,"Normal","","Indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled.",90,null],[13,"Away","","Indicates that an endpoint is \"going away\", such as a server going down or a browser having navigated away from a page.",90,null],[13,"Protocol","","Indicates that an endpoint is terminating the connection due to a protocol error.",90,null],[13,"Unsupported","","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).",90,null],[13,"Abnormal","","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.",90,null],[13,"Invalid","","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 [RFC3629] data within a text message).",90,null],[13,"Policy","","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.",90,null],[13,"Size","","Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process.",90,null],[13,"Extension","","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.",90,null],[13,"Error","","Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.",90,null],[13,"Restart","","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.",90,null],[13,"Again","","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.",90,null],[4,"OpCode","","Operation codes as part of rfc6455.",null,null],[13,"Continue","","Indicates a continuation frame of a fragmented message.",91,null],[13,"Text","","Indicates a text data frame.",91,null],[13,"Binary","","Indicates a binary data frame.",91,null],[13,"Close","","Indicates a close control frame.",91,null],[13,"Ping","","Indicates a ping control frame.",91,null],[13,"Pong","","Indicates a pong control frame.",91,null],[13,"Bad","","Indicates an invalid opcode was received.",91,null],[4,"ProtocolError","","Websocket protocol errors",null,null],[13,"UnmaskedFrame","","Received an unmasked frame from client",92,null],[13,"MaskedFrame","","Received a masked frame from server",92,null],[13,"InvalidOpcode","","Encountered invalid opcode",92,null],[13,"InvalidLength","","Invalid control frame length",92,null],[13,"BadOpCode","","Bad web socket op code",92,null],[13,"Overflow","","A payload reached size limit.",92,null],[13,"NoContinuation","","Continuation is not supported",92,null],[13,"BadEncoding","","Bad utf-8 encoding",92,null],[13,"Payload","","Payload error",92,null],[4,"HandshakeError","","Websocket handshake errors",null,null],[13,"GetMethodRequired","","Only get method is allowed",93,null],[13,"NoWebsocketUpgrade","","Upgrade header if not set to websocket",93,null],[13,"NoConnectionUpgrade","","Connection header is not set to upgrade",93,null],[13,"NoVersionHeader","","Websocket version header is not set",93,null],[13,"UnsupportedVersion","","Unsupported websocket version",93,null],[13,"BadWebsocketKey","","Websocket key is not set or wrong",93,null],[4,"Message","","`WebSocket` Message",null,null],[13,"Text","","Text message",94,null],[13,"Binary","","Binary message",94,null],[13,"Ping","","Ping message",94,null],[13,"Pong","","Pong message",94,null],[13,"Close","","Close message with optional reason",94,null],[5,"start","","Do websocket handshake and start actor",null,{"i":[{"n":"httprequest"},{"n":"a"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[5,"handshake","","Prepare `WebSocket` handshake response.",null,{"i":[{"n":"httprequest"}],"o":{"g":["httpresponsebuilder","handshakeerror"],"n":"result"}}],[11,"cause","","",89,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",89,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",89,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",89,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",89,{"i":[{"n":"error"}],"o":{"n":"clienterror"}}],[11,"from","","",89,{"i":[{"n":"urlparseerror"}],"o":{"n":"clienterror"}}],[11,"from","","",89,{"i":[{"n":"sendrequesterror"}],"o":{"n":"clienterror"}}],[11,"from","","",89,{"i":[{"n":"protocolerror"}],"o":{"n":"clienterror"}}],[11,"from","","",89,{"i":[{"n":"error"}],"o":{"n":"clienterror"}}],[11,"new","","Create new websocket connection",95,{"i":[{"n":"s"}],"o":{"n":"client"}}],[11,"with_connector","","Create new websocket connection with custom `ClientConnector`",95,{"i":[{"n":"s"},{"g":["clientconnector"],"n":"addr"}],"o":{"n":"client"}}],[11,"protocols","","Set supported websocket protocols",95,{"i":[{"n":"self"},{"n":"u"}],"o":{"n":"self"}}],[11,"cookie","","Set cookie for handshake request",95,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"n":"self"}}],[11,"origin","","Set request Origin",95,{"i":[{"n":"self"},{"n":"v"}],"o":{"n":"self"}}],[11,"max_frame_size","","Set max frame size",95,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"write_buffer_capacity","","Set write buffer capacity",95,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"no_masking","","Disable payload masking. By default ws client masks frame payload.",95,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"header","","Set request header",95,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"timeout","","Set websocket handshake timeout",95,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"connect","","Connect to websocket server and do ws handshake",95,{"i":[{"n":"self"}],"o":{"n":"clienthandshake"}}],[11,"timeout","","Set handshake timeout",96,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"conn_timeout","","Set connection timeout",96,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"self"}}],[11,"poll","","",96,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"fmt","","",97,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"poll","","",97,{"i":[{"n":"self"}],"o":{"g":["option"],"n":"poll"}}],[11,"text","","Send text frame",98,{"i":[{"n":"self"},{"n":"t"}]}],[11,"binary","","Send binary frame",98,{"i":[{"n":"self"},{"n":"b"}]}],[11,"ping","","Send ping frame",98,{"i":[{"n":"self"},{"n":"str"}]}],[11,"pong","","Send pong frame",98,{"i":[{"n":"self"},{"n":"str"}]}],[11,"close","","Send close frame",98,{"i":[{"n":"self"},{"g":["closereason"],"n":"option"}]}],[11,"send_text","","Send text frame",98,{"i":[{"n":"self"},{"n":"t"}]}],[11,"send_binary","","Send binary frame",98,{"i":[{"n":"self"},{"n":"b"}]}],[11,"send_ping","","Send ping frame",98,{"i":[{"n":"self"},{"n":"str"}]}],[11,"send_pong","","Send pong frame",98,{"i":[{"n":"self"},{"n":"str"}]}],[11,"send_close","","Send close frame",98,{"i":[{"n":"self"},{"g":["closereason"],"n":"option"}]}],[11,"stop","","",99,{"i":[{"n":"self"}]}],[11,"terminate","","",99,{"i":[{"n":"self"}]}],[11,"state","","",99,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"spawn","","",99,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[11,"wait","","",99,{"i":[{"n":"self"},{"n":"f"}]}],[11,"cancel_future","","",99,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"address","","",99,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"create","","Create a new Websocket context from a request and an actor",99,{"i":[{"n":"httprequest"},{"n":"a"},{"n":"wsstream"}],"o":{"n":"body"}}],[11,"with_factory","","Create a new Websocket context",99,{"i":[{"n":"httprequest"},{"n":"f"}],"o":{"n":"body"}}],[11,"write_raw","","Write payload",99,{"i":[{"n":"self"},{"n":"framedmessage"}]}],[11,"state","","Shared application state",99,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"request","","Incoming request",99,{"i":[{"n":"self"}],"o":{"n":"httprequest"}}],[11,"drain","","Returns drain future",99,{"i":[{"n":"self"}],"o":{"n":"drain"}}],[11,"text","","Send text frame",99,{"i":[{"n":"self"},{"n":"t"}]}],[11,"binary","","Send binary frame",99,{"i":[{"n":"self"},{"n":"b"}]}],[11,"ping","","Send ping frame",99,{"i":[{"n":"self"},{"n":"str"}]}],[11,"pong","","Send pong frame",99,{"i":[{"n":"self"},{"n":"str"}]}],[11,"close","","Send close frame",99,{"i":[{"n":"self"},{"g":["closereason"],"n":"option"}]}],[11,"connected","","Check if connection still open",99,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"handle","","Handle of the running future",99,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"send_text","","Send text frame",99,{"i":[{"n":"self"},{"n":"t"}]}],[11,"send_binary","","Send binary frame",99,{"i":[{"n":"self"},{"n":"b"}]}],[11,"send_ping","","Send ping frame",99,{"i":[{"n":"self"},{"n":"str"}]}],[11,"send_pong","","Send pong frame",99,{"i":[{"n":"self"},{"n":"str"}]}],[11,"send_close","","Send close frame",99,{"i":[{"n":"self"},{"g":["closereason"],"n":"option"}]}],[11,"parts","","",99,{"i":[{"n":"self"}],"o":{"n":"contextparts"}}],[11,"pack","","",99,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[11,"fmt","","",100,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"unpack","","Destruct frame",100,null],[11,"close","","Create a new Close control frame.",100,{"i":[{"g":["closereason"],"n":"option"},{"n":"bool"}],"o":{"n":"framedmessage"}}],[11,"parse","","Parse the input stream into a frame.",100,{"i":[{"n":"payloadbuffer"},{"n":"bool"},{"n":"usize"}],"o":{"g":["option","protocolerror"],"n":"poll"}}],[11,"parse_close_payload","","Parse the payload of a close frame.",100,{"i":[{"n":"binary"}],"o":{"g":["closereason"],"n":"option"}}],[11,"message","","Generate binary representation",100,{"i":[{"n":"b"},{"n":"opcode"},{"n":"bool"},{"n":"bool"}],"o":{"n":"framedmessage"}}],[11,"default","","",100,{"o":{"n":"frame"}}],[11,"fmt","","",100,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",101,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",91,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",91,{"i":[{"n":"self"},{"n":"opcode"}],"o":{"n":"bool"}}],[11,"clone","","",91,{"i":[{"n":"self"}],"o":{"n":"opcode"}}],[11,"fmt","","",91,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"into","","",91,{"i":[{"n":"self"}],"o":{"n":"u8"}}],[11,"from","","",91,{"i":[{"n":"u8"}],"o":{"n":"opcode"}}],[11,"fmt","","",90,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",90,{"i":[{"n":"self"},{"n":"closecode"}],"o":{"n":"bool"}}],[11,"ne","","",90,{"i":[{"n":"self"},{"n":"closecode"}],"o":{"n":"bool"}}],[11,"clone","","",90,{"i":[{"n":"self"}],"o":{"n":"closecode"}}],[11,"into","","",90,{"i":[{"n":"self"}],"o":{"n":"u16"}}],[11,"from","","",90,{"i":[{"n":"u16"}],"o":{"n":"closecode"}}],[11,"fmt","","",88,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",88,{"i":[{"n":"self"},{"n":"closereason"}],"o":{"n":"bool"}}],[11,"ne","","",88,{"i":[{"n":"self"},{"n":"closereason"}],"o":{"n":"bool"}}],[11,"clone","","",88,{"i":[{"n":"self"}],"o":{"n":"closereason"}}],[11,"from","","",88,{"i":[{"n":"closecode"}],"o":{"n":"self"}}],[11,"from","","",88,null],[8,"WsWriter","","Common writing methods for a websocket.",null,null],[10,"send_text","","Send a text",102,{"i":[{"n":"self"},{"n":"t"}]}],[10,"send_binary","","Send a binary",102,{"i":[{"n":"self"},{"n":"b"}]}],[10,"send_ping","","Send a ping message",102,{"i":[{"n":"self"},{"n":"str"}]}],[10,"send_pong","","Send a pong message",102,{"i":[{"n":"self"},{"n":"str"}]}],[10,"send_close","","Close the connection",102,{"i":[{"n":"self"},{"g":["closereason"],"n":"option"}]}],[11,"cause","","",92,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",92,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",92,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"fmt","","",92,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from","","",92,{"i":[{"n":"payloaderror"}],"o":{"n":"protocolerror"}}],[11,"cause","","",93,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",93,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"fmt","","",93,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",93,{"i":[{"n":"self"},{"n":"handshakeerror"}],"o":{"n":"bool"}}],[11,"fmt","","",93,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"error_response","","",93,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"fmt","","",94,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",94,{"i":[{"n":"self"},{"n":"message"}],"o":{"n":"bool"}}],[11,"ne","","",94,{"i":[{"n":"self"},{"n":"message"}],"o":{"n":"bool"}}],[11,"new","","Create new websocket frames stream",103,{"i":[{"n":"s"}],"o":{"n":"wsstream"}}],[11,"max_size","","Set max frame size",103,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"poll","","",103,{"i":[{"n":"self"}],"o":{"g":["option"],"n":"poll"}}],[0,"actix","actix_web","Re-exports actix's prelude",null,null],[0,"resolver","actix_web::actix","DNS resolver and connector utility actor",null,null],[6,"Connector","actix_web::actix::resolver","",null,null],[6,"ConnectorError","","",null,null],[3,"Resolve","","",null,null],[3,"Connect","","",null,null],[3,"ConnectAddr","","",null,null],[12,"0","","",104,null],[4,"ResolverError","","",null,null],[13,"Resolver","","Failed to resolve the hostname",105,null],[13,"InvalidInput","","Address is invalid",105,null],[13,"Timeout","","Connecting took too long",105,null],[13,"IoError","","Connection io error",105,null],[3,"Resolver","","",null,null],[3,"TcpConnector","","Tcp stream connector",null,null],[0,"signal","actix_web::actix","An actor implementation of Unix signal handling",null,null],[4,"SignalType","actix_web::actix::signal","Different types of process signals",null,null],[13,"Hup","","SIGHUP",106,null],[13,"Int","","SIGINT",106,null],[13,"Term","","SIGTERM",106,null],[13,"Quit","","SIGQUIT",106,null],[13,"Child","","SIGCHILD",106,null],[3,"Signal","","Process signal message",null,null],[12,"0","","",107,null],[3,"ProcessSignals","","An actor implementation of Unix signal handling",null,null],[3,"Subscribe","","Subscribe to process signals.",null,null],[12,"0","","",108,null],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",null,null],[0,"fut","actix_web::actix","Custom `Future` implementation with `Actix` support",null,null],[8,"ActorFuture","actix_web::actix::fut","Trait for types which are a placeholder of a value that may become available at some later point in time.",null,null],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,null],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,null],[16,"Actor","","The actor within which this future runs",109,null],[10,"poll","","",109,null],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"map"}}],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"maperr"}}],[11,"drop_err","","Drop this future's error, returning a new future.",109,{"i":[{"n":"self"}],"o":{"n":"droperr"}}],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,{"i":[{"n":"self"}],"o":{"n":"fromerr"}}],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"then"}}],[11,"and_then","","Execute another future after this one has resolved successfully.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"andthen"}}],[11,"timeout","","Add timeout to futures chain.",109,null],[8,"ActorStream","","A stream of values, not all of which may have been produced yet.",null,null],[16,"Item","","The type of item this stream will yield on success.",110,null],[16,"Error","","The type of error this stream may generate.",110,null],[16,"Actor","","The actor within which this stream runs.",110,null],[10,"poll","","",110,null],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streammap"}}],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streammaperr"}}],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streamthen"}}],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streamandthen"}}],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,{"i":[{"n":"self"},{"n":"t"},{"n":"f"}],"o":{"n":"streamfold"}}],[11,"timeout","","Add timeout to stream.",110,null],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,{"i":[{"n":"self"}],"o":{"n":"streamfinish"}}],[8,"IntoActorFuture","","Class of types which can be converted into an actor future.",null,null],[16,"Future","","The future that this type can be converted into.",111,null],[16,"Item","","The item that the future may resolve with.",111,null],[16,"Error","","The error that the future may resolve with.",111,null],[16,"Actor","","The actor within which this future runs",111,null],[10,"into_future","","Consumes this object and produces a future.",111,null],[8,"WrapFuture","","Helper trait that allows conversion of normal future into `ActorFuture`",null,null],[16,"Future","","The future that this type can be converted into.",112,null],[16,"Item","","The item that the future may resolve with.",112,null],[16,"Error","","The error that the future may resolve with.",112,null],[10,"into_actor","","Convert normal future to a ActorFuture",112,null],[3,"FutureWrap","","",null,null],[5,"wrap_future","","Converts normal future into `ActorFuture`",null,{"i":[{"n":"f"}],"o":{"n":"futurewrap"}}],[8,"WrapStream","","Helper trait that allows conversion of normal stream into `ActorStream`",null,null],[16,"Stream","","The stream that this type can be converted into.",113,null],[16,"Item","","The item that the future may resolve with.",113,null],[16,"Error","","The error that the future may resolve with.",113,null],[10,"into_actor","","Convert normal stream to a ActorStream",113,null],[3,"StreamWrap","","",null,null],[5,"wrap_stream","","Converts normal stream into `ActorStream`",null,{"i":[{"n":"s"}],"o":{"n":"streamwrap"}}],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",null,{"i":[{"n":"result"}],"o":{"n":"futureresult"}}],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",null,null],[3,"FutureResult","","A future representing a value that is immediately ready.",null,null],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",null,null],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",null,null],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",null,null],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",null,null],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",null,null],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",null,null],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",null,null],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",null,null],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",null,{"i":[{"n":"t"}],"o":{"n":"futureresult"}}],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",null,null],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",null,null],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",null,null],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",null,null],[13,"A","","First branch of the type",114,null],[13,"B","","Second branch of the type",114,null],[3,"DropErr","","",null,null],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",null,{"i":[{"n":"e"}],"o":{"n":"futureresult"}}],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",null,null],[3,"Map","","Future for the `map` combinator, changing the type of a future.",null,null],[0,"msgs","actix_web::actix","Actix system messages",null,null],[3,"StopArbiter","actix_web::actix::msgs","Stop arbiter execution",null,null],[12,"0","","",115,null],[3,"StartActor","","Start actor in arbiter's thread",null,null],[3,"Execute","","Execute function in arbiter's thread",null,null],[0,"actix","actix_web::actix","",null,null],[3,"SyncArbiter","actix_web::actix::actix","Sync arbiter",null,null],[3,"Condition","","",null,null],[6,"ResponseActFuture","","A specialized actor future for async message handler",null,null],[8,"Actor","","Actors are objects which encapsulate state and behavior.",null,null],[16,"Context","","Actor execution context type",116,null],[11,"started","","Method is called when actor get polled first time.",116,null],[11,"stopping","","Method is called after an actor is in `Actor::Stopping` state. There could be several reasons for stopping. `Context::stop` get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context.",116,null],[11,"stopped","","Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped.",116,null],[11,"start","","Start new asynchronous actor, returns address of newly created actor.",116,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"start_default","","Start new asynchronous actor, returns address of newly created actor.",116,{"o":{"n":"addr"}}],[11,"create","","Use `create` method, if you need `Context` object during actor initialization.",116,{"i":[{"n":"f"}],"o":{"n":"addr"}}],[4,"Running","","",null,null],[13,"Stop","","",117,null],[13,"Continue","","",117,null],[4,"ActorState","","Actor execution state",null,null],[13,"Started","","Actor is started.",118,null],[13,"Running","","Actor is running.",118,null],[13,"Stopping","","Actor is stopping.",118,null],[13,"Stopped","","Actor is stopped.",118,null],[3,"Context","","Actor execution context",null,null],[8,"ContextFutureSpawner","","Helper trait which can spawn future into actor's context",null,null],[10,"spawn","","spawn future into `Context`",119,null],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",119,null],[8,"Supervised","","Actors with ability to restart after failure",null,null],[11,"restarting","","Method called when supervisor restarting failed actor",120,null],[4,"MailboxError","","Set of error that can occurred during message delivery process",null,null],[13,"Closed","","",121,null],[13,"Timeout","","",121,null],[3,"MessageResult","","Helper type that implements `MessageResponse` trait",null,null],[12,"0","","",122,null],[0,"io","","",null,null],[8,"WriteHandler","actix_web::actix::actix::io","Write handler",null,null],[11,"error","","Method is called when writer emits error.",123,null],[11,"finished","","Method is called when writer finishes.",123,null],[3,"Writer","","Wrapper for `AsyncWrite` types",null,null],[3,"FramedWrite","","Wrapper for `AsyncWrite` and `Encoder` types",null,null],[8,"WrapFuture","actix_web::actix::actix","Helper trait that allows conversion of normal future into `ActorFuture`",null,null],[16,"Future","","The future that this type can be converted into.",112,null],[16,"Item","","The item that the future may resolve with.",112,null],[16,"Error","","The error that the future may resolve with.",112,null],[10,"into_actor","","Convert normal future to a ActorFuture",112,null],[3,"Supervisor","","Actor supervisor",null,null],[8,"SystemService","","Trait defines system's service.",null,null],[11,"start_service","","Construct and srtart system service",124,{"i":[{"n":"addr"}],"o":{"n":"addr"}}],[11,"service_started","","Method is called during service initialization.",124,null],[11,"from_registry","","Get actor's address from system registry",124,{"o":{"n":"addr"}}],[3,"Addr","","Address of the actor",null,null],[4,"SendError","","",null,null],[13,"Full","","",125,null],[13,"Closed","","",125,null],[0,"dev","","The `actix` prelude for library developers",null,null],[3,"ContextParts","actix_web::actix::actix::dev","",null,null],[8,"ActorContext","","Actor execution context",null,null],[10,"stop","","Immediately stop processing incoming messages and switch to a `stopping` state",126,null],[10,"terminate","","Terminate actor execution",126,null],[10,"state","","Actor execution state",126,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[3,"ContextFut","","",null,null],[8,"ActorStream","","A stream of values, not all of which may have been produced yet.",null,null],[16,"Item","","The type of item this stream will yield on success.",110,null],[16,"Error","","The type of error this stream may generate.",110,null],[16,"Actor","","The actor within which this stream runs.",110,null],[10,"poll","","",110,null],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streammap"}}],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streammaperr"}}],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streamthen"}}],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"streamandthen"}}],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,{"i":[{"n":"self"},{"n":"t"},{"n":"f"}],"o":{"n":"streamfold"}}],[11,"timeout","","Add timeout to stream.",110,null],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,{"i":[{"n":"self"}],"o":{"n":"streamfinish"}}],[0,"actors","","Helper actors",null,null],[0,"resolver","actix_web::actix::actix::dev::actors","DNS resolver and connector utility actor",null,null],[6,"Connector","actix_web::actix::actix::dev::actors::resolver","",null,null],[6,"ConnectorError","","",null,null],[3,"Resolve","","",null,null],[3,"Connect","","",null,null],[3,"ConnectAddr","","",null,null],[12,"0","","",104,null],[4,"ResolverError","","",null,null],[13,"Resolver","","Failed to resolve the hostname",105,null],[13,"InvalidInput","","Address is invalid",105,null],[13,"Timeout","","Connecting took too long",105,null],[13,"IoError","","Connection io error",105,null],[3,"Resolver","","",null,null],[3,"TcpConnector","","Tcp stream connector",null,null],[0,"signal","actix_web::actix::actix::dev::actors","An actor implementation of Unix signal handling",null,null],[4,"SignalType","actix_web::actix::actix::dev::actors::signal","Different types of process signals",null,null],[13,"Hup","","SIGHUP",106,null],[13,"Int","","SIGINT",106,null],[13,"Term","","SIGTERM",106,null],[13,"Quit","","SIGQUIT",106,null],[13,"Child","","SIGCHILD",106,null],[3,"Signal","","Process signal message",null,null],[12,"0","","",107,null],[3,"ProcessSignals","","An actor implementation of Unix signal handling",null,null],[3,"Subscribe","","Subscribe to process signals.",null,null],[12,"0","","",108,null],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",null,null],[3,"SpawnHandle","actix_web::actix::actix::dev","Spawned future handle. Could be used for cancelling spawned future.",null,null],[3,"ActorResponse","","Helper type for representing different type of message responses",null,null],[8,"StreamHandler","","Stream handler",null,null],[10,"handle","","Method is called for every message received by this Actor",127,null],[11,"started","","Method is called when stream get polled first time.",127,null],[11,"error","","Method is called when stream emits error.",127,null],[11,"finished","","Method is called when stream finishes.",127,null],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",127,null],[3,"Registry","","Actors registry",null,null],[3,"Response","","Helper type for representing different type of message responses",null,null],[3,"Mailbox","","",null,null],[3,"System","","System is an actor which manages runtime.",null,null],[8,"ActorFuture","","Trait for types which are a placeholder of a value that may become available at some later point in time.",null,null],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,null],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,null],[16,"Actor","","The actor within which this future runs",109,null],[10,"poll","","",109,null],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"map"}}],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"maperr"}}],[11,"drop_err","","Drop this future's error, returning a new future.",109,{"i":[{"n":"self"}],"o":{"n":"droperr"}}],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,{"i":[{"n":"self"}],"o":{"n":"fromerr"}}],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"then"}}],[11,"and_then","","Execute another future after this one has resolved successfully.",109,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"andthen"}}],[11,"timeout","","Add timeout to futures chain.",109,null],[3,"Recipient","","`Recipient` type allows to send one specific message to an actor.",null,null],[8,"WrapStream","","Helper trait that allows conversion of normal stream into `ActorStream`",null,null],[16,"Stream","","The stream that this type can be converted into.",113,null],[16,"Item","","The item that the future may resolve with.",113,null],[16,"Error","","The error that the future may resolve with.",113,null],[10,"into_actor","","Convert normal stream to a ActorStream",113,null],[0,"msgs","","Actix system messages",null,null],[3,"StopArbiter","actix_web::actix::actix::dev::msgs","Stop arbiter execution",null,null],[12,"0","","",115,null],[3,"StartActor","","Start actor in arbiter's thread",null,null],[3,"Execute","","Execute function in arbiter's thread",null,null],[8,"AsyncContextParts","actix_web::actix::actix::dev","",null,null],[10,"parts","","",128,{"i":[{"n":"self"}],"o":{"n":"contextparts"}}],[8,"ResponseChannel","","Trait defines message response channel",null,null],[10,"is_canceled","","",129,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[10,"send","","",129,null],[8,"ArbiterService","","Trait defines arbiter's service.",null,null],[11,"start_service","","Construct and srtart arbiter service",130,{"o":{"n":"addr"}}],[11,"service_started","","Method is called during service initialization.",130,null],[11,"from_registry","","Get actor's address from arbiter registry",130,{"o":{"n":"addr"}}],[3,"RecipientRequest","","`RecipientRequest` is a `Future` which represents asynchronous message sending process.",null,null],[8,"Message","","Message type",null,null],[16,"Result","","The type of value that this message will resolved with if it is successful.",131,null],[0,"fut","","Custom `Future` implementation with `Actix` support",null,null],[8,"IntoActorFuture","actix_web::actix::actix::dev::fut","Class of types which can be converted into an actor future.",null,null],[16,"Future","","The future that this type can be converted into.",111,null],[16,"Item","","The item that the future may resolve with.",111,null],[16,"Error","","The error that the future may resolve with.",111,null],[16,"Actor","","The actor within which this future runs",111,null],[10,"into_future","","Consumes this object and produces a future.",111,null],[3,"FutureWrap","","",null,null],[5,"wrap_future","","Converts normal future into `ActorFuture`",null,{"i":[{"n":"f"}],"o":{"n":"futurewrap"}}],[3,"StreamWrap","","",null,null],[5,"wrap_stream","","Converts normal stream into `ActorStream`",null,{"i":[{"n":"s"}],"o":{"n":"streamwrap"}}],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",null,{"i":[{"n":"result"}],"o":{"n":"futureresult"}}],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",null,null],[3,"FutureResult","","A future representing a value that is immediately ready.",null,null],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",null,null],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",null,null],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",null,null],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",null,null],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",null,null],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",null,null],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",null,null],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",null,null],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",null,{"i":[{"n":"t"}],"o":{"n":"futureresult"}}],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",null,null],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",null,null],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",null,null],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",null,null],[13,"A","","First branch of the type",114,null],[13,"B","","Second branch of the type",114,null],[3,"DropErr","","",null,null],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",null,{"i":[{"n":"e"}],"o":{"n":"futureresult"}}],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",null,null],[3,"Map","","Future for the `map` combinator, changing the type of a future.",null,null],[8,"ToEnvelope","actix_web::actix::actix::dev","Converter trait, packs message to suitable envelope",null,null],[10,"pack","","Pack message into suitable envelope",132,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[3,"SystemRegistry","","System wide actors registry",null,null],[3,"SyncContext","","Sync actor execution context",null,null],[3,"Request","","`Request` is a `Future` which represents asynchronous message sending process.",null,null],[6,"ResponseFuture","","A specialized future for async message handler",null,null],[8,"AsyncContext","","Asynchronous execution context",null,null],[10,"address","","Return `Address` of the context",133,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[10,"spawn","","Spawn async future into context. Returns handle of the item, could be used for cancelling execution.",133,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",133,null],[10,"waiting","","Check if context is paused (waiting for future completion or stopping)",133,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[10,"cancel_future","","Cancel future. handle is a value returned by `spawn` method.",133,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",133,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"spawnhandle"}}],[11,"add_message_stream","","This method is similar to `add_stream` but it skips stream errors.",133,null],[11,"notify","","Send message `msg` to self.",133,null],[11,"notify_later","","Send message `msg` to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called.",133,{"i":[{"n":"self"},{"n":"m"},{"n":"duration"}],"o":{"n":"spawnhandle"}}],[11,"run_later","","Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called.",133,{"i":[{"n":"self"},{"n":"duration"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[11,"run_interval","","Spawns job to execute closure with specified interval",133,{"i":[{"n":"self"},{"n":"duration"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[8,"MessageResponse","","Trait which defines message response",null,null],[10,"handle","","",134,null],[3,"Arbiter","","Event loop controller",null,null],[8,"Handler","","Message handler",null,null],[16,"Result","","The type of value that this handle will return",135,null],[10,"handle","","Method is called for every message received by this Actor",135,null],[3,"Envelope","","",null,null],[5,"run","actix_web::actix","Start the System and execute supplied future.",null,null],[5,"spawn","","Spawns a future on the current arbiter.",null,null],[0,"dev","actix_web","The `actix-web` prelude for library developers",null,null],[3,"Drain","actix_web::dev","Consume a future",null,null],[3,"FormConfig","","Form extractor configuration",null,null],[3,"PayloadConfig","","Payload configuration for request's payload.",null,null],[3,"AsyncResult","","Represents async result",null,null],[3,"MessageBody","","Future that resolves to a complete http message body.",null,null],[3,"UrlEncoded","","Future that resolves to a parsed urlencoded values.",null,null],[3,"HttpResponseBuilder","","An HTTP response builder",null,null],[3,"ConnectionInfo","","`HttpRequest` connection information",null,null],[3,"JsonBody","","Request payload json parser that resolves to a deserialized `T` value.",null,null],[3,"JsonConfig","","Json extractor configuration",null,null],[3,"Params","","Route match information",null,null],[3,"Payload","","Buffered stream of bytes chunks",null,null],[3,"PayloadBuffer","","Payload buffer",null,null],[3,"Resource","","Resource is an entry in route table which corresponds to requested URL.",null,null],[3,"Route","","Resource route definition",null,null],[3,"ResourceDef","","Resource type describes an entry in resources table",null,null],[3,"ResourceInfo","","Information about current resource",null,null],[3,"Router","","Interface for application router.",null,null],[4,"ResourceType","","Resource type",null,null],[13,"Normal","","Normal resource",136,null],[13,"Default","","Resource for application default handler",136,null],[13,"External","","External resource",136,null],[13,"Unset","","Unknown resource type",136,null],[6,"BodyStream","","Type represent streaming body",null,null],[8,"Handler","","Trait defines object that could be registered as route handler",null,null],[16,"Result","","The type of value that handler will return.",137,null],[10,"handle","","Handle request",137,null],[8,"FromParam","","A trait to abstract the idea of creating a new instance of a type from a path parameter.",null,null],[16,"Err","","The associated error which can be returned from parsing.",138,null],[10,"from_param","","Parses a string `s` to return a value of this type.",138,{"i":[{"n":"str"}],"o":{"n":"result"}}],[0,"http","actix_web","Various HTTP related types",null,null],[3,"Method","actix_web::http","The Request Method (VERB)",null,null],[3,"StatusCode","","An HTTP status code (`status-code` in RFC 7230 et al.).",null,null],[3,"Version","","Represents a version of the HTTP spec.",null,null],[3,"Cookie","","Representation of an HTTP cookie.",null,null],[3,"CookieBuilder","","Structure that follows the builder pattern for building `Cookie` structs.",null,null],[3,"NormalizePath","","Path normalization helper",null,null],[4,"ContentEncoding","","Represents supported types of content encodings",null,null],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,null],[13,"Br","","A format using the Brotli algorithm",139,null],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,null],[13,"Gzip","","Gzip algorithm",139,null],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,null],[4,"ConnectionType","","Represents various types of connection",null,null],[13,"Close","","Close connection after response",140,null],[13,"KeepAlive","","Keep connection alive after response",140,null],[13,"Upgrade","","Connection is upgraded to different type",140,null],[0,"header","","Various http headers",null,null],[17,"CACHE_CONTROL","actix_web::http::header","Specifies directives for caching mechanisms in both requests and responses.",null,null],[17,"CONTENT_RANGE","","Indicates where in a full body message a partial message belongs.",null,null],[17,"LINK","","Allows the server to point an interested client to another resource containing metadata about the requested resource.",null,null],[3,"InvalidHeaderValue","","A possible error when converting a `HeaderValue` from a string or byte slice.",null,null],[17,"REFERER","","Contains the address of the previous web page from which a link to the currently requested page was followed.",null,null],[17,"FORWARDED","","Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.",null,null],[17,"ACCESS_CONTROL_ALLOW_HEADERS","","Preflight response indicating permitted HTTP headers.",null,null],[17,"ACCESS_CONTROL_ALLOW_CREDENTIALS","","Preflight response indicating if the response to the request can be exposed to the page.",null,null],[3,"GetAll","","A view to all values stored in a single entry.",null,null],[17,"AUTHORIZATION","","Contains the credentials to authenticate a user agent with a server.",null,null],[3,"IntoIter","","An owning iterator over the entries of a `HeaderMap`.",null,null],[17,"CONTENT_LENGTH","","Indicates the size fo the entity-body.",null,null],[17,"ACCESS_CONTROL_REQUEST_METHOD","","Informs the server know which HTTP method will be used when the actual request is made.",null,null],[3,"OccupiedEntry","","A view into a single occupied location in a `HeaderMap`.",null,null],[17,"STRICT_TRANSPORT_SECURITY","","Tells the client to communicate with HTTPS instead of using HTTP.",null,null],[8,"IntoHeaderName","","A marker trait used to identify values that can be used as insert keys to a `HeaderMap`.",null,null],[17,"PUBLIC_KEY_PINS_REPORT_ONLY","","Sends reports of pinning violation to the report-uri specified in the header.",null,null],[3,"VacantEntry","","A view into a single empty location in a `HeaderMap`.",null,null],[17,"SEC_WEBSOCKET_ACCEPT","","The |Sec-WebSocket-Accept| header field is used in the WebSocket opening handshake. It is sent from the server to the client to confirm that the server is willing to initiate the WebSocket connection.",null,null],[17,"SEC_WEBSOCKET_VERSION","","The |Sec-WebSocket-Version| header field is used in the WebSocket opening handshake. It is sent from the client to the server to indicate the protocol version of the connection. This enables servers to correctly interpret the opening handshake and subsequent data being sent from the data, and close the connection if the server cannot interpret that data in a safe manner.",null,null],[3,"InvalidHeaderNameBytes","","A possible error when converting a `HeaderName` from another type.",null,null],[17,"UPGRADE","","Used as part of the exchange to upgrade the protocol.",null,null],[17,"VARY","","Determines how to match future requests with cached responses.",null,null],[17,"TRANSFER_ENCODING","","Specifies the form of encoding used to safely transfer the entity to the client.",null,null],[17,"PROXY_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a proxy.",null,null],[17,"CONTENT_ENCODING","","Used to compress the media-type.",null,null],[17,"CONTENT_LOCATION","","Indicates an alternate location for the returned data.",null,null],[17,"X_FRAME_OPTIONS","","Indicates whether or not a browser should be allowed to render a page in a frame.",null,null],[17,"DATE","","Contains the date and time at which the message was originated.",null,null],[17,"ACCESS_CONTROL_MAX_AGE","","Indicates how long the results of a preflight request can be cached.",null,null],[17,"DNT","","Indicates the client's tracking preference.",null,null],[3,"Values","","`HeaderMap` value iterator.",null,null],[17,"SEC_WEBSOCKET_KEY","","The |Sec-WebSocket-Key| header field is used in the WebSocket opening handshake. It is sent from the client to the server to provide part of the information used by the server to prove that it received a valid WebSocket opening handshake. This helps ensure that the server does not accept connections from non-WebSocket clients (e.g., HTTP clients) that are being abused to send data to unsuspecting WebSocket servers.",null,null],[17,"HOST","","Specifies the domain name of the server and (optionally) the TCP port number on which the server is listening.",null,null],[17,"IF_NONE_MATCH","","Makes a request conditional based on the E-Tag.",null,null],[17,"PRAGMA","","HTTP/1.0 header usually used for backwards compatibility.",null,null],[17,"ORIGIN","","Indicates where a fetch originates from.",null,null],[17,"PUBLIC_KEY_PINS","","Associates a specific cryptographic public key with a certain server.",null,null],[17,"CONTENT_TYPE","","Used to indicate the media type of the resource.",null,null],[17,"ACCEPT_ENCODING","","Advertises which content encoding the client is able to understand.",null,null],[17,"RETRY_AFTER","","The Retry-After response HTTP header indicates how long the user agent should wait before making a follow-up request. There are two main cases this header is used:",null,null],[17,"ACCESS_CONTROL_EXPOSE_HEADERS","","Indicates which headers can be exposed as part of the response by listing their names.",null,null],[3,"ValueIterMut","","A mutable iterator of all values associated with a single header name.",null,null],[17,"SET_COOKIE","","Used to send cookies from the server to the user agent.",null,null],[17,"TRAILER","","Allows the sender to include additional fields at the end of chunked messages.",null,null],[17,"IF_MODIFIED_SINCE","","Makes a request conditional based on the modification date.",null,null],[17,"ALT_SVC","","Advertises the availability of alternate services to clients.",null,null],[17,"CONNECTION","","Controls whether or not the network connection stays open after the current transaction finishes.",null,null],[17,"CONTENT_SECURITY_POLICY","","Allows controlling resources the user agent is allowed to load for a given page.",null,null],[4,"Entry","","A view into a single location in a `HeaderMap`, which may be vacant or occupied.",null,null],[13,"Occupied","","An occupied entry",141,null],[13,"Vacant","","A vacant entry",141,null],[3,"HeaderName","","Represents an HTTP header field name",null,null],[17,"WARNING","","General HTTP header contains information about possible problems with the status of the message.",null,null],[17,"REFERRER_POLICY","","Governs which referrer information should be included with requests made.",null,null],[3,"Iter","","`HeaderMap` entry iterator.",null,null],[17,"AGE","","Indicates the time in seconds the object has been in a proxy cache.",null,null],[17,"USER_AGENT","","Contains a string that allows identifying the requesting client's software.",null,null],[17,"TE","","Informs the server of transfer encodings willing to be accepted as part of the response.",null,null],[17,"LAST_MODIFIED","","Content-Types that are acceptable for the response.",null,null],[17,"MAX_FORWARDS","","Indicates the max number of intermediaries the request should be sent through.",null,null],[17,"RANGE","","Indicates the part of a document that the server should return.",null,null],[17,"EXPIRES","","Contains the date/time after which the response is considered stale.",null,null],[17,"EXPECT","","Indicates expectations that need to be fulfilled by the server in order to properly handle the request.",null,null],[17,"ACCEPT_RANGES","","Marker used by the server to advertise partial request support.",null,null],[3,"HeaderValue","","Represents an HTTP header field value.",null,null],[17,"UPGRADE_INSECURE_REQUESTS","","Sends a signal to the server expressing the client’s preference for an encrypted and authenticated response.",null,null],[17,"VIA","","Added by proxies to track routing.",null,null],[17,"PROXY_AUTHORIZATION","","Contains the credentials to authenticate a user agent to a proxy server.",null,null],[17,"IF_UNMODIFIED_SINCE","","Makes the request conditional based on the last modification date.",null,null],[17,"IF_RANGE","","Makes a request conditional based on range.",null,null],[17,"LOCATION","","Indicates the URL to redirect a page to.",null,null],[17,"CONTENT_LANGUAGE","","Used to describe the languages intended for the audience.",null,null],[17,"ACCEPT_CHARSET","","Advertises which character set the client is able to understand.",null,null],[17,"ETAG","","Identifier for a specific version of a resource.",null,null],[17,"ACCESS_CONTROL_ALLOW_ORIGIN","","Indicates whether the response can be shared with resources with the given origin.",null,null],[17,"ACCESS_CONTROL_REQUEST_HEADERS","","Informs the server which HTTP headers will be used when an actual request is made.",null,null],[17,"ACCEPT_LANGUAGE","","Advertises which languages the client is able to understand.",null,null],[3,"Drain","","A drain iterator for `HeaderMap`.",null,null],[17,"SEC_WEBSOCKET_PROTOCOL","","The |Sec-WebSocket-Protocol| header field is used in the WebSocket opening handshake. It is sent from the client to the server and back from the server to the client to confirm the subprotocol of the connection. This enables scripts to both select a subprotocol and be sure that the server agreed to serve that subprotocol.",null,null],[17,"COOKIE","","Contains stored HTTP cookies previously sent by the server with the Set-Cookie header.",null,null],[17,"CONTENT_DISPOSITION","","Indicates if the content is expected to be displayed inline.",null,null],[17,"ACCEPT","","Advertises which content types the client is able to understand.",null,null],[3,"ToStrError","","A possible error when converting a `HeaderValue` to a string representation.",null,null],[8,"AsHeaderName","","A marker trait used to identify values that can be used as search keys to a `HeaderMap`.",null,null],[3,"ValueDrain","","An drain iterator of all values associated with a single header name.",null,null],[17,"X_DNS_PREFETCH_CONTROL","","Controls DNS prefetching.",null,null],[17,"X_XSS_PROTECTION","","Stop pages from loading when an XSS attack is detected.",null,null],[3,"Keys","","An iterator over `HeaderMap` keys.",null,null],[17,"SEC_WEBSOCKET_EXTENSIONS","","The |Sec-WebSocket-Extensions| header field is used in the WebSocket opening handshake. It is initially sent from the client to the server, and then subsequently sent from the server to the client, to agree on a set of protocol-level extensions to use for the duration of the connection.",null,null],[17,"FROM","","Contains an Internet email address for a human user who controls the requesting user agent.",null,null],[3,"InvalidHeaderName","","A possible error when converting a `HeaderName` from another type.",null,null],[3,"InvalidHeaderValueBytes","","A possible error when converting a `HeaderValue` from a string or byte slice.",null,null],[3,"HeaderMap","","A set of HTTP headers",null,null],[17,"X_CONTENT_TYPE_OPTIONS","","Marker used by the server to indicate that the MIME types advertised in the `content-type` headers should not be changed and be followed.",null,null],[17,"WWW_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a resource.",null,null],[17,"REFRESH","","Informs the web browser that the current page or frame should be refreshed.",null,null],[3,"ValueIter","","An iterator of all values associated with a single header name.",null,null],[17,"SERVER","","Contains information about the software used by the origin server to handle the request.",null,null],[17,"CONTENT_SECURITY_POLICY_REPORT_ONLY","","Allows experimenting with policies by monitoring their effects.",null,null],[17,"ACCESS_CONTROL_ALLOW_METHODS","","Preflight header response indicating permitted access methods.",null,null],[17,"IF_MATCH","","Makes a request conditional based on the E-Tag.",null,null],[17,"ALLOW","","Lists the set of methods support by a resource.",null,null],[3,"LanguageTag","","A language tag as described in BCP47.",null,null],[12,"language","","Language subtags are used to indicate the language, ignoring all other aspects such as script, region or spefic invariants.",142,null],[12,"extlangs","","Extended language subtags are used to identify certain specially selected languages that, for various historical and compatibility reasons, are closely identified with or tagged using an existing primary language subtag.",142,null],[12,"script","","Script subtags are used to indicate the script or writing system variations that distinguish the written forms of a language or its dialects.",142,null],[12,"region","","Region subtags are used to indicate linguistic variations associated with or appropriate to a specific country, territory, or region. Typically, a region subtag is used to indicate variations such as regional dialects or usage, or region-specific spelling conventions. It can also be used to indicate that content is expressed in a way that is appropriate for use throughout a region, for instance, Spanish content tailored to be useful throughout Latin America.",142,null],[12,"variants","","Variant subtags are used to indicate additional, well-recognized variations that define a language or its dialects that are not covered by other available subtags.",142,null],[12,"extensions","","Extensions provide a mechanism for extending language tags for use in various applications. They are intended to identify information that is commonly used in association with languages or language tags but that is not part of language identification.",142,null],[12,"privateuse","","Private use subtags are used to indicate distinctions in language that are important in a given context by private agreement.",142,null],[3,"ExtendedValue","","An extended header parameter value (i.e., tagged with a character set and optionally, a language), as defined in RFC 5987.",null,null],[12,"charset","","The character set that is used to encode the `value` to a string.",143,null],[12,"language_tag","","The human language details of the `value`, if available.",143,null],[12,"value","","The parameter value, as expressed in octets.",143,null],[3,"ContentDisposition","","A `Content-Disposition` header, (re)defined in RFC6266.",null,null],[12,"disposition","","The disposition",144,null],[12,"parameters","","Disposition parameters",144,null],[4,"ContentEncoding","","Represents supported types of content encodings",null,null],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,null],[13,"Br","","A format using the Brotli algorithm",139,null],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,null],[13,"Gzip","","Gzip algorithm",139,null],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,null],[4,"DispositionType","","The implied disposition of the content of the HTTP body.",null,null],[13,"Inline","","Inline implies default processing",145,null],[13,"Attachment","","Attachment implies that the recipient should prompt the user to save the response locally, rather than process it normally (as per its media type).",145,null],[13,"Ext","","Extension type. Should be handled by recipients the same way as Attachment",145,null],[4,"DispositionParam","","A parameter to the disposition type.",null,null],[13,"Filename","","A Filename consisting of a Charset, an optional LanguageTag, and finally a sequence of bytes representing the filename",146,null],[13,"Ext","","Extension type consisting of token and value. Recipients should ignore unrecognized parameters.",146,null],[4,"Charset","","A Mime charset.",null,null],[13,"Us_Ascii","","US ASCII",147,null],[13,"Iso_8859_1","","ISO-8859-1",147,null],[13,"Iso_8859_2","","ISO-8859-2",147,null],[13,"Iso_8859_3","","ISO-8859-3",147,null],[13,"Iso_8859_4","","ISO-8859-4",147,null],[13,"Iso_8859_5","","ISO-8859-5",147,null],[13,"Iso_8859_6","","ISO-8859-6",147,null],[13,"Iso_8859_7","","ISO-8859-7",147,null],[13,"Iso_8859_8","","ISO-8859-8",147,null],[13,"Iso_8859_9","","ISO-8859-9",147,null],[13,"Iso_8859_10","","ISO-8859-10",147,null],[13,"Shift_Jis","","Shift_JIS",147,null],[13,"Euc_Jp","","EUC-JP",147,null],[13,"Iso_2022_Kr","","ISO-2022-KR",147,null],[13,"Euc_Kr","","EUC-KR",147,null],[13,"Iso_2022_Jp","","ISO-2022-JP",147,null],[13,"Iso_2022_Jp_2","","ISO-2022-JP-2",147,null],[13,"Iso_8859_6_E","","ISO-8859-6-E",147,null],[13,"Iso_8859_6_I","","ISO-8859-6-I",147,null],[13,"Iso_8859_8_E","","ISO-8859-8-E",147,null],[13,"Iso_8859_8_I","","ISO-8859-8-I",147,null],[13,"Gb2312","","GB2312",147,null],[13,"Big5","","Big5",147,null],[13,"Koi8_R","","KOI8-R",147,null],[13,"Ext","","An arbitrary charset specified as a string",147,null],[5,"parse_extended_value","","Parses extended header parameter values (`ext-value`), as defined in RFC 5987.",null,{"i":[{"n":"str"}],"o":{"g":["extendedvalue","parseerror"],"n":"result"}}],[5,"http_percent_encode","","Percent encode a sequence of bytes with a character set defined in [https://tools.ietf.org/html/rfc5987#section-3.2][url]",null,null],[6,"FutureResponse","actix_web","Convenience type alias",null,null],[8,"AsyncResponder","","Convenience trait that converts `Future` object to a `Boxed` future",null,null],[10,"responder","","Convert to a boxed future",148,{"i":[{"n":"self"}],"o":{"g":["future"],"n":"box"}}],[8,"FromRequest","","Trait implemented by types that can be extracted from request.",null,null],[16,"Config","","Configuration for conversion process",149,null],[16,"Result","","Future that resolves to a Self",149,null],[10,"from_request","","Convert request to a Self",149,null],[11,"extract","","Convert request to a Self",149,null],[8,"Responder","","Trait implemented by types that generate responses for clients.",null,null],[16,"Item","","The associated item which can be returned.",150,null],[16,"Error","","The associated error which can be returned.",150,null],[10,"respond_to","","Convert itself to `AsyncResult` or `Error`.",150,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"n":"result"}}],[8,"HttpMessage","","Trait that implements general purpose operations on http messages",null,null],[16,"Stream","","Type of message payload stream",151,null],[10,"headers","","Read the message headers.",151,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[10,"payload","","Message payload stream",151,null],[11,"content_type","","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"encoding","","Get content type encoding",151,{"i":[{"n":"self"}],"o":{"g":["encodingref","contenttypeerror"],"n":"result"}}],[11,"mime_type","","Convert the request content type to a known mime type.",151,{"i":[{"n":"self"}],"o":{"g":["option","contenttypeerror"],"n":"result"}}],[11,"chunked","","Check if request has chunked transfer encoding",151,{"i":[{"n":"self"}],"o":{"g":["bool","parseerror"],"n":"result"}}],[11,"body","","Load http message body.",151,{"i":[{"n":"self"}],"o":{"n":"messagebody"}}],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,{"i":[{"n":"self"}],"o":{"n":"urlencoded"}}],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,{"i":[{"n":"self"}],"o":{"n":"jsonbody"}}],[11,"multipart","","Return stream to http payload processes as multipart.",151,{"i":[{"n":"self"}],"o":{"n":"multipart"}}],[11,"readlines","","Return stream of lines.",151,{"i":[{"n":"self"}],"o":{"n":"readlines"}}],[14,"header","","",null,null],[11,"new","actix_web::dev","Create a drain from a future",152,{"i":[{"n":"receiver"}],"o":{"n":"self"}}],[11,"poll","","",152,null],[11,"limit","","Change max size of payload. By default max size is 256Kb",153,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"error_handler","","Set custom error handler",153,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"self"}}],[11,"default","","",153,{"o":{"n":"self"}}],[11,"limit","","Change max size of payload. By default max size is 256Kb",154,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"mimetype","","Set required mime-type of the request. By default mime type is not enforced.",154,{"i":[{"n":"self"},{"n":"mime"}],"o":{"n":"self"}}],[11,"default","","",154,{"o":{"n":"self"}}],[11,"extract","actix_web","Convert request to a Self",149,null],[11,"poll","actix_web::dev","",155,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"async","","Create async response",155,{"i":[{"g":["future"],"n":"box"}],"o":{"n":"asyncresult"}}],[11,"ok","","Send response",155,{"i":[{"n":"r"}],"o":{"n":"asyncresult"}}],[11,"err","","Send error",155,{"i":[{"n":"r"}],"o":{"n":"asyncresult"}}],[11,"respond_to","","",155,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["asyncresult","error"],"n":"result"}}],[11,"from","","",155,{"i":[{"n":"t"}],"o":{"n":"asyncresult"}}],[11,"from","","",155,{"i":[{"g":["asyncresult"],"n":"result"}],"o":{"n":"self"}}],[11,"from","","",155,{"i":[{"n":"result"}],"o":{"n":"self"}}],[11,"from","","",155,{"i":[{"g":["box"],"n":"result"}],"o":{"n":"self"}}],[11,"from","","",155,{"i":[{"g":["future"],"n":"box"}],"o":{"n":"asyncresult"}}],[11,"from","actix_web::error","",26,{"i":[{"n":"utf8error"}],"o":{"n":"parseerror"}}],[11,"fmt","","",26,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","Formats the cookie `self` as a `Set-Cookie` header value.",156,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::error","",26,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",156,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",157,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"description","actix_web::error","",26,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"eq","","",26,{"i":[{"n":"self"},{"n":"parseerror"}],"o":{"n":"bool"}}],[11,"ne","","",26,{"i":[{"n":"self"},{"n":"parseerror"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http","",156,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"n":"bool"}}],[11,"clone","","",156,{"i":[{"n":"self"}],"o":{"n":"cookie"}}],[11,"clone","actix_web::error","",26,{"i":[{"n":"self"}],"o":{"n":"parseerror"}}],[11,"clone","actix_web::http","",157,{"i":[{"n":"self"}],"o":{"n":"cookiebuilder"}}],[11,"from_str","","",156,{"i":[{"n":"str"}],"o":{"g":["cookie","parseerror"],"n":"result"}}],[11,"from","actix_web::error","",25,{"i":[{"n":"errors"}],"o":{"n":"parseerror"}}],[11,"fmt","","",25,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",25,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"description","","",25,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"eq","","",25,{"i":[{"n":"self"},{"n":"parseerror"}],"o":{"n":"bool"}}],[11,"clone","","",25,{"i":[{"n":"self"}],"o":{"n":"parseerror"}}],[11,"cmp","actix_web::http","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"ordering"}}],[11,"cmp","actix_web::http::header","",159,{"i":[{"n":"self"},{"n":"headervalue"}],"o":{"n":"ordering"}}],[11,"cmp","actix_web::http","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"ordering"}}],[11,"into_iter","actix_web::http::header","Creates a consuming iterator, that is, one that moves keys and values out of the map in arbitary order. The map cannot be used after calling this.",161,{"i":[{"n":"self"}],"o":{"n":"intoiter"}}],[11,"into_iter","","",162,{"i":[{"n":"self"}],"o":{"n":"valueitermut"}}],[11,"into_iter","","",163,{"i":[{"n":"self"}],"o":{"n":"valueiter"}}],[11,"borrow","","",164,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"from","","",159,{"i":[{"n":"u64"}],"o":{"n":"headervalue"}}],[11,"from","","",164,{"i":[{"n":"headername"}],"o":{"n":"headername"}}],[11,"from","","",159,{"i":[{"n":"i64"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"usize"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"i32"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"headername"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"i16"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"isize"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"u32"}],"o":{"n":"headervalue"}}],[11,"from","","",159,{"i":[{"n":"u16"}],"o":{"n":"headervalue"}}],[11,"next","","",165,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",166,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",167,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",168,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",169,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",170,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",171,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next","","",172,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"from_iter","","",161,{"i":[{"n":"i"}],"o":{"n":"headermap"}}],[11,"fmt","","",173,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",174,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",175,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",160,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http::header","",176,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",177,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http::header","",178,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",164,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",163,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",161,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",173,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",172,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",160,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http::header","",176,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",178,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",141,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",174,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",158,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http::header","",169,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http","",177,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::http::header","",170,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",168,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",175,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",167,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",179,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",166,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",171,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",159,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",162,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",165,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"drop","","",165,null],[11,"drop","","",172,null],[11,"drop","","",167,null],[11,"from_str","","",164,{"i":[{"n":"str"}],"o":{"g":["headername","invalidheadername"],"n":"result"}}],[11,"from_str","actix_web::http","",177,{"i":[{"n":"str"}],"o":{"g":["method"],"n":"result"}}],[11,"from_str","actix_web::http::header","",159,{"i":[{"n":"str"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"from_str","actix_web::http","",160,{"i":[{"n":"str"}],"o":{"g":["statuscode","invalidstatuscode"],"n":"result"}}],[11,"partial_cmp","actix_web::http::header","",159,null],[11,"partial_cmp","","",159,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["ordering"],"n":"option"}}],[11,"partial_cmp","actix_web::http","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"g":["ordering"],"n":"option"}}],[11,"lt","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"le","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"gt","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"ge","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"partial_cmp","actix_web::http::header","",159,{"i":[{"n":"self"},{"n":"t"}],"o":{"g":["ordering"],"n":"option"}}],[11,"partial_cmp","","",159,{"i":[{"n":"self"},{"n":"headervalue"}],"o":{"g":["ordering"],"n":"option"}}],[11,"partial_cmp","","",159,{"i":[{"n":"self"},{"n":"string"}],"o":{"g":["ordering"],"n":"option"}}],[11,"partial_cmp","actix_web::http","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"g":["ordering"],"n":"option"}}],[11,"lt","","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"le","","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"gt","","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"ge","","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"try_from","","",177,null],[11,"try_from","","",177,{"i":[{"n":"method"}],"o":{"g":["method"],"n":"result"}}],[11,"try_from","actix_web::http::header","",164,{"i":[{"n":"str"}],"o":{"g":["headername"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"headervalue"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"u64"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"u32"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","actix_web::http","",160,{"i":[{"n":"statuscode"}],"o":{"g":["statuscode"],"n":"result"}}],[11,"try_from","actix_web::http::header","",159,{"i":[{"n":"usize"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",164,null],[11,"try_from","actix_web::http","",160,null],[11,"try_from","actix_web::http::header","",159,null],[11,"try_from","actix_web::http","",177,{"i":[{"n":"str"}],"o":{"g":["method"],"n":"result"}}],[11,"try_from","actix_web::http::header","",159,{"i":[{"n":"bytes"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"i32"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"headername"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"u16"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"str"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",164,{"i":[{"n":"bytes"}],"o":{"g":["headername"],"n":"result"}}],[11,"try_from","actix_web::http","",160,{"i":[{"n":"u16"}],"o":{"g":["statuscode"],"n":"result"}}],[11,"try_from","actix_web::http::header","",159,{"i":[{"n":"isize"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",159,{"i":[{"n":"i16"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","actix_web::http","",160,{"i":[{"n":"str"}],"o":{"g":["statuscode"],"n":"result"}}],[11,"try_from","actix_web::http::header","",159,{"i":[{"n":"i64"}],"o":{"g":["headervalue"],"n":"result"}}],[11,"try_from","","",164,{"i":[{"n":"headername"}],"o":{"g":["headername"],"n":"result"}}],[11,"default","actix_web::http","",177,{"o":{"n":"method"}}],[11,"default","actix_web::http::header","",161,{"o":{"n":"headermap"}}],[11,"default","actix_web::http","",160,{"o":{"n":"statuscode"}}],[11,"default","","",158,{"o":{"n":"version"}}],[11,"description","actix_web::http::header","",174,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"description","","",178,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"description","","",176,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"description","","",175,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"description","","",173,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"as_ref","","",164,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"as_ref","","",159,null],[11,"as_ref","actix_web::http","",177,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"as_ref","actix_web::http::header","",164,null],[11,"eq","actix_web::http","",177,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"eq","","",177,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http::header","Performs a case-insensitive comparison of the string against the header name",164,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"eq","","",163,{"i":[{"n":"self"},{"n":"getall"}],"o":{"n":"bool"}}],[11,"eq","","Performs a case-insensitive comparison of the string against the header name",164,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"eq","","",159,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"eq","","",159,{"i":[{"n":"self"},{"n":"string"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http","",177,{"i":[{"n":"self"},{"n":"method"}],"o":{"n":"bool"}}],[11,"ne","","",177,{"i":[{"n":"self"},{"n":"method"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http::header","",159,null],[11,"eq","actix_web::http","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"ne","","",160,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http::header","",159,{"i":[{"n":"self"},{"n":"headervalue"}],"o":{"n":"bool"}}],[11,"eq","","",164,{"i":[{"n":"self"},{"n":"headername"}],"o":{"n":"bool"}}],[11,"eq","","",164,{"i":[{"n":"self"},{"n":"headername"}],"o":{"n":"bool"}}],[11,"ne","","",164,{"i":[{"n":"self"},{"n":"headername"}],"o":{"n":"bool"}}],[11,"eq","","",161,{"i":[{"n":"self"},{"n":"headermap"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http","",160,{"i":[{"n":"self"},{"n":"u16"}],"o":{"n":"bool"}}],[11,"eq","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"ne","","",158,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"bool"}}],[11,"eq","actix_web::http::header","",159,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"bool"}}],[11,"extend","","",161,null],[11,"extend","","Extend a `HeaderMap` with the contents of another `HeaderMap`.",161,null],[11,"clone","","",164,{"i":[{"n":"self"}],"o":{"n":"headername"}}],[11,"clone","actix_web::http","",160,{"i":[{"n":"self"}],"o":{"n":"statuscode"}}],[11,"clone","","",158,{"i":[{"n":"self"}],"o":{"n":"version"}}],[11,"clone","actix_web::http::header","",161,{"i":[{"n":"self"}],"o":{"n":"headermap"}}],[11,"clone","actix_web::http","",177,{"i":[{"n":"self"}],"o":{"n":"method"}}],[11,"clone","actix_web::http::header","",159,{"i":[{"n":"self"}],"o":{"n":"headervalue"}}],[11,"hash","actix_web::http","",160,null],[11,"hash","","",177,null],[11,"hash","actix_web::http::header","",164,null],[11,"hash","","",159,null],[11,"hash","actix_web::http","",158,null],[11,"next_back","actix_web::http::header","",169,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"next_back","","",170,{"i":[{"n":"self"}],"o":{"n":"option"}}],[11,"index","","",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"t"}}],[11,"default","","",142,{"o":{"n":"languagetag"}}],[11,"fmt","","",142,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",142,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"eq","","",142,{"i":[{"n":"self"},{"n":"languagetag"}],"o":{"n":"bool"}}],[11,"clone","","",142,{"i":[{"n":"self"}],"o":{"n":"languagetag"}}],[11,"from_str","","",142,{"i":[{"n":"str"}],"o":{"g":["languagetag","error"],"n":"result"}}],[11,"poll","actix_web::actix::actix::dev::fut","",180,null],[11,"poll","","",181,null],[11,"poll","","",182,null],[11,"poll","","",183,null],[11,"poll","","",184,null],[11,"poll","","",185,null],[11,"stop","actix_web::actix::actix::dev","Stop current actor. SyncContext creates and starts new actor.",186,null],[11,"terminate","","Terminate actor execution. SyncContext creates and starts new actor.",186,null],[11,"state","","Actor execution state",186,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"stop","actix_web::actix::actix","",187,null],[11,"terminate","","",187,null],[11,"state","","",187,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"from","actix_web::actix::actix::dev::fut","",188,{"i":[{"n":"result"}],"o":{"n":"futureresult"}}],[11,"poll","","",114,null],[11,"poll","","",188,null],[11,"poll","","",189,null],[11,"poll","actix_web::actix::actix::dev::actors::resolver","",190,{"i":[{"n":"self"},{"n":"resolver"},{"n":"context"}],"o":{"g":["async"],"n":"result"}}],[11,"poll","actix_web::actix::actix::dev::fut","",191,null],[11,"poll","","",192,null],[11,"poll","","",193,null],[11,"poll","","",194,null],[11,"poll","","",195,null],[11,"poll","","",196,null],[11,"poll","","",197,null],[11,"poll","","",198,null],[11,"poll","","",199,null],[11,"fmt","actix_web::actix::actix","",121,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::resolver","",105,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix","",125,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"handle","actix_web::actix::actix::dev::actors::resolver","",200,null],[11,"handle","actix_web::actix::actix::dev","",201,null],[11,"handle","actix_web::actix::actix::dev::actors::signal","",202,null],[11,"handle","actix_web::actix::actix::dev::actors::resolver","",200,null],[11,"handle","actix_web::actix::actix::dev","",201,{"i":[{"n":"self"},{"n":"startactor"},{"n":"context"}],"o":{"n":"addr"}}],[11,"handle","actix_web::actix::actix::dev::actors::signal","",203,null],[11,"handle","actix_web::actix::actix::dev::actors::resolver","",200,null],[11,"handle","actix_web::actix::actix::dev","",201,{"i":[{"n":"self"},{"n":"execute"},{"n":"context"}],"o":{"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",183,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::signal","",107,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",189,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",199,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",180,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix","",117,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",193,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",204,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix","",118,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",194,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",185,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",184,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::resolver","",104,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix","",121,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::resolver","",105,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev","",205,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",192,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::signal","",106,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",191,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",182,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix","",125,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::resolver","",206,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",196,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",188,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::actors::resolver","",207,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","actix_web::actix::actix::dev::fut","",114,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"fmt","","",197,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"g":["error"],"n":"result"}}],[11,"parts","actix_web::actix::actix","",187,{"i":[{"n":"self"}],"o":{"n":"contextparts"}}],[11,"default","actix_web::actix::actix::dev","",205,{"o":{"n":"spawnhandle"}}],[11,"default","actix_web::actix::actix::dev::actors::signal","",202,{"o":{"n":"processsignals"}}],[11,"default","actix_web::actix::actix::dev","",208,{"o":{"n":"mailbox"}}],[11,"default","actix_web::actix::actix::dev::actors::resolver","",200,{"o":{"n":"resolver"}}],[11,"default","actix_web::actix::actix::dev::actors::signal","",203,{"o":{"n":"defaultsignalshandler"}}],[11,"default","actix_web::actix::actix","",209,{"o":{"n":"condition"}}],[11,"spawn","","",187,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[11,"wait","","",187,null],[11,"waiting","","",187,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"cancel_future","","",187,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"address","","",187,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"service_started","actix_web::actix::actix::dev::actors::signal","",202,null],[11,"clone","actix_web::actix::actix","",117,{"i":[{"n":"self"}],"o":{"n":"running"}}],[11,"clone","","",118,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"clone","actix_web::actix::actix::dev","",205,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"clone","","",210,{"i":[{"n":"self"}],"o":{"n":"systemregistry"}}],[11,"clone","actix_web::actix::actix::dev::actors::signal","",106,{"i":[{"n":"self"}],"o":{"n":"signaltype"}}],[11,"clone","actix_web::actix::actix::dev","",211,{"i":[{"n":"self"}],"o":{"n":"recipient"}}],[11,"clone","","",212,{"i":[{"n":"self"}],"o":{"n":"system"}}],[11,"clone","","",213,{"i":[{"n":"self"}],"o":{"n":"registry"}}],[11,"clone","actix_web::actix::actix","",214,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"poll","actix_web::actix::actix::dev","",215,{"i":[{"n":"self"}],"o":{"g":["async"],"n":"result"}}],[11,"poll","","",216,{"i":[{"n":"self"}],"o":{"g":["async"],"n":"result"}}],[11,"poll","actix_web::actix::actix::dev::fut","",204,{"i":[{"n":"self"}],"o":{"g":["async"],"n":"result"}}],[11,"drop","actix_web::actix::actix::dev","",201,null],[11,"handle","actix_web::actix::actix","",214,null],[11,"handle","actix_web::actix::actix::dev","",217,null],[11,"handle","","",218,null],[11,"handle","actix_web::actix::actix","",122,null],[11,"started","actix_web::actix::actix::dev::actors::signal","",203,null],[11,"started","actix_web::actix::actix::dev::actors::resolver","",200,null],[11,"cause","actix_web::actix::actix","",121,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",121,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"cause","actix_web::actix::actix::dev::actors::resolver","",105,{"i":[{"n":"self"}],"o":{"g":["fail"],"n":"option"}}],[11,"backtrace","","",105,{"i":[{"n":"self"}],"o":{"g":["backtrace"],"n":"option"}}],[11,"eq","actix_web::actix::actix::dev","",211,{"i":[{"n":"self"},{"n":"recipient"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix","",118,{"i":[{"n":"self"},{"n":"actorstate"}],"o":{"n":"bool"}}],[11,"eq","","",214,{"i":[{"n":"self"},{"n":"addr"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix::dev::actors::resolver","",206,{"i":[{"n":"self"},{"n":"resolve"}],"o":{"n":"bool"}}],[11,"ne","","",206,{"i":[{"n":"self"},{"n":"resolve"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix::dev","",205,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"ne","","",205,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix::dev::actors::resolver","",104,{"i":[{"n":"self"},{"n":"connectaddr"}],"o":{"n":"bool"}}],[11,"ne","","",104,{"i":[{"n":"self"},{"n":"connectaddr"}],"o":{"n":"bool"}}],[11,"eq","","",207,{"i":[{"n":"self"},{"n":"connect"}],"o":{"n":"bool"}}],[11,"ne","","",207,{"i":[{"n":"self"},{"n":"connect"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix::dev::actors::signal","",106,{"i":[{"n":"self"},{"n":"signaltype"}],"o":{"n":"bool"}}],[11,"eq","actix_web::actix::actix","",117,{"i":[{"n":"self"},{"n":"running"}],"o":{"n":"bool"}}],[11,"pack","actix_web::actix::actix::dev","",186,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[11,"pack","actix_web::actix::actix","",187,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[11,"hash","actix_web::actix::actix::dev","",211,null],[11,"hash","actix_web::actix::actix","",214,null],[11,"hash","actix_web::actix::actix::dev","",205,null],[11,"iter","actix_web::http::header","Returns an iterator visiting all values associated with the entry.",163,{"i":[{"n":"self"}],"o":{"n":"valueiter"}}],[11,"key","","Returns a reference to the entry's key.",162,{"i":[{"n":"self"}],"o":{"n":"headername"}}],[11,"get","","Get a reference to the first value in the entry.",162,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"get_mut","","Get a mutable reference to the first value in the entry.",162,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"into_mut","","Converts the `OccupiedEntry` into a mutable reference to the first value.",162,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"insert","","Sets the value of the entry.",162,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"t"}}],[11,"insert_mult","","Sets the value of the entry.",162,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"valuedrain"}}],[11,"append","","Insert the value into the entry.",162,null],[11,"remove","","Remove the entry from the map.",162,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"remove_entry","","Remove the entry from the map.",162,null],[11,"remove_entry_mult","","Remove the entry from the map.",162,null],[11,"iter","","Returns an iterator visiting all values associated with the entry.",162,{"i":[{"n":"self"}],"o":{"n":"valueiter"}}],[11,"iter_mut","","Returns an iterator mutably visiting all values associated with the entry.",162,{"i":[{"n":"self"}],"o":{"n":"valueitermut"}}],[11,"key","","Returns a reference to the entry's key",179,{"i":[{"n":"self"}],"o":{"n":"headername"}}],[11,"into_key","","Take ownership of the key",179,{"i":[{"n":"self"}],"o":{"n":"headername"}}],[11,"insert","","Insert the value into the entry.",179,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"t"}}],[11,"insert_entry","","Insert the value into the entry.",179,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"occupiedentry"}}],[11,"or_insert","","Ensures a value is in the entry by inserting the default if empty.",141,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"t"}}],[11,"or_insert_with","","Ensures a value is in the entry by inserting the result of the default function if empty.",141,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"t"}}],[11,"key","","Returns a reference to the entry's key",141,{"i":[{"n":"self"}],"o":{"n":"headername"}}],[11,"from_bytes","","Converts a slice of bytes to an HTTP header name.",164,null],[11,"from_lowercase","","Converts a slice of bytes to an HTTP header name.",164,null],[11,"from_static","","Converts a static string to a HTTP header name.",164,{"i":[{"n":"str"}],"o":{"n":"headername"}}],[11,"as_str","","Returns a `str` representation of the header.",164,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"from_static","","Convert a static string to a `HeaderValue`.",159,{"i":[{"n":"str"}],"o":{"n":"headervalue"}}],[11,"from_str","","Attempt to convert a string to a `HeaderValue`.",159,{"i":[{"n":"str"}],"o":{"g":["headervalue","invalidheadervalue"],"n":"result"}}],[11,"from_name","","Converts a HeaderName into a HeaderValue",159,{"i":[{"n":"headername"}],"o":{"n":"headervalue"}}],[11,"from_bytes","","Attempt to convert a byte slice to a `HeaderValue`.",159,null],[11,"from_shared","","Attempt to convert a `Bytes` buffer to a `HeaderValue`.",159,{"i":[{"n":"bytes"}],"o":{"g":["headervalue","invalidheadervaluebytes"],"n":"result"}}],[11,"from_shared_unchecked","","Convert a `Bytes` directly into a `HeaderValue` without validating.",159,{"i":[{"n":"bytes"}],"o":{"n":"headervalue"}}],[11,"to_str","","Yields a `&str` slice if the `HeaderValue` only contains visible ASCII chars.",159,{"i":[{"n":"self"}],"o":{"g":["str","tostrerror"],"n":"result"}}],[11,"len","","Returns the length of `self`.",159,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"is_empty","","Returns true if the `HeaderValue` has a length of zero bytes.",159,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"as_bytes","","Converts a `HeaderValue` to a byte slice.",159,null],[11,"set_sensitive","","Mark that the header value represents sensitive information.",159,null],[11,"is_sensitive","","Returns `true` if the value represents sensitive data.",159,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"new","","Create an empty `HeaderMap`.",161,{"o":{"g":["headervalue"],"n":"headermap"}}],[11,"with_capacity","","Create an empty `HeaderMap` with the specified capacity.",161,{"i":[{"n":"usize"}],"o":{"n":"headermap"}}],[11,"len","","Returns the number of headers stored in the map.",161,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"keys_len","","Returns the number of keys stored in the map.",161,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"is_empty","","Returns true if the map contains no elements.",161,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"clear","","Clears the map, removing all key-value pairs. Keeps the allocated memory for reuse.",161,null],[11,"capacity","","Returns the number of headers the map can hold without reallocating.",161,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"reserve","","Reserves capacity for at least `additional` more headers to be inserted into the `HeaderMap`.",161,null],[11,"get","","Returns a reference to the value associated with the key.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"option"}}],[11,"get_mut","","Returns a mutable reference to the value associated with the key.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"option"}}],[11,"get_all","","Returns a view of all values associated with a key.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"getall"}}],[11,"contains_key","","Returns true if the map contains a value for the specified key.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"bool"}}],[11,"iter","","An iterator visiting all key-value pairs.",161,{"i":[{"n":"self"}],"o":{"n":"iter"}}],[11,"iter_mut","","An iterator visiting all key-value pairs, with mutable value references.",161,{"i":[{"n":"self"}],"o":{"n":"itermut"}}],[11,"keys","","An iterator visiting all keys.",161,{"i":[{"n":"self"}],"o":{"n":"keys"}}],[11,"values","","An iterator visiting all values.",161,{"i":[{"n":"self"}],"o":{"n":"values"}}],[11,"values_mut","","An iterator visiting all values mutably.",161,{"i":[{"n":"self"}],"o":{"n":"valuesmut"}}],[11,"drain","","Clears the map, returning all entries as an iterator.",161,{"i":[{"n":"self"}],"o":{"n":"drain"}}],[11,"entry","","Gets the given key's corresponding entry in the map for in-place manipulation.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"g":["entry","invalidheadername"],"n":"result"}}],[11,"insert","","Inserts a key-value pair into the map.",161,{"i":[{"n":"self"},{"n":"k"},{"n":"t"}],"o":{"n":"option"}}],[11,"append","","Inserts a key-value pair into the map.",161,{"i":[{"n":"self"},{"n":"k"},{"n":"t"}],"o":{"n":"bool"}}],[11,"remove","","Removes a key from the map, returning the value associated with the key.",161,{"i":[{"n":"self"},{"n":"k"}],"o":{"n":"option"}}],[11,"clone","","",145,{"i":[{"n":"self"}],"o":{"n":"dispositiontype"}}],[11,"fmt","","",145,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",145,{"i":[{"n":"self"},{"n":"dispositiontype"}],"o":{"n":"bool"}}],[11,"ne","","",145,{"i":[{"n":"self"},{"n":"dispositiontype"}],"o":{"n":"bool"}}],[11,"clone","","",146,{"i":[{"n":"self"}],"o":{"n":"dispositionparam"}}],[11,"fmt","","",146,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",146,{"i":[{"n":"self"},{"n":"dispositionparam"}],"o":{"n":"bool"}}],[11,"ne","","",146,{"i":[{"n":"self"},{"n":"dispositionparam"}],"o":{"n":"bool"}}],[11,"clone","","",144,{"i":[{"n":"self"}],"o":{"n":"contentdisposition"}}],[11,"fmt","","",144,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",144,{"i":[{"n":"self"},{"n":"contentdisposition"}],"o":{"n":"bool"}}],[11,"ne","","",144,{"i":[{"n":"self"},{"n":"contentdisposition"}],"o":{"n":"bool"}}],[11,"from_raw","","Parse a raw Content-Disposition header value",144,{"i":[{"n":"headervalue"}],"o":{"g":["parseerror"],"n":"result"}}],[11,"fmt","","",144,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"matches","","Matches language tags. The first language acts as a language range, the second one is used as a normal language tag. None fields in the language range are ignored. If the language tag has more extlangs than the range these extlangs are ignored. Matches are case-insensitive. `*` in language ranges are represented using `None` values. The language range `*` that matches language tags is created by the default language tag: `let wildcard: LanguageTag = Default::default();.`",142,{"i":[{"n":"self"},{"n":"languagetag"}],"o":{"n":"bool"}}],[11,"is_language_range","","Checks if it is a language range, meaning that there are no extension and privateuse tags.",142,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"canonicalize","","Returns the canonical version of the language tag.",142,{"i":[{"n":"self"}],"o":{"n":"languagetag"}}],[11,"clone","","",147,{"i":[{"n":"self"}],"o":{"n":"charset"}}],[11,"fmt","","",147,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",147,{"i":[{"n":"self"},{"n":"charset"}],"o":{"n":"bool"}}],[11,"ne","","",147,{"i":[{"n":"self"},{"n":"charset"}],"o":{"n":"bool"}}],[11,"fmt","","",147,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"from_str","","",147,{"i":[{"n":"str"}],"o":{"g":["charset"],"n":"result"}}],[11,"clone","actix_web::http","",139,{"i":[{"n":"self"}],"o":{"n":"contentencoding"}}],[11,"eq","","",139,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"bool"}}],[11,"fmt","","",139,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"is_compression","","Is the content compressed?",139,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"as_str","","Convert content encoding to string",139,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"quality","","default quality value",139,{"i":[{"n":"self"}],"o":{"n":"f64"}}],[11,"from","","",139,{"i":[{"n":"str"}],"o":{"n":"contentencoding"}}],[11,"clone","actix_web::http::header","",143,{"i":[{"n":"self"}],"o":{"n":"extendedvalue"}}],[11,"fmt","","",143,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"eq","","",143,{"i":[{"n":"self"},{"n":"extendedvalue"}],"o":{"n":"bool"}}],[11,"ne","","",143,{"i":[{"n":"self"},{"n":"extendedvalue"}],"o":{"n":"bool"}}],[11,"fmt","","",143,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"default","actix_web::http","Create default `NormalizePath` instance, append is set to true, merge is set to true and redirect is set to `StatusCode::MOVED_PERMANENTLY`",219,{"o":{"n":"normalizepath"}}],[11,"new","","Create new `NormalizePath` instance",219,{"i":[{"n":"bool"},{"n":"bool"},{"n":"statuscode"}],"o":{"n":"normalizepath"}}],[11,"handle","","",219,null],[11,"content_type","actix_web","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"encoding","","Get content type encoding",151,{"i":[{"n":"self"}],"o":{"g":["encodingref","contenttypeerror"],"n":"result"}}],[11,"mime_type","","Convert the request content type to a known mime type.",151,{"i":[{"n":"self"}],"o":{"g":["option","contenttypeerror"],"n":"result"}}],[11,"chunked","","Check if request has chunked transfer encoding",151,{"i":[{"n":"self"}],"o":{"g":["bool","parseerror"],"n":"result"}}],[11,"body","","Load http message body.",151,{"i":[{"n":"self"}],"o":{"n":"messagebody"}}],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,{"i":[{"n":"self"}],"o":{"n":"urlencoded"}}],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,{"i":[{"n":"self"}],"o":{"n":"jsonbody"}}],[11,"multipart","","Return stream to http payload processes as multipart.",151,{"i":[{"n":"self"}],"o":{"n":"multipart"}}],[11,"readlines","","Return stream of lines.",151,{"i":[{"n":"self"}],"o":{"n":"readlines"}}],[11,"new","actix_web::dev","Create `MessageBody` for request.",220,{"i":[{"n":"t"}],"o":{"n":"messagebody"}}],[11,"limit","","Change max size of payload. By default max size is 256Kb",220,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"poll","","",220,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"new","","Create a new future to URL encode a request",221,{"i":[{"n":"t"}],"o":{"n":"urlencoded"}}],[11,"limit","","Change max size of payload. By default max size is 256Kb",221,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"poll","","",221,{"i":[{"n":"self"}],"o":{"n":"poll"}}],[11,"clone","actix_web::http","",140,{"i":[{"n":"self"}],"o":{"n":"connectiontype"}}],[11,"eq","","",140,{"i":[{"n":"self"},{"n":"connectiontype"}],"o":{"n":"bool"}}],[11,"fmt","","",140,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"status","actix_web::dev","Set HTTP status code of this response.",222,{"i":[{"n":"self"},{"n":"statuscode"}],"o":{"n":"self"}}],[11,"version","","Set HTTP version of this response.",222,{"i":[{"n":"self"},{"n":"version"}],"o":{"n":"self"}}],[11,"header","","Set a header.",222,{"i":[{"n":"self"},{"n":"k"},{"n":"v"}],"o":{"n":"self"}}],[11,"reason","","Set the custom reason for the response.",222,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"self"}}],[11,"content_encoding","","Set content encoding.",222,{"i":[{"n":"self"},{"n":"contentencoding"}],"o":{"n":"self"}}],[11,"force_close","","Force close connection, even if it is marked as keep-alive",222,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"chunked","","Enables automatic chunked transfer encoding",222,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"no_chunking","","Force disable chunked encoding",222,{"i":[{"n":"self"}],"o":{"n":"self"}}],[11,"content_type","","Set response content type",222,{"i":[{"n":"self"},{"n":"v"}],"o":{"n":"self"}}],[11,"content_length","","Set content length",222,{"i":[{"n":"self"},{"n":"u64"}],"o":{"n":"self"}}],[11,"cookie","","Set a cookie",222,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"n":"self"}}],[11,"del_cookie","","Remove cookie",222,{"i":[{"n":"self"},{"n":"cookie"}],"o":{"n":"self"}}],[11,"if_true","","This method calls provided closure with builder reference if value is true.",222,{"i":[{"n":"self"},{"n":"bool"},{"n":"f"}],"o":{"n":"self"}}],[11,"if_some","","This method calls provided closure with builder reference if value is Some.",222,{"i":[{"n":"self"},{"n":"option"},{"n":"f"}],"o":{"n":"self"}}],[11,"write_buffer_capacity","","Set write buffer capacity",222,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"body","","Set a body and generate `HttpResponse`.",222,{"i":[{"n":"self"},{"n":"b"}],"o":{"n":"httpresponse"}}],[11,"streaming","","Set a streaming body and generate `HttpResponse`.",222,{"i":[{"n":"self"},{"n":"s"}],"o":{"n":"httpresponse"}}],[11,"json","","Set a json body and generate `HttpResponse`",222,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"httpresponse"}}],[11,"finish","","Set an empty body and generate `HttpResponse`",222,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"take","","This method construct new `HttpResponseBuilder`",222,{"i":[{"n":"self"}],"o":{"n":"httpresponsebuilder"}}],[11,"respond_to","","",222,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse","error"],"n":"result"}}],[11,"from","","",222,{"i":[{"n":"clientresponse"}],"o":{"n":"httpresponsebuilder"}}],[11,"from","","",222,{"i":[{"n":"httprequest"}],"o":{"n":"httpresponsebuilder"}}],[11,"clone","","",223,{"i":[{"n":"self"}],"o":{"n":"connectioninfo"}}],[11,"default","","",223,{"o":{"n":"connectioninfo"}}],[11,"update","","Create ConnectionInfo instance for a request.",223,{"i":[{"n":"self"},{"n":"request"}]}],[11,"scheme","","Scheme of the request.",223,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"host","","Hostname of the request.",223,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"remote","","Remote IP of client initiated HTTP request.",223,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"limit","","Change max size of payload. By default max size is 256Kb",224,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"error_handler","","Set custom error handler",224,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"self"}}],[11,"default","","",224,{"o":{"n":"self"}}],[11,"new","","Create `JsonBody` for request.",225,{"i":[{"n":"t"}],"o":{"n":"self"}}],[11,"limit","","Change max size of payload. By default max size is 256Kb",225,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"self"}}],[11,"poll","","",225,{"i":[{"n":"self"}],"o":{"g":["jsonpayloaderror"],"n":"poll"}}],[11,"fmt","","",226,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"clone","","",226,{"i":[{"n":"self"}],"o":{"n":"params"}}],[11,"is_empty","","Check if there are any matched patterns",226,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"len","","Check number of extracted parameters",226,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"get","","Get matched parameter by name without type conversion",226,{"i":[{"n":"self"},{"n":"str"}],"o":{"g":["str"],"n":"option"}}],[11,"unprocessed","","Get unprocessed part of path",226,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"query","","Get matched `FromParam` compatible parameter by name.",226,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"result"}}],[11,"iter","","Return iterator to items in parameter container",226,{"i":[{"n":"self"}],"o":{"n":"paramsiter"}}],[11,"index","","",226,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"str"}}],[11,"index","","",226,{"i":[{"n":"self"},{"n":"usize"}],"o":{"n":"str"}}],[11,"fmt","","",227,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"new","","Create payload stream.",227,null],[11,"unread_data","","Put unused data back to payload",227,{"i":[{"n":"self"},{"n":"bytes"}]}],[11,"set_read_buffer_capacity","","Set read buffer capacity",227,{"i":[{"n":"self"},{"n":"usize"}]}],[11,"poll","","",227,{"i":[{"n":"self"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"clone","","",227,{"i":[{"n":"self"}],"o":{"n":"payload"}}],[11,"new","","Create new `PayloadBuffer` instance",228,{"i":[{"n":"s"}],"o":{"n":"self"}}],[11,"get_mut","","Get mutable reference to an inner stream.",228,{"i":[{"n":"self"}],"o":{"n":"s"}}],[11,"readany","","Read first available chunk of bytes",228,{"i":[{"n":"self"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"can_read","","Check if buffer contains enough bytes",228,{"i":[{"n":"self"},{"n":"usize"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"get_chunk","","Return reference to the first chunk of data",228,{"i":[{"n":"self"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"read_exact","","Read exact number of bytes",228,{"i":[{"n":"self"},{"n":"usize"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"drop_bytes","","Remove specified amount if bytes from buffer",228,{"i":[{"n":"self"},{"n":"usize"}]}],[11,"copy","","Copy buffered data",228,{"i":[{"n":"self"},{"n":"usize"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"read_until","","Read until specified ending",228,null],[11,"readline","","Read bytes until new line delimiter",228,{"i":[{"n":"self"}],"o":{"g":["option","payloaderror"],"n":"poll"}}],[11,"unprocessed","","Put unprocessed data back to the buffer",228,{"i":[{"n":"self"},{"n":"bytes"}]}],[11,"remaining","","Get remaining data from the buffer",228,{"i":[{"n":"self"}],"o":{"n":"bytes"}}],[11,"new","","Create new resource with specified resource definition",229,{"i":[{"n":"resourcedef"}],"o":{"n":"self"}}],[11,"name","","Set resource name",229,{"i":[{"n":"self"},{"n":"str"}]}],[11,"rdef","","Resource definition",229,{"i":[{"n":"self"}],"o":{"n":"resourcedef"}}],[11,"route","","Register a new route and return mutable reference to Route object. Route is used for route configuration, i.e. adding predicates, setting up handler.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"get","","Register a new `GET` route.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"post","","Register a new `POST` route.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"put","","Register a new `PUT` route.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"delete","","Register a new `DELETE` route.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"head","","Register a new `HEAD` route.",229,{"i":[{"n":"self"}],"o":{"n":"route"}}],[11,"method","","Register a new route and add method check to route.",229,{"i":[{"n":"self"},{"n":"method"}],"o":{"n":"route"}}],[11,"h","","Register a new route and add handler object.",229,{"i":[{"n":"self"},{"n":"h"}]}],[11,"f","","Register a new route and add handler function.",229,{"i":[{"n":"self"},{"n":"f"}]}],[11,"with","","Register a new route and add handler.",229,{"i":[{"n":"self"},{"n":"f"}]}],[11,"with_async","","Register a new route and add async handler.",229,{"i":[{"n":"self"},{"n":"f"}]}],[11,"middleware","","Register a resource middleware",229,{"i":[{"n":"self"},{"n":"m"}]}],[11,"default","","",230,{"o":{"n":"route"}}],[11,"filter","","Add match predicate to route.",230,{"i":[{"n":"self"},{"n":"t"}],"o":{"n":"self"}}],[11,"h","","Set handler object. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,{"i":[{"n":"self"},{"n":"h"}]}],[11,"f","","Set handler function. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,{"i":[{"n":"self"},{"n":"f"}]}],[11,"a","","Set async handler function.",230,{"i":[{"n":"self"},{"n":"h"}]}],[11,"with","","Set handler function, use request extractor for parameters.",230,{"i":[{"n":"self"},{"n":"f"}]}],[11,"with_config","","Set handler function. Same as `.with()` but it allows to configure extractor.",230,{"i":[{"n":"self"},{"n":"f"},{"n":"c"}]}],[11,"with_async","","Set async handler function, use request extractor for parameters. Also this method needs to be used if your handler function returns `impl Future<>`",230,{"i":[{"n":"self"},{"n":"f"}]}],[11,"with_async_config","","Set async handler function, use request extractor for parameters. This method allows to configure extractor.",230,{"i":[{"n":"self"},{"n":"f"},{"n":"c"}]}],[11,"clone","","",231,{"i":[{"n":"self"}],"o":{"n":"resourceinfo"}}],[11,"name","","Name os the resource",231,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"rdef","","This method returns reference to matched `ResourceDef` object.",231,{"i":[{"n":"self"}],"o":{"g":["resourcedef"],"n":"option"}}],[11,"match_info","","Get a reference to the Params object.",231,{"i":[{"n":"self"}],"o":{"n":"params"}}],[11,"url_for","","Generate url for named resource",231,{"i":[{"n":"self"},{"n":"request"},{"n":"str"},{"n":"u"}],"o":{"g":["url","urlgenerationerror"],"n":"result"}}],[11,"has_resource","","Check if application contains matching resource.",231,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"has_prefixed_resource","","Check if application contains matching resource.",231,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"default","","",232,{"o":{"n":"self"}}],[11,"handle","","Handle request",232,{"i":[{"n":"self"},{"n":"httprequest"}],"o":{"g":["httpresponse"],"n":"asyncresult"}}],[11,"recognize","","Query for matched resource",232,{"i":[{"n":"self"},{"n":"request"},{"n":"s"},{"n":"usize"}],"o":{"n":"resourceinfo"}}],[11,"fmt","","",136,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"clone","","",136,{"i":[{"n":"self"}],"o":{"n":"resourcetype"}}],[11,"eq","","",136,{"i":[{"n":"self"},{"n":"resourcetype"}],"o":{"n":"bool"}}],[11,"clone","","",233,{"i":[{"n":"self"}],"o":{"n":"resourcedef"}}],[11,"fmt","","",233,{"i":[{"n":"self"},{"n":"formatter"}],"o":{"n":"result"}}],[11,"new","","Parse path pattern and create new `Resource` instance.",233,{"i":[{"n":"str"}],"o":{"n":"self"}}],[11,"prefix","","Parse path pattern and create new `Resource` instance.",233,{"i":[{"n":"str"}],"o":{"n":"self"}}],[11,"external","","Construct external resource",233,{"i":[{"n":"str"}],"o":{"n":"self"}}],[11,"with_prefix","","Parse path pattern and create new `Resource` instance with custom prefix",233,{"i":[{"n":"str"},{"n":"str"},{"n":"bool"}],"o":{"n":"self"}}],[11,"rtype","","Resource type",233,{"i":[{"n":"self"}],"o":{"n":"resourcetype"}}],[11,"name","","Resource name",233,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"pattern","","Path pattern of the resource",233,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"is_match","","Is this path a match against this resource?",233,{"i":[{"n":"self"},{"n":"str"}],"o":{"n":"bool"}}],[11,"match_with_params","","Are the given path and parameters a match against this resource?",233,{"i":[{"n":"self"},{"n":"request"},{"n":"usize"}],"o":{"g":["params"],"n":"option"}}],[11,"match_prefix_with_params","","Is the given path a prefix match and do the parameters match against this resource?",233,{"i":[{"n":"self"},{"n":"request"},{"n":"usize"}],"o":{"g":["params"],"n":"option"}}],[11,"resource_path","","Build resource path.",233,{"i":[{"n":"self"},{"n":"u"},{"n":"str"}],"o":{"g":["string","urlgenerationerror"],"n":"result"}}],[11,"eq","","",233,{"i":[{"n":"self"},{"n":"resourcedef"}],"o":{"n":"bool"}}],[11,"hash","","",233,{"i":[{"n":"self"},{"n":"h"}]}],[11,"as_str","actix_web::error","Returns a description of this error as a string",26,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"error_response","actix_web::http::header","",176,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"error_response","","",178,{"i":[{"n":"self"}],"o":{"n":"httpresponse"}}],[11,"host","actix_web::actix::actix::dev::actors::resolver","",206,{"i":[{"n":"t"}],"o":{"n":"resolve"}}],[11,"host_and_port","","",206,{"i":[{"n":"t"},{"n":"u16"}],"o":{"n":"resolve"}}],[11,"host","","",207,{"i":[{"n":"t"}],"o":{"n":"connect"}}],[11,"host_and_port","","",207,{"i":[{"n":"t"},{"n":"u16"}],"o":{"n":"connect"}}],[11,"timeout","","Set connect timeout",207,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"connect"}}],[11,"new","","",200,{"i":[{"n":"resolverconfig"},{"n":"resolveropts"}],"o":{"n":"resolver"}}],[11,"new","","",190,{"i":[{"g":["socketaddr"],"n":"vecdeque"}],"o":{"n":"tcpconnector"}}],[11,"with_timeout","","",190,{"i":[{"g":["socketaddr"],"n":"vecdeque"},{"n":"duration"}],"o":{"n":"tcpconnector"}}],[11,"new","actix_web::actix::actix::dev::fut","",204,{"i":[{"n":"s"}],"o":{"n":"finish"}}],[11,"split","","Splits out the homogeneous type from an either of tuples.",114,null],[11,"new","actix_web::actix::actix::dev::msgs","",234,{"i":[{"n":"f"}],"o":{"n":"startactor"}}],[11,"new","","",235,{"i":[{"n":"f"}],"o":{"n":"execute"}}],[11,"exec","","Execute enclosed function",235,{"i":[{"n":"self"}],"o":{"n":"result"}}],[11,"start","actix_web::actix::actix","Start new sync arbiter with specified number of worker threads. Returns address of the started actor.",236,{"i":[{"n":"usize"},{"n":"f"}],"o":{"n":"addr"}}],[11,"wait","","",209,{"i":[{"n":"self"}],"o":{"n":"receiver"}}],[11,"set","","",209,null],[11,"alive","","Indicates if actor is alive",118,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"stopping","","Indicates if actor is stopped of stopping",118,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"with_receiver","","",187,{"i":[{"n":"addressreceiver"}],"o":{"n":"context"}}],[11,"run","","",187,{"i":[{"n":"self"},{"n":"a"}],"o":{"n":"addr"}}],[11,"into_future","","",187,{"i":[{"n":"self"},{"n":"a"}],"o":{"g":["context"],"n":"contextfut"}}],[11,"handle","","Handle of the running future",187,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"set_mailbox_capacity","","Set mailbox capacity",187,null],[11,"new","actix_web::actix::actix::io","",237,{"i":[{"n":"t"},{"n":"c"}],"o":{"n":"writer"}}],[11,"close","","Gracefully close sink",237,null],[11,"closed","","Check if sink is closed",237,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"set_buffer_capacity","","Set write buffer capacity",237,null],[11,"write","","Send item to a sink.",237,null],[11,"handle","","`SpawnHandle` for this writer",237,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"new","","",238,{"i":[{"n":"t"},{"n":"u"},{"n":"c"}],"o":{"n":"framedwrite"}}],[11,"from_buffer","","",238,{"i":[{"n":"t"},{"n":"u"},{"n":"bytesmut"},{"n":"c"}],"o":{"n":"framedwrite"}}],[11,"close","","Gracefully close sink",238,null],[11,"closed","","Check if sink is closed",238,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"set_buffer_capacity","","Set write buffer capacity",238,null],[11,"write","","Write item",238,null],[11,"handle","","`SpawnHandle` for this writer",238,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"start","actix_web::actix::actix","Start new supervised actor in current tokio runtime.",239,{"i":[{"n":"f"}],"o":{"n":"addr"}}],[11,"start_in_arbiter","","Start new supervised actor in arbiter's thread.",239,{"i":[{"n":"addr"},{"n":"f"}],"o":{"n":"addr"}}],[11,"new","","",214,{"i":[{"n":"addresssender"}],"o":{"n":"addr"}}],[11,"connected","","Indicates if actor is still alive",214,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"do_send","","Send message unconditionally",214,null],[11,"try_send","","Try send message",214,{"i":[{"n":"self"},{"n":"m"}],"o":{"g":["senderror"],"n":"result"}}],[11,"send","","Send asynchronous message and wait for response.",214,{"i":[{"n":"self"},{"n":"m"}],"o":{"n":"request"}}],[11,"recipient","","Get `Recipient` for specific message type",214,{"i":[{"n":"self"}],"o":{"n":"recipient"}}],[11,"into_inner","","",125,{"i":[{"n":"self"}],"o":{"n":"t"}}],[11,"new","actix_web::actix::actix::dev","Create new ContextParts instance",240,{"i":[{"n":"addresssenderproducer"}],"o":{"n":"contextparts"}}],[11,"stop","","Initiate stop process for actor execution",240,null],[11,"terminate","","Terminate actor execution",240,null],[11,"state","","Actor execution state",240,{"i":[{"n":"self"}],"o":{"n":"actorstate"}}],[11,"waiting","","Is context waiting for future completion",240,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"curr_handle","","Handle of the running future",240,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"spawn","","Spawn new future to this context.",240,{"i":[{"n":"self"},{"n":"f"}],"o":{"n":"spawnhandle"}}],[11,"wait","","Spawn new future to this context and wait future completion.",240,null],[11,"cancel_future","","Cancel previously scheduled future.",240,{"i":[{"n":"self"},{"n":"spawnhandle"}],"o":{"n":"bool"}}],[11,"capacity","","",240,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"set_mailbox_capacity","","",240,null],[11,"address","","",240,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"started","","",240,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"new","","",241,{"i":[{"n":"c"},{"n":"a"},{"n":"mailbox"}],"o":{"n":"contextfut"}}],[11,"ctx","","",241,{"i":[{"n":"self"}],"o":{"n":"c"}}],[11,"address","","",241,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"alive","","",241,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"next","","Get next handle",205,{"i":[{"n":"self"}],"o":{"n":"spawnhandle"}}],[11,"reply","","Create response",218,{"i":[{"n":"result"}],"o":{"n":"actorresponse"}}],[11,"async","","Create async response",218,{"i":[{"n":"t"}],"o":{"n":"actorresponse"}}],[11,"get","","Query registry for specific actor. Returns address of the actor. If actor is not registered, starts new actor and return address of newly created actor.",213,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"set","","Add new actor to the registry by address, panic if actor is already running",213,null],[11,"async","","Create async response",217,{"i":[{"n":"t"}],"o":{"n":"response"}}],[11,"reply","","Create response",217,{"i":[{"n":"result"}],"o":{"n":"response"}}],[11,"new","","",208,{"i":[{"n":"addressreceiver"}],"o":{"n":"mailbox"}}],[11,"capacity","","",208,{"i":[{"n":"self"}],"o":{"n":"usize"}}],[11,"set_capacity","","",208,null],[11,"connected","","",208,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"address","","",208,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"sender_producer","","",208,{"i":[{"n":"self"}],"o":{"n":"addresssenderproducer"}}],[11,"poll","","",208,null],[11,"new","","Create new system.",212,{"i":[{"n":"t"}],"o":{"n":"systemrunner"}}],[11,"current","","Get current running system.",212,{"o":{"n":"system"}}],[11,"with_current","","Execute function with system reference.",212,{"i":[{"n":"f"}],"o":{"n":"r"}}],[11,"stop","","Stop the system",212,null],[11,"arbiter","","System arbiter",212,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"registry","","Get current system registry.",212,{"i":[{"n":"self"}],"o":{"n":"systemregistry"}}],[11,"run","","This function will start tokio runtime and will finish once the `System::stop()` message get called. Function `f` get called within tokio runtime context.",212,{"i":[{"n":"f"}],"o":{"n":"i32"}}],[11,"do_send","","Send message",211,{"i":[{"n":"self"},{"n":"m"}],"o":{"g":["senderror"],"n":"result"}}],[11,"try_send","","Try send message",211,{"i":[{"n":"self"},{"n":"m"}],"o":{"g":["senderror"],"n":"result"}}],[11,"send","","Send message and asynchronously wait for response.",211,{"i":[{"n":"self"},{"n":"m"}],"o":{"n":"recipientrequest"}}],[11,"new","","",215,{"i":[{"g":["receiver"],"n":"option"},{"n":"option"}],"o":{"n":"recipientrequest"}}],[11,"timeout","","Set message delivery timeout",215,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"recipientrequest"}}],[11,"get","","Return address of the service. If service actor is not running it get started in the system.",210,{"i":[{"n":"self"}],"o":{"n":"addr"}}],[11,"set","","Add new actor to the registry by address, panic if actor is already running",210,null],[11,"timeout","","Set message delivery timeout",216,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"request"}}],[11,"builder","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",201,{"o":{"n":"builder"}}],[11,"new","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",201,{"i":[{"n":"t"}],"o":{"g":["arbiter"],"n":"addr"}}],[11,"name","","Returns current arbiter's name",201,{"o":{"n":"string"}}],[11,"current","","Returns current arbiter's address",201,{"o":{"g":["arbiter"],"n":"addr"}}],[11,"registry","","This function returns arbiter's registry,",201,{"o":{"n":"registry"}}],[11,"spawn","","Executes a future on the current thread.",201,null],[11,"spawn_fn","","Executes a future on the current thread.",201,null],[11,"start","","Start new arbiter and then start actor in created arbiter. Returns `Addr` of created actor.",201,{"i":[{"n":"f"}],"o":{"n":"addr"}}],[11,"new","","",242,{"i":[{"n":"m"},{"g":["sender"],"n":"option"}],"o":{"n":"envelope"}}],[11,"with_proxy","","",242,{"i":[{"g":["envelopeproxy"],"n":"box"}],"o":{"n":"envelope"}}],[18,"GET","actix_web::http","GET",177,null],[18,"POST","","POST",177,null],[18,"PUT","","PUT",177,null],[18,"DELETE","","DELETE",177,null],[18,"HEAD","","HEAD",177,null],[18,"OPTIONS","","OPTIONS",177,null],[18,"CONNECT","","CONNECT",177,null],[18,"PATCH","","PATCH",177,null],[18,"TRACE","","TRACE",177,null],[11,"from_bytes","","Converts a slice of bytes to an HTTP method.",177,null],[11,"is_safe","","Whether a method is considered \"safe\", meaning the request is essentially read-only.",177,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_idempotent","","Whether a method is considered \"idempotent\", meaning the request has the same result if executed multiple times.",177,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"as_str","","Return a &str representation of the HTTP method",177,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"from_u16","","Converts a u16 to a status code.",160,{"i":[{"n":"u16"}],"o":{"g":["statuscode","invalidstatuscode"],"n":"result"}}],[11,"from_bytes","","Converts a &[u8] to a status code",160,null],[11,"as_u16","","Returns the `u16` corresponding to this `StatusCode`.",160,{"i":[{"n":"self"}],"o":{"n":"u16"}}],[11,"as_str","","Returns a &str representation of the `StatusCode`",160,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"canonical_reason","","Get the standardised `reason-phrase` for this status code.",160,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"is_informational","","Check if status is within 100-199.",160,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_success","","Check if status is within 200-299.",160,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_redirection","","Check if status is within 300-399.",160,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_client_error","","Check if status is within 400-499.",160,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"is_server_error","","Check if status is within 500-599.",160,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[18,"CONTINUE","","100 Continue [RFC7231, Section 6.2.1]",160,null],[18,"SWITCHING_PROTOCOLS","","101 Switching Protocols [RFC7231, Section 6.2.2]",160,null],[18,"PROCESSING","","102 Processing [RFC2518]",160,null],[18,"OK","","200 OK [RFC7231, Section 6.3.1]",160,null],[18,"CREATED","","201 Created [RFC7231, Section 6.3.2]",160,null],[18,"ACCEPTED","","202 Accepted [RFC7231, Section 6.3.3]",160,null],[18,"NON_AUTHORITATIVE_INFORMATION","","203 Non-Authoritative Information [RFC7231, Section 6.3.4]",160,null],[18,"NO_CONTENT","","204 No Content [RFC7231, Section 6.3.5]",160,null],[18,"RESET_CONTENT","","205 Reset Content [RFC7231, Section 6.3.6]",160,null],[18,"PARTIAL_CONTENT","","206 Partial Content [RFC7233, Section 4.1]",160,null],[18,"MULTI_STATUS","","207 Multi-Status [RFC4918]",160,null],[18,"ALREADY_REPORTED","","208 Already Reported [RFC5842]",160,null],[18,"IM_USED","","226 IM Used [RFC3229]",160,null],[18,"MULTIPLE_CHOICES","","300 Multiple Choices [RFC7231, Section 6.4.1]",160,null],[18,"MOVED_PERMANENTLY","","301 Moved Permanently [RFC7231, Section 6.4.2]",160,null],[18,"FOUND","","302 Found [RFC7231, Section 6.4.3]",160,null],[18,"SEE_OTHER","","303 See Other [RFC7231, Section 6.4.4]",160,null],[18,"NOT_MODIFIED","","304 Not Modified [RFC7232, Section 4.1]",160,null],[18,"USE_PROXY","","305 Use Proxy [RFC7231, Section 6.4.5]",160,null],[18,"TEMPORARY_REDIRECT","","307 Temporary Redirect [RFC7231, Section 6.4.7]",160,null],[18,"PERMANENT_REDIRECT","","308 Permanent Redirect [RFC7238]",160,null],[18,"BAD_REQUEST","","400 Bad Request [RFC7231, Section 6.5.1]",160,null],[18,"UNAUTHORIZED","","401 Unauthorized [RFC7235, Section 3.1]",160,null],[18,"PAYMENT_REQUIRED","","402 Payment Required [RFC7231, Section 6.5.2]",160,null],[18,"FORBIDDEN","","403 Forbidden [RFC7231, Section 6.5.3]",160,null],[18,"NOT_FOUND","","404 Not Found [RFC7231, Section 6.5.4]",160,null],[18,"METHOD_NOT_ALLOWED","","405 Method Not Allowed [RFC7231, Section 6.5.5]",160,null],[18,"NOT_ACCEPTABLE","","406 Not Acceptable [RFC7231, Section 6.5.6]",160,null],[18,"PROXY_AUTHENTICATION_REQUIRED","","407 Proxy Authentication Required [RFC7235, Section 3.2]",160,null],[18,"REQUEST_TIMEOUT","","408 Request Timeout [RFC7231, Section 6.5.7]",160,null],[18,"CONFLICT","","409 Conflict [RFC7231, Section 6.5.8]",160,null],[18,"GONE","","410 Gone [RFC7231, Section 6.5.9]",160,null],[18,"LENGTH_REQUIRED","","411 Length Required [RFC7231, Section 6.5.10]",160,null],[18,"PRECONDITION_FAILED","","412 Precondition Failed [RFC7232, Section 4.2]",160,null],[18,"PAYLOAD_TOO_LARGE","","413 Payload Too Large [RFC7231, Section 6.5.11]",160,null],[18,"URI_TOO_LONG","","414 URI Too Long [RFC7231, Section 6.5.12]",160,null],[18,"UNSUPPORTED_MEDIA_TYPE","","415 Unsupported Media Type [RFC7231, Section 6.5.13]",160,null],[18,"RANGE_NOT_SATISFIABLE","","416 Range Not Satisfiable [RFC7233, Section 4.4]",160,null],[18,"EXPECTATION_FAILED","","417 Expectation Failed [RFC7231, Section 6.5.14]",160,null],[18,"IM_A_TEAPOT","","418 I'm a teapot [curiously not registered by IANA but RFC2324]",160,null],[18,"MISDIRECTED_REQUEST","","421 Misdirected Request RFC7540, Section 9.1.2",160,null],[18,"UNPROCESSABLE_ENTITY","","422 Unprocessable Entity [RFC4918]",160,null],[18,"LOCKED","","423 Locked [RFC4918]",160,null],[18,"FAILED_DEPENDENCY","","424 Failed Dependency [RFC4918]",160,null],[18,"UPGRADE_REQUIRED","","426 Upgrade Required [RFC7231, Section 6.5.15]",160,null],[18,"PRECONDITION_REQUIRED","","428 Precondition Required [RFC6585]",160,null],[18,"TOO_MANY_REQUESTS","","429 Too Many Requests [RFC6585]",160,null],[18,"REQUEST_HEADER_FIELDS_TOO_LARGE","","431 Request Header Fields Too Large [RFC6585]",160,null],[18,"UNAVAILABLE_FOR_LEGAL_REASONS","","451 Unavailable For Legal Reasons [RFC7725]",160,null],[18,"INTERNAL_SERVER_ERROR","","500 Internal Server Error [RFC7231, Section 6.6.1]",160,null],[18,"NOT_IMPLEMENTED","","501 Not Implemented [RFC7231, Section 6.6.2]",160,null],[18,"BAD_GATEWAY","","502 Bad Gateway [RFC7231, Section 6.6.3]",160,null],[18,"SERVICE_UNAVAILABLE","","503 Service Unavailable [RFC7231, Section 6.6.4]",160,null],[18,"GATEWAY_TIMEOUT","","504 Gateway Timeout [RFC7231, Section 6.6.5]",160,null],[18,"HTTP_VERSION_NOT_SUPPORTED","","505 HTTP Version Not Supported [RFC7231, Section 6.6.6]",160,null],[18,"VARIANT_ALSO_NEGOTIATES","","506 Variant Also Negotiates [RFC2295]",160,null],[18,"INSUFFICIENT_STORAGE","","507 Insufficient Storage [RFC4918]",160,null],[18,"LOOP_DETECTED","","508 Loop Detected [RFC5842]",160,null],[18,"NOT_EXTENDED","","510 Not Extended [RFC2774]",160,null],[18,"NETWORK_AUTHENTICATION_REQUIRED","","511 Network Authentication Required [RFC6585]",160,null],[18,"HTTP_09","","`HTTP/0.9`",158,null],[18,"HTTP_10","","`HTTP/1.0`",158,null],[18,"HTTP_11","","`HTTP/1.1`",158,null],[18,"HTTP_2","","`HTTP/2.0`",158,null],[11,"new","","Creates a new `Cookie` with the given name and value.",156,{"i":[{"n":"n"},{"n":"v"}],"o":{"n":"cookie"}}],[11,"named","","Creates a new `Cookie` with the given name and an empty value.",156,{"i":[{"n":"n"}],"o":{"n":"cookie"}}],[11,"build","","Creates a new `CookieBuilder` instance from the given key and value strings.",156,{"i":[{"n":"n"},{"n":"v"}],"o":{"n":"cookiebuilder"}}],[11,"parse","","Parses a `Cookie` from the given HTTP cookie header value string. Does not perform any percent-decoding.",156,{"i":[{"n":"s"}],"o":{"g":["cookie","parseerror"],"n":"result"}}],[11,"parse_encoded","","Parses a `Cookie` from the given HTTP cookie header value string where the name and value fields are percent-encoded. Percent-decodes the name/value fields.",156,{"i":[{"n":"s"}],"o":{"g":["cookie","parseerror"],"n":"result"}}],[11,"encoded","","Wraps `self` in an `EncodedCookie`: a cost-free wrapper around `Cookie` whose `Display` implementation percent-encodes the name and value of the wrapped `Cookie`.",156,{"i":[{"n":"self"}],"o":{"n":"encodedcookie"}}],[11,"into_owned","","Converts `self` into a `Cookie` with a static lifetime. This method results in at most one allocation.",156,{"i":[{"n":"self"}],"o":{"n":"cookie"}}],[11,"name","","Returns the name of `self`.",156,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"value","","Returns the value of `self`.",156,{"i":[{"n":"self"}],"o":{"n":"str"}}],[11,"name_value","","Returns the name and value of `self` as a tuple of `(name, value)`.",156,null],[11,"http_only","","Returns whether this cookie was marked `HttpOnly` or not.",156,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"secure","","Returns whether this cookie was marked `Secure` or not.",156,{"i":[{"n":"self"}],"o":{"n":"bool"}}],[11,"same_site","","Returns the `SameSite` attribute of this cookie if one was specified.",156,{"i":[{"n":"self"}],"o":{"g":["samesite"],"n":"option"}}],[11,"max_age","","Returns the specified max-age of the cookie if one was specified.",156,{"i":[{"n":"self"}],"o":{"g":["duration"],"n":"option"}}],[11,"path","","Returns the `Path` of the cookie if one was specified.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"domain","","Returns the `Domain` of the cookie if one was specified.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"expires","","Returns the `Expires` time of the cookie if one was specified.",156,{"i":[{"n":"self"}],"o":{"g":["tm"],"n":"option"}}],[11,"set_name","","Sets the name of `self` to `name`.",156,null],[11,"set_value","","Sets the value of `self` to `value`.",156,null],[11,"set_http_only","","Sets the value of `http_only` in `self` to `value`.",156,null],[11,"set_secure","","Sets the value of `secure` in `self` to `value`.",156,null],[11,"set_same_site","","Sets the value of `same_site` in `self` to `value`.",156,null],[11,"set_max_age","","Sets the value of `max_age` in `self` to `value`.",156,null],[11,"set_path","","Sets the `path` of `self` to `path`.",156,null],[11,"set_domain","","Sets the `domain` of `self` to `domain`.",156,null],[11,"set_expires","","Sets the expires field of `self` to `time`.",156,null],[11,"make_permanent","","Makes `self` a \"permanent\" cookie by extending its expiration and max age 20 years into the future.",156,null],[11,"name_raw","","Returns the name of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"value_raw","","Returns the value of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"path_raw","","Returns the `Path` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Path`, or if the `Path` has changed since parsing, returns `None`.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"domain_raw","","Returns the `Domain` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Domain`, or if the `Domain` has changed since parsing, returns `None`.",156,{"i":[{"n":"self"}],"o":{"g":["str"],"n":"option"}}],[11,"new","","Creates a new `CookieBuilder` instance from the given name and value.",157,{"i":[{"n":"n"},{"n":"v"}],"o":{"n":"cookiebuilder"}}],[11,"expires","","Sets the `expires` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"tm"}],"o":{"n":"cookiebuilder"}}],[11,"max_age","","Sets the `max_age` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"duration"}],"o":{"n":"cookiebuilder"}}],[11,"domain","","Sets the `domain` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"d"}],"o":{"n":"cookiebuilder"}}],[11,"path","","Sets the `path` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"p"}],"o":{"n":"cookiebuilder"}}],[11,"secure","","Sets the `secure` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"bool"}],"o":{"n":"cookiebuilder"}}],[11,"http_only","","Sets the `http_only` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"bool"}],"o":{"n":"cookiebuilder"}}],[11,"same_site","","Sets the `same_site` field in the cookie being built.",157,{"i":[{"n":"self"},{"n":"samesite"}],"o":{"n":"cookiebuilder"}}],[11,"permanent","","Makes the cookie being built 'permanent' by extending its expiration and max age 20 years into the future.",157,{"i":[{"n":"self"}],"o":{"n":"cookiebuilder"}}],[11,"finish","","Finishes building and returns the built `Cookie`.",157,{"i":[{"n":"self"}],"o":{"n":"cookie"}}]],"paths":[[3,"Form"],[3,"Json"],[4,"Binary"],[4,"Body"],[4,"Either"],[3,"App"],[3,"HttpContext"],[3,"Extensions"],[3,"Path"],[3,"Query"],[3,"HttpResponse"],[3,"State"],[3,"HttpRequest"],[3,"Scope"],[3,"ClientConnectorStats"],[4,"ClientConnectorError"],[4,"SendRequestError"],[3,"Connect"],[3,"Pause"],[3,"ClientConnector"],[3,"Connection"],[3,"SendRequest"],[3,"ClientRequest"],[3,"ClientRequestBuilder"],[3,"ClientResponse"],[4,"UrlParseError"],[4,"CookieParseError"],[4,"ParseError"],[4,"PayloadError"],[4,"MultipartError"],[4,"ExpectError"],[4,"ContentTypeError"],[4,"UrlencodedError"],[4,"JsonPayloadError"],[4,"ReadlinesError"],[4,"UriSegmentError"],[4,"UrlGenerationError"],[4,"StaticFileError"],[8,"ResponseError"],[3,"Error"],[3,"InternalError"],[3,"Directory"],[8,"StaticFileConfig"],[3,"DefaultConfig"],[3,"NamedFile"],[3,"ChunkedReadFile"],[3,"StaticFiles"],[4,"Started"],[4,"Response"],[4,"Finished"],[3,"Logger"],[4,"CorsError"],[4,"AllOrSome"],[3,"Cors"],[3,"CorsBuilder"],[4,"CsrfError"],[3,"CsrfFilter"],[3,"DefaultHeaders"],[3,"ErrorHandlers"],[8,"RequestIdentity"],[8,"Identity"],[8,"IdentityPolicy"],[3,"IdentityService"],[3,"CookieIdentityPolicy"],[4,"CookieSessionError"],[8,"RequestSession"],[3,"Session"],[3,"SessionStorage"],[3,"CookieSessionBackend"],[8,"Middleware"],[4,"MultipartItem"],[3,"Multipart"],[3,"Field"],[8,"Predicate"],[3,"AnyPredicate"],[3,"AllPredicate"],[3,"StopServer"],[4,"KeepAlive"],[3,"Request"],[3,"ServerSettings"],[3,"HttpServer"],[8,"HttpHandler"],[8,"HttpHandlerTask"],[8,"IntoHttpHandler"],[3,"TestServer"],[3,"TestServerBuilder"],[3,"TestApp"],[3,"TestRequest"],[3,"CloseReason"],[4,"ClientError"],[4,"CloseCode"],[4,"OpCode"],[4,"ProtocolError"],[4,"HandshakeError"],[4,"Message"],[3,"Client"],[3,"ClientHandshake"],[3,"ClientReader"],[3,"ClientWriter"],[3,"WebsocketContext"],[3,"Frame"],[3,"FramedMessage"],[8,"WsWriter"],[3,"WsStream"],[3,"ConnectAddr"],[4,"ResolverError"],[4,"SignalType"],[3,"Signal"],[3,"Subscribe"],[8,"ActorFuture"],[8,"ActorStream"],[8,"IntoActorFuture"],[8,"WrapFuture"],[8,"WrapStream"],[4,"Either"],[3,"StopArbiter"],[8,"Actor"],[4,"Running"],[4,"ActorState"],[8,"ContextFutureSpawner"],[8,"Supervised"],[4,"MailboxError"],[3,"MessageResult"],[8,"WriteHandler"],[8,"SystemService"],[4,"SendError"],[8,"ActorContext"],[8,"StreamHandler"],[8,"AsyncContextParts"],[8,"ResponseChannel"],[8,"ArbiterService"],[8,"Message"],[8,"ToEnvelope"],[8,"AsyncContext"],[8,"MessageResponse"],[8,"Handler"],[4,"ResourceType"],[8,"Handler"],[8,"FromParam"],[4,"ContentEncoding"],[4,"ConnectionType"],[4,"Entry"],[3,"LanguageTag"],[3,"ExtendedValue"],[3,"ContentDisposition"],[4,"DispositionType"],[4,"DispositionParam"],[4,"Charset"],[8,"AsyncResponder"],[8,"FromRequest"],[8,"Responder"],[8,"HttpMessage"],[3,"Drain"],[3,"FormConfig"],[3,"PayloadConfig"],[3,"AsyncResult"],[3,"Cookie"],[3,"CookieBuilder"],[3,"Version"],[3,"HeaderValue"],[3,"StatusCode"],[3,"HeaderMap"],[3,"OccupiedEntry"],[3,"GetAll"],[3,"HeaderName"],[3,"Drain"],[3,"Iter"],[3,"ValueDrain"],[3,"Keys"],[3,"ValueIterMut"],[3,"ValueIter"],[3,"Values"],[3,"IntoIter"],[3,"ToStrError"],[3,"InvalidHeaderNameBytes"],[3,"InvalidHeaderName"],[3,"InvalidHeaderValue"],[3,"Method"],[3,"InvalidHeaderValueBytes"],[3,"VacantEntry"],[3,"StreamAndThen"],[3,"StreamWrap"],[3,"StreamMap"],[3,"StreamTimeout"],[3,"StreamMapErr"],[3,"StreamThen"],[3,"SyncContext"],[3,"Context"],[3,"FutureResult"],[3,"AndThen"],[3,"TcpConnector"],[3,"MapErr"],[3,"FromErr"],[3,"Map"],[3,"Then"],[3,"FutureWrap"],[3,"Timeout"],[3,"StreamFold"],[3,"DropErr"],[3,"StreamFinish"],[3,"Resolver"],[3,"Arbiter"],[3,"ProcessSignals"],[3,"DefaultSignalsHandler"],[3,"Finish"],[3,"SpawnHandle"],[3,"Resolve"],[3,"Connect"],[3,"Mailbox"],[3,"Condition"],[3,"SystemRegistry"],[3,"Recipient"],[3,"System"],[3,"Registry"],[3,"Addr"],[3,"RecipientRequest"],[3,"Request"],[3,"Response"],[3,"ActorResponse"],[3,"NormalizePath"],[3,"MessageBody"],[3,"UrlEncoded"],[3,"HttpResponseBuilder"],[3,"ConnectionInfo"],[3,"JsonConfig"],[3,"JsonBody"],[3,"Params"],[3,"Payload"],[3,"PayloadBuffer"],[3,"Resource"],[3,"Route"],[3,"ResourceInfo"],[3,"Router"],[3,"ResourceDef"],[3,"StartActor"],[3,"Execute"],[3,"SyncArbiter"],[3,"Writer"],[3,"FramedWrite"],[3,"Supervisor"],[3,"ContextParts"],[3,"ContextFut"],[3,"Envelope"]]}; +var N = null;var searchIndex = {}; +searchIndex["actix_web"]={"doc":"Actix web is a small, pragmatic, and extremely fast web framework for Rust.","items":[[3,"App","actix_web","Structure that follows the builder pattern for building application instances.",N,N],[3,"HttpContext","","Execution context for http actors",N,N],[3,"Extensions","","A type map of request extensions.",N,N],[3,"Form","","Extract typed information from the request's body.",N,N],[12,"0","","",0,N],[3,"Path","","Extract typed information from the request's path.",N,N],[3,"Query","","Extract typed information from from the request's query.",N,N],[3,"State","","Access an application state",N,N],[3,"HttpRequest","","An HTTP Request",N,N],[3,"HttpResponse","","An HTTP Response",N,N],[3,"Json","","Json helper",N,N],[12,"0","","",1,N],[3,"Scope","","Resources scope",N,N],[3,"Request","","Request's context",N,N],[4,"Binary","","Represents various types of binary body. `Content-Length` header is set to length of the body.",N,N],[13,"Bytes","","Bytes body",2,N],[13,"Slice","","Static slice",2,N],[13,"SharedVec","","Shared vec body",2,N],[4,"Body","","Represents various types of http message body.",N,N],[13,"Empty","","Empty response. `Content-Length` header is set to `0`",3,N],[13,"Binary","","Specific response body.",3,N],[13,"Streaming","","Unspecified streaming response. Developer is responsible for setting right `Content-Length` or `Transfer-Encoding` headers.",3,N],[13,"Actor","","Special body type for actor response.",3,N],[4,"Either","","Combines two different responder types into a single type",N,N],[13,"A","","First branch of the type",4,N],[13,"B","","Second branch of the type",4,N],[11,"new","","Create application with empty state. Application can be configured with a builder-like pattern.",5,[[],["app"]]],[11,"default","","",5,[[],["self"]]],[11,"with_state","","Create application with specified state. Application can be configured with a builder-like pattern.",5,[[["s"]],["app"]]],[11,"state","","Get reference to the application state",5,[[["self"]],["s"]]],[11,"prefix","","Set application prefix.",5,[[["self"],["p"]],["app"]]],[11,"filter","","Add match predicate to application.",5,[[["self"],["t"]],["app"]]],[11,"route","","Configure route for a specific path.",5,[[["self"],["str"],["method"],["f"]],["app"]]],[11,"scope","","Configure scope for common root path.",5,[[["self"],["str"],["f"]],["app"]]],[11,"resource","","Configure resource for a specific path.",5,[[["self"],["str"],["f"]],["app"]]],[11,"default_resource","","Default resource to be used if no matching route could be found.",5,[[["self"],["f"]],["app"]]],[11,"default_encoding","","Set default content encoding. `ContentEncoding::Auto` is set by default.",5,[[["self"],["contentencoding"]],["app"]]],[11,"external_resource","","Register an external resource.",5,[[["self"],["t"],["u"]],["app"]]],[11,"handler","","Configure handler for specific path prefix.",5,[[["self"],["str"],["h"]],["app"]]],[11,"middleware","","Register a middleware.",5,[[["self"],["m"]],["app"]]],[11,"configure","","Run external configuration as part of the application building process",5,[[["self"],["f"]],["app"]]],[11,"finish","","Finish application configuration and create `HttpHandler` object.",5,[[["self"]],["httpapplication"]]],[11,"boxed","","Convenience method for creating `Box` instances.",5,[[["self"]],["box",["httphandler"]]]],[11,"into_handler","","",5,[[["self"]],["httpapplication"]]],[11,"fmt","","",2,[[["self"],["formatter"]],["result"]]],[11,"eq","","",2,[[["self"],["binary"]],["bool"]]],[11,"ne","","",2,[[["self"],["binary"]],["bool"]]],[11,"is_streaming","","Does this body streaming.",3,[[["self"]],["bool"]]],[11,"is_binary","","Is this binary body.",3,[[["self"]],["bool"]]],[11,"is_empty","","Is this binary empy.",3,[[["self"]],["bool"]]],[11,"from_slice","","Create body from slice (copy)",3,N],[11,"eq","","",3,[[["self"],["body"]],["bool"]]],[11,"fmt","","",3,[[["self"],["formatter"]],["result"]]],[11,"from","","",3,[[["t"]],["body"]]],[11,"from","","",3,[[["box",["actorhttpcontext"]]],["body"]]],[11,"is_empty","","Returns `true` if body is empty",2,[[["self"]],["bool"]]],[11,"len","","Length of body in bytes",2,[[["self"]],["usize"]]],[11,"from_slice","","Create binary body from slice",2,N],[11,"take","","Convert Binary to a Bytes instance",2,[[["self"]],["bytes"]]],[11,"clone","","",2,[[["self"]],["binary"]]],[11,"into","","",2,[[["self"]],["bytes"]]],[11,"from","","",2,[[["str"]],["binary"]]],[11,"from","","",2,N],[11,"from","","",2,[[["vec",["u8"]]],["binary"]]],[11,"from","","",2,[[["string"]],["binary"]]],[11,"from","","",2,[[["string"]],["binary"]]],[11,"from","","",2,[[["bytes"]],["binary"]]],[11,"from","","",2,[[["bytesmut"]],["binary"]]],[11,"from","","",2,[[["arc",["string"]]],["binary"]]],[11,"from","","",2,[[["arc"]],["binary"]]],[11,"from","","",2,[[["arc",["vec"]]],["binary"]]],[11,"from","","",2,[[["arc"]],["binary"]]],[11,"as_ref","","",2,N],[11,"respond_to","","",2,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"stop","","",6,[[["self"]]]],[11,"terminate","","",6,[[["self"]]]],[11,"state","","",6,[[["self"]],["actorstate"]]],[11,"spawn","","",6,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",6,[[["self"],["f"]]]],[11,"cancel_future","","",6,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",6,[[["self"]],["addr"]]],[11,"create","","Create a new HTTP Context from a request and an actor",6,[[["httprequest"],["a"]],["body"]]],[11,"with_factory","","Create a new HTTP Context",6,[[["httprequest"],["f"]],["body"]]],[11,"state","","Shared application state",6,[[["self"]],["s"]]],[11,"request","","Incoming request",6,[[["self"]],["httprequest"]]],[11,"write","","Write payload",6,[[["self"],["b"]]]],[11,"write_eof","","Indicate end of streaming payload. Also this method calls `Self::close`.",6,[[["self"]]]],[11,"drain","","Returns drain future",6,[[["self"]],["drain"]]],[11,"connected","","Check if connection still open",6,[[["self"]],["bool"]]],[11,"handle","","Handle of the running future",6,[[["self"]],["spawnhandle"]]],[11,"parts","","",6,[[["self"]],["contextparts"]]],[11,"pack","","",6,[[["m"],["option",["sender"]]],["envelope"]]],[11,"insert","","Insert a type into this `Extensions`.",7,[[["self"],["t"]]]],[11,"get","","Get a reference to a type previously inserted on this `Extensions`.",7,[[["self"]],["option"]]],[11,"get_mut","","Get a mutable reference to a type previously inserted on this `Extensions`.",7,[[["self"]],["option"]]],[11,"remove","","Remove a type from this `Extensions`.",7,[[["self"]],["option"]]],[11,"clear","","Clear the `Extensions` of all inserted extensions.",7,[[["self"]]]],[11,"fmt","","",7,[[["self"],["formatter"]],["result"]]],[11,"eq","","",8,[[["self"],["path"]],["bool"]]],[11,"ne","","",8,[[["self"],["path"]],["bool"]]],[11,"partial_cmp","","",8,[[["self"],["path"]],["option",["ordering"]]]],[11,"lt","","",8,[[["self"],["path"]],["bool"]]],[11,"le","","",8,[[["self"],["path"]],["bool"]]],[11,"gt","","",8,[[["self"],["path"]],["bool"]]],[11,"ge","","",8,[[["self"],["path"]],["bool"]]],[11,"cmp","","",8,[[["self"],["path"]],["ordering"]]],[11,"as_ref","","",8,[[["self"]],["t"]]],[11,"deref","","",8,[[["self"]],["t"]]],[11,"deref_mut","","",8,[[["self"]],["t"]]],[11,"into_inner","","Deconstruct to an inner value",8,[[["self"]],["t"]]],[11,"from_request","","",8,N],[11,"fmt","","",8,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",8,[[["self"],["formatter"]],["result"]]],[11,"eq","","",9,[[["self"],["query"]],["bool"]]],[11,"ne","","",9,[[["self"],["query"]],["bool"]]],[11,"partial_cmp","","",9,[[["self"],["query"]],["option",["ordering"]]]],[11,"lt","","",9,[[["self"],["query"]],["bool"]]],[11,"le","","",9,[[["self"],["query"]],["bool"]]],[11,"gt","","",9,[[["self"],["query"]],["bool"]]],[11,"ge","","",9,[[["self"],["query"]],["bool"]]],[11,"cmp","","",9,[[["self"],["query"]],["ordering"]]],[11,"deref","","",9,[[["self"]],["t"]]],[11,"deref_mut","","",9,[[["self"]],["t"]]],[11,"into_inner","","Deconstruct to a inner value",9,[[["self"]],["t"]]],[11,"from_request","","",9,N],[11,"fmt","","",9,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",9,[[["self"],["formatter"]],["result"]]],[11,"eq","","",0,[[["self"],["form"]],["bool"]]],[11,"ne","","",0,[[["self"],["form"]],["bool"]]],[11,"partial_cmp","","",0,[[["self"],["form"]],["option",["ordering"]]]],[11,"lt","","",0,[[["self"],["form"]],["bool"]]],[11,"le","","",0,[[["self"],["form"]],["bool"]]],[11,"gt","","",0,[[["self"],["form"]],["bool"]]],[11,"ge","","",0,[[["self"],["form"]],["bool"]]],[11,"cmp","","",0,[[["self"],["form"]],["ordering"]]],[11,"into_inner","","Deconstruct to an inner value",0,[[["self"]],["t"]]],[11,"deref","","",0,[[["self"]],["t"]]],[11,"deref_mut","","",0,[[["self"]],["t"]]],[11,"from_request","","",0,N],[11,"fmt","","",0,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",0,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",4,[[["self"],["formatter"]],["result"]]],[11,"respond_to","","",4,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"poll","","",4,[[["self"]],["poll"]]],[11,"respond_to","","",10,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"deref","","",11,[[["self"]],["s"]]],[11,"from_request","","",11,N],[11,"Ok","","",10,[[],["httpresponsebuilder"]]],[11,"Created","","",10,[[],["httpresponsebuilder"]]],[11,"Accepted","","",10,[[],["httpresponsebuilder"]]],[11,"NonAuthoritativeInformation","","",10,[[],["httpresponsebuilder"]]],[11,"NoContent","","",10,[[],["httpresponsebuilder"]]],[11,"ResetContent","","",10,[[],["httpresponsebuilder"]]],[11,"PartialContent","","",10,[[],["httpresponsebuilder"]]],[11,"MultiStatus","","",10,[[],["httpresponsebuilder"]]],[11,"AlreadyReported","","",10,[[],["httpresponsebuilder"]]],[11,"MultipleChoices","","",10,[[],["httpresponsebuilder"]]],[11,"MovedPermanenty","","",10,[[],["httpresponsebuilder"]]],[11,"MovedPermanently","","",10,[[],["httpresponsebuilder"]]],[11,"Found","","",10,[[],["httpresponsebuilder"]]],[11,"SeeOther","","",10,[[],["httpresponsebuilder"]]],[11,"NotModified","","",10,[[],["httpresponsebuilder"]]],[11,"UseProxy","","",10,[[],["httpresponsebuilder"]]],[11,"TemporaryRedirect","","",10,[[],["httpresponsebuilder"]]],[11,"PermanentRedirect","","",10,[[],["httpresponsebuilder"]]],[11,"BadRequest","","",10,[[],["httpresponsebuilder"]]],[11,"NotFound","","",10,[[],["httpresponsebuilder"]]],[11,"Unauthorized","","",10,[[],["httpresponsebuilder"]]],[11,"PaymentRequired","","",10,[[],["httpresponsebuilder"]]],[11,"Forbidden","","",10,[[],["httpresponsebuilder"]]],[11,"MethodNotAllowed","","",10,[[],["httpresponsebuilder"]]],[11,"NotAcceptable","","",10,[[],["httpresponsebuilder"]]],[11,"ProxyAuthenticationRequired","","",10,[[],["httpresponsebuilder"]]],[11,"RequestTimeout","","",10,[[],["httpresponsebuilder"]]],[11,"Conflict","","",10,[[],["httpresponsebuilder"]]],[11,"Gone","","",10,[[],["httpresponsebuilder"]]],[11,"LengthRequired","","",10,[[],["httpresponsebuilder"]]],[11,"PreconditionFailed","","",10,[[],["httpresponsebuilder"]]],[11,"PayloadTooLarge","","",10,[[],["httpresponsebuilder"]]],[11,"UriTooLong","","",10,[[],["httpresponsebuilder"]]],[11,"UnsupportedMediaType","","",10,[[],["httpresponsebuilder"]]],[11,"RangeNotSatisfiable","","",10,[[],["httpresponsebuilder"]]],[11,"ExpectationFailed","","",10,[[],["httpresponsebuilder"]]],[11,"InternalServerError","","",10,[[],["httpresponsebuilder"]]],[11,"NotImplemented","","",10,[[],["httpresponsebuilder"]]],[11,"BadGateway","","",10,[[],["httpresponsebuilder"]]],[11,"ServiceUnavailable","","",10,[[],["httpresponsebuilder"]]],[11,"GatewayTimeout","","",10,[[],["httpresponsebuilder"]]],[11,"VersionNotSupported","","",10,[[],["httpresponsebuilder"]]],[11,"VariantAlsoNegotiates","","",10,[[],["httpresponsebuilder"]]],[11,"InsufficientStorage","","",10,[[],["httpresponsebuilder"]]],[11,"LoopDetected","","",10,[[],["httpresponsebuilder"]]],[11,"headers","","",12,[[["self"]],["headermap"]]],[11,"payload","","",12,[[["self"]],["payload"]]],[11,"deref","","",12,[[["self"]],["request"]]],[11,"state","","Shared application state",12,[[["self"]],["s"]]],[11,"request","","Server request",12,[[["self"]],["request"]]],[11,"extensions","","Request extensions",12,[[["self"]],["ref",["extensions"]]]],[11,"extensions_mut","","Mutable reference to a the request's extensions",12,[[["self"]],["refmut",["extensions"]]]],[11,"response","","Create http response",12,[[["self"],["statuscode"],["body"]],["httpresponse"]]],[11,"build_response","","Create http response builder",12,[[["self"],["statuscode"]],["httpresponsebuilder"]]],[11,"uri","","Read the Request Uri.",12,[[["self"]],["uri"]]],[11,"method","","Read the Request method.",12,[[["self"]],["method"]]],[11,"version","","Read the Request Version.",12,[[["self"]],["version"]]],[11,"path","","The target path of this Request.",12,[[["self"]],["str"]]],[11,"connection_info","","Get ConnectionInfo for the correct request.",12,[[["self"]],["ref",["connectioninfo"]]]],[11,"url_for","","Generate url for named resource",12,[[["self"],["str"],["u"]],["result",["url","urlgenerationerror"]]]],[11,"url_for_static","","Generate url for named resource",12,[[["self"],["str"]],["result",["url","urlgenerationerror"]]]],[11,"resource","","This method returns reference to current `RouteInfo` object.",12,[[["self"]],["resourceinfo"]]],[11,"peer_addr","","Peer socket address",12,[[["self"]],["option",["socketaddr"]]]],[11,"query","","url query parameters.",12,[[["self"]],["ref",["hashmap"]]]],[11,"query_string","","The query string in the URL.",12,[[["self"]],["str"]]],[11,"cookies","","Load request cookies.",12,[[["self"]],["result",["ref","cookieparseerror"]]]],[11,"cookie","","Return request cookie.",12,[[["self"],["str"]],["option",["cookie"]]]],[11,"match_info","","Get a reference to the Params object.",12,[[["self"]],["params"]]],[11,"set_read_buffer_capacity","","Set read buffer capacity",12,[[["self"],["usize"]]]],[11,"drop","","",12,[[["self"]]]],[11,"clone","","",12,[[["self"]],["httprequest"]]],[11,"from_request","","",12,N],[11,"fmt","","",12,[[["self"],["formatter"]],["result"]]],[11,"build","","Create http response builder with specific status.",10,[[["statuscode"]],["httpresponsebuilder"]]],[11,"build_from","","Create http response builder",10,[[["t"]],["httpresponsebuilder"]]],[11,"new","","Constructs a response",10,[[["statuscode"]],["httpresponse"]]],[11,"with_body","","Constructs a response with body",10,[[["statuscode"],["b"]],["httpresponse"]]],[11,"from_error","","Constructs an error response",10,[[["error"]],["httpresponse"]]],[11,"into_builder","","Convert `HttpResponse` to a `HttpResponseBuilder`",10,[[["self"]],["httpresponsebuilder"]]],[11,"error","","The source `error` for this response",10,[[["self"]],["option",["error"]]]],[11,"version","","Get the HTTP version of this response",10,[[["self"]],["option",["version"]]]],[11,"headers","","Get the headers from the response",10,[[["self"]],["headermap"]]],[11,"headers_mut","","Get a mutable reference to the headers",10,[[["self"]],["headermap"]]],[11,"cookies","","Get an iterator for the cookies set by this response",10,[[["self"]],["cookieiter"]]],[11,"add_cookie","","Add a cookie to this response",10,[[["self"],["cookie"]],["result",["httperror"]]]],[11,"del_cookie","","Remove all cookies with the given name from this response. Returns the number of cookies removed.",10,[[["self"],["str"]],["usize"]]],[11,"status","","Get the response status code",10,[[["self"]],["statuscode"]]],[11,"status_mut","","Set the `StatusCode` for this response",10,[[["self"]],["statuscode"]]],[11,"reason","","Get custom reason for the response",10,[[["self"]],["str"]]],[11,"set_reason","","Set the custom reason for the response",10,[[["self"],["str"]],["self"]]],[11,"set_connection_type","","Set connection type",10,[[["self"],["connectiontype"]],["self"]]],[11,"upgrade","","Connection upgrade status",10,[[["self"]],["bool"]]],[11,"keep_alive","","Keep-alive status for this connection",10,[[["self"]],["option",["bool"]]]],[11,"chunked","","is chunked encoding enabled",10,[[["self"]],["option",["bool"]]]],[11,"content_encoding","","Content encoding",10,[[["self"]],["option",["contentencoding"]]]],[11,"set_content_encoding","","Set content encoding",10,[[["self"],["contentencoding"]],["self"]]],[11,"body","","Get body os this response",10,[[["self"]],["body"]]],[11,"set_body","","Set a body",10,[[["self"],["b"]]]],[11,"replace_body","","Set a body and return previous body value",10,[[["self"],["b"]],["body"]]],[11,"response_size","","Size of response in bytes, excluding HTTP headers",10,[[["self"]],["u64"]]],[11,"write_buffer_capacity","","Set write buffer capacity",10,[[["self"]],["usize"]]],[11,"set_write_buffer_capacity","","Set write buffer capacity",10,[[["self"],["usize"]]]],[11,"fmt","","",10,[[["self"],["formatter"]],["result"]]],[11,"from","","",10,[[["result"]],["self"]]],[11,"from","","",10,[[["httpresponsebuilder"]],["self"]]],[11,"from","","",10,[[["str"]],["self"]]],[11,"from","","",10,N],[11,"from","","",10,[[["string"]],["self"]]],[11,"from","","",10,[[["string"]],["self"]]],[11,"from","","",10,[[["bytes"]],["self"]]],[11,"from","","",10,[[["bytesmut"]],["self"]]],[11,"into_inner","","Deconstruct to an inner value",1,[[["self"]],["t"]]],[11,"deref","","",1,[[["self"]],["t"]]],[11,"deref_mut","","",1,[[["self"]],["t"]]],[11,"fmt","","",1,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",1,[[["self"],["formatter"]],["result"]]],[11,"respond_to","","",1,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"from_request","","",1,N],[11,"new","","Create a new scope",13,[[["str"]],["scope"]]],[11,"filter","","Add match predicate to scope.",13,[[["self"],["t"]],["self"]]],[11,"with_state","","Create nested scope with new state.",13,[[["self"],["str"],["t"],["f"]],["scope"]]],[11,"nested","","Create nested scope.",13,[[["self"],["str"],["f"]],["scope"]]],[11,"route","","Configure route for a specific path.",13,[[["self"],["str"],["method"],["f"]],["scope"]]],[11,"resource","","Configure resource for a specific path.",13,[[["self"],["str"],["f"]],["scope"]]],[11,"default_resource","","Default resource to be used if no matching route could be found.",13,[[["self"],["f"]],["scope"]]],[11,"middleware","","Register a scope middleware",13,[[["self"],["m"]],["scope"]]],[0,"client","","Http client api",N,N],[3,"ClientConnector","actix_web::client","`ClientConnector` type is responsible for transport layer of a client connection.",N,N],[3,"ClientConnectorStats","","Client connector usage stats",N,N],[12,"waits","","Number of waited-on connections",14,N],[12,"wait_queue","","Size of the wait queue",14,N],[12,"reused","","Number of reused connections",14,N],[12,"opened","","Number of opened connections",14,N],[12,"closed","","Number of closed connections",14,N],[12,"errors","","Number of connections with errors",14,N],[12,"timeouts","","Number of connection timeouts",14,N],[3,"Connect","","`Connect` type represents a message that can be sent to `ClientConnector` with a connection request.",N,N],[3,"Connection","","HTTP client connection",N,N],[3,"Pause","","Pause connection process for `ClientConnector`",N,N],[3,"Resume","","Resume connection process for `ClientConnector`",N,N],[3,"SendRequest","","`SendRequest` is a `Future` which represents an asynchronous request sending process.",N,N],[3,"ClientRequest","","An HTTP Client Request",N,N],[3,"ClientRequestBuilder","","An HTTP Client request builder",N,N],[3,"ClientResponse","","An HTTP Client response",N,N],[4,"ClientConnectorError","","A set of errors that can occur while connecting to an HTTP host",N,N],[13,"InvalidUrl","","Invalid URL",15,N],[13,"SslIsNotSupported","","SSL feature is not enabled",15,N],[13,"SslError","","SSL error",15,N],[13,"Resolver","","Resolver error",15,N],[13,"Timeout","","Connection took too long",15,N],[13,"Disconnected","","Connector has been disconnected",15,N],[13,"IoError","","Connection IO error",15,N],[4,"SendRequestError","","A set of errors that can occur during request sending and response reading",N,N],[13,"Timeout","","Response took too long",16,N],[13,"Connector","","Failed to connect to host",16,N],[13,"ParseError","","Error parsing response",16,N],[13,"Io","","Error reading response payload",16,N],[5,"get","","Create request builder for `GET` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"head","","Create request builder for `HEAD` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"post","","Create request builder for `POST` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"put","","Create request builder for `PUT` requests",N,[[["u"]],["clientrequestbuilder"]]],[5,"delete","","Create request builder for `DELETE` requests",N,[[["u"]],["clientrequestbuilder"]]],[11,"default","","",14,[[],["clientconnectorstats"]]],[11,"fmt","","",17,[[["self"],["formatter"]],["result"]]],[11,"new","","Create `Connect` message for specified `Uri`",17,[[["u"]],["result",["connect","httperror"]]]],[11,"conn_timeout","","Connection timeout, i.e. max time to connect to remote host. Set to 1 second by default.",17,[[["self"],["duration"]],["self"]]],[11,"wait_timeout","","If connection pool limits are enabled, wait time indicates max time to wait for a connection to become available. Set to 5 seconds by default.",17,[[["self"],["duration"]],["self"]]],[11,"new","","Create message with pause duration parameter",18,[[["duration"]],["pause"]]],[11,"default","","",18,[[],["pause"]]],[11,"cause","","",15,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",15,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",15,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",15,[[["self"],["formatter"]],["result"]]],[11,"from","","",15,[[["resolvererror"]],["clientconnectorerror"]]],[11,"started","","",19,N],[11,"default","","",19,[[],["clientconnector"]]],[11,"with_connector","","Create `ClientConnector` actor with custom `SslConnector` instance.",19,[[["sslconnector"]],["clientconnector"]]],[11,"limit","","Set total number of simultaneous connections.",19,[[["self"],["usize"]],["self"]]],[11,"limit_per_host","","Set total number of simultaneous connections to the same endpoint.",19,[[["self"],["usize"]],["self"]]],[11,"conn_keep_alive","","Set keep-alive period for opened connection.",19,[[["self"],["duration"]],["self"]]],[11,"conn_lifetime","","Set max lifetime period for connection.",19,[[["self"],["duration"]],["self"]]],[11,"stats","","Subscribe for connector stats. Only one subscriber is supported.",19,[[["self"],["recipient",["clientconnectorstats"]]],["self"]]],[11,"resolver","","Use custom resolver actor",19,[[["self"],["addr",["resolver"]]],["self"]]],[11,"handle","","",19,N],[11,"handle","","",19,N],[11,"handle","","",19,N],[11,"fmt","","",20,[[["self"],["formatter"]],["result"]]],[11,"stream","","Raw IO stream",20,[[["self"]],["iostream"]]],[11,"from_stream","","Create a new connection from an IO Stream",20,[[["t"]],["connection"]]],[11,"close","","Close connection",20,[[["self"]]]],[11,"release","","Release this connection to the connection pool",20,[[["self"]]]],[11,"read","","",20,N],[11,"write","","",20,N],[11,"flush","","",20,[[["self"]],["result"]]],[11,"shutdown","","",20,[[["self"]],["poll",["error"]]]],[11,"cause","","",16,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",16,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",16,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",16,[[["self"],["formatter"]],["result"]]],[11,"from","","",16,[[["error"]],["sendrequesterror"]]],[11,"from","","",16,[[["clientconnectorerror"]],["sendrequesterror"]]],[11,"timeout","","Set request timeout",21,[[["self"],["duration"]],["self"]]],[11,"conn_timeout","","Set connection timeout",21,[[["self"],["duration"]],["self"]]],[11,"wait_timeout","","Set wait timeout",21,[[["self"],["duration"]],["self"]]],[11,"poll","","",21,[[["self"]],["poll"]]],[11,"default","","",22,[[],["clientrequest"]]],[11,"get","","Create request builder for `GET` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"head","","Create request builder for `HEAD` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"post","","Create request builder for `POST` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"put","","Create request builder for `PUT` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"delete","","Create request builder for `DELETE` request",22,[[["u"]],["clientrequestbuilder"]]],[11,"build","","Create client request builder",22,[[],["clientrequestbuilder"]]],[11,"build_from","","Create client request builder",22,[[["t"]],["clientrequestbuilder"]]],[11,"uri","","Get the request URI",22,[[["self"]],["uri"]]],[11,"set_uri","","Set client request URI",22,[[["self"],["uri"]]]],[11,"method","","Get the request method",22,[[["self"]],["method"]]],[11,"set_method","","Set HTTP `Method` for the request",22,[[["self"],["method"]]]],[11,"version","","Get HTTP version for the request",22,[[["self"]],["version"]]],[11,"set_version","","Set http `Version` for the request",22,[[["self"],["version"]]]],[11,"headers","","Get the headers from the request",22,[[["self"]],["headermap"]]],[11,"headers_mut","","Get a mutable reference to the headers",22,[[["self"]],["headermap"]]],[11,"chunked","","is chunked encoding enabled",22,[[["self"]],["bool"]]],[11,"upgrade","","is upgrade request",22,[[["self"]],["bool"]]],[11,"content_encoding","","Content encoding",22,[[["self"]],["contentencoding"]]],[11,"response_decompress","","Decompress response payload",22,[[["self"]],["bool"]]],[11,"write_buffer_capacity","","Requested write buffer capacity",22,[[["self"]],["usize"]]],[11,"body","","Get body of this response",22,[[["self"]],["body"]]],[11,"set_body","","Set a body",22,[[["self"],["b"]]]],[11,"send","","Send request",22,[[["self"]],["sendrequest"]]],[11,"fmt","","",22,[[["self"],["formatter"]],["result"]]],[11,"uri","","Set HTTP URI of request.",23,[[["self"],["u"]],["self"]]],[11,"method","","Set HTTP method of this request.",23,[[["self"],["method"]],["self"]]],[11,"get_method","","Set HTTP method of this request.",23,[[["self"]],["method"]]],[11,"version","","Set HTTP version of this request.",23,[[["self"],["version"]],["self"]]],[11,"header","","Append a header.",23,[[["self"],["k"],["v"]],["self"]]],[11,"set_header","","Set a header.",23,[[["self"],["k"],["v"]],["self"]]],[11,"set_header_if_none","","Set a header only if it is not yet set.",23,[[["self"],["k"],["v"]],["self"]]],[11,"content_encoding","","Set content encoding.",23,[[["self"],["contentencoding"]],["self"]]],[11,"chunked","","Enables automatic chunked transfer encoding",23,[[["self"]],["self"]]],[11,"upgrade","","Enable connection upgrade",23,[[["self"]],["self"]]],[11,"content_type","","Set request's content type",23,[[["self"],["v"]],["self"]]],[11,"content_length","","Set content length",23,[[["self"],["u64"]],["self"]]],[11,"cookie","","Set a cookie",23,[[["self"],["cookie"]],["self"]]],[11,"no_default_headers","","Do not add default request headers. By default `Accept-Encoding` and `User-Agent` headers are set.",23,[[["self"]],["self"]]],[11,"disable_decompress","","Disable automatic decompress response body",23,[[["self"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",23,[[["self"],["usize"]],["self"]]],[11,"timeout","","Set request timeout",23,[[["self"],["duration"]],["self"]]],[11,"with_connector","","Send request using custom connector",23,[[["self"],["addr",["clientconnector"]]],["self"]]],[11,"with_connection","","Send request using existing `Connection`",23,[[["self"],["connection"]],["self"]]],[11,"if_true","","This method calls provided closure with builder reference if value is `true`.",23,[[["self"],["bool"],["f"]],["self"]]],[11,"if_some","","This method calls provided closure with builder reference if value is `Some`.",23,[[["self"],["option"],["f"]],["self"]]],[11,"body","","Set a body and generate `ClientRequest`.",23,[[["self"],["b"]],["result",["clientrequest","error"]]]],[11,"json","","Set a JSON body and generate `ClientRequest`",23,[[["self"],["t"]],["result",["clientrequest","error"]]]],[11,"form","","Set a urlencoded body and generate `ClientRequest`",23,[[["self"],["t"]],["result",["clientrequest","error"]]]],[11,"streaming","","Set a streaming body and generate `ClientRequest`.",23,[[["self"],["s"]],["result",["clientrequest","error"]]]],[11,"finish","","Set an empty body and generate `ClientRequest`",23,[[["self"]],["result",["clientrequest","error"]]]],[11,"take","","This method construct new `ClientRequestBuilder`",23,[[["self"]],["clientrequestbuilder"]]],[11,"fmt","","",23,[[["self"],["formatter"]],["result"]]],[11,"from","","",23,[[["httprequest"]],["clientrequestbuilder"]]],[11,"headers","","Get the headers from the response.",24,[[["self"]],["headermap"]]],[11,"payload","","",24,[[["self"]],["box",["pipeline"]]]],[11,"version","","Get the HTTP version of this response.",24,[[["self"]],["version"]]],[11,"status","","Get the status from the server.",24,[[["self"]],["statuscode"]]],[11,"cookies","","Load response cookies.",24,[[["self"]],["result",["vec","cookieparseerror"]]]],[11,"cookie","","Return request cookie.",24,[[["self"],["str"]],["option",["cookie"]]]],[11,"fmt","","",24,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",16,[[["self"]],["httpresponse"]]],[0,"error","actix_web","Error and Result module",N,N],[4,"UrlParseError","actix_web::error","Errors that can occur during parsing.",N,N],[13,"EmptyHost","","",25,N],[13,"IdnaError","","",25,N],[13,"InvalidPort","","",25,N],[13,"InvalidIpv4Address","","",25,N],[13,"InvalidIpv6Address","","",25,N],[13,"InvalidDomainCharacter","","",25,N],[13,"RelativeUrlWithoutBase","","",25,N],[13,"RelativeUrlWithCannotBeABaseBase","","",25,N],[13,"SetHostOnCannotBeABaseUrl","","",25,N],[13,"Overflow","","",25,N],[4,"CookieParseError","","Enum corresponding to a parsing error.",N,N],[13,"MissingPair","","The cookie did not contain a name/value pair.",26,N],[13,"EmptyName","","The cookie's name was empty.",26,N],[13,"Utf8Error","","Decoding the cookie's name or value resulted in invalid UTF-8.",26,N],[3,"Error","","General purpose actix web error.",N,N],[3,"InternalError","","Helper type that can wrap any error and generate custom response.",N,N],[4,"ParseError","","A set of errors that can occur during parsing HTTP streams",N,N],[13,"Method","","An invalid `Method`, such as `GE.T`.",27,N],[13,"Uri","","An invalid `Uri`, such as `exam ple.domain`.",27,N],[13,"Version","","An invalid `HttpVersion`, such as `HTP/1.1`",27,N],[13,"Header","","An invalid `Header`.",27,N],[13,"TooLarge","","A message head is too large to be reasonable.",27,N],[13,"Incomplete","","A message reached EOF, but is not complete.",27,N],[13,"Status","","An invalid `Status`, such as `1337 ELITE`.",27,N],[13,"Timeout","","A timeout occurred waiting for an IO event.",27,N],[13,"Io","","An `io::Error` that occurred while trying to read or write to a network stream.",27,N],[13,"Utf8","","Parsing a field as string failed",27,N],[4,"PayloadError","","A set of errors that can occur during payload parsing",N,N],[13,"Incomplete","","A payload reached EOF, but is not complete.",28,N],[13,"EncodingCorrupted","","Content encoding stream corruption",28,N],[13,"Overflow","","A payload reached size limit.",28,N],[13,"UnknownLength","","A payload length is unknown.",28,N],[13,"Io","","Io error",28,N],[13,"Http2","","Http2 error",28,N],[4,"MultipartError","","A set of errors that can occur during parsing multipart streams",N,N],[13,"NoContentType","","Content-Type header is not found",29,N],[13,"ParseContentType","","Can not parse Content-Type header",29,N],[13,"Boundary","","Multipart boundary is not found",29,N],[13,"Incomplete","","Multipart stream is incomplete",29,N],[13,"Parse","","Error during field parsing",29,N],[13,"Payload","","Payload error",29,N],[4,"ExpectError","","Error during handling `Expect` header",N,N],[13,"Encoding","","Expect header value can not be converted to utf8",30,N],[13,"UnknownExpect","","Unknown expect value",30,N],[4,"ContentTypeError","","A set of error that can occure during parsing content type",N,N],[13,"ParseError","","Can not parse content type",31,N],[13,"UnknownEncoding","","Unknown content encoding",31,N],[4,"UrlencodedError","","A set of errors that can occur during parsing urlencoded payloads",N,N],[13,"Chunked","","Can not decode chunked transfer encoding",32,N],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",32,N],[13,"UnknownLength","","Payload size is now known",32,N],[13,"ContentType","","Content type error",32,N],[13,"Parse","","Parse error",32,N],[13,"Payload","","Payload error",32,N],[4,"JsonPayloadError","","A set of errors that can occur during parsing json payloads",N,N],[13,"Overflow","","Payload size is bigger than allowed. (default: 256kB)",33,N],[13,"ContentType","","Content type error",33,N],[13,"Deserialize","","Deserialize error",33,N],[13,"Payload","","Payload error",33,N],[4,"ReadlinesError","","Error type returned when reading body as lines.",N,N],[13,"EncodingError","","Error when decoding a line.",34,N],[13,"PayloadError","","Payload error.",34,N],[13,"LimitOverflow","","Line limit exceeded.",34,N],[13,"ContentTypeError","","ContentType error.",34,N],[4,"UriSegmentError","","Errors which can occur when attempting to interpret a segment string as a valid path segment.",N,N],[13,"BadStart","","The segment started with the wrapped invalid character.",35,N],[13,"BadChar","","The segment contained the wrapped invalid character.",35,N],[13,"BadEnd","","The segment ended with the wrapped invalid character.",35,N],[4,"UrlGenerationError","","Errors which can occur when attempting to generate resource uri.",N,N],[13,"ResourceNotFound","","Resource not found",36,N],[13,"NotEnoughElements","","Not all path pattern covered",36,N],[13,"ParseError","","URL parse error",36,N],[4,"StaticFileError","","Errors which can occur when serving static files.",N,N],[13,"IsNotDirectory","","Path is not a directory",37,N],[13,"IsDirectory","","Cannot render directory",37,N],[5,"ErrorBadRequest","","Helper function that creates wrapper of any error and generate BAD REQUEST response.",N,[[["t"]],["error"]]],[5,"ErrorUnauthorized","","Helper function that creates wrapper of any error and generate UNAUTHORIZED response.",N,[[["t"]],["error"]]],[5,"ErrorForbidden","","Helper function that creates wrapper of any error and generate FORBIDDEN response.",N,[[["t"]],["error"]]],[5,"ErrorNotFound","","Helper function that creates wrapper of any error and generate NOT FOUND response.",N,[[["t"]],["error"]]],[5,"ErrorMethodNotAllowed","","Helper function that creates wrapper of any error and generate METHOD NOT ALLOWED response.",N,[[["t"]],["error"]]],[5,"ErrorRequestTimeout","","Helper function that creates wrapper of any error and generate REQUEST TIMEOUT response.",N,[[["t"]],["error"]]],[5,"ErrorConflict","","Helper function that creates wrapper of any error and generate CONFLICT response.",N,[[["t"]],["error"]]],[5,"ErrorGone","","Helper function that creates wrapper of any error and generate GONE response.",N,[[["t"]],["error"]]],[5,"ErrorPreconditionFailed","","Helper function that creates wrapper of any error and generate PRECONDITION FAILED response.",N,[[["t"]],["error"]]],[5,"ErrorExpectationFailed","","Helper function that creates wrapper of any error and generate EXPECTATION FAILED response.",N,[[["t"]],["error"]]],[5,"ErrorInternalServerError","","Helper function that creates wrapper of any error and generate INTERNAL SERVER ERROR response.",N,[[["t"]],["error"]]],[5,"ErrorNotImplemented","","Helper function that creates wrapper of any error and generate NOT IMPLEMENTED response.",N,[[["t"]],["error"]]],[5,"ErrorBadGateway","","Helper function that creates wrapper of any error and generate BAD GATEWAY response.",N,[[["t"]],["error"]]],[5,"ErrorServiceUnavailable","","Helper function that creates wrapper of any error and generate SERVICE UNAVAILABLE response.",N,[[["t"]],["error"]]],[5,"ErrorGatewayTimeout","","Helper function that creates wrapper of any error and generate GATEWAY TIMEOUT response.",N,[[["t"]],["error"]]],[6,"Result","","A specialized `Result` for actix web operations",N,N],[8,"ResponseError","","Error that can be converted to `HttpResponse`",N,N],[11,"error_response","","Create response for error",38,[[["self"]],["httpresponse"]]],[11,"cause","","Deprecated way to reference the underlying response error.",39,[[["self"]],["responseerror"]]],[11,"as_fail","","Returns a reference to the underlying cause of this `Error` as `Fail`",39,[[["self"]],["fail"]]],[11,"as_response_error","","Returns the reference to the underlying `ResponseError`.",39,[[["self"]],["responseerror"]]],[11,"backtrace","","Returns a reference to the Backtrace carried by this error, if it carries one.",39,[[["self"]],["backtrace"]]],[11,"downcast_ref","","Attempts to downcast this `Error` to a particular `Fail` type by reference.",39,[[["self"]],["option"]]],[11,"fmt","","",39,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",39,[[["self"],["formatter"]],["result"]]],[11,"from","actix_web","",10,[[["error"]],["self"]]],[11,"from","actix_web::error","",39,[[["t"]],["error"]]],[11,"from","","",39,[[["error"]],["error"]]],[11,"cause","","",27,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",27,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",27,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",27,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",27,[[["self"]],["httpresponse"]]],[11,"from","","",27,[[["ioerror"]],["parseerror"]]],[11,"from","","",27,[[["invaliduri"]],["parseerror"]]],[11,"from","","",27,[[["utf8error"]],["parseerror"]]],[11,"from","","",27,[[["fromutf8error"]],["parseerror"]]],[11,"from","","",27,[[["error"]],["parseerror"]]],[11,"cause","","",28,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",28,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",28,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",28,[[["self"],["formatter"]],["result"]]],[11,"from","","",28,[[["ioerror"]],["payloaderror"]]],[11,"error_response","","",28,[[["self"]],["httpresponse"]]],[11,"error_response","","",26,[[["self"]],["httpresponse"]]],[11,"cause","","",29,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",29,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",29,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",29,[[["self"],["formatter"]],["result"]]],[11,"from","","",29,[[["parseerror"]],["multiparterror"]]],[11,"from","","",29,[[["payloaderror"]],["multiparterror"]]],[11,"error_response","","",29,[[["self"]],["httpresponse"]]],[11,"cause","","",30,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",30,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",30,[[["self"],["formatter"]],["result"]]],[11,"eq","","",30,[[["self"],["expecterror"]],["bool"]]],[11,"fmt","","",30,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",30,[[["self"]],["httpresponse"]]],[11,"cause","","",31,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",31,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",31,[[["self"],["formatter"]],["result"]]],[11,"eq","","",31,[[["self"],["contenttypeerror"]],["bool"]]],[11,"fmt","","",31,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",31,[[["self"]],["httpresponse"]]],[11,"cause","","",32,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",32,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",32,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",32,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",32,[[["self"]],["httpresponse"]]],[11,"from","","",32,[[["payloaderror"]],["urlencodederror"]]],[11,"cause","","",33,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",33,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",33,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",33,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",33,[[["self"]],["httpresponse"]]],[11,"from","","",33,[[["payloaderror"]],["jsonpayloaderror"]]],[11,"from","","",33,[[["jsonerror"]],["jsonpayloaderror"]]],[11,"from","","",34,[[["payloaderror"]],["self"]]],[11,"from","","",34,[[["contenttypeerror"]],["self"]]],[11,"cause","","",35,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",35,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",35,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",35,[[["self"],["formatter"]],["result"]]],[11,"eq","","",35,[[["self"],["urisegmenterror"]],["bool"]]],[11,"ne","","",35,[[["self"],["urisegmenterror"]],["bool"]]],[11,"error_response","","",35,[[["self"]],["httpresponse"]]],[11,"cause","","",36,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",36,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",36,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",36,[[["self"],["formatter"]],["result"]]],[11,"eq","","",36,[[["self"],["urlgenerationerror"]],["bool"]]],[11,"ne","","",36,[[["self"],["urlgenerationerror"]],["bool"]]],[11,"from","","",36,[[["urlparseerror"]],["self"]]],[11,"cause","","",37,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",37,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",37,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",37,[[["self"],["formatter"]],["result"]]],[11,"eq","","",37,[[["self"],["staticfileerror"]],["bool"]]],[11,"error_response","","",37,[[["self"]],["httpresponse"]]],[11,"new","","Create `InternalError` instance",40,[[["t"],["statuscode"]],["self"]]],[11,"from_response","","Create `InternalError` with predefined `HttpResponse`.",40,[[["t"],["httpresponse"]],["self"]]],[11,"backtrace","","",40,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",40,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",40,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",40,[[["self"]],["httpresponse"]]],[11,"respond_to","","",40,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[0,"fs","actix_web","Static files support",N,N],[3,"DefaultConfig","actix_web::fs","Default content disposition as described in StaticFileConfig",N,N],[3,"NamedFile","","A file with an associated name.",N,N],[3,"ChunkedReadFile","","A helper created from a `std::fs::File` which reads the file chunk-by-chunk on a `CpuPool`.",N,N],[3,"Directory","","A directory; responds with the generated directory listing.",N,N],[12,"base","","Base directory",41,N],[12,"path","","Path of subdirectory to generate listing for",41,N],[3,"StaticFiles","","Static files handling",N,N],[5,"file_extension_to_mime","","Return the MIME type associated with a filename extension (case-insensitive). If `ext` is empty or no associated type for the extension was found, returns the type `application/octet-stream`.",N,[[["str"]],["mime"]]],[8,"StaticFileConfig","","Describes `StaticFiles` configiration",N,N],[11,"content_disposition_map","","Describes mapping for mime type to content disposition header",42,[[["name"]],["dispositiontype"]]],[11,"is_use_etag","","Describes whether Actix should attempt to calculate `ETag`",42,[[],["bool"]]],[11,"is_use_last_modifier","","Describes whether Actix should use last modified date of file.",42,[[],["bool"]]],[11,"is_method_allowed","","Describes allowed methods to access static resources.",42,[[["method"]],["bool"]]],[11,"default","","",43,[[],["defaultconfig"]]],[11,"fmt","","",44,[[["self"],["formatter"]],["result"]]],[11,"open","","Attempts to open a file in read-only mode.",44,[[["p"]],["result",["namedfile"]]]],[11,"open_with_config","","Attempts to open a file in read-only mode using provided configiration.",44,[[["p"],["c"]],["result",["namedfile"]]]],[11,"file","","Returns reference to the underlying `File` object.",44,[[["self"]],["file"]]],[11,"path","","Retrieve the path of this file.",44,[[["self"]],["path"]]],[11,"set_cpu_pool","","Set `CpuPool` to use",44,[[["self"],["cpupool"]],["self"]]],[11,"set_status_code","","Set response Status Code",44,[[["self"],["statuscode"]],["self"]]],[11,"set_content_type","","Set the MIME Content-Type for serving this file. By default the Content-Type is inferred from the filename extension.",44,[[["self"],["mime"]],["self"]]],[11,"set_content_disposition","","Set the Content-Disposition for serving this file. This allows changing the inline/attachment disposition as well as the filename sent to the peer. By default the disposition is `inline` for text, image, and video content types, and `attachment` otherwise, and the filename is taken from the path provided in the `open` method after converting it to UTF-8 using to_string_lossy.",44,[[["self"],["contentdisposition"]],["self"]]],[11,"set_content_encoding","","Set content encoding for serving this file",44,[[["self"],["contentencoding"]],["self"]]],[11,"deref","","",44,[[["self"]],["file"]]],[11,"deref_mut","","",44,[[["self"]],["file"]]],[11,"respond_to","","",44,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"poll","","",45,[[["self"]],["poll",["option","error"]]]],[11,"fmt","","",41,[[["self"],["formatter"]],["result"]]],[11,"new","","Create a new directory",41,[[["pathbuf"],["pathbuf"]],["directory"]]],[11,"is_visible","","Is this entry visible from this directory?",41,[[["self"],["result"]],["bool"]]],[11,"new","","Create new `StaticFiles` instance for specified base directory.",46,[[["t"]],["result",["staticfiles","error"]]]],[11,"with_pool","","Create new `StaticFiles` instance for specified base directory and `CpuPool`.",46,[[["t"],["cpupool"]],["result",["staticfiles","error"]]]],[11,"with_config","","Create new `StaticFiles` instance for specified base directory.",46,[[["t"],["c"]],["result",["staticfiles","error"]]]],[11,"with_config_pool","","Create new `StaticFiles` instance for specified base directory with config and `CpuPool`.",46,[[["t"],["cpupool"],["c"]],["result",["staticfiles","error"]]]],[11,"show_files_listing","","Show files listing for directories.",46,[[["self"]],["self"]]],[11,"files_listing_renderer","","Set custom directory renderer",46,[[["self"],["f"]],["self"]]],[11,"index_file","","Set index file",46,[[["self"],["t"]],["staticfiles"]]],[11,"default_handler","","Sets default handler which is used when no matched file could be found.",46,[[["self"],["h"]],["staticfiles"]]],[11,"handle","","",46,N],[0,"middleware","actix_web","Middlewares",N,N],[3,"DefaultHeaders","actix_web::middleware","`Middleware` for setting default response headers.",N,N],[3,"ErrorHandlers","","`Middleware` for allowing custom handlers for responses.",N,N],[3,"Logger","","`Middleware` for logging request and response info to the terminal.",N,N],[4,"Started","","Middleware start result",N,N],[13,"Done","","Middleware is completed, continue to next middleware",47,N],[13,"Response","","New http response got generated. If middleware generates response handler execution halts.",47,N],[13,"Future","","Execution completed, runs future to completion.",47,N],[4,"Response","","Middleware execution result",N,N],[13,"Done","","New http response got generated",48,N],[13,"Future","","Result is a future that resolves to a new http response",48,N],[4,"Finished","","Middleware finish result",N,N],[13,"Done","","Execution completed",49,N],[13,"Future","","Execution completed, but run future to completion",49,N],[11,"new","","Create `Logger` middleware with the specified `format`.",50,[[["str"]],["logger"]]],[11,"exclude","","Ignore and do not log access info for specified path.",50,[[["self"],["t"]],["self"]]],[11,"default","","Create `Logger` middleware with format:",50,[[],["logger"]]],[11,"start","","",50,[[["self"],["httprequest"]],["result",["started"]]]],[11,"finish","","",50,[[["self"],["httprequest"],["httpresponse"]],["finished"]]],[0,"cors","","Cross-origin resource sharing (CORS) for Actix applications",N,N],[3,"Cors","actix_web::middleware::cors","`Middleware` for Cross-origin resource sharing support",N,N],[3,"CorsBuilder","","Structure that follows the builder pattern for building `Cors` middleware structs.",N,N],[4,"CorsError","","A set of errors that can occur during processing CORS",N,N],[13,"MissingOrigin","","The HTTP request header `Origin` is required but was not provided",51,N],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",51,N],[13,"MissingRequestMethod","","The request header `Access-Control-Request-Method` is required but is missing",51,N],[13,"BadRequestMethod","","The request header `Access-Control-Request-Method` has an invalid value",51,N],[13,"BadRequestHeaders","","The request header `Access-Control-Request-Headers` has an invalid value",51,N],[13,"MissingRequestHeaders","","The request header `Access-Control-Request-Headers` is required but is missing.",51,N],[13,"OriginNotAllowed","","Origin is not allowed to make this request",51,N],[13,"MethodNotAllowed","","Requested method is not allowed",51,N],[13,"HeadersNotAllowed","","One or more headers requested are not allowed",51,N],[4,"AllOrSome","","An enum signifying that some of type T is allowed, or `All` (everything is allowed).",N,N],[13,"All","","Everything is allowed. Usually equivalent to the \"*\" value.",52,N],[13,"Some","","Only some of `T` is allowed",52,N],[11,"fmt","","",51,[[["self"],["formatter"]],["result"]]],[11,"cause","","",51,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",51,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",51,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",51,[[["self"]],["httpresponse"]]],[11,"clone","","",52,[[["self"]],["allorsome"]]],[11,"fmt","","",52,[[["self"],["formatter"]],["result"]]],[11,"eq","","",52,[[["self"],["allorsome"]],["bool"]]],[11,"ne","","",52,[[["self"],["allorsome"]],["bool"]]],[11,"default","","",52,[[],["self"]]],[11,"is_all","","Returns whether this is an `All` variant",52,[[["self"]],["bool"]]],[11,"is_some","","Returns whether this is a `Some` variant",52,[[["self"]],["bool"]]],[11,"as_ref","","Returns &T",52,[[["self"]],["option"]]],[11,"clone","","",53,[[["self"]],["cors"]]],[11,"default","","",53,[[],["cors"]]],[11,"build","","Build a new CORS middleware instance",53,[[],["corsbuilder"]]],[11,"for_app","","Create CorsBuilder for a specified application.",53,[[["app"]],["corsbuilder"]]],[11,"register","","This method register cors middleware with resource and adds route for OPTIONS preflight requests.",53,[[["self"],["resource"]]]],[11,"start","","",53,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",53,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"allowed_origin","","Add an origin that are allowed to make requests. Will be verified against the `Origin` request header.",54,[[["self"],["str"]],["corsbuilder"]]],[11,"allowed_methods","","Set a list of methods which the allowed origins are allowed to access for requests.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"allowed_header","","Set an allowed header",54,[[["self"],["h"]],["corsbuilder"]]],[11,"allowed_headers","","Set a list of header field names which can be used when this resource is accessed by allowed origins.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"expose_headers","","Set a list of headers which are safe to expose to the API of a CORS API specification. This corresponds to the `Access-Control-Expose-Headers` response header.",54,[[["self"],["u"]],["corsbuilder"]]],[11,"max_age","","Set a maximum time for which this CORS request maybe cached. This value is set as the `Access-Control-Max-Age` header.",54,[[["self"],["usize"]],["corsbuilder"]]],[11,"send_wildcard","","Set a wildcard origins",54,[[["self"]],["corsbuilder"]]],[11,"supports_credentials","","Allows users to make authenticated requests",54,[[["self"]],["corsbuilder"]]],[11,"disable_vary_header","","Disable `Vary` header support.",54,[[["self"]],["corsbuilder"]]],[11,"disable_preflight","","Disable preflight request support.",54,[[["self"]],["corsbuilder"]]],[11,"resource","","Configure resource for a specific path.",54,[[["self"],["str"],["f"]],["corsbuilder"]]],[11,"finish","","Finishes building and returns the built `Cors` instance.",54,[[["self"]],["cors"]]],[11,"register","","Finishes building Cors middleware and register middleware for application",54,[[["self"]],["app"]]],[0,"csrf","actix_web::middleware","A filter for cross-site request forgery (CSRF).",N,N],[3,"CsrfFilter","actix_web::middleware::csrf","A middleware that filters cross-site requests.",N,N],[4,"CsrfError","","Potential cross-site request forgery detected.",N,N],[13,"MissingOrigin","","The HTTP request header `Origin` was required but not provided.",55,N],[13,"BadOrigin","","The HTTP request header `Origin` could not be parsed correctly.",55,N],[13,"CsrDenied","","The cross-site request was denied.",55,N],[11,"fmt","","",55,[[["self"],["formatter"]],["result"]]],[11,"cause","","",55,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",55,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",55,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",55,[[["self"]],["httpresponse"]]],[11,"default","","",56,[[],["csrffilter"]]],[11,"new","","Start building a `CsrfFilter`.",56,[[],["csrffilter"]]],[11,"allowed_origin","","Add an origin that is allowed to make requests. Will be verified against the `Origin` request header.",56,[[["self"],["t"]],["csrffilter"]]],[11,"allow_xhr","","Allow all requests with an `X-Requested-With` header.",56,[[["self"]],["csrffilter"]]],[11,"allow_missing_origin","","Allow requests if the expected `Origin` header is missing (and there is no `Referer` to fall back on).",56,[[["self"]],["csrffilter"]]],[11,"allow_upgrade","","Allow cross-site upgrade requests (for example to open a WebSocket).",56,[[["self"]],["csrffilter"]]],[11,"start","","",56,[[["self"],["httprequest"]],["result",["started"]]]],[11,"default","actix_web::middleware","",57,[[],["self"]]],[11,"new","","Construct `DefaultHeaders` middleware.",57,[[],["defaultheaders"]]],[11,"header","","Set a header.",57,[[["self"],["k"],["v"]],["self"]]],[11,"content_type","","Set CONTENT-TYPE header if response does not contain this header.",57,[[["self"]],["self"]]],[11,"response","","",57,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"default","","",58,[[],["self"]]],[11,"new","","Construct new `ErrorHandlers` instance",58,[[],["self"]]],[11,"handler","","Register error handler for specified status code",58,[[["self"],["statuscode"],["f"]],["self"]]],[11,"response","","",58,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[0,"identity","","Request identity service for Actix applications.",N,N],[3,"IdentityService","actix_web::middleware::identity","Request identity middleware",N,N],[3,"CookieIdentityPolicy","","Use cookies for request identity storage.",N,N],[8,"RequestIdentity","","The helper trait to obtain your identity from a request.",N,N],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",59,[[["self"]],["option",["string"]]]],[10,"remember","","Remember identity.",59,[[["self"],["string"]]]],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",59,[[["self"]]]],[8,"Identity","","An identity",N,N],[10,"identity","","Return the claimed identity of the user associated request or `None` if no identity can be found associated with the request.",60,[[["self"]],["option",["str"]]]],[10,"remember","","Remember identity.",60,[[["self"],["string"]]]],[10,"forget","","This method is used to 'forget' the current identity on subsequent requests.",60,[[["self"]]]],[10,"write","","Write session to storage backend.",60,[[["self"],["httpresponse"]],["result",["response"]]]],[8,"IdentityPolicy","","Identity policy definition.",N,N],[16,"Identity","","The associated identity",61,N],[16,"Future","","The return type of the middleware",61,N],[10,"from_request","","Parse the session from request and load data from a service identity.",61,N],[11,"identity","actix_web","",12,[[["self"]],["option",["string"]]]],[11,"remember","","",12,[[["self"],["string"]]]],[11,"forget","","",12,[[["self"]]]],[11,"new","actix_web::middleware::identity","Create new identity service with specified backend.",62,[[["t"]],["self"]]],[11,"start","","",62,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",62,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"new","","Construct new `CookieIdentityPolicy` instance.",63,N],[11,"path","","Sets the `path` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"name","","Sets the `name` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"domain","","Sets the `domain` field in the session cookie being built.",63,[[["self"],["s"]],["cookieidentitypolicy"]]],[11,"secure","","Sets the `secure` field in the session cookie being built.",63,[[["self"],["bool"]],["cookieidentitypolicy"]]],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",63,[[["self"],["duration"]],["cookieidentitypolicy"]]],[11,"from_request","","",63,N],[0,"session","actix_web::middleware","User sessions.",N,N],[3,"Session","actix_web::middleware::session","The high-level interface you use to modify session data.",N,N],[3,"SessionStorage","","Session storage middleware",N,N],[3,"CookieSession","","Session that uses signed cookies as session storage",N,N],[3,"CookieSessionBackend","","Use cookies for session storage.",N,N],[4,"CookieSessionError","","Errors that can occur during handling cookie session",N,N],[13,"Overflow","","Size of the serialized session is greater than 4000 bytes.",64,N],[13,"Serialize","","Fail to serialize session.",64,N],[8,"RequestSession","","The helper trait to obtain your session data from a request.",N,N],[10,"session","","Get the session from the request",65,[[["self"]],["session"]]],[11,"session","actix_web","",12,[[["self"]],["session"]]],[11,"get","actix_web::middleware::session","Get a `value` from the session.",66,[[["self"],["str"]],["result",["option"]]]],[11,"set","","Set a `value` from the session.",66,[[["self"],["str"],["t"]],["result"]]],[11,"remove","","Remove value from the session.",66,[[["self"],["str"]]]],[11,"clear","","Clear the session.",66,[[["self"]]]],[11,"from_request","","",66,N],[11,"new","","Create session storage",67,[[["t"]],["sessionstorage"]]],[11,"start","","",67,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","",67,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"cause","","",64,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",64,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",64,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",64,[[["self"],["formatter"]],["result"]]],[11,"signed","","Construct new signed `CookieSessionBackend` instance.",68,N],[11,"private","","Construct new private `CookieSessionBackend` instance.",68,N],[11,"path","","Sets the `path` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"name","","Sets the `name` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"domain","","Sets the `domain` field in the session cookie being built.",68,[[["self"],["s"]],["cookiesessionbackend"]]],[11,"secure","","Sets the `secure` field in the session cookie being built.",68,[[["self"],["bool"]],["cookiesessionbackend"]]],[11,"http_only","","Sets the `http_only` field in the session cookie being built.",68,[[["self"],["bool"]],["cookiesessionbackend"]]],[11,"same_site","","Sets the `same_site` field in the session cookie being built.",68,[[["self"],["samesite"]],["cookiesessionbackend"]]],[11,"max_age","","Sets the `max-age` field in the session cookie being built.",68,[[["self"],["duration"]],["cookiesessionbackend"]]],[8,"Middleware","actix_web::middleware","Middleware definition",N,N],[11,"start","","Method is called when request is ready. It may return future, which should resolve before next middleware get called.",69,[[["self"],["httprequest"]],["result",["started"]]]],[11,"response","","Method is called when handler returns response, but before sending http message to peer.",69,[[["self"],["httprequest"],["httpresponse"]],["result",["response"]]]],[11,"finish","","Method is called after body stream get sent to peer.",69,[[["self"],["httprequest"],["httpresponse"]],["finished"]]],[0,"multipart","actix_web","Multipart requests support",N,N],[3,"Multipart","actix_web::multipart","The server-side implementation of `multipart/form-data` requests.",N,N],[3,"Field","","A single field in a multipart stream",N,N],[4,"MultipartItem","","",N,N],[13,"Field","","Multipart field",70,N],[13,"Nested","","Nested multipart stream",70,N],[11,"boundary","","Extract boundary info from headers.",71,[[["headermap"]],["result",["string","multiparterror"]]]],[11,"new","","Create multipart instance for boundary.",71,[[["result",["string","multiparterror"]],["s"]],["multipart"]]],[11,"poll","","",71,[[["self"]],["poll",["option"]]]],[11,"headers","","Get a map of headers",72,[[["self"]],["headermap"]]],[11,"content_type","","Get the content type of the field",72,[[["self"]],["mime"]]],[11,"content_disposition","","Get the content disposition of the field, if it exists",72,[[["self"]],["option",["contentdisposition"]]]],[11,"poll","","",72,[[["self"]],["poll",["option"]]]],[11,"fmt","","",72,[[["self"],["formatter"]],["result"]]],[0,"pred","actix_web","Route match predicates",N,N],[3,"AnyPredicate","actix_web::pred","Matches if any of supplied predicate matches.",N,N],[3,"AllPredicate","","Matches if all of supplied predicate matches.",N,N],[5,"Any","","Return predicate that matches if any of supplied predicate matches.",N,[[["p"]],["anypredicate"]]],[5,"All","","Return predicate that matches if all of supplied predicate matches.",N,[[["p"]],["allpredicate"]]],[5,"Not","","Return predicate that matches if supplied predicate does not match.",N,[[["p"]],["notpredicate"]]],[5,"Get","","Predicate to match GET http method",N,[[],["methodpredicate"]]],[5,"Post","","Predicate to match POST http method",N,[[],["methodpredicate"]]],[5,"Put","","Predicate to match PUT http method",N,[[],["methodpredicate"]]],[5,"Delete","","Predicate to match DELETE http method",N,[[],["methodpredicate"]]],[5,"Head","","Predicate to match HEAD http method",N,[[],["methodpredicate"]]],[5,"Options","","Predicate to match OPTIONS http method",N,[[],["methodpredicate"]]],[5,"Connect","","Predicate to match CONNECT http method",N,[[],["methodpredicate"]]],[5,"Patch","","Predicate to match PATCH http method",N,[[],["methodpredicate"]]],[5,"Trace","","Predicate to match TRACE http method",N,[[],["methodpredicate"]]],[5,"Method","","Predicate to match specified http method",N,[[["method"]],["methodpredicate"]]],[5,"Header","","Return predicate that matches if request contains specified header and value.",N,[[["str"],["str"]],["headerpredicate"]]],[5,"Host","","Return predicate that matches if request contains specified Host name.",N,[[["h"]],["hostpredicate"]]],[8,"Predicate","","Trait defines resource route predicate. Predicate can modify request object. It is also possible to to store extra attributes on request by using `Extensions` container, Extensions container available via `HttpRequest::extensions()` method.",N,N],[10,"check","","Check if request matches predicate",73,[[["self"],["request"],["s"]],["bool"]]],[11,"or","","Add new predicate to list of predicates to check",74,[[["self"],["p"]],["self"]]],[11,"check","","",74,[[["self"],["request"],["s"]],["bool"]]],[11,"and","","Add new predicate to list of predicates to check",75,[[["self"],["p"]],["self"]]],[11,"check","","",75,[[["self"],["request"],["s"]],["bool"]]],[0,"server","actix_web","Http server",N,N],[3,"Request","actix_web::server","Request's context",N,N],[3,"ServerSettings","","Various server settings",N,N],[3,"HttpServer","","An HTTP Server",N,N],[3,"PauseServer","","Pause accepting incoming connections",N,N],[3,"ResumeServer","","Resume accepting incoming connections",N,N],[3,"StopServer","","Stop incoming connection processing, stop all workers and exit.",N,N],[12,"graceful","","Whether to try and shut down gracefully",76,N],[4,"KeepAlive","","Server keep-alive setting",N,N],[13,"Timeout","","Keep alive in seconds",77,N],[13,"Tcp","","Use `SO_KEEPALIVE` socket option, value in seconds",77,N],[13,"Os","","Relay on OS to shutdown tcp connection",77,N],[13,"Disabled","","Disabled",77,N],[5,"new","","Create new http server with application factory.",N,[[["f"]],["httpserver"]]],[11,"headers","actix_web","",78,[[["self"]],["headermap"]]],[11,"payload","","",78,[[["self"]],["payload"]]],[11,"uri","","Read the Request Uri.",78,[[["self"]],["uri"]]],[11,"method","","Read the Request method.",78,[[["self"]],["method"]]],[11,"version","","Read the Request Version.",78,[[["self"]],["version"]]],[11,"path","","The target path of this Request.",78,[[["self"]],["str"]]],[11,"headers","","Returns Request's headers.",78,[[["self"]],["headermap"]]],[11,"headers_mut","","Returns mutable Request's headers.",78,[[["self"]],["headermap"]]],[11,"peer_addr","","Peer socket address",78,[[["self"]],["option",["socketaddr"]]]],[11,"keep_alive","","Checks if a connection should be kept alive.",78,[[["self"]],["bool"]]],[11,"extensions","","Request extensions",78,[[["self"]],["ref",["extensions"]]]],[11,"extensions_mut","","Mutable reference to a the request's extensions",78,[[["self"]],["refmut",["extensions"]]]],[11,"upgrade","","Check if request requires connection upgrade",78,[[["self"]],["bool"]]],[11,"connection_info","","Get ConnectionInfo for the correct request.",78,[[["self"]],["ref",["connectioninfo"]]]],[11,"server_settings","","Server settings",78,[[["self"]],["serversettings"]]],[11,"clone","actix_web::server","",79,[[["self"]],["self"]]],[11,"default","","",79,[[],["self"]]],[11,"local_addr","","Returns the socket address of the local half of this TCP connection",79,[[["self"]],["option",["socketaddr"]]]],[11,"secure","","Returns true if connection is secure(https)",79,[[["self"]],["bool"]]],[11,"host","","Returns host header value",79,[[["self"]],["str"]]],[11,"cpu_pool","","Returns default `CpuPool` for server",79,[[["self"]],["cpupool"]]],[11,"new","","Create new http server with application factory",80,[[["f"]],["self"]]],[11,"workers","","Set number of workers to start.",80,[[["self"],["usize"]],["self"]]],[11,"backlog","","Set the maximum number of pending connections.",80,[[["self"],["i32"]],["self"]]],[11,"keep_alive","","Set server keep-alive setting.",80,[[["self"],["t"]],["self"]]],[11,"server_hostname","","Set server host name.",80,[[["self"],["string"]],["self"]]],[11,"system_exit","","Stop actix system.",80,[[["self"]],["self"]]],[11,"signals","","Set alternative address for `ProcessSignals` actor.",80,[[["self"],["addr",["processsignals"]]],["self"]]],[11,"disable_signals","","Disable signal handling",80,[[["self"]],["self"]]],[11,"shutdown_timeout","","Timeout for graceful workers shutdown.",80,[[["self"],["u16"]],["self"]]],[11,"no_http2","","Disable `HTTP/2` support",80,[[["self"]],["self"]]],[11,"addrs","","Get addresses of bound sockets.",80,[[["self"]],["vec",["socketaddr"]]]],[11,"addrs_with_scheme","","Get addresses of bound sockets and the scheme for it.",80,[[["self"]],["vec"]]],[11,"listen","","Use listener for accepting incoming connection requests",80,[[["self"],["tcplistener"]],["self"]]],[11,"listen_tls","","Use listener for accepting incoming tls connection requests",80,[[["self"],["tcplistener"],["tlsacceptor"]],["self"]]],[11,"listen_ssl","","Use listener for accepting incoming tls connection requests",80,[[["self"],["tcplistener"],["sslacceptorbuilder"]],["result"]]],[11,"bind","","The socket address to bind",80,[[["self"],["s"]],["result"]]],[11,"bind_tls","","The ssl socket address to bind",80,[[["self"],["s"],["tlsacceptor"]],["result"]]],[11,"bind_ssl","","Start listening for incoming tls connections.",80,[[["self"],["s"],["sslacceptorbuilder"]],["result"]]],[11,"start","","Start listening for incoming connections.",80,[[["self"]],["addr"]]],[11,"run","","Spawn new thread and start listening for incoming connections.",80,[[["self"]]]],[11,"start_incoming","","Start listening for incoming connections from a stream.",80,[[["self"],["s"],["bool"]],["addr"]]],[11,"handle","","",80,[[["self"],["signal"],["context"]]]],[11,"handle","","",80,[[["self"],["pauseserver"],["context"]]]],[11,"handle","","",80,[[["self"],["resumeserver"],["context"]]]],[11,"handle","","",80,N],[8,"HttpHandler","","Low level http request handler",N,N],[16,"Task","","Request handling task",81,N],[10,"handle","","Handle request",81,[[["self"],["request"]],["result",["request"]]]],[8,"HttpHandlerTask","","Low level http request handler",N,N],[11,"poll_completed","","Poll task, this method is used before or after io object is available",82,[[["self"]],["poll",["error"]]]],[10,"poll_io","","Poll task when io object is available",82,[[["self"],["writer"]],["poll",["bool","error"]]]],[11,"disconnected","","Connection is disconnected",82,[[["self"]]]],[8,"IntoHttpHandler","","Conversion helper trait",N,N],[16,"Handler","","The associated type which is result of conversion.",83,N],[10,"into_handler","","Convert into `HttpHandler` object.",83,N],[11,"fmt","","",77,[[["self"],["formatter"]],["result"]]],[11,"eq","","",77,[[["self"],["keepalive"]],["bool"]]],[11,"ne","","",77,[[["self"],["keepalive"]],["bool"]]],[11,"clone","","",77,[[["self"]],["keepalive"]]],[11,"from","","",77,[[["usize"]],["self"]]],[11,"from","","",77,[[["option",["usize"]]],["self"]]],[0,"test","actix_web","Various helpers for Actix applications to use during testing.",N,N],[3,"TestServer","actix_web::test","The `TestServer` type.",N,N],[3,"TestServerBuilder","","An `TestServer` builder",N,N],[3,"TestApp","","Test application helper for testing request handlers.",N,N],[3,"TestRequest","","Test `HttpRequest` builder",N,N],[11,"new","","Start new test server",84,[[["f"]],["self"]]],[11,"build","","Create test server builder",84,[[],["testserverbuilder"]]],[11,"build_with_state","","Create test server builder with specific state factory",84,[[["f"]],["testserverbuilder"]]],[11,"with_factory","","Start new test server with application factory",84,[[["f"]],["self"]]],[11,"unused_addr","","Get firat available unused address",84,[[],["socketaddr"]]],[11,"addr","","Construct test server url",84,[[["self"]],["socketaddr"]]],[11,"url","","Construct test server url",84,[[["self"],["str"]],["string"]]],[11,"execute","","Execute future on current core",84,[[["self"],["f"]],["result"]]],[11,"ws","","Connect to websocket server",84,[[["self"]],["result",["clienterror"]]]],[11,"get","","Create `GET` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"post","","Create `POST` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"head","","Create `HEAD` request",84,[[["self"]],["clientrequestbuilder"]]],[11,"client","","Connect to test http server",84,[[["self"],["method"],["str"]],["clientrequestbuilder"]]],[11,"drop","","",84,[[["self"]]]],[11,"new","","Create a new test server",85,[[["f"]],["testserverbuilder"]]],[11,"ssl","","Create ssl server",85,[[["self"],["sslacceptorbuilder"]],["self"]]],[11,"start","","Configure test application and run test server",85,[[["self"],["f"]],["testserver"]]],[11,"handler","","Register handler for \"/\"",86,[[["self"],["f"]]]],[11,"middleware","","Register middleware",86,[[["self"],["t"]],["testapp"]]],[11,"resource","","Register resource. This method is similar to `App::resource()` method.",86,[[["self"],["str"],["f"]],["testapp"]]],[11,"into_handler","","",86,[[["self"]],["httpapplication"]]],[11,"default","","",87,[[],["testrequest"]]],[11,"with_uri","","Create TestRequest and set request uri",87,[[["str"]],["testrequest"]]],[11,"with_hdr","","Create TestRequest and set header",87,[[["h"]],["testrequest"]]],[11,"with_header","","Create TestRequest and set header",87,[[["k"],["v"]],["testrequest"]]],[11,"with_state","","Start HttpRequest build process with application state",87,[[["s"]],["testrequest"]]],[11,"version","","Set HTTP version of this request",87,[[["self"],["version"]],["self"]]],[11,"method","","Set HTTP method of this request",87,[[["self"],["method"]],["self"]]],[11,"uri","","Set HTTP Uri of this request",87,[[["self"],["str"]],["self"]]],[11,"set","","Set a header",87,[[["self"],["h"]],["self"]]],[11,"header","","Set a header",87,[[["self"],["k"],["v"]],["self"]]],[11,"param","","Set request path pattern parameter",87,[[["self"],["str"],["str"]],["self"]]],[11,"set_payload","","Set request payload",87,[[["self"],["b"]],["self"]]],[11,"prefix","","Set request's prefix",87,[[["self"],["u16"]],["self"]]],[11,"finish","","Complete request creation and generate `HttpRequest` instance",87,[[["self"]],["httprequest"]]],[11,"request","","Complete request creation and generate server `Request` instance",87,[[["self"]],["request"]]],[11,"run","","This method generates `HttpRequest` instance and runs handler with generated request.",87,[[["self"],["h"]],["result",["httpresponse","error"]]]],[11,"run_async","","This method generates `HttpRequest` instance and runs handler with generated request.",87,[[["self"],["h"]],["result",["httpresponse"]]]],[0,"ws","actix_web","`WebSocket` support for Actix",N,N],[3,"Client","actix_web::ws","`WebSocket` client",N,N],[3,"ClientHandshake","","Future that implementes client websocket handshake process.",N,N],[3,"ClientReader","","Websocket reader client",N,N],[3,"ClientWriter","","Websocket writer client",N,N],[3,"WebsocketContext","","Execution context for `WebSockets` actors",N,N],[3,"Frame","","A struct representing a `WebSocket` frame.",N,N],[3,"FramedMessage","","`WebSocket` message with framing.",N,N],[3,"CloseReason","","Reason for closing the connection",N,N],[12,"code","","Exit code",88,N],[12,"description","","Optional description of the exit code",88,N],[3,"WsStream","","Maps `Payload` stream into stream of `ws::Message` items",N,N],[4,"ClientError","","Websocket client error",N,N],[13,"InvalidUrl","","Invalid url",89,N],[13,"InvalidResponseStatus","","Invalid response status",89,N],[13,"InvalidUpgradeHeader","","Invalid upgrade header",89,N],[13,"InvalidConnectionHeader","","Invalid connection header",89,N],[13,"MissingConnectionHeader","","Missing CONNECTION header",89,N],[13,"MissingWebSocketAcceptHeader","","Missing SEC-WEBSOCKET-ACCEPT header",89,N],[13,"InvalidChallengeResponse","","Invalid challenge response",89,N],[13,"Http","","Http parsing error",89,N],[13,"Url","","Url parsing error",89,N],[13,"ResponseParseError","","Response parsing error",89,N],[13,"SendRequest","","Send request error",89,N],[13,"Protocol","","Protocol error",89,N],[13,"Io","","IO Error",89,N],[13,"Disconnected","","\"Disconnected\"",89,N],[4,"CloseCode","","Status code used to indicate why an endpoint is closing the `WebSocket` connection.",N,N],[13,"Normal","","Indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled.",90,N],[13,"Away","","Indicates that an endpoint is \"going away\", such as a server going down or a browser having navigated away from a page.",90,N],[13,"Protocol","","Indicates that an endpoint is terminating the connection due to a protocol error.",90,N],[13,"Unsupported","","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).",90,N],[13,"Abnormal","","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.",90,N],[13,"Invalid","","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 [RFC3629] data within a text message).",90,N],[13,"Policy","","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.",90,N],[13,"Size","","Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process.",90,N],[13,"Extension","","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.",90,N],[13,"Error","","Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.",90,N],[13,"Restart","","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.",90,N],[13,"Again","","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.",90,N],[4,"OpCode","","Operation codes as part of rfc6455.",N,N],[13,"Continue","","Indicates a continuation frame of a fragmented message.",91,N],[13,"Text","","Indicates a text data frame.",91,N],[13,"Binary","","Indicates a binary data frame.",91,N],[13,"Close","","Indicates a close control frame.",91,N],[13,"Ping","","Indicates a ping control frame.",91,N],[13,"Pong","","Indicates a pong control frame.",91,N],[13,"Bad","","Indicates an invalid opcode was received.",91,N],[4,"ProtocolError","","Websocket protocol errors",N,N],[13,"UnmaskedFrame","","Received an unmasked frame from client",92,N],[13,"MaskedFrame","","Received a masked frame from server",92,N],[13,"InvalidOpcode","","Encountered invalid opcode",92,N],[13,"InvalidLength","","Invalid control frame length",92,N],[13,"BadOpCode","","Bad web socket op code",92,N],[13,"Overflow","","A payload reached size limit.",92,N],[13,"NoContinuation","","Continuation is not supported",92,N],[13,"BadEncoding","","Bad utf-8 encoding",92,N],[13,"Payload","","Payload error",92,N],[4,"HandshakeError","","Websocket handshake errors",N,N],[13,"GetMethodRequired","","Only get method is allowed",93,N],[13,"NoWebsocketUpgrade","","Upgrade header if not set to websocket",93,N],[13,"NoConnectionUpgrade","","Connection header is not set to upgrade",93,N],[13,"NoVersionHeader","","Websocket version header is not set",93,N],[13,"UnsupportedVersion","","Unsupported websocket version",93,N],[13,"BadWebsocketKey","","Websocket key is not set or wrong",93,N],[4,"Message","","`WebSocket` Message",N,N],[13,"Text","","Text message",94,N],[13,"Binary","","Binary message",94,N],[13,"Ping","","Ping message",94,N],[13,"Pong","","Pong message",94,N],[13,"Close","","Close message with optional reason",94,N],[5,"start","","Do websocket handshake and start actor",N,[[["httprequest"],["a"]],["result",["httpresponse","error"]]]],[5,"handshake","","Prepare `WebSocket` handshake response.",N,[[["httprequest"]],["result",["httpresponsebuilder","handshakeerror"]]]],[11,"cause","","",89,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",89,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",89,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",89,[[["self"],["formatter"]],["result"]]],[11,"from","","",89,[[["error"]],["clienterror"]]],[11,"from","","",89,[[["urlparseerror"]],["clienterror"]]],[11,"from","","",89,[[["sendrequesterror"]],["clienterror"]]],[11,"from","","",89,[[["protocolerror"]],["clienterror"]]],[11,"from","","",89,[[["error"]],["clienterror"]]],[11,"new","","Create new websocket connection",95,[[["s"]],["client"]]],[11,"with_connector","","Create new websocket connection with custom `ClientConnector`",95,[[["s"],["addr",["clientconnector"]]],["client"]]],[11,"protocols","","Set supported websocket protocols",95,[[["self"],["u"]],["self"]]],[11,"cookie","","Set cookie for handshake request",95,[[["self"],["cookie"]],["self"]]],[11,"origin","","Set request Origin",95,[[["self"],["v"]],["self"]]],[11,"max_frame_size","","Set max frame size",95,[[["self"],["usize"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",95,[[["self"],["usize"]],["self"]]],[11,"no_masking","","Disable payload masking. By default ws client masks frame payload.",95,[[["self"]],["self"]]],[11,"header","","Set request header",95,[[["self"],["k"],["v"]],["self"]]],[11,"timeout","","Set websocket handshake timeout",95,[[["self"],["duration"]],["self"]]],[11,"connect","","Connect to websocket server and do ws handshake",95,[[["self"]],["clienthandshake"]]],[11,"timeout","","Set handshake timeout",96,[[["self"],["duration"]],["self"]]],[11,"conn_timeout","","Set connection timeout",96,[[["self"],["duration"]],["self"]]],[11,"poll","","",96,[[["self"]],["poll"]]],[11,"fmt","","",97,[[["self"],["formatter"]],["result"]]],[11,"poll","","",97,[[["self"]],["poll",["option"]]]],[11,"text","","Send text frame",98,[[["self"],["t"]]]],[11,"binary","","Send binary frame",98,[[["self"],["b"]]]],[11,"ping","","Send ping frame",98,[[["self"],["str"]]]],[11,"pong","","Send pong frame",98,[[["self"],["str"]]]],[11,"close","","Send close frame",98,[[["self"],["option",["closereason"]]]]],[11,"send_text","","Send text frame",98,[[["self"],["t"]]]],[11,"send_binary","","Send binary frame",98,[[["self"],["b"]]]],[11,"send_ping","","Send ping frame",98,[[["self"],["str"]]]],[11,"send_pong","","Send pong frame",98,[[["self"],["str"]]]],[11,"send_close","","Send close frame",98,[[["self"],["option",["closereason"]]]]],[11,"stop","","",99,[[["self"]]]],[11,"terminate","","",99,[[["self"]]]],[11,"state","","",99,[[["self"]],["actorstate"]]],[11,"spawn","","",99,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",99,[[["self"],["f"]]]],[11,"cancel_future","","",99,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",99,[[["self"]],["addr"]]],[11,"create","","Create a new Websocket context from a request and an actor",99,[[["httprequest"],["a"],["wsstream"]],["body"]]],[11,"with_factory","","Create a new Websocket context",99,[[["httprequest"],["f"]],["body"]]],[11,"write_raw","","Write payload",99,[[["self"],["framedmessage"]]]],[11,"state","","Shared application state",99,[[["self"]],["s"]]],[11,"request","","Incoming request",99,[[["self"]],["httprequest"]]],[11,"drain","","Returns drain future",99,[[["self"]],["drain"]]],[11,"text","","Send text frame",99,[[["self"],["t"]]]],[11,"binary","","Send binary frame",99,[[["self"],["b"]]]],[11,"ping","","Send ping frame",99,[[["self"],["str"]]]],[11,"pong","","Send pong frame",99,[[["self"],["str"]]]],[11,"close","","Send close frame",99,[[["self"],["option",["closereason"]]]]],[11,"connected","","Check if connection still open",99,[[["self"]],["bool"]]],[11,"handle","","Handle of the running future",99,[[["self"]],["spawnhandle"]]],[11,"send_text","","Send text frame",99,[[["self"],["t"]]]],[11,"send_binary","","Send binary frame",99,[[["self"],["b"]]]],[11,"send_ping","","Send ping frame",99,[[["self"],["str"]]]],[11,"send_pong","","Send pong frame",99,[[["self"],["str"]]]],[11,"send_close","","Send close frame",99,[[["self"],["option",["closereason"]]]]],[11,"parts","","",99,[[["self"]],["contextparts"]]],[11,"pack","","",99,[[["m"],["option",["sender"]]],["envelope"]]],[11,"fmt","","",100,[[["self"],["formatter"]],["result"]]],[11,"unpack","","Destruct frame",100,N],[11,"close","","Create a new Close control frame.",100,[[["option",["closereason"]],["bool"]],["framedmessage"]]],[11,"parse","","Parse the input stream into a frame.",100,[[["payloadbuffer"],["bool"],["usize"]],["poll",["option","protocolerror"]]]],[11,"parse_close_payload","","Parse the payload of a close frame.",100,[[["binary"]],["option",["closereason"]]]],[11,"message","","Generate binary representation",100,[[["b"],["opcode"],["bool"],["bool"]],["framedmessage"]]],[11,"default","","",100,[[],["frame"]]],[11,"fmt","","",100,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",101,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",91,[[["self"],["formatter"]],["result"]]],[11,"eq","","",91,[[["self"],["opcode"]],["bool"]]],[11,"clone","","",91,[[["self"]],["opcode"]]],[11,"fmt","","",91,[[["self"],["formatter"]],["result"]]],[11,"into","","",91,[[["self"]],["u8"]]],[11,"from","","",91,[[["u8"]],["opcode"]]],[11,"fmt","","",90,[[["self"],["formatter"]],["result"]]],[11,"eq","","",90,[[["self"],["closecode"]],["bool"]]],[11,"ne","","",90,[[["self"],["closecode"]],["bool"]]],[11,"clone","","",90,[[["self"]],["closecode"]]],[11,"into","","",90,[[["self"]],["u16"]]],[11,"from","","",90,[[["u16"]],["closecode"]]],[11,"fmt","","",88,[[["self"],["formatter"]],["result"]]],[11,"eq","","",88,[[["self"],["closereason"]],["bool"]]],[11,"ne","","",88,[[["self"],["closereason"]],["bool"]]],[11,"clone","","",88,[[["self"]],["closereason"]]],[11,"from","","",88,[[["closecode"]],["self"]]],[11,"from","","",88,N],[8,"WsWriter","","Common writing methods for a websocket.",N,N],[10,"send_text","","Send a text",102,[[["self"],["t"]]]],[10,"send_binary","","Send a binary",102,[[["self"],["b"]]]],[10,"send_ping","","Send a ping message",102,[[["self"],["str"]]]],[10,"send_pong","","Send a pong message",102,[[["self"],["str"]]]],[10,"send_close","","Close the connection",102,[[["self"],["option",["closereason"]]]]],[11,"cause","","",92,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",92,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",92,[[["self"],["formatter"]],["result"]]],[11,"fmt","","",92,[[["self"],["formatter"]],["result"]]],[11,"from","","",92,[[["payloaderror"]],["protocolerror"]]],[11,"cause","","",93,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",93,[[["self"]],["option",["backtrace"]]]],[11,"fmt","","",93,[[["self"],["formatter"]],["result"]]],[11,"eq","","",93,[[["self"],["handshakeerror"]],["bool"]]],[11,"fmt","","",93,[[["self"],["formatter"]],["result"]]],[11,"error_response","","",93,[[["self"]],["httpresponse"]]],[11,"fmt","","",94,[[["self"],["formatter"]],["result"]]],[11,"eq","","",94,[[["self"],["message"]],["bool"]]],[11,"ne","","",94,[[["self"],["message"]],["bool"]]],[11,"new","","Create new websocket frames stream",103,[[["s"]],["wsstream"]]],[11,"max_size","","Set max frame size",103,[[["self"],["usize"]],["self"]]],[11,"poll","","",103,[[["self"]],["poll",["option"]]]],[0,"actix","actix_web","Re-exports actix's prelude",N,N],[0,"resolver","actix_web::actix","DNS resolver and connector utility actor",N,N],[6,"Connector","actix_web::actix::resolver","",N,N],[6,"ConnectorError","","",N,N],[3,"Resolve","","",N,N],[3,"Connect","","",N,N],[3,"ConnectAddr","","",N,N],[12,"0","","",104,N],[4,"ResolverError","","",N,N],[13,"Resolver","","Failed to resolve the hostname",105,N],[13,"InvalidInput","","Address is invalid",105,N],[13,"Timeout","","Connecting took too long",105,N],[13,"IoError","","Connection io error",105,N],[3,"Resolver","","",N,N],[3,"TcpConnector","","Tcp stream connector",N,N],[0,"signal","actix_web::actix","An actor implementation of Unix signal handling",N,N],[4,"SignalType","actix_web::actix::signal","Different types of process signals",N,N],[13,"Hup","","SIGHUP",106,N],[13,"Int","","SIGINT",106,N],[13,"Term","","SIGTERM",106,N],[13,"Quit","","SIGQUIT",106,N],[13,"Child","","SIGCHILD",106,N],[3,"Signal","","Process signal message",N,N],[12,"0","","",107,N],[3,"ProcessSignals","","An actor implementation of Unix signal handling",N,N],[3,"Subscribe","","Subscribe to process signals.",N,N],[12,"0","","",108,N],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",N,N],[0,"fut","actix_web::actix","Custom `Future` implementation with `Actix` support",N,N],[8,"ActorFuture","actix_web::actix::fut","Trait for types which are a placeholder of a value that may become available at some later point in time.",N,N],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,N],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,N],[16,"Actor","","The actor within which this future runs",109,N],[10,"poll","","",109,N],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,[[["self"],["f"]],["map"]]],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,[[["self"],["f"]],["maperr"]]],[11,"drop_err","","Drop this future's error, returning a new future.",109,[[["self"]],["droperr"]]],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,[[["self"]],["fromerr"]]],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,[[["self"],["f"]],["then"]]],[11,"and_then","","Execute another future after this one has resolved successfully.",109,[[["self"],["f"]],["andthen"]]],[11,"timeout","","Add timeout to futures chain.",109,N],[8,"ActorStream","","A stream of values, not all of which may have been produced yet.",N,N],[16,"Item","","The type of item this stream will yield on success.",110,N],[16,"Error","","The type of error this stream may generate.",110,N],[16,"Actor","","The actor within which this stream runs.",110,N],[10,"poll","","",110,N],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,[[["self"],["f"]],["streammap"]]],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,[[["self"],["f"]],["streammaperr"]]],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,[[["self"],["f"]],["streamthen"]]],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,[[["self"],["f"]],["streamandthen"]]],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,[[["self"],["t"],["f"]],["streamfold"]]],[11,"timeout","","Add timeout to stream.",110,N],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,[[["self"]],["streamfinish"]]],[8,"IntoActorFuture","","Class of types which can be converted into an actor future.",N,N],[16,"Future","","The future that this type can be converted into.",111,N],[16,"Item","","The item that the future may resolve with.",111,N],[16,"Error","","The error that the future may resolve with.",111,N],[16,"Actor","","The actor within which this future runs",111,N],[10,"into_future","","Consumes this object and produces a future.",111,N],[8,"WrapFuture","","Helper trait that allows conversion of normal future into `ActorFuture`",N,N],[16,"Future","","The future that this type can be converted into.",112,N],[16,"Item","","The item that the future may resolve with.",112,N],[16,"Error","","The error that the future may resolve with.",112,N],[10,"into_actor","","Convert normal future to a ActorFuture",112,N],[3,"FutureWrap","","",N,N],[5,"wrap_future","","Converts normal future into `ActorFuture`",N,[[["f"]],["futurewrap"]]],[8,"WrapStream","","Helper trait that allows conversion of normal stream into `ActorStream`",N,N],[16,"Stream","","The stream that this type can be converted into.",113,N],[16,"Item","","The item that the future may resolve with.",113,N],[16,"Error","","The error that the future may resolve with.",113,N],[10,"into_actor","","Convert normal stream to a ActorStream",113,N],[3,"StreamWrap","","",N,N],[5,"wrap_stream","","Converts normal stream into `ActorStream`",N,[[["s"]],["streamwrap"]]],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"DropErr","","",N,N],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",N,N],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",N,[[["result"]],["futureresult"]]],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",N,[[["t"]],["futureresult"]]],[3,"Map","","Future for the `map` combinator, changing the type of a future.",N,N],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",N,N],[13,"A","","First branch of the type",114,N],[13,"B","","Second branch of the type",114,N],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",N,N],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",N,N],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",N,[[["e"]],["futureresult"]]],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",N,N],[3,"FutureResult","","A future representing a value that is immediately ready.",N,N],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",N,N],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",N,N],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",N,N],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",N,N],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",N,N],[0,"msgs","actix_web::actix","Actix system messages",N,N],[3,"StopArbiter","actix_web::actix::msgs","Stop arbiter execution",N,N],[12,"0","","",115,N],[3,"StartActor","","Start actor in arbiter's thread",N,N],[3,"Execute","","Execute function in arbiter's thread",N,N],[0,"actix","actix_web::actix","",N,N],[8,"StreamHandler","actix_web::actix::actix","Stream handler",N,N],[10,"handle","","Method is called for every message received by this Actor",116,N],[11,"started","","Method is called when stream get polled first time.",116,N],[11,"error","","Method is called when stream emits error.",116,N],[11,"finished","","Method is called when stream finishes.",116,N],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",116,N],[3,"MessageResult","","Helper type that implements `MessageResponse` trait",N,N],[12,"0","","",117,N],[4,"ActorState","","Actor execution state",N,N],[13,"Started","","Actor is started.",118,N],[13,"Running","","Actor is running.",118,N],[13,"Stopping","","Actor is stopping.",118,N],[13,"Stopped","","Actor is stopped.",118,N],[8,"Actor","","Actors are objects which encapsulate state and behavior.",N,N],[16,"Context","","Actor execution context type",119,N],[11,"started","","Method is called when actor get polled first time.",119,N],[11,"stopping","","Method is called after an actor is in `Actor::Stopping` state. There could be several reasons for stopping. `Context::stop` get called by the actor itself. All addresses to current actor get dropped and no more evented objects left in the context.",119,N],[11,"stopped","","Method is called after an actor is stopped, it can be used to perform any needed cleanup work or spawning more actors. This is final state, after this call actor get dropped.",119,N],[11,"start","","Start new asynchronous actor, returns address of newly created actor.",119,[[["self"]],["addr"]]],[11,"start_default","","Start new asynchronous actor, returns address of newly created actor.",119,[[],["addr"]]],[11,"create","","Use `create` method, if you need `Context` object during actor initialization.",119,[[["f"]],["addr"]]],[8,"ContextFutureSpawner","","Helper trait which can spawn future into actor's context",N,N],[10,"spawn","","spawn future into `Context`",120,N],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",120,N],[3,"Recipient","","`Recipient` type allows to send one specific message to an actor.",N,N],[3,"System","","System is an actor which manages runtime.",N,N],[4,"Running","","",N,N],[13,"Stop","","",121,N],[13,"Continue","","",121,N],[8,"Supervised","","Actors with ability to restart after failure",N,N],[11,"restarting","","Method called when supervisor restarting failed actor",122,N],[8,"Handler","","Message handler",N,N],[16,"Result","","The type of value that this handle will return",123,N],[10,"handle","","Method is called for every message received by this Actor",123,N],[0,"actors","","Helper actors",N,N],[0,"resolver","actix_web::actix::actix::actors","DNS resolver and connector utility actor",N,N],[6,"Connector","actix_web::actix::actix::actors::resolver","",N,N],[6,"ConnectorError","","",N,N],[3,"Resolve","","",N,N],[3,"Connect","","",N,N],[3,"ConnectAddr","","",N,N],[12,"0","","",104,N],[4,"ResolverError","","",N,N],[13,"Resolver","","Failed to resolve the hostname",105,N],[13,"InvalidInput","","Address is invalid",105,N],[13,"Timeout","","Connecting took too long",105,N],[13,"IoError","","Connection io error",105,N],[3,"Resolver","","",N,N],[3,"TcpConnector","","Tcp stream connector",N,N],[0,"signal","actix_web::actix::actix::actors","An actor implementation of Unix signal handling",N,N],[4,"SignalType","actix_web::actix::actix::actors::signal","Different types of process signals",N,N],[13,"Hup","","SIGHUP",106,N],[13,"Int","","SIGINT",106,N],[13,"Term","","SIGTERM",106,N],[13,"Quit","","SIGQUIT",106,N],[13,"Child","","SIGCHILD",106,N],[3,"Signal","","Process signal message",N,N],[12,"0","","",107,N],[3,"ProcessSignals","","An actor implementation of Unix signal handling",N,N],[3,"Subscribe","","Subscribe to process signals.",N,N],[12,"0","","",108,N],[3,"DefaultSignalsHandler","","Default signals handler. This actor sends `SystemExit` message to `System` actor for each of `SIGINT`, `SIGTERM`, `SIGQUIT` signals.",N,N],[8,"ActorStream","actix_web::actix::actix","A stream of values, not all of which may have been produced yet.",N,N],[16,"Item","","The type of item this stream will yield on success.",110,N],[16,"Error","","The type of error this stream may generate.",110,N],[16,"Actor","","The actor within which this stream runs.",110,N],[10,"poll","","",110,N],[11,"map","","Converts a stream of type `T` to a stream of type `U`.",110,[[["self"],["f"]],["streammap"]]],[11,"map_err","","Converts a stream of error type `T` to a stream of error type `E`.",110,[[["self"],["f"]],["streammaperr"]]],[11,"then","","Chain on a computation for when a value is ready, passing the resulting item to the provided closure `f`.",110,[[["self"],["f"]],["streamthen"]]],[11,"and_then","","Chain on a computation for when a value is ready, passing the successful results to the provided closure `f`.",110,[[["self"],["f"]],["streamandthen"]]],[11,"fold","","Execute an accumulating computation over a stream, collecting all the values into one final result.",110,[[["self"],["t"],["f"]],["streamfold"]]],[11,"timeout","","Add timeout to stream.",110,N],[11,"finish","","Converts a stream to a future that resolves when stream finishes.",110,[[["self"]],["streamfinish"]]],[0,"io","","",N,N],[8,"WriteHandler","actix_web::actix::actix::io","Write handler",N,N],[11,"error","","Method is called when writer emits error.",124,N],[11,"finished","","Method is called when writer finishes.",124,N],[3,"Writer","","Wrapper for `AsyncWrite` types",N,N],[3,"FramedWrite","","Wrapper for `AsyncWrite` and `Encoder` types",N,N],[3,"Condition","actix_web::actix::actix","",N,N],[8,"SystemService","","Trait defines system's service.",N,N],[11,"start_service","","Construct and srtart system service",125,[[["addr"]],["addr"]]],[11,"service_started","","Method is called during service initialization.",125,N],[11,"from_registry","","Get actor's address from system registry",125,[[],["addr"]]],[3,"SpawnHandle","","Spawned future handle. Could be used for cancelling spawned future.",N,N],[3,"RecipientRequest","","`RecipientRequest` is a `Future` which represents asynchronous message sending process.",N,N],[4,"SendError","","",N,N],[13,"Full","","",126,N],[13,"Closed","","",126,N],[6,"ResponseActFuture","","A specialized actor future for async message handler",N,N],[3,"SyncContext","","Sync actor execution context",N,N],[3,"Context","","Actor execution context",N,N],[8,"AsyncContext","","Asynchronous execution context",N,N],[10,"address","","Return `Address` of the context",127,[[["self"]],["addr"]]],[10,"spawn","","Spawn async future into context. Returns handle of the item, could be used for cancelling execution.",127,[[["self"],["f"]],["spawnhandle"]]],[10,"wait","","Spawn future into the context. Stop processing any of incoming events until this future resolves.",127,N],[10,"waiting","","Check if context is paused (waiting for future completion or stopping)",127,[[["self"]],["bool"]]],[10,"cancel_future","","Cancel future. handle is a value returned by `spawn` method.",127,[[["self"],["spawnhandle"]],["bool"]]],[11,"add_stream","","This method register stream to an actor context and allows to handle `Stream` in similar way as normal actor messages.",127,[[["self"],["s"]],["spawnhandle"]]],[11,"add_message_stream","","This method is similar to `add_stream` but it skips stream errors.",127,N],[11,"notify","","Send message `msg` to self.",127,N],[11,"notify_later","","Send message `msg` to self after specified period of time. Returns spawn handle which could be used for cancellation. Notification get cancelled if context's stop method get called.",127,[[["self"],["m"],["duration"]],["spawnhandle"]]],[11,"run_later","","Execute closure after specified period of time within same Actor and Context. Execution get cancelled if context's stop method get called.",127,[[["self"],["duration"],["f"]],["spawnhandle"]]],[11,"run_interval","","Spawns job to execute closure with specified interval",127,[[["self"],["duration"],["f"]],["spawnhandle"]]],[8,"WrapFuture","","Helper trait that allows conversion of normal future into `ActorFuture`",N,N],[16,"Future","","The future that this type can be converted into.",112,N],[16,"Item","","The item that the future may resolve with.",112,N],[16,"Error","","The error that the future may resolve with.",112,N],[10,"into_actor","","Convert normal future to a ActorFuture",112,N],[3,"ActorResponse","","Helper type for representing different type of message responses",N,N],[8,"ArbiterService","","Trait defines arbiter's service.",N,N],[11,"start_service","","Construct and srtart arbiter service",128,[[],["addr"]]],[11,"service_started","","Method is called during service initialization.",128,N],[11,"from_registry","","Get actor's address from arbiter registry",128,[[],["addr"]]],[3,"Supervisor","","Actor supervisor",N,N],[3,"Request","","`Request` is a `Future` which represents asynchronous message sending process.",N,N],[3,"Response","","Helper type for representing different type of message responses",N,N],[8,"Message","","Message type",N,N],[16,"Result","","The type of value that this message will resolved with if it is successful.",129,N],[6,"ResponseFuture","","A specialized future for async message handler",N,N],[8,"ActorContext","","Actor execution context",N,N],[10,"stop","","Immediately stop processing incoming messages and switch to a `stopping` state",130,N],[10,"terminate","","Terminate actor execution",130,N],[10,"state","","Actor execution state",130,[[["self"]],["actorstate"]]],[3,"SyncArbiter","","Sync arbiter",N,N],[8,"ActorFuture","","Trait for types which are a placeholder of a value that may become available at some later point in time.",N,N],[16,"Item","","The type of value that this future will resolved with if it is successful.",109,N],[16,"Error","","The type of error that this future will resolve with if it fails in a normal fashion.",109,N],[16,"Actor","","The actor within which this future runs",109,N],[10,"poll","","",109,N],[11,"map","","Map this future's result to a different type, returning a new future of the resulting type.",109,[[["self"],["f"]],["map"]]],[11,"map_err","","Map this future's error to a different error, returning a new future.",109,[[["self"],["f"]],["maperr"]]],[11,"drop_err","","Drop this future's error, returning a new future.",109,[[["self"]],["droperr"]]],[11,"from_err","","Map this future's error to any error implementing `From` for this future's `Error`, returning a new future.",109,[[["self"]],["fromerr"]]],[11,"then","","Chain on a computation for when a future finished, passing the result of the future to the provided closure `f`.",109,[[["self"],["f"]],["then"]]],[11,"and_then","","Execute another future after this one has resolved successfully.",109,[[["self"],["f"]],["andthen"]]],[11,"timeout","","Add timeout to futures chain.",109,N],[4,"MailboxError","","Set of error that can occurred during message delivery process",N,N],[13,"Closed","","",131,N],[13,"Timeout","","",131,N],[3,"Arbiter","","Event loop controller",N,N],[3,"Addr","","Address of the actor",N,N],[0,"msgs","","Actix system messages",N,N],[3,"StopArbiter","actix_web::actix::actix::msgs","Stop arbiter execution",N,N],[12,"0","","",115,N],[3,"StartActor","","Start actor in arbiter's thread",N,N],[3,"Execute","","Execute function in arbiter's thread",N,N],[8,"WrapStream","actix_web::actix::actix","Helper trait that allows conversion of normal stream into `ActorStream`",N,N],[16,"Stream","","The stream that this type can be converted into.",113,N],[16,"Item","","The item that the future may resolve with.",113,N],[16,"Error","","The error that the future may resolve with.",113,N],[10,"into_actor","","Convert normal stream to a ActorStream",113,N],[0,"fut","","Custom `Future` implementation with `Actix` support",N,N],[8,"IntoActorFuture","actix_web::actix::actix::fut","Class of types which can be converted into an actor future.",N,N],[16,"Future","","The future that this type can be converted into.",111,N],[16,"Item","","The item that the future may resolve with.",111,N],[16,"Error","","The error that the future may resolve with.",111,N],[16,"Actor","","The actor within which this future runs",111,N],[10,"into_future","","Consumes this object and produces a future.",111,N],[3,"FutureWrap","","",N,N],[5,"wrap_future","","Converts normal future into `ActorFuture`",N,[[["f"]],["futurewrap"]]],[3,"StreamWrap","","",N,N],[5,"wrap_stream","","Converts normal stream into `ActorStream`",N,[[["s"]],["streamwrap"]]],[3,"StreamTimeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"DropErr","","",N,N],[3,"StreamFinish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamThen","","A stream combinator which chains a computation onto each item produced by a stream.",N,N],[5,"result","","Creates a new \"leaf future\" which will resolve with the given result.",N,[[["result"]],["futureresult"]]],[5,"ok","","Creates a \"leaf future\" from an immediate value of a finished and successful computation.",N,[[["t"]],["futureresult"]]],[3,"Map","","Future for the `map` combinator, changing the type of a future.",N,N],[4,"Either","","Combines two different futures yielding the same item and error types into a single type.",N,N],[13,"A","","First branch of the type",114,N],[13,"B","","Second branch of the type",114,N],[3,"StreamAndThen","","A stream combinator which chains a computation onto values produced by a stream.",N,N],[3,"AndThen","","Future for the `and_then` combinator, chaining a computation onto the end of another future which completes successfully.",N,N],[5,"err","","Creates a \"leaf future\" from an immediate value of a failed computation.",N,[[["e"]],["futureresult"]]],[3,"StreamMapErr","","A stream combinator which will change the error type of a stream from one type to another.",N,N],[3,"FutureResult","","A future representing a value that is immediately ready.",N,N],[3,"StreamMap","","A stream combinator which will change the type of a stream from one type to another.",N,N],[3,"Timeout","","Future for the `timeout` combinator, interrupts computations if it takes more than `timeout`.",N,N],[3,"Then","","Future for the `then` combinator, chaining computations on the end of another future regardless of its outcome.",N,N],[3,"MapErr","","Future for the `map_err` combinator, changing the error type of a future.",N,N],[3,"Finish","","A combinator used to convert stream into a future, future resolves when stream completes.",N,N],[3,"StreamFold","","A future used to collect all the results of a stream into one generic type.",N,N],[3,"FromErr","","Future for the `from_err` combinator, changing the error type of a future.",N,N],[0,"dev","actix_web::actix::actix","The `actix` prelude for library developers",N,N],[8,"AsyncContextParts","actix_web::actix::actix::dev","",N,N],[10,"parts","","",132,[[["self"]],["contextparts"]]],[8,"ResponseChannel","","Trait defines message response channel",N,N],[10,"is_canceled","","",133,[[["self"]],["bool"]]],[10,"send","","",133,N],[8,"ToEnvelope","","Converter trait, packs message to suitable envelope",N,N],[10,"pack","","Pack message into suitable envelope",134,[[["m"],["option",["sender"]]],["envelope"]]],[3,"SystemRegistry","","System wide actors registry",N,N],[8,"MessageResponse","","Trait which defines message response",N,N],[10,"handle","","",135,N],[3,"Envelope","","",N,N],[3,"ContextParts","","",N,N],[3,"Registry","","Actors registry",N,N],[3,"ContextFut","","",N,N],[3,"Mailbox","","",N,N],[5,"run","actix_web::actix","Start the System and execute supplied future.",N,N],[5,"spawn","","Spawns a future on the current arbiter.",N,N],[0,"dev","actix_web","The `actix-web` prelude for library developers",N,N],[3,"Drain","actix_web::dev","Consume a future",N,N],[3,"FormConfig","","Form extractor configuration",N,N],[3,"PayloadConfig","","Payload configuration for request's payload.",N,N],[3,"AsyncResult","","Represents async result",N,N],[3,"MessageBody","","Future that resolves to a complete http message body.",N,N],[3,"UrlEncoded","","Future that resolves to a parsed urlencoded values.",N,N],[3,"HttpResponseBuilder","","An HTTP response builder",N,N],[3,"ConnectionInfo","","`HttpRequest` connection information",N,N],[3,"JsonBody","","Request payload json parser that resolves to a deserialized `T` value.",N,N],[3,"JsonConfig","","Json extractor configuration",N,N],[3,"Params","","Route match information",N,N],[3,"Payload","","Buffered stream of bytes chunks",N,N],[3,"PayloadBuffer","","Payload buffer",N,N],[3,"Resource","","Resource is an entry in route table which corresponds to requested URL.",N,N],[3,"Route","","Resource route definition",N,N],[3,"ResourceDef","","Resource type describes an entry in resources table",N,N],[3,"ResourceInfo","","Information about current resource",N,N],[3,"Router","","Interface for application router.",N,N],[4,"ResourceType","","Resource type",N,N],[13,"Normal","","Normal resource",136,N],[13,"Default","","Resource for application default handler",136,N],[13,"External","","External resource",136,N],[13,"Unset","","Unknown resource type",136,N],[6,"BodyStream","","Type represent streaming body",N,N],[8,"Handler","","Trait defines object that could be registered as route handler",N,N],[16,"Result","","The type of value that handler will return.",137,N],[10,"handle","","Handle request",137,N],[8,"FromParam","","A trait to abstract the idea of creating a new instance of a type from a path parameter.",N,N],[16,"Err","","The associated error which can be returned from parsing.",138,N],[10,"from_param","","Parses a string `s` to return a value of this type.",138,[[["str"]],["result"]]],[0,"http","actix_web","Various HTTP related types",N,N],[3,"Method","actix_web::http","The Request Method (VERB)",N,N],[3,"StatusCode","","An HTTP status code (`status-code` in RFC 7230 et al.).",N,N],[3,"Version","","Represents a version of the HTTP spec.",N,N],[3,"Cookie","","Representation of an HTTP cookie.",N,N],[3,"CookieBuilder","","Structure that follows the builder pattern for building `Cookie` structs.",N,N],[3,"NormalizePath","","Path normalization helper",N,N],[4,"ContentEncoding","","Represents supported types of content encodings",N,N],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,N],[13,"Br","","A format using the Brotli algorithm",139,N],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,N],[13,"Gzip","","Gzip algorithm",139,N],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,N],[4,"ConnectionType","","Represents various types of connection",N,N],[13,"Close","","Close connection after response",140,N],[13,"KeepAlive","","Keep connection alive after response",140,N],[13,"Upgrade","","Connection is upgraded to different type",140,N],[0,"header","","Various http headers",N,N],[17,"AGE","actix_web::http::header","Indicates the time in seconds the object has been in a proxy cache.",N,N],[17,"CONTENT_ENCODING","","Used to compress the media-type.",N,N],[17,"IF_NONE_MATCH","","Makes a request conditional based on the E-Tag.",N,N],[3,"HeaderName","","Represents an HTTP header field name",N,N],[17,"PROXY_AUTHORIZATION","","Contains the credentials to authenticate a user agent to a proxy server.",N,N],[17,"DATE","","Contains the date and time at which the message was originated.",N,N],[17,"ACCEPT_ENCODING","","Advertises which content encoding the client is able to understand.",N,N],[17,"ACCEPT_CHARSET","","Advertises which character set the client is able to understand.",N,N],[3,"Iter","","`HeaderMap` entry iterator.",N,N],[17,"ACCESS_CONTROL_REQUEST_METHOD","","Informs the server know which HTTP method will be used when the actual request is made.",N,N],[3,"OccupiedEntry","","A view into a single occupied location in a `HeaderMap`.",N,N],[17,"CONNECTION","","Controls whether or not the network connection stays open after the current transaction finishes.",N,N],[3,"InvalidHeaderValue","","A possible error when converting a `HeaderValue` from a string or byte slice.",N,N],[17,"ACCESS_CONTROL_ALLOW_ORIGIN","","Indicates whether the response can be shared with resources with the given origin.",N,N],[3,"Drain","","A drain iterator for `HeaderMap`.",N,N],[17,"SEC_WEBSOCKET_PROTOCOL","","The |Sec-WebSocket-Protocol| header field is used in the WebSocket opening handshake. It is sent from the client to the server and back from the server to the client to confirm the subprotocol of the connection. This enables scripts to both select a subprotocol and be sure that the server agreed to serve that subprotocol.",N,N],[3,"HeaderValue","","Represents an HTTP header field value.",N,N],[17,"PRAGMA","","HTTP/1.0 header usually used for backwards compatibility.",N,N],[3,"Values","","`HeaderMap` value iterator.",N,N],[17,"X_DNS_PREFETCH_CONTROL","","Controls DNS prefetching.",N,N],[17,"SEC_WEBSOCKET_ACCEPT","","The |Sec-WebSocket-Accept| header field is used in the WebSocket opening handshake. It is sent from the server to the client to confirm that the server is willing to initiate the WebSocket connection.",N,N],[17,"REFERER","","Contains the address of the previous web page from which a link to the currently requested page was followed.",N,N],[3,"ValueDrain","","An drain iterator of all values associated with a single header name.",N,N],[17,"STRICT_TRANSPORT_SECURITY","","Tells the client to communicate with HTTPS instead of using HTTP.",N,N],[17,"TRANSFER_ENCODING","","Specifies the form of encoding used to safely transfer the entity to the client.",N,N],[17,"SET_COOKIE","","Used to send cookies from the server to the user agent.",N,N],[17,"LOCATION","","Indicates the URL to redirect a page to.",N,N],[17,"AUTHORIZATION","","Contains the credentials to authenticate a user agent with a server.",N,N],[17,"CONTENT_DISPOSITION","","Indicates if the content is expected to be displayed inline.",N,N],[17,"WARNING","","General HTTP header contains information about possible problems with the status of the message.",N,N],[17,"CONTENT_SECURITY_POLICY_REPORT_ONLY","","Allows experimenting with policies by monitoring their effects.",N,N],[17,"ACCESS_CONTROL_ALLOW_HEADERS","","Preflight response indicating permitted HTTP headers.",N,N],[3,"ToStrError","","A possible error when converting a `HeaderValue` to a string representation.",N,N],[17,"CONTENT_SECURITY_POLICY","","Allows controlling resources the user agent is allowed to load for a given page.",N,N],[8,"AsHeaderName","","A marker trait used to identify values that can be used as search keys to a `HeaderMap`.",N,N],[17,"REFRESH","","Informs the web browser that the current page or frame should be refreshed.",N,N],[17,"EXPECT","","Indicates expectations that need to be fulfilled by the server in order to properly handle the request.",N,N],[17,"FROM","","Contains an Internet email address for a human user who controls the requesting user agent.",N,N],[17,"LINK","","Allows the server to point an interested client to another resource containing metadata about the requested resource.",N,N],[17,"ORIGIN","","Indicates where a fetch originates from.",N,N],[17,"LAST_MODIFIED","","Content-Types that are acceptable for the response.",N,N],[17,"CONTENT_LOCATION","","Indicates an alternate location for the returned data.",N,N],[17,"RANGE","","Indicates the part of a document that the server should return.",N,N],[17,"ACCESS_CONTROL_ALLOW_CREDENTIALS","","Preflight response indicating if the response to the request can be exposed to the page.",N,N],[17,"SEC_WEBSOCKET_KEY","","The |Sec-WebSocket-Key| header field is used in the WebSocket opening handshake. It is sent from the client to the server to provide part of the information used by the server to prove that it received a valid WebSocket opening handshake. This helps ensure that the server does not accept connections from non-WebSocket clients (e.g., HTTP clients) that are being abused to send data to unsuspecting WebSocket servers.",N,N],[4,"Entry","","A view into a single location in a `HeaderMap`, which may be vacant or occupied.",N,N],[13,"Occupied","","An occupied entry",141,N],[13,"Vacant","","A vacant entry",141,N],[17,"SERVER","","Contains information about the software used by the origin server to handle the request.",N,N],[17,"FORWARDED","","Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.",N,N],[17,"ACCESS_CONTROL_REQUEST_HEADERS","","Informs the server which HTTP headers will be used when an actual request is made.",N,N],[17,"ALLOW","","Lists the set of methods support by a resource.",N,N],[17,"CONTENT_LANGUAGE","","Used to describe the languages intended for the audience.",N,N],[3,"Keys","","An iterator over `HeaderMap` keys.",N,N],[3,"ValueIter","","An iterator of all values associated with a single header name.",N,N],[17,"UPGRADE_INSECURE_REQUESTS","","Sends a signal to the server expressing the client’s preference for an encrypted and authenticated response.",N,N],[17,"PUBLIC_KEY_PINS","","Associates a specific cryptographic public key with a certain server.",N,N],[17,"ACCESS_CONTROL_EXPOSE_HEADERS","","Indicates which headers can be exposed as part of the response by listing their names.",N,N],[17,"TRAILER","","Allows the sender to include additional fields at the end of chunked messages.",N,N],[17,"SEC_WEBSOCKET_VERSION","","The |Sec-WebSocket-Version| header field is used in the WebSocket opening handshake. It is sent from the client to the server to indicate the protocol version of the connection. This enables servers to correctly interpret the opening handshake and subsequent data being sent from the data, and close the connection if the server cannot interpret that data in a safe manner.",N,N],[17,"IF_MODIFIED_SINCE","","Makes a request conditional based on the modification date.",N,N],[17,"IF_UNMODIFIED_SINCE","","Makes the request conditional based on the last modification date.",N,N],[17,"PROXY_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a proxy.",N,N],[17,"DNT","","Indicates the client's tracking preference.",N,N],[17,"COOKIE","","Contains stored HTTP cookies previously sent by the server with the Set-Cookie header.",N,N],[17,"X_XSS_PROTECTION","","Stop pages from loading when an XSS attack is detected.",N,N],[17,"X_FRAME_OPTIONS","","Indicates whether or not a browser should be allowed to render a page in a frame.",N,N],[17,"ACCEPT","","Advertises which content types the client is able to understand.",N,N],[17,"TE","","Informs the server of transfer encodings willing to be accepted as part of the response.",N,N],[3,"IntoIter","","An owning iterator over the entries of a `HeaderMap`.",N,N],[17,"UPGRADE","","Used as part of the exchange to upgrade the protocol.",N,N],[17,"MAX_FORWARDS","","Indicates the max number of intermediaries the request should be sent through.",N,N],[17,"IF_MATCH","","Makes a request conditional based on the E-Tag.",N,N],[17,"HOST","","Specifies the domain name of the server and (optionally) the TCP port number on which the server is listening.",N,N],[17,"IF_RANGE","","Makes a request conditional based on range.",N,N],[17,"CACHE_CONTROL","","Specifies directives for caching mechanisms in both requests and responses.",N,N],[17,"CONTENT_TYPE","","Used to indicate the media type of the resource.",N,N],[17,"ACCEPT_RANGES","","Marker used by the server to advertise partial request support.",N,N],[17,"ACCESS_CONTROL_ALLOW_METHODS","","Preflight header response indicating permitted access methods.",N,N],[8,"IntoHeaderName","","A marker trait used to identify values that can be used as insert keys to a `HeaderMap`.",N,N],[17,"RETRY_AFTER","","The Retry-After response HTTP header indicates how long the user agent should wait before making a follow-up request. There are two main cases this header is used:",N,N],[17,"CONTENT_RANGE","","Indicates where in a full body message a partial message belongs.",N,N],[17,"ALT_SVC","","Advertises the availability of alternate services to clients.",N,N],[3,"InvalidHeaderNameBytes","","A possible error when converting a `HeaderName` from another type.",N,N],[3,"VacantEntry","","A view into a single empty location in a `HeaderMap`.",N,N],[17,"X_CONTENT_TYPE_OPTIONS","","Marker used by the server to indicate that the MIME types advertised in the `content-type` headers should not be changed and be followed.",N,N],[17,"VIA","","Added by proxies to track routing.",N,N],[17,"WWW_AUTHENTICATE","","Defines the authentication method that should be used to gain access to a resource.",N,N],[17,"REFERRER_POLICY","","Governs which referrer information should be included with requests made.",N,N],[17,"ETAG","","Identifier for a specific version of a resource.",N,N],[3,"ValueIterMut","","A mutable iterator of all values associated with a single header name.",N,N],[3,"InvalidHeaderName","","A possible error when converting a `HeaderName` from another type.",N,N],[3,"InvalidHeaderValueBytes","","A possible error when converting a `HeaderValue` from a string or byte slice.",N,N],[17,"VARY","","Determines how to match future requests with cached responses.",N,N],[17,"USER_AGENT","","Contains a string that allows identifying the requesting client's software.",N,N],[17,"PUBLIC_KEY_PINS_REPORT_ONLY","","Sends reports of pinning violation to the report-uri specified in the header.",N,N],[17,"SEC_WEBSOCKET_EXTENSIONS","","The |Sec-WebSocket-Extensions| header field is used in the WebSocket opening handshake. It is initially sent from the client to the server, and then subsequently sent from the server to the client, to agree on a set of protocol-level extensions to use for the duration of the connection.",N,N],[3,"GetAll","","A view to all values stored in a single entry.",N,N],[17,"CONTENT_LENGTH","","Indicates the size fo the entity-body.",N,N],[17,"ACCEPT_LANGUAGE","","Advertises which languages the client is able to understand.",N,N],[3,"HeaderMap","","A set of HTTP headers",N,N],[17,"EXPIRES","","Contains the date/time after which the response is considered stale.",N,N],[17,"ACCESS_CONTROL_MAX_AGE","","Indicates how long the results of a preflight request can be cached.",N,N],[3,"LanguageTag","","A language tag as described in BCP47.",N,N],[12,"language","","Language subtags are used to indicate the language, ignoring all other aspects such as script, region or spefic invariants.",142,N],[12,"extlangs","","Extended language subtags are used to identify certain specially selected languages that, for various historical and compatibility reasons, are closely identified with or tagged using an existing primary language subtag.",142,N],[12,"script","","Script subtags are used to indicate the script or writing system variations that distinguish the written forms of a language or its dialects.",142,N],[12,"region","","Region subtags are used to indicate linguistic variations associated with or appropriate to a specific country, territory, or region. Typically, a region subtag is used to indicate variations such as regional dialects or usage, or region-specific spelling conventions. It can also be used to indicate that content is expressed in a way that is appropriate for use throughout a region, for instance, Spanish content tailored to be useful throughout Latin America.",142,N],[12,"variants","","Variant subtags are used to indicate additional, well-recognized variations that define a language or its dialects that are not covered by other available subtags.",142,N],[12,"extensions","","Extensions provide a mechanism for extending language tags for use in various applications. They are intended to identify information that is commonly used in association with languages or language tags but that is not part of language identification.",142,N],[12,"privateuse","","Private use subtags are used to indicate distinctions in language that are important in a given context by private agreement.",142,N],[3,"ExtendedValue","","An extended header parameter value (i.e., tagged with a character set and optionally, a language), as defined in RFC 5987.",N,N],[12,"charset","","The character set that is used to encode the `value` to a string.",143,N],[12,"language_tag","","The human language details of the `value`, if available.",143,N],[12,"value","","The parameter value, as expressed in octets.",143,N],[3,"ContentDisposition","","A `Content-Disposition` header, (re)defined in RFC6266.",N,N],[12,"disposition","","The disposition",144,N],[12,"parameters","","Disposition parameters",144,N],[4,"ContentEncoding","","Represents supported types of content encodings",N,N],[13,"Auto","","Automatically select encoding based on encoding negotiation",139,N],[13,"Br","","A format using the Brotli algorithm",139,N],[13,"Deflate","","A format using the zlib structure with deflate algorithm",139,N],[13,"Gzip","","Gzip algorithm",139,N],[13,"Identity","","Indicates the identity function (i.e. no compression, nor modification)",139,N],[4,"DispositionType","","The implied disposition of the content of the HTTP body.",N,N],[13,"Inline","","Inline implies default processing",145,N],[13,"Attachment","","Attachment implies that the recipient should prompt the user to save the response locally, rather than process it normally (as per its media type).",145,N],[13,"Ext","","Extension type. Should be handled by recipients the same way as Attachment",145,N],[4,"DispositionParam","","A parameter to the disposition type.",N,N],[13,"Filename","","A Filename consisting of a Charset, an optional LanguageTag, and finally a sequence of bytes representing the filename",146,N],[13,"Ext","","Extension type consisting of token and value. Recipients should ignore unrecognized parameters.",146,N],[4,"Charset","","A Mime charset.",N,N],[13,"Us_Ascii","","US ASCII",147,N],[13,"Iso_8859_1","","ISO-8859-1",147,N],[13,"Iso_8859_2","","ISO-8859-2",147,N],[13,"Iso_8859_3","","ISO-8859-3",147,N],[13,"Iso_8859_4","","ISO-8859-4",147,N],[13,"Iso_8859_5","","ISO-8859-5",147,N],[13,"Iso_8859_6","","ISO-8859-6",147,N],[13,"Iso_8859_7","","ISO-8859-7",147,N],[13,"Iso_8859_8","","ISO-8859-8",147,N],[13,"Iso_8859_9","","ISO-8859-9",147,N],[13,"Iso_8859_10","","ISO-8859-10",147,N],[13,"Shift_Jis","","Shift_JIS",147,N],[13,"Euc_Jp","","EUC-JP",147,N],[13,"Iso_2022_Kr","","ISO-2022-KR",147,N],[13,"Euc_Kr","","EUC-KR",147,N],[13,"Iso_2022_Jp","","ISO-2022-JP",147,N],[13,"Iso_2022_Jp_2","","ISO-2022-JP-2",147,N],[13,"Iso_8859_6_E","","ISO-8859-6-E",147,N],[13,"Iso_8859_6_I","","ISO-8859-6-I",147,N],[13,"Iso_8859_8_E","","ISO-8859-8-E",147,N],[13,"Iso_8859_8_I","","ISO-8859-8-I",147,N],[13,"Gb2312","","GB2312",147,N],[13,"Big5","","Big5",147,N],[13,"Koi8_R","","KOI8-R",147,N],[13,"Ext","","An arbitrary charset specified as a string",147,N],[5,"parse_extended_value","","Parses extended header parameter values (`ext-value`), as defined in RFC 5987.",N,[[["str"]],["result",["extendedvalue","parseerror"]]]],[5,"http_percent_encode","","Percent encode a sequence of bytes with a character set defined in [https://tools.ietf.org/html/rfc5987#section-3.2][url]",N,N],[6,"FutureResponse","actix_web","Convenience type alias",N,N],[8,"AsyncResponder","","Convenience trait that converts `Future` object to a `Boxed` future",N,N],[10,"responder","","Convert to a boxed future",148,[[["self"]],["box",["future"]]]],[8,"FromRequest","","Trait implemented by types that can be extracted from request.",N,N],[16,"Config","","Configuration for conversion process",149,N],[16,"Result","","Future that resolves to a Self",149,N],[10,"from_request","","Convert request to a Self",149,N],[11,"extract","","Convert request to a Self",149,N],[8,"Responder","","Trait implemented by types that generate responses for clients.",N,N],[16,"Item","","The associated item which can be returned.",150,N],[16,"Error","","The associated error which can be returned.",150,N],[10,"respond_to","","Convert itself to `AsyncResult` or `Error`.",150,[[["self"],["httprequest"]],["result"]]],[8,"HttpMessage","","Trait that implements general purpose operations on http messages",N,N],[16,"Stream","","Type of message payload stream",151,N],[10,"headers","","Read the message headers.",151,[[["self"]],["headermap"]]],[10,"payload","","Message payload stream",151,N],[11,"content_type","","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,[[["self"]],["str"]]],[11,"encoding","","Get content type encoding",151,[[["self"]],["result",["encodingref","contenttypeerror"]]]],[11,"mime_type","","Convert the request content type to a known mime type.",151,[[["self"]],["result",["option","contenttypeerror"]]]],[11,"chunked","","Check if request has chunked transfer encoding",151,[[["self"]],["result",["bool","parseerror"]]]],[11,"body","","Load http message body.",151,[[["self"]],["messagebody"]]],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,[[["self"]],["urlencoded"]]],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,[[["self"]],["jsonbody"]]],[11,"multipart","","Return stream to http payload processes as multipart.",151,[[["self"]],["multipart"]]],[11,"readlines","","Return stream of lines.",151,[[["self"]],["readlines"]]],[14,"header","","",N,N],[11,"new","actix_web::dev","Create a drain from a future",152,[[["receiver"]],["self"]]],[11,"poll","","",152,N],[11,"limit","","Change max size of payload. By default max size is 256Kb",153,[[["self"],["usize"]],["self"]]],[11,"error_handler","","Set custom error handler",153,[[["self"],["f"]],["self"]]],[11,"default","","",153,[[],["self"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",154,[[["self"],["usize"]],["self"]]],[11,"mimetype","","Set required mime-type of the request. By default mime type is not enforced.",154,[[["self"],["mime"]],["self"]]],[11,"default","","",154,[[],["self"]]],[11,"extract","actix_web","Convert request to a Self",149,N],[11,"poll","actix_web::dev","",155,[[["self"]],["poll"]]],[11,"async","","Create async response",155,[[["box",["future"]]],["asyncresult"]]],[11,"ok","","Send response",155,[[["r"]],["asyncresult"]]],[11,"err","","Send error",155,[[["r"]],["asyncresult"]]],[11,"respond_to","","",155,[[["self"],["httprequest"]],["result",["asyncresult","error"]]]],[11,"from","","",155,[[["t"]],["asyncresult"]]],[11,"from","","",155,[[["result",["asyncresult"]]],["self"]]],[11,"from","","",155,[[["result"]],["self"]]],[11,"from","","",155,[[["result",["box"]]],["self"]]],[11,"from","","",155,[[["box",["future"]]],["asyncresult"]]],[11,"from_bytes","actix_web::http::header","Converts a slice of bytes to an HTTP header name.",156,N],[11,"from_lowercase","","Converts a slice of bytes to an HTTP header name.",156,N],[11,"from_static","","Converts a static string to a HTTP header name.",156,[[["str"]],["headername"]]],[11,"as_str","","Returns a `str` representation of the header.",156,[[["self"]],["str"]]],[11,"fmt","actix_web::http","Formats the cookie `self` as a `Set-Cookie` header value.",157,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",26,[[["self"],["formatter"]],["result",["error"]]]],[11,"from","","",26,[[["utf8error"]],["parseerror"]]],[11,"eq","","",26,[[["self"],["parseerror"]],["bool"]]],[11,"ne","","",26,[[["self"],["parseerror"]],["bool"]]],[11,"eq","actix_web::http","",157,[[["self"],["cookie"]],["bool"]]],[11,"description","actix_web::error","",26,[[["self"]],["str"]]],[11,"clone","actix_web::http","",157,[[["self"]],["cookie"]]],[11,"clone","","",158,[[["self"]],["cookiebuilder"]]],[11,"clone","actix_web::error","",26,[[["self"]],["parseerror"]]],[11,"from_str","actix_web::http","",157,[[["str"]],["result",["cookie","parseerror"]]]],[11,"fmt","","",158,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",26,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",157,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::error","",25,[[["self"],["formatter"]],["result",["error"]]]],[11,"from","","",25,[[["errors"]],["parseerror"]]],[11,"eq","","",25,[[["self"],["parseerror"]],["bool"]]],[11,"description","","",25,[[["self"]],["str"]]],[11,"clone","","",25,[[["self"]],["parseerror"]]],[11,"fmt","","",25,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","actix_web::http","",159,[[],["statuscode"]]],[11,"default","","",160,[[],["method"]]],[11,"default","actix_web::http::header","",161,[[],["headermap"]]],[11,"default","actix_web::http","",162,[[],["version"]]],[11,"eq","actix_web::http::header","",163,[[["self"],["string"]],["bool"]]],[11,"eq","","",156,[[["self"],["headername"]],["bool"]]],[11,"ne","","",156,[[["self"],["headername"]],["bool"]]],[11,"eq","","",156,[[["self"],["headername"]],["bool"]]],[11,"eq","","",163,[[["self"],["headervalue"]],["bool"]]],[11,"eq","actix_web::http","",159,[[["self"],["statuscode"]],["bool"]]],[11,"ne","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"eq","actix_web::http::header","",164,[[["self"],["getall"]],["bool"]]],[11,"eq","","",163,[[["self"],["t"]],["bool"]]],[11,"eq","actix_web::http","",159,[[["self"],["u16"]],["bool"]]],[11,"eq","","",160,[[["self"],["method"]],["bool"]]],[11,"ne","","",160,[[["self"],["method"]],["bool"]]],[11,"eq","actix_web::http::header","",163,N],[11,"eq","","",161,[[["self"],["headermap"]],["bool"]]],[11,"eq","actix_web::http","",160,[[["self"],["str"]],["bool"]]],[11,"eq","","",160,[[["self"],["str"]],["bool"]]],[11,"eq","","",162,[[["self"],["version"]],["bool"]]],[11,"ne","","",162,[[["self"],["version"]],["bool"]]],[11,"eq","actix_web::http::header","Performs a case-insensitive comparison of the string against the header name",156,[[["self"],["str"]],["bool"]]],[11,"eq","","",163,[[["self"],["str"]],["bool"]]],[11,"eq","","Performs a case-insensitive comparison of the string against the header name",156,[[["self"],["str"]],["bool"]]],[11,"eq","actix_web::http","",160,[[["self"],["method"]],["bool"]]],[11,"hash","actix_web::http::header","",163,N],[11,"hash","actix_web::http","",162,N],[11,"hash","","",159,N],[11,"hash","","",160,N],[11,"hash","actix_web::http::header","",156,N],[11,"from_str","actix_web::http","",159,[[["str"]],["result",["statuscode","invalidstatuscode"]]]],[11,"from_str","actix_web::http::header","",163,[[["str"]],["result",["headervalue"]]]],[11,"from_str","actix_web::http","",160,[[["str"]],["result",["method"]]]],[11,"from_str","actix_web::http::header","",156,[[["str"]],["result",["headername","invalidheadername"]]]],[11,"drop","","",165,N],[11,"drop","","",166,N],[11,"drop","","",167,N],[11,"extend","","Extend a `HeaderMap` with the contents of another `HeaderMap`.",161,N],[11,"extend","","",161,N],[11,"index","","Panics Using the index operator will cause a panic if the header you're querying isn't set.",161,[[["self"],["k"]],["t"]]],[11,"cmp","actix_web::http","",162,[[["self"],["version"]],["ordering"]]],[11,"cmp","actix_web::http::header","",163,[[["self"],["headervalue"]],["ordering"]]],[11,"cmp","actix_web::http","",159,[[["self"],["statuscode"]],["ordering"]]],[11,"partial_cmp","","",159,[[["self"],["statuscode"]],["option",["ordering"]]]],[11,"lt","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"le","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"gt","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"ge","","",159,[[["self"],["statuscode"]],["bool"]]],[11,"partial_cmp","actix_web::http::header","",163,N],[11,"partial_cmp","","",163,[[["self"],["str"]],["option",["ordering"]]]],[11,"partial_cmp","actix_web::http","",162,[[["self"],["version"]],["option",["ordering"]]]],[11,"lt","","",162,[[["self"],["version"]],["bool"]]],[11,"le","","",162,[[["self"],["version"]],["bool"]]],[11,"gt","","",162,[[["self"],["version"]],["bool"]]],[11,"ge","","",162,[[["self"],["version"]],["bool"]]],[11,"partial_cmp","actix_web::http::header","",163,[[["self"],["headervalue"]],["option",["ordering"]]]],[11,"partial_cmp","","",163,[[["self"],["t"]],["option",["ordering"]]]],[11,"partial_cmp","","",163,[[["self"],["string"]],["option",["ordering"]]]],[11,"borrow","","",156,[[["self"]],["str"]]],[11,"next","","",168,[[["self"]],["option"]]],[11,"size_hint","","",168,N],[11,"next","","",169,[[["self"]],["option"]]],[11,"size_hint","","",169,N],[11,"next","","",170,[[["self"]],["option"]]],[11,"size_hint","","",170,N],[11,"next","","",165,[[["self"]],["option"]]],[11,"size_hint","","",165,N],[11,"next","","",171,[[["self"]],["option"]]],[11,"next","","",166,[[["self"]],["option"]]],[11,"size_hint","","",166,N],[11,"next","","",172,[[["self"]],["option"]]],[11,"size_hint","","",172,N],[11,"next","","",167,[[["self"]],["option"]]],[11,"size_hint","","",167,N],[11,"fmt","actix_web::http","",160,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",173,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",174,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",159,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",175,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",176,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",177,[[["self"],["formatter"]],["result",["error"]]]],[11,"next_back","","",171,[[["self"]],["option"]]],[11,"next_back","","",168,[[["self"]],["option"]]],[11,"from","","",163,[[["i64"]],["headervalue"]]],[11,"from","","",163,[[["isize"]],["headervalue"]]],[11,"from","","",163,[[["i32"]],["headervalue"]]],[11,"from","","",163,[[["u64"]],["headervalue"]]],[11,"from","","",163,[[["i16"]],["headervalue"]]],[11,"from","","",163,[[["u32"]],["headervalue"]]],[11,"from","","",163,[[["usize"]],["headervalue"]]],[11,"from","","",163,[[["u16"]],["headervalue"]]],[11,"from","","",163,[[["headername"]],["headervalue"]]],[11,"from","","",156,[[["headername"]],["headername"]]],[11,"into_iter","","Creates a consuming iterator, that is, one that moves keys and values out of the map in arbitary order. The map cannot be used after calling this.",161,[[["self"]],["intoiter"]]],[11,"into_iter","","",178,[[["self"]],["valueitermut"]]],[11,"into_iter","","",164,[[["self"]],["valueiter"]]],[11,"as_ref","","",156,N],[11,"as_ref","","",163,N],[11,"as_ref","actix_web::http","",160,[[["self"]],["str"]]],[11,"as_ref","actix_web::http::header","",156,[[["self"]],["str"]]],[11,"description","","",176,[[["self"]],["str"]]],[11,"description","","",177,[[["self"]],["str"]]],[11,"description","","",174,[[["self"]],["str"]]],[11,"description","","",173,[[["self"]],["str"]]],[11,"description","","",175,[[["self"]],["str"]]],[11,"clone","","",156,[[["self"]],["headername"]]],[11,"clone","","",163,[[["self"]],["headervalue"]]],[11,"clone","actix_web::http","",160,[[["self"]],["method"]]],[11,"clone","actix_web::http::header","",161,[[["self"]],["headermap"]]],[11,"clone","actix_web::http","",159,[[["self"]],["statuscode"]]],[11,"clone","","",162,[[["self"]],["version"]]],[11,"try_from","actix_web::http::header","",163,[[["i64"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["i32"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",160,N],[11,"try_from","actix_web::http::header","",163,[[["headervalue"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",159,[[["statuscode"]],["result",["statuscode"]]]],[11,"try_from","actix_web::http::header","",163,N],[11,"try_from","actix_web::http","",160,[[["str"]],["result",["method"]]]],[11,"try_from","","",159,N],[11,"try_from","actix_web::http::header","",163,[[["i16"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["usize"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["u64"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["str"]],["result",["headername"]]]],[11,"try_from","","",163,[[["isize"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["bytes"]],["result",["headername"]]]],[11,"try_from","actix_web::http","",160,[[["method"]],["result",["method"]]]],[11,"try_from","actix_web::http::header","",163,[[["headername"]],["result",["headervalue"]]]],[11,"try_from","","",156,[[["headername"]],["result",["headername"]]]],[11,"try_from","","",163,[[["u16"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["u32"]],["result",["headervalue"]]]],[11,"try_from","","",163,[[["str"]],["result",["headervalue"]]]],[11,"try_from","actix_web::http","",159,[[["str"]],["result",["statuscode"]]]],[11,"try_from","","",159,[[["u16"]],["result",["statuscode"]]]],[11,"try_from","actix_web::http::header","",163,[[["bytes"]],["result",["headervalue"]]]],[11,"try_from","","",156,N],[11,"fmt","actix_web::http","",160,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",171,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",179,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",175,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",178,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",165,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",172,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",141,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",161,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",164,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",163,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",170,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",173,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",174,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",168,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",167,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",159,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",169,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",156,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",166,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http","",162,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::http::header","",177,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",176,[[["self"],["formatter"]],["result",["error"]]]],[11,"from_iter","","",161,[[["i"]],["headermap"]]],[11,"fmt","","",142,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","","",142,[[],["languagetag"]]],[11,"eq","","",142,[[["self"],["languagetag"]],["bool"]]],[11,"from_str","","",142,[[["str"]],["result",["languagetag","error"]]]],[11,"clone","","",142,[[["self"]],["languagetag"]]],[11,"fmt","","",142,[[["self"],["formatter"]],["result",["error"]]]],[11,"poll","actix_web::actix::actix::fut","",180,N],[11,"poll","","",181,N],[11,"poll","","",182,N],[11,"poll","","",183,N],[11,"poll","","",184,N],[11,"poll","","",185,N],[11,"stop","actix_web::actix::actix","Stop current actor. SyncContext creates and starts new actor.",186,N],[11,"terminate","","Terminate actor execution. SyncContext creates and starts new actor.",186,N],[11,"state","","Actor execution state",186,[[["self"]],["actorstate"]]],[11,"stop","","",187,N],[11,"terminate","","",187,N],[11,"state","","",187,[[["self"]],["actorstate"]]],[11,"poll","actix_web::actix::actix::fut","",188,N],[11,"poll","","",189,N],[11,"poll","","",190,N],[11,"poll","","",191,N],[11,"poll","","",114,N],[11,"poll","","",192,N],[11,"poll","","",193,N],[11,"poll","actix_web::actix::actix::actors::resolver","",194,[[["self"],["resolver"],["context"]],["result",["async"]]]],[11,"poll","actix_web::actix::actix::fut","",195,N],[11,"poll","","",196,N],[11,"poll","","",197,N],[11,"poll","","",198,N],[11,"poll","","",199,N],[11,"eq","actix_web::actix::actix","",200,[[["self"],["addr"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::signal","",106,[[["self"],["signaltype"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::resolver","",104,[[["self"],["connectaddr"]],["bool"]]],[11,"ne","","",104,[[["self"],["connectaddr"]],["bool"]]],[11,"eq","actix_web::actix::actix","",121,[[["self"],["running"]],["bool"]]],[11,"eq","actix_web::actix::actix::actors::resolver","",201,[[["self"],["connect"]],["bool"]]],[11,"ne","","",201,[[["self"],["connect"]],["bool"]]],[11,"eq","","",202,[[["self"],["resolve"]],["bool"]]],[11,"ne","","",202,[[["self"],["resolve"]],["bool"]]],[11,"eq","actix_web::actix::actix","",203,[[["self"],["spawnhandle"]],["bool"]]],[11,"ne","","",203,[[["self"],["spawnhandle"]],["bool"]]],[11,"eq","","",204,[[["self"],["recipient"]],["bool"]]],[11,"eq","","",118,[[["self"],["actorstate"]],["bool"]]],[11,"handle","","",205,[[["self"],["execute"],["context"]],["result"]]],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"handle","actix_web::actix::actix","",205,N],[11,"handle","actix_web::actix::actix::actors::signal","",207,N],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"handle","actix_web::actix::actix","",205,[[["self"],["startactor"],["context"]],["addr"]]],[11,"handle","actix_web::actix::actix::actors::signal","",208,N],[11,"handle","actix_web::actix::actix::actors::resolver","",206,N],[11,"hash","actix_web::actix::actix","",203,N],[11,"hash","","",204,N],[11,"hash","","",200,N],[11,"drop","","",205,N],[11,"from","actix_web::actix::actix::fut","",198,[[["result"]],["futureresult"]]],[11,"parts","actix_web::actix::actix","",187,[[["self"]],["contextparts"]]],[11,"spawn","","",187,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","",187,N],[11,"waiting","","",187,[[["self"]],["bool"]]],[11,"cancel_future","","",187,[[["self"],["spawnhandle"]],["bool"]]],[11,"address","","",187,[[["self"]],["addr"]]],[11,"service_started","actix_web::actix::actix::actors::signal","",208,N],[11,"clone","actix_web::actix::actix","",209,[[["self"]],["system"]]],[11,"clone","","",121,[[["self"]],["running"]]],[11,"clone","actix_web::actix::actix::actors::signal","",106,[[["self"]],["signaltype"]]],[11,"clone","actix_web::actix::actix","",118,[[["self"]],["actorstate"]]],[11,"clone","actix_web::actix::actix::dev","",210,[[["self"]],["registry"]]],[11,"clone","actix_web::actix::actix","",203,[[["self"]],["spawnhandle"]]],[11,"clone","","",200,[[["self"]],["addr"]]],[11,"clone","actix_web::actix::actix::dev","",211,[[["self"]],["systemregistry"]]],[11,"clone","actix_web::actix::actix","",204,[[["self"]],["recipient"]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",105,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",183,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",184,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",189,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",191,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",180,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",182,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::signal","",107,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",195,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",126,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::signal","",106,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",202,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",188,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",118,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",212,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",198,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",201,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",193,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",114,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","","",192,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",131,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",199,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",104,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",121,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",185,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",203,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::fut","",190,[[["self"],["formatter"]],["result",["error"]]]],[11,"default","actix_web::actix::actix::actors::resolver","",206,[[],["resolver"]]],[11,"default","actix_web::actix::actix","",203,[[],["spawnhandle"]]],[11,"default","actix_web::actix::actix::actors::signal","",207,[[],["defaultsignalshandler"]]],[11,"default","actix_web::actix::actix","",213,[[],["condition"]]],[11,"default","actix_web::actix::actix::actors::signal","",208,[[],["processsignals"]]],[11,"default","actix_web::actix::actix::dev","",214,[[],["mailbox"]]],[11,"poll","actix_web::actix::actix","",215,[[["self"]],["result",["async"]]]],[11,"poll","","",216,[[["self"]],["result",["async"]]]],[11,"poll","actix_web::actix::actix::fut","",212,[[["self"]],["result",["async"]]]],[11,"handle","actix_web::actix::actix","",200,N],[11,"handle","","",117,N],[11,"handle","","",217,N],[11,"handle","","",218,N],[11,"fmt","","",126,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix::actors::resolver","",105,[[["self"],["formatter"]],["result",["error"]]]],[11,"fmt","actix_web::actix::actix","",131,[[["self"],["formatter"]],["result",["error"]]]],[11,"started","actix_web::actix::actix::actors::signal","",207,N],[11,"started","actix_web::actix::actix::actors::resolver","",206,N],[11,"cause","actix_web::actix::actix","",131,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",131,[[["self"]],["option",["backtrace"]]]],[11,"cause","actix_web::actix::actix::actors::resolver","",105,[[["self"]],["option",["fail"]]]],[11,"backtrace","","",105,[[["self"]],["option",["backtrace"]]]],[11,"pack","actix_web::actix::actix","",186,[[["m"],["option",["sender"]]],["envelope"]]],[11,"pack","","",187,[[["m"],["option",["sender"]]],["envelope"]]],[11,"key","actix_web::http::header","Returns a reference to the entry's key.",178,[[["self"]],["headername"]]],[11,"get","","Get a reference to the first value in the entry.",178,[[["self"]],["t"]]],[11,"get_mut","","Get a mutable reference to the first value in the entry.",178,[[["self"]],["t"]]],[11,"into_mut","","Converts the `OccupiedEntry` into a mutable reference to the first value.",178,[[["self"]],["t"]]],[11,"insert","","Sets the value of the entry.",178,[[["self"],["t"]],["t"]]],[11,"insert_mult","","Sets the value of the entry.",178,[[["self"],["t"]],["valuedrain"]]],[11,"append","","Insert the value into the entry.",178,N],[11,"remove","","Remove the entry from the map.",178,[[["self"]],["t"]]],[11,"remove_entry","","Remove the entry from the map.",178,N],[11,"remove_entry_mult","","Remove the entry from the map.",178,N],[11,"iter","","Returns an iterator visiting all values associated with the entry.",178,[[["self"]],["valueiter"]]],[11,"iter_mut","","Returns an iterator mutably visiting all values associated with the entry.",178,[[["self"]],["valueitermut"]]],[11,"from_static","","Convert a static string to a `HeaderValue`.",163,[[["str"]],["headervalue"]]],[11,"from_str","","Attempt to convert a string to a `HeaderValue`.",163,[[["str"]],["result",["headervalue","invalidheadervalue"]]]],[11,"from_name","","Converts a HeaderName into a HeaderValue",163,[[["headername"]],["headervalue"]]],[11,"from_bytes","","Attempt to convert a byte slice to a `HeaderValue`.",163,N],[11,"from_shared","","Attempt to convert a `Bytes` buffer to a `HeaderValue`.",163,[[["bytes"]],["result",["headervalue","invalidheadervaluebytes"]]]],[11,"from_shared_unchecked","","Convert a `Bytes` directly into a `HeaderValue` without validating.",163,[[["bytes"]],["headervalue"]]],[11,"to_str","","Yields a `&str` slice if the `HeaderValue` only contains visible ASCII chars.",163,[[["self"]],["result",["str","tostrerror"]]]],[11,"len","","Returns the length of `self`.",163,[[["self"]],["usize"]]],[11,"is_empty","","Returns true if the `HeaderValue` has a length of zero bytes.",163,[[["self"]],["bool"]]],[11,"as_bytes","","Converts a `HeaderValue` to a byte slice.",163,N],[11,"set_sensitive","","Mark that the header value represents sensitive information.",163,N],[11,"is_sensitive","","Returns `true` if the value represents sensitive data.",163,[[["self"]],["bool"]]],[11,"or_insert","","Ensures a value is in the entry by inserting the default if empty.",141,[[["self"],["t"]],["t"]]],[11,"or_insert_with","","Ensures a value is in the entry by inserting the result of the default function if empty.",141,[[["self"],["f"]],["t"]]],[11,"key","","Returns a reference to the entry's key",141,[[["self"]],["headername"]]],[11,"key","","Returns a reference to the entry's key",179,[[["self"]],["headername"]]],[11,"into_key","","Take ownership of the key",179,[[["self"]],["headername"]]],[11,"insert","","Insert the value into the entry.",179,[[["self"],["t"]],["t"]]],[11,"insert_entry","","Insert the value into the entry.",179,[[["self"],["t"]],["occupiedentry"]]],[11,"iter","","Returns an iterator visiting all values associated with the entry.",164,[[["self"]],["valueiter"]]],[11,"new","","Create an empty `HeaderMap`.",161,[[],["headermap",["headervalue"]]]],[11,"with_capacity","","Create an empty `HeaderMap` with the specified capacity.",161,[[["usize"]],["headermap"]]],[11,"len","","Returns the number of headers stored in the map.",161,[[["self"]],["usize"]]],[11,"keys_len","","Returns the number of keys stored in the map.",161,[[["self"]],["usize"]]],[11,"is_empty","","Returns true if the map contains no elements.",161,[[["self"]],["bool"]]],[11,"clear","","Clears the map, removing all key-value pairs. Keeps the allocated memory for reuse.",161,N],[11,"capacity","","Returns the number of headers the map can hold without reallocating.",161,[[["self"]],["usize"]]],[11,"reserve","","Reserves capacity for at least `additional` more headers to be inserted into the `HeaderMap`.",161,N],[11,"get","","Returns a reference to the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"get_mut","","Returns a mutable reference to the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"get_all","","Returns a view of all values associated with a key.",161,[[["self"],["k"]],["getall"]]],[11,"contains_key","","Returns true if the map contains a value for the specified key.",161,[[["self"],["k"]],["bool"]]],[11,"iter","","An iterator visiting all key-value pairs.",161,[[["self"]],["iter"]]],[11,"iter_mut","","An iterator visiting all key-value pairs, with mutable value references.",161,[[["self"]],["itermut"]]],[11,"keys","","An iterator visiting all keys.",161,[[["self"]],["keys"]]],[11,"values","","An iterator visiting all values.",161,[[["self"]],["values"]]],[11,"values_mut","","An iterator visiting all values mutably.",161,[[["self"]],["valuesmut"]]],[11,"drain","","Clears the map, returning all entries as an iterator.",161,[[["self"]],["drain"]]],[11,"entry","","Gets the given key's corresponding entry in the map for in-place manipulation.",161,[[["self"],["k"]],["result",["entry","invalidheadername"]]]],[11,"insert","","Inserts a key-value pair into the map.",161,[[["self"],["k"],["t"]],["option"]]],[11,"append","","Inserts a key-value pair into the map.",161,[[["self"],["k"],["t"]],["bool"]]],[11,"remove","","Removes a key from the map, returning the value associated with the key.",161,[[["self"],["k"]],["option"]]],[11,"clone","","",145,[[["self"]],["dispositiontype"]]],[11,"fmt","","",145,[[["self"],["formatter"]],["result"]]],[11,"eq","","",145,[[["self"],["dispositiontype"]],["bool"]]],[11,"ne","","",145,[[["self"],["dispositiontype"]],["bool"]]],[11,"clone","","",146,[[["self"]],["dispositionparam"]]],[11,"fmt","","",146,[[["self"],["formatter"]],["result"]]],[11,"eq","","",146,[[["self"],["dispositionparam"]],["bool"]]],[11,"ne","","",146,[[["self"],["dispositionparam"]],["bool"]]],[11,"clone","","",144,[[["self"]],["contentdisposition"]]],[11,"fmt","","",144,[[["self"],["formatter"]],["result"]]],[11,"eq","","",144,[[["self"],["contentdisposition"]],["bool"]]],[11,"ne","","",144,[[["self"],["contentdisposition"]],["bool"]]],[11,"from_raw","","Parse a raw Content-Disposition header value",144,[[["headervalue"]],["result",["parseerror"]]]],[11,"fmt","","",144,[[["self"],["formatter"]],["result"]]],[11,"matches","","Matches language tags. The first language acts as a language range, the second one is used as a normal language tag. None fields in the language range are ignored. If the language tag has more extlangs than the range these extlangs are ignored. Matches are case-insensitive. `*` in language ranges are represented using `None` values. The language range `*` that matches language tags is created by the default language tag: `let wildcard: LanguageTag = Default::default();.`",142,[[["self"],["languagetag"]],["bool"]]],[11,"is_language_range","","Checks if it is a language range, meaning that there are no extension and privateuse tags.",142,[[["self"]],["bool"]]],[11,"canonicalize","","Returns the canonical version of the language tag.",142,[[["self"]],["languagetag"]]],[11,"clone","","",147,[[["self"]],["charset"]]],[11,"fmt","","",147,[[["self"],["formatter"]],["result"]]],[11,"eq","","",147,[[["self"],["charset"]],["bool"]]],[11,"ne","","",147,[[["self"],["charset"]],["bool"]]],[11,"fmt","","",147,[[["self"],["formatter"]],["result"]]],[11,"from_str","","",147,[[["str"]],["result",["charset"]]]],[11,"clone","actix_web::http","",139,[[["self"]],["contentencoding"]]],[11,"eq","","",139,[[["self"],["contentencoding"]],["bool"]]],[11,"fmt","","",139,[[["self"],["formatter"]],["result"]]],[11,"is_compression","","Is the content compressed?",139,[[["self"]],["bool"]]],[11,"as_str","","Convert content encoding to string",139,[[["self"]],["str"]]],[11,"quality","","default quality value",139,[[["self"]],["f64"]]],[11,"from","","",139,[[["str"]],["contentencoding"]]],[11,"clone","actix_web::http::header","",143,[[["self"]],["extendedvalue"]]],[11,"fmt","","",143,[[["self"],["formatter"]],["result"]]],[11,"eq","","",143,[[["self"],["extendedvalue"]],["bool"]]],[11,"ne","","",143,[[["self"],["extendedvalue"]],["bool"]]],[11,"fmt","","",143,[[["self"],["formatter"]],["result"]]],[11,"default","actix_web::http","Create default `NormalizePath` instance, append is set to true, merge is set to true and redirect is set to `StatusCode::MOVED_PERMANENTLY`",219,[[],["normalizepath"]]],[11,"new","","Create new `NormalizePath` instance",219,[[["bool"],["bool"],["statuscode"]],["normalizepath"]]],[11,"handle","","",219,N],[11,"content_type","actix_web","Read the request content type. If request does not contain Content-Type header, empty str get returned.",151,[[["self"]],["str"]]],[11,"encoding","","Get content type encoding",151,[[["self"]],["result",["encodingref","contenttypeerror"]]]],[11,"mime_type","","Convert the request content type to a known mime type.",151,[[["self"]],["result",["option","contenttypeerror"]]]],[11,"chunked","","Check if request has chunked transfer encoding",151,[[["self"]],["result",["bool","parseerror"]]]],[11,"body","","Load http message body.",151,[[["self"]],["messagebody"]]],[11,"urlencoded","","Parse `application/x-www-form-urlencoded` encoded request's body. Return `UrlEncoded` future. Form can be deserialized to any type that implements `Deserialize` trait from serde.",151,[[["self"]],["urlencoded"]]],[11,"json","","Parse `application/json` encoded body. Return `JsonBody` future. It resolves to a `T` value.",151,[[["self"]],["jsonbody"]]],[11,"multipart","","Return stream to http payload processes as multipart.",151,[[["self"]],["multipart"]]],[11,"readlines","","Return stream of lines.",151,[[["self"]],["readlines"]]],[11,"new","actix_web::dev","Create `MessageBody` for request.",220,[[["t"]],["messagebody"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",220,[[["self"],["usize"]],["self"]]],[11,"poll","","",220,[[["self"]],["poll"]]],[11,"new","","Create a new future to URL encode a request",221,[[["t"]],["urlencoded"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",221,[[["self"],["usize"]],["self"]]],[11,"poll","","",221,[[["self"]],["poll"]]],[11,"clone","actix_web::http","",140,[[["self"]],["connectiontype"]]],[11,"eq","","",140,[[["self"],["connectiontype"]],["bool"]]],[11,"fmt","","",140,[[["self"],["formatter"]],["result"]]],[11,"status","actix_web::dev","Set HTTP status code of this response.",222,[[["self"],["statuscode"]],["self"]]],[11,"version","","Set HTTP version of this response.",222,[[["self"],["version"]],["self"]]],[11,"header","","Set a header.",222,[[["self"],["k"],["v"]],["self"]]],[11,"reason","","Set the custom reason for the response.",222,[[["self"],["str"]],["self"]]],[11,"content_encoding","","Set content encoding.",222,[[["self"],["contentencoding"]],["self"]]],[11,"force_close","","Force close connection, even if it is marked as keep-alive",222,[[["self"]],["self"]]],[11,"chunked","","Enables automatic chunked transfer encoding",222,[[["self"]],["self"]]],[11,"no_chunking","","Force disable chunked encoding",222,[[["self"]],["self"]]],[11,"content_type","","Set response content type",222,[[["self"],["v"]],["self"]]],[11,"content_length","","Set content length",222,[[["self"],["u64"]],["self"]]],[11,"cookie","","Set a cookie",222,[[["self"],["cookie"]],["self"]]],[11,"del_cookie","","Remove cookie",222,[[["self"],["cookie"]],["self"]]],[11,"if_true","","This method calls provided closure with builder reference if value is true.",222,[[["self"],["bool"],["f"]],["self"]]],[11,"if_some","","This method calls provided closure with builder reference if value is Some.",222,[[["self"],["option"],["f"]],["self"]]],[11,"write_buffer_capacity","","Set write buffer capacity",222,[[["self"],["usize"]],["self"]]],[11,"body","","Set a body and generate `HttpResponse`.",222,[[["self"],["b"]],["httpresponse"]]],[11,"streaming","","Set a streaming body and generate `HttpResponse`.",222,[[["self"],["s"]],["httpresponse"]]],[11,"json","","Set a json body and generate `HttpResponse`",222,[[["self"],["t"]],["httpresponse"]]],[11,"finish","","Set an empty body and generate `HttpResponse`",222,[[["self"]],["httpresponse"]]],[11,"take","","This method construct new `HttpResponseBuilder`",222,[[["self"]],["httpresponsebuilder"]]],[11,"respond_to","","",222,[[["self"],["httprequest"]],["result",["httpresponse","error"]]]],[11,"from","","",222,[[["clientresponse"]],["httpresponsebuilder"]]],[11,"from","","",222,[[["httprequest"]],["httpresponsebuilder"]]],[11,"clone","","",223,[[["self"]],["connectioninfo"]]],[11,"default","","",223,[[],["connectioninfo"]]],[11,"update","","Create ConnectionInfo instance for a request.",223,[[["self"],["request"]]]],[11,"scheme","","Scheme of the request.",223,[[["self"]],["str"]]],[11,"host","","Hostname of the request.",223,[[["self"]],["str"]]],[11,"remote","","Remote IP of client initiated HTTP request.",223,[[["self"]],["option",["str"]]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",224,[[["self"],["usize"]],["self"]]],[11,"error_handler","","Set custom error handler",224,[[["self"],["f"]],["self"]]],[11,"default","","",224,[[],["self"]]],[11,"new","","Create `JsonBody` for request.",225,[[["t"]],["self"]]],[11,"limit","","Change max size of payload. By default max size is 256Kb",225,[[["self"],["usize"]],["self"]]],[11,"poll","","",225,[[["self"]],["poll",["jsonpayloaderror"]]]],[11,"fmt","","",226,[[["self"],["formatter"]],["result"]]],[11,"clone","","",226,[[["self"]],["params"]]],[11,"is_empty","","Check if there are any matched patterns",226,[[["self"]],["bool"]]],[11,"len","","Check number of extracted parameters",226,[[["self"]],["usize"]]],[11,"get","","Get matched parameter by name without type conversion",226,[[["self"],["str"]],["option",["str"]]]],[11,"unprocessed","","Get unprocessed part of path",226,[[["self"]],["str"]]],[11,"query","","Get matched `FromParam` compatible parameter by name.",226,[[["self"],["str"]],["result"]]],[11,"iter","","Return iterator to items in parameter container",226,[[["self"]],["paramsiter"]]],[11,"index","","",226,[[["self"],["str"]],["str"]]],[11,"index","","",226,[[["self"],["usize"]],["str"]]],[11,"fmt","","",227,[[["self"],["formatter"]],["result"]]],[11,"new","","Create payload stream.",227,N],[11,"unread_data","","Put unused data back to payload",227,[[["self"],["bytes"]]]],[11,"set_read_buffer_capacity","","Set read buffer capacity",227,[[["self"],["usize"]]]],[11,"poll","","",227,[[["self"]],["poll",["option","payloaderror"]]]],[11,"clone","","",227,[[["self"]],["payload"]]],[11,"new","","Create new `PayloadBuffer` instance",228,[[["s"]],["self"]]],[11,"get_mut","","Get mutable reference to an inner stream.",228,[[["self"]],["s"]]],[11,"readany","","Read first available chunk of bytes",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"can_read","","Check if buffer contains enough bytes",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"get_chunk","","Return reference to the first chunk of data",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"read_exact","","Read exact number of bytes",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"drop_bytes","","Remove specified amount if bytes from buffer",228,[[["self"],["usize"]]]],[11,"copy","","Copy buffered data",228,[[["self"],["usize"]],["poll",["option","payloaderror"]]]],[11,"read_until","","Read until specified ending",228,N],[11,"readline","","Read bytes until new line delimiter",228,[[["self"]],["poll",["option","payloaderror"]]]],[11,"unprocessed","","Put unprocessed data back to the buffer",228,[[["self"],["bytes"]]]],[11,"remaining","","Get remaining data from the buffer",228,[[["self"]],["bytes"]]],[11,"new","","Create new resource with specified resource definition",229,[[["resourcedef"]],["self"]]],[11,"name","","Set resource name",229,[[["self"],["str"]]]],[11,"rdef","","Resource definition",229,[[["self"]],["resourcedef"]]],[11,"route","","Register a new route and return mutable reference to Route object. Route is used for route configuration, i.e. adding predicates, setting up handler.",229,[[["self"]],["route"]]],[11,"get","","Register a new `GET` route.",229,[[["self"]],["route"]]],[11,"post","","Register a new `POST` route.",229,[[["self"]],["route"]]],[11,"put","","Register a new `PUT` route.",229,[[["self"]],["route"]]],[11,"delete","","Register a new `DELETE` route.",229,[[["self"]],["route"]]],[11,"head","","Register a new `HEAD` route.",229,[[["self"]],["route"]]],[11,"method","","Register a new route and add method check to route.",229,[[["self"],["method"]],["route"]]],[11,"h","","Register a new route and add handler object.",229,[[["self"],["h"]]]],[11,"f","","Register a new route and add handler function.",229,[[["self"],["f"]]]],[11,"with","","Register a new route and add handler.",229,[[["self"],["f"]]]],[11,"with_async","","Register a new route and add async handler.",229,[[["self"],["f"]]]],[11,"middleware","","Register a resource middleware",229,[[["self"],["m"]]]],[11,"default","","",230,[[],["route"]]],[11,"filter","","Add match predicate to route.",230,[[["self"],["t"]],["self"]]],[11,"h","","Set handler object. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,[[["self"],["h"]]]],[11,"f","","Set handler function. Usually call to this method is last call during route configuration, so it does not return reference to self.",230,[[["self"],["f"]]]],[11,"a","","Set async handler function.",230,[[["self"],["h"]]]],[11,"with","","Set handler function, use request extractor for parameters.",230,[[["self"],["f"]]]],[11,"with_config","","Set handler function. Same as `.with()` but it allows to configure extractor.",230,[[["self"],["f"],["c"]]]],[11,"with_async","","Set async handler function, use request extractor for parameters. Also this method needs to be used if your handler function returns `impl Future<>`",230,[[["self"],["f"]]]],[11,"with_async_config","","Set async handler function, use request extractor for parameters. This method allows to configure extractor.",230,[[["self"],["f"],["c"]]]],[11,"clone","","",231,[[["self"]],["resourceinfo"]]],[11,"name","","Name os the resource",231,[[["self"]],["str"]]],[11,"rdef","","This method returns reference to matched `ResourceDef` object.",231,[[["self"]],["option",["resourcedef"]]]],[11,"match_info","","Get a reference to the Params object.",231,[[["self"]],["params"]]],[11,"url_for","","Generate url for named resource",231,[[["self"],["request"],["str"],["u"]],["result",["url","urlgenerationerror"]]]],[11,"has_resource","","Check if application contains matching resource.",231,[[["self"],["str"]],["bool"]]],[11,"has_prefixed_resource","","Check if application contains matching resource.",231,[[["self"],["str"]],["bool"]]],[11,"default","","",232,[[],["self"]]],[11,"handle","","Handle request",232,[[["self"],["httprequest"]],["asyncresult",["httpresponse"]]]],[11,"recognize","","Query for matched resource",232,[[["self"],["request"],["s"],["usize"]],["resourceinfo"]]],[11,"fmt","","",136,[[["self"],["formatter"]],["result"]]],[11,"clone","","",136,[[["self"]],["resourcetype"]]],[11,"eq","","",136,[[["self"],["resourcetype"]],["bool"]]],[11,"clone","","",233,[[["self"]],["resourcedef"]]],[11,"fmt","","",233,[[["self"],["formatter"]],["result"]]],[11,"new","","Parse path pattern and create new `Resource` instance.",233,[[["str"]],["self"]]],[11,"prefix","","Parse path pattern and create new `Resource` instance.",233,[[["str"]],["self"]]],[11,"external","","Construct external resource",233,[[["str"]],["self"]]],[11,"with_prefix","","Parse path pattern and create new `Resource` instance with custom prefix",233,[[["str"],["str"],["bool"]],["self"]]],[11,"rtype","","Resource type",233,[[["self"]],["resourcetype"]]],[11,"name","","Resource name",233,[[["self"]],["str"]]],[11,"pattern","","Path pattern of the resource",233,[[["self"]],["str"]]],[11,"is_match","","Is this path a match against this resource?",233,[[["self"],["str"]],["bool"]]],[11,"match_with_params","","Are the given path and parameters a match against this resource?",233,[[["self"],["request"],["usize"]],["option",["params"]]]],[11,"match_prefix_with_params","","Is the given path a prefix match and do the parameters match against this resource?",233,[[["self"],["request"],["usize"]],["option",["params"]]]],[11,"resource_path","","Build resource path.",233,[[["self"],["u"],["str"]],["result",["string","urlgenerationerror"]]]],[11,"eq","","",233,[[["self"],["resourcedef"]],["bool"]]],[11,"hash","","",233,[[["self"],["h"]]]],[11,"as_str","actix_web::error","Returns a description of this error as a string",26,[[["self"]],["str"]]],[11,"error_response","actix_web::http::header","",173,[[["self"]],["httpresponse"]]],[11,"error_response","","",175,[[["self"]],["httpresponse"]]],[11,"host","actix_web::actix::actix::actors::resolver","",202,[[["t"]],["resolve"]]],[11,"host_and_port","","",202,[[["t"],["u16"]],["resolve"]]],[11,"host","","",201,[[["t"]],["connect"]]],[11,"host_and_port","","",201,[[["t"],["u16"]],["connect"]]],[11,"timeout","","Set connect timeout",201,[[["self"],["duration"]],["connect"]]],[11,"new","","",206,[[["resolverconfig"],["resolveropts"]],["resolver"]]],[11,"new","","",194,[[["vecdeque",["socketaddr"]]],["tcpconnector"]]],[11,"with_timeout","","",194,[[["vecdeque",["socketaddr"]],["duration"]],["tcpconnector"]]],[11,"split","actix_web::actix::actix::fut","Splits out the homogeneous type from an either of tuples.",114,N],[11,"new","","",212,[[["s"]],["finish"]]],[11,"new","actix_web::actix::actix::msgs","",234,[[["f"]],["startactor"]]],[11,"new","","",235,[[["f"]],["execute"]]],[11,"exec","","Execute enclosed function",235,[[["self"]],["result"]]],[11,"alive","actix_web::actix::actix","Indicates if actor is alive",118,[[["self"]],["bool"]]],[11,"stopping","","Indicates if actor is stopped of stopping",118,[[["self"]],["bool"]]],[11,"do_send","","Send message",204,[[["self"],["m"]],["result",["senderror"]]]],[11,"try_send","","Try send message",204,[[["self"],["m"]],["result",["senderror"]]]],[11,"send","","Send message and asynchronously wait for response.",204,[[["self"],["m"]],["recipientrequest"]]],[11,"new","","Create new system.",209,[[["t"]],["systemrunner"]]],[11,"current","","Get current running system.",209,[[],["system"]]],[11,"with_current","","Execute function with system reference.",209,[[["f"]],["r"]]],[11,"stop","","Stop the system",209,N],[11,"arbiter","","System arbiter",209,[[["self"]],["addr"]]],[11,"registry","","Get current system registry.",209,[[["self"]],["systemregistry"]]],[11,"run","","This function will start tokio runtime and will finish once the `System::stop()` message get called. Function `f` get called within tokio runtime context.",209,[[["f"]],["i32"]]],[11,"new","actix_web::actix::actix::io","",236,[[["t"],["c"]],["writer"]]],[11,"close","","Gracefully close sink",236,N],[11,"closed","","Check if sink is closed",236,[[["self"]],["bool"]]],[11,"set_buffer_capacity","","Set write buffer capacity",236,N],[11,"write","","Send item to a sink.",236,N],[11,"handle","","`SpawnHandle` for this writer",236,[[["self"]],["spawnhandle"]]],[11,"new","","",237,[[["t"],["u"],["c"]],["framedwrite"]]],[11,"from_buffer","","",237,[[["t"],["u"],["bytesmut"],["c"]],["framedwrite"]]],[11,"close","","Gracefully close sink",237,N],[11,"closed","","Check if sink is closed",237,[[["self"]],["bool"]]],[11,"set_buffer_capacity","","Set write buffer capacity",237,N],[11,"write","","Write item",237,N],[11,"handle","","`SpawnHandle` for this writer",237,[[["self"]],["spawnhandle"]]],[11,"wait","actix_web::actix::actix","",213,[[["self"]],["receiver"]]],[11,"set","","",213,N],[11,"next","","Get next handle",203,[[["self"]],["spawnhandle"]]],[11,"new","","",215,[[["option",["receiver"]],["option"]],["recipientrequest"]]],[11,"timeout","","Set message delivery timeout",215,[[["self"],["duration"]],["recipientrequest"]]],[11,"into_inner","","",126,[[["self"]],["t"]]],[11,"with_receiver","","",187,[[["addressreceiver"]],["context"]]],[11,"run","","",187,[[["self"],["a"]],["addr"]]],[11,"into_future","","",187,[[["self"],["a"]],["contextfut",["context"]]]],[11,"handle","","Handle of the running future",187,[[["self"]],["spawnhandle"]]],[11,"set_mailbox_capacity","","Set mailbox capacity",187,N],[11,"reply","","Create response",217,[[["result"]],["actorresponse"]]],[11,"async","","Create async response",217,[[["t"]],["actorresponse"]]],[11,"start","","Start new supervised actor in current tokio runtime.",238,[[["f"]],["addr"]]],[11,"start_in_arbiter","","Start new supervised actor in arbiter's thread.",238,[[["addr"],["f"]],["addr"]]],[11,"timeout","","Set message delivery timeout",216,[[["self"],["duration"]],["request"]]],[11,"async","","Create async response",218,[[["t"]],["response"]]],[11,"reply","","Create response",218,[[["result"]],["response"]]],[11,"start","","Start new sync arbiter with specified number of worker threads. Returns address of the started actor.",239,[[["usize"],["f"]],["addr"]]],[11,"builder","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",205,[[],["builder"]]],[11,"new","","Spawn new thread and run event loop in spawned thread. Returns address of newly created arbiter. Does not stop the system on panic.",205,[[["t"]],["addr",["arbiter"]]]],[11,"name","","Returns current arbiter's name",205,[[],["string"]]],[11,"current","","Returns current arbiter's address",205,[[],["addr",["arbiter"]]]],[11,"registry","","This function returns arbiter's registry,",205,[[],["registry"]]],[11,"spawn","","Executes a future on the current thread.",205,N],[11,"spawn_fn","","Executes a future on the current thread.",205,N],[11,"start","","Start new arbiter and then start actor in created arbiter. Returns `Addr` of created actor.",205,[[["f"]],["addr"]]],[11,"new","","",200,[[["addresssender"]],["addr"]]],[11,"connected","","Indicates if actor is still alive",200,[[["self"]],["bool"]]],[11,"do_send","","Send message unconditionally",200,N],[11,"try_send","","Try send message",200,[[["self"],["m"]],["result",["senderror"]]]],[11,"send","","Send asynchronous message and wait for response.",200,[[["self"],["m"]],["request"]]],[11,"recipient","","Get `Recipient` for specific message type",200,[[["self"]],["recipient"]]],[11,"get","actix_web::actix::actix::dev","Return address of the service. If service actor is not running it get started in the system.",211,[[["self"]],["addr"]]],[11,"set","","Add new actor to the registry by address, panic if actor is already running",211,N],[11,"new","","",240,[[["m"],["option",["sender"]]],["envelope"]]],[11,"with_proxy","","",240,[[["box",["envelopeproxy"]]],["envelope"]]],[11,"new","","Create new ContextParts instance",241,[[["addresssenderproducer"]],["contextparts"]]],[11,"stop","","Initiate stop process for actor execution",241,N],[11,"terminate","","Terminate actor execution",241,N],[11,"state","","Actor execution state",241,[[["self"]],["actorstate"]]],[11,"waiting","","Is context waiting for future completion",241,[[["self"]],["bool"]]],[11,"curr_handle","","Handle of the running future",241,[[["self"]],["spawnhandle"]]],[11,"spawn","","Spawn new future to this context.",241,[[["self"],["f"]],["spawnhandle"]]],[11,"wait","","Spawn new future to this context and wait future completion.",241,N],[11,"cancel_future","","Cancel previously scheduled future.",241,[[["self"],["spawnhandle"]],["bool"]]],[11,"capacity","","",241,[[["self"]],["usize"]]],[11,"set_mailbox_capacity","","",241,N],[11,"address","","",241,[[["self"]],["addr"]]],[11,"started","","",241,[[["self"]],["bool"]]],[11,"get","","Query registry for specific actor. Returns address of the actor. If actor is not registered, starts new actor and return address of newly created actor.",210,[[["self"]],["addr"]]],[11,"set","","Add new actor to the registry by address, panic if actor is already running",210,N],[11,"new","","",242,[[["c"],["a"],["mailbox"]],["contextfut"]]],[11,"ctx","","",242,[[["self"]],["c"]]],[11,"address","","",242,[[["self"]],["addr"]]],[11,"alive","","",242,[[["self"]],["bool"]]],[11,"new","","",214,[[["addressreceiver"]],["mailbox"]]],[11,"capacity","","",214,[[["self"]],["usize"]]],[11,"set_capacity","","",214,N],[11,"connected","","",214,[[["self"]],["bool"]]],[11,"address","","",214,[[["self"]],["addr"]]],[11,"sender_producer","","",214,[[["self"]],["addresssenderproducer"]]],[11,"poll","","",214,N],[18,"GET","actix_web::http","GET",160,N],[18,"POST","","POST",160,N],[18,"PUT","","PUT",160,N],[18,"DELETE","","DELETE",160,N],[18,"HEAD","","HEAD",160,N],[18,"OPTIONS","","OPTIONS",160,N],[18,"CONNECT","","CONNECT",160,N],[18,"PATCH","","PATCH",160,N],[18,"TRACE","","TRACE",160,N],[11,"from_bytes","","Converts a slice of bytes to an HTTP method.",160,N],[11,"is_safe","","Whether a method is considered \"safe\", meaning the request is essentially read-only.",160,[[["self"]],["bool"]]],[11,"is_idempotent","","Whether a method is considered \"idempotent\", meaning the request has the same result if executed multiple times.",160,[[["self"]],["bool"]]],[11,"as_str","","Return a &str representation of the HTTP method",160,[[["self"]],["str"]]],[11,"from_u16","","Converts a u16 to a status code.",159,[[["u16"]],["result",["statuscode","invalidstatuscode"]]]],[11,"from_bytes","","Converts a &[u8] to a status code",159,N],[11,"as_u16","","Returns the `u16` corresponding to this `StatusCode`.",159,[[["self"]],["u16"]]],[11,"as_str","","Returns a &str representation of the `StatusCode`",159,[[["self"]],["str"]]],[11,"canonical_reason","","Get the standardised `reason-phrase` for this status code.",159,[[["self"]],["option",["str"]]]],[11,"is_informational","","Check if status is within 100-199.",159,[[["self"]],["bool"]]],[11,"is_success","","Check if status is within 200-299.",159,[[["self"]],["bool"]]],[11,"is_redirection","","Check if status is within 300-399.",159,[[["self"]],["bool"]]],[11,"is_client_error","","Check if status is within 400-499.",159,[[["self"]],["bool"]]],[11,"is_server_error","","Check if status is within 500-599.",159,[[["self"]],["bool"]]],[18,"CONTINUE","","100 Continue [RFC7231, Section 6.2.1]",159,N],[18,"SWITCHING_PROTOCOLS","","101 Switching Protocols [RFC7231, Section 6.2.2]",159,N],[18,"PROCESSING","","102 Processing [RFC2518]",159,N],[18,"OK","","200 OK [RFC7231, Section 6.3.1]",159,N],[18,"CREATED","","201 Created [RFC7231, Section 6.3.2]",159,N],[18,"ACCEPTED","","202 Accepted [RFC7231, Section 6.3.3]",159,N],[18,"NON_AUTHORITATIVE_INFORMATION","","203 Non-Authoritative Information [RFC7231, Section 6.3.4]",159,N],[18,"NO_CONTENT","","204 No Content [RFC7231, Section 6.3.5]",159,N],[18,"RESET_CONTENT","","205 Reset Content [RFC7231, Section 6.3.6]",159,N],[18,"PARTIAL_CONTENT","","206 Partial Content [RFC7233, Section 4.1]",159,N],[18,"MULTI_STATUS","","207 Multi-Status [RFC4918]",159,N],[18,"ALREADY_REPORTED","","208 Already Reported [RFC5842]",159,N],[18,"IM_USED","","226 IM Used [RFC3229]",159,N],[18,"MULTIPLE_CHOICES","","300 Multiple Choices [RFC7231, Section 6.4.1]",159,N],[18,"MOVED_PERMANENTLY","","301 Moved Permanently [RFC7231, Section 6.4.2]",159,N],[18,"FOUND","","302 Found [RFC7231, Section 6.4.3]",159,N],[18,"SEE_OTHER","","303 See Other [RFC7231, Section 6.4.4]",159,N],[18,"NOT_MODIFIED","","304 Not Modified [RFC7232, Section 4.1]",159,N],[18,"USE_PROXY","","305 Use Proxy [RFC7231, Section 6.4.5]",159,N],[18,"TEMPORARY_REDIRECT","","307 Temporary Redirect [RFC7231, Section 6.4.7]",159,N],[18,"PERMANENT_REDIRECT","","308 Permanent Redirect [RFC7238]",159,N],[18,"BAD_REQUEST","","400 Bad Request [RFC7231, Section 6.5.1]",159,N],[18,"UNAUTHORIZED","","401 Unauthorized [RFC7235, Section 3.1]",159,N],[18,"PAYMENT_REQUIRED","","402 Payment Required [RFC7231, Section 6.5.2]",159,N],[18,"FORBIDDEN","","403 Forbidden [RFC7231, Section 6.5.3]",159,N],[18,"NOT_FOUND","","404 Not Found [RFC7231, Section 6.5.4]",159,N],[18,"METHOD_NOT_ALLOWED","","405 Method Not Allowed [RFC7231, Section 6.5.5]",159,N],[18,"NOT_ACCEPTABLE","","406 Not Acceptable [RFC7231, Section 6.5.6]",159,N],[18,"PROXY_AUTHENTICATION_REQUIRED","","407 Proxy Authentication Required [RFC7235, Section 3.2]",159,N],[18,"REQUEST_TIMEOUT","","408 Request Timeout [RFC7231, Section 6.5.7]",159,N],[18,"CONFLICT","","409 Conflict [RFC7231, Section 6.5.8]",159,N],[18,"GONE","","410 Gone [RFC7231, Section 6.5.9]",159,N],[18,"LENGTH_REQUIRED","","411 Length Required [RFC7231, Section 6.5.10]",159,N],[18,"PRECONDITION_FAILED","","412 Precondition Failed [RFC7232, Section 4.2]",159,N],[18,"PAYLOAD_TOO_LARGE","","413 Payload Too Large [RFC7231, Section 6.5.11]",159,N],[18,"URI_TOO_LONG","","414 URI Too Long [RFC7231, Section 6.5.12]",159,N],[18,"UNSUPPORTED_MEDIA_TYPE","","415 Unsupported Media Type [RFC7231, Section 6.5.13]",159,N],[18,"RANGE_NOT_SATISFIABLE","","416 Range Not Satisfiable [RFC7233, Section 4.4]",159,N],[18,"EXPECTATION_FAILED","","417 Expectation Failed [RFC7231, Section 6.5.14]",159,N],[18,"IM_A_TEAPOT","","418 I'm a teapot [curiously not registered by IANA but RFC2324]",159,N],[18,"MISDIRECTED_REQUEST","","421 Misdirected Request RFC7540, Section 9.1.2",159,N],[18,"UNPROCESSABLE_ENTITY","","422 Unprocessable Entity [RFC4918]",159,N],[18,"LOCKED","","423 Locked [RFC4918]",159,N],[18,"FAILED_DEPENDENCY","","424 Failed Dependency [RFC4918]",159,N],[18,"UPGRADE_REQUIRED","","426 Upgrade Required [RFC7231, Section 6.5.15]",159,N],[18,"PRECONDITION_REQUIRED","","428 Precondition Required [RFC6585]",159,N],[18,"TOO_MANY_REQUESTS","","429 Too Many Requests [RFC6585]",159,N],[18,"REQUEST_HEADER_FIELDS_TOO_LARGE","","431 Request Header Fields Too Large [RFC6585]",159,N],[18,"UNAVAILABLE_FOR_LEGAL_REASONS","","451 Unavailable For Legal Reasons [RFC7725]",159,N],[18,"INTERNAL_SERVER_ERROR","","500 Internal Server Error [RFC7231, Section 6.6.1]",159,N],[18,"NOT_IMPLEMENTED","","501 Not Implemented [RFC7231, Section 6.6.2]",159,N],[18,"BAD_GATEWAY","","502 Bad Gateway [RFC7231, Section 6.6.3]",159,N],[18,"SERVICE_UNAVAILABLE","","503 Service Unavailable [RFC7231, Section 6.6.4]",159,N],[18,"GATEWAY_TIMEOUT","","504 Gateway Timeout [RFC7231, Section 6.6.5]",159,N],[18,"HTTP_VERSION_NOT_SUPPORTED","","505 HTTP Version Not Supported [RFC7231, Section 6.6.6]",159,N],[18,"VARIANT_ALSO_NEGOTIATES","","506 Variant Also Negotiates [RFC2295]",159,N],[18,"INSUFFICIENT_STORAGE","","507 Insufficient Storage [RFC4918]",159,N],[18,"LOOP_DETECTED","","508 Loop Detected [RFC5842]",159,N],[18,"NOT_EXTENDED","","510 Not Extended [RFC2774]",159,N],[18,"NETWORK_AUTHENTICATION_REQUIRED","","511 Network Authentication Required [RFC6585]",159,N],[18,"HTTP_09","","`HTTP/0.9`",162,N],[18,"HTTP_10","","`HTTP/1.0`",162,N],[18,"HTTP_11","","`HTTP/1.1`",162,N],[18,"HTTP_2","","`HTTP/2.0`",162,N],[11,"new","","Creates a new `Cookie` with the given name and value.",157,[[["n"],["v"]],["cookie"]]],[11,"named","","Creates a new `Cookie` with the given name and an empty value.",157,[[["n"]],["cookie"]]],[11,"build","","Creates a new `CookieBuilder` instance from the given key and value strings.",157,[[["n"],["v"]],["cookiebuilder"]]],[11,"parse","","Parses a `Cookie` from the given HTTP cookie header value string. Does not perform any percent-decoding.",157,[[["s"]],["result",["cookie","parseerror"]]]],[11,"parse_encoded","","Parses a `Cookie` from the given HTTP cookie header value string where the name and value fields are percent-encoded. Percent-decodes the name/value fields.",157,[[["s"]],["result",["cookie","parseerror"]]]],[11,"encoded","","Wraps `self` in an `EncodedCookie`: a cost-free wrapper around `Cookie` whose `Display` implementation percent-encodes the name and value of the wrapped `Cookie`.",157,[[["self"]],["encodedcookie"]]],[11,"into_owned","","Converts `self` into a `Cookie` with a static lifetime. This method results in at most one allocation.",157,[[["self"]],["cookie"]]],[11,"name","","Returns the name of `self`.",157,[[["self"]],["str"]]],[11,"value","","Returns the value of `self`.",157,[[["self"]],["str"]]],[11,"name_value","","Returns the name and value of `self` as a tuple of `(name, value)`.",157,N],[11,"http_only","","Returns whether this cookie was marked `HttpOnly` or not. Returns `Some(true)` when the cookie was explicitly set (manually or parsed) as `HttpOnly`, `Some(false)` when `http_only` was manually set to `false`, and `None` otherwise.",157,[[["self"]],["option",["bool"]]]],[11,"secure","","Returns whether this cookie was marked `Secure` or not. Returns `Some(true)` when the cookie was explicitly set (manually or parsed) as `Secure`, `Some(false)` when `secure` was manually set to `false`, and `None` otherwise.",157,[[["self"]],["option",["bool"]]]],[11,"same_site","","Returns the `SameSite` attribute of this cookie if one was specified.",157,[[["self"]],["option",["samesite"]]]],[11,"max_age","","Returns the specified max-age of the cookie if one was specified.",157,[[["self"]],["option",["duration"]]]],[11,"path","","Returns the `Path` of the cookie if one was specified.",157,[[["self"]],["option",["str"]]]],[11,"domain","","Returns the `Domain` of the cookie if one was specified.",157,[[["self"]],["option",["str"]]]],[11,"expires","","Returns the `Expires` time of the cookie if one was specified.",157,[[["self"]],["option",["tm"]]]],[11,"set_name","","Sets the name of `self` to `name`.",157,N],[11,"set_value","","Sets the value of `self` to `value`.",157,N],[11,"set_http_only","","Sets the value of `http_only` in `self` to `value`.",157,N],[11,"set_secure","","Sets the value of `secure` in `self` to `value`.",157,N],[11,"set_same_site","","Sets the value of `same_site` in `self` to `value`.",157,N],[11,"set_max_age","","Sets the value of `max_age` in `self` to `value`.",157,N],[11,"set_path","","Sets the `path` of `self` to `path`.",157,N],[11,"set_domain","","Sets the `domain` of `self` to `domain`.",157,N],[11,"set_expires","","Sets the expires field of `self` to `time`.",157,N],[11,"make_permanent","","Makes `self` a \"permanent\" cookie by extending its expiration and max age 20 years into the future.",157,N],[11,"name_raw","","Returns the name of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"value_raw","","Returns the value of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"path_raw","","Returns the `Path` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Path`, or if the `Path` has changed since parsing, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"domain_raw","","Returns the `Domain` of `self` as a string slice of the raw string `self` was originally parsed from. If `self` was not originally parsed from a raw string, or if `self` doesn't contain a `Domain`, or if the `Domain` has changed since parsing, returns `None`.",157,[[["self"]],["option",["str"]]]],[11,"new","","Creates a new `CookieBuilder` instance from the given name and value.",158,[[["n"],["v"]],["cookiebuilder"]]],[11,"expires","","Sets the `expires` field in the cookie being built.",158,[[["self"],["tm"]],["cookiebuilder"]]],[11,"max_age","","Sets the `max_age` field in the cookie being built.",158,[[["self"],["duration"]],["cookiebuilder"]]],[11,"domain","","Sets the `domain` field in the cookie being built.",158,[[["self"],["d"]],["cookiebuilder"]]],[11,"path","","Sets the `path` field in the cookie being built.",158,[[["self"],["p"]],["cookiebuilder"]]],[11,"secure","","Sets the `secure` field in the cookie being built.",158,[[["self"],["bool"]],["cookiebuilder"]]],[11,"http_only","","Sets the `http_only` field in the cookie being built.",158,[[["self"],["bool"]],["cookiebuilder"]]],[11,"same_site","","Sets the `same_site` field in the cookie being built.",158,[[["self"],["samesite"]],["cookiebuilder"]]],[11,"permanent","","Makes the cookie being built 'permanent' by extending its expiration and max age 20 years into the future.",158,[[["self"]],["cookiebuilder"]]],[11,"finish","","Finishes building and returns the built `Cookie`.",158,[[["self"]],["cookie"]]]],"paths":[[3,"Form"],[3,"Json"],[4,"Binary"],[4,"Body"],[4,"Either"],[3,"App"],[3,"HttpContext"],[3,"Extensions"],[3,"Path"],[3,"Query"],[3,"HttpResponse"],[3,"State"],[3,"HttpRequest"],[3,"Scope"],[3,"ClientConnectorStats"],[4,"ClientConnectorError"],[4,"SendRequestError"],[3,"Connect"],[3,"Pause"],[3,"ClientConnector"],[3,"Connection"],[3,"SendRequest"],[3,"ClientRequest"],[3,"ClientRequestBuilder"],[3,"ClientResponse"],[4,"UrlParseError"],[4,"CookieParseError"],[4,"ParseError"],[4,"PayloadError"],[4,"MultipartError"],[4,"ExpectError"],[4,"ContentTypeError"],[4,"UrlencodedError"],[4,"JsonPayloadError"],[4,"ReadlinesError"],[4,"UriSegmentError"],[4,"UrlGenerationError"],[4,"StaticFileError"],[8,"ResponseError"],[3,"Error"],[3,"InternalError"],[3,"Directory"],[8,"StaticFileConfig"],[3,"DefaultConfig"],[3,"NamedFile"],[3,"ChunkedReadFile"],[3,"StaticFiles"],[4,"Started"],[4,"Response"],[4,"Finished"],[3,"Logger"],[4,"CorsError"],[4,"AllOrSome"],[3,"Cors"],[3,"CorsBuilder"],[4,"CsrfError"],[3,"CsrfFilter"],[3,"DefaultHeaders"],[3,"ErrorHandlers"],[8,"RequestIdentity"],[8,"Identity"],[8,"IdentityPolicy"],[3,"IdentityService"],[3,"CookieIdentityPolicy"],[4,"CookieSessionError"],[8,"RequestSession"],[3,"Session"],[3,"SessionStorage"],[3,"CookieSessionBackend"],[8,"Middleware"],[4,"MultipartItem"],[3,"Multipart"],[3,"Field"],[8,"Predicate"],[3,"AnyPredicate"],[3,"AllPredicate"],[3,"StopServer"],[4,"KeepAlive"],[3,"Request"],[3,"ServerSettings"],[3,"HttpServer"],[8,"HttpHandler"],[8,"HttpHandlerTask"],[8,"IntoHttpHandler"],[3,"TestServer"],[3,"TestServerBuilder"],[3,"TestApp"],[3,"TestRequest"],[3,"CloseReason"],[4,"ClientError"],[4,"CloseCode"],[4,"OpCode"],[4,"ProtocolError"],[4,"HandshakeError"],[4,"Message"],[3,"Client"],[3,"ClientHandshake"],[3,"ClientReader"],[3,"ClientWriter"],[3,"WebsocketContext"],[3,"Frame"],[3,"FramedMessage"],[8,"WsWriter"],[3,"WsStream"],[3,"ConnectAddr"],[4,"ResolverError"],[4,"SignalType"],[3,"Signal"],[3,"Subscribe"],[8,"ActorFuture"],[8,"ActorStream"],[8,"IntoActorFuture"],[8,"WrapFuture"],[8,"WrapStream"],[4,"Either"],[3,"StopArbiter"],[8,"StreamHandler"],[3,"MessageResult"],[4,"ActorState"],[8,"Actor"],[8,"ContextFutureSpawner"],[4,"Running"],[8,"Supervised"],[8,"Handler"],[8,"WriteHandler"],[8,"SystemService"],[4,"SendError"],[8,"AsyncContext"],[8,"ArbiterService"],[8,"Message"],[8,"ActorContext"],[4,"MailboxError"],[8,"AsyncContextParts"],[8,"ResponseChannel"],[8,"ToEnvelope"],[8,"MessageResponse"],[4,"ResourceType"],[8,"Handler"],[8,"FromParam"],[4,"ContentEncoding"],[4,"ConnectionType"],[4,"Entry"],[3,"LanguageTag"],[3,"ExtendedValue"],[3,"ContentDisposition"],[4,"DispositionType"],[4,"DispositionParam"],[4,"Charset"],[8,"AsyncResponder"],[8,"FromRequest"],[8,"Responder"],[8,"HttpMessage"],[3,"Drain"],[3,"FormConfig"],[3,"PayloadConfig"],[3,"AsyncResult"],[3,"HeaderName"],[3,"Cookie"],[3,"CookieBuilder"],[3,"StatusCode"],[3,"Method"],[3,"HeaderMap"],[3,"Version"],[3,"HeaderValue"],[3,"GetAll"],[3,"ValueDrain"],[3,"Drain"],[3,"IntoIter"],[3,"ValueIter"],[3,"Keys"],[3,"Iter"],[3,"ValueIterMut"],[3,"Values"],[3,"InvalidHeaderValue"],[3,"InvalidHeaderName"],[3,"InvalidHeaderValueBytes"],[3,"InvalidHeaderNameBytes"],[3,"ToStrError"],[3,"OccupiedEntry"],[3,"VacantEntry"],[3,"StreamMapErr"],[3,"StreamWrap"],[3,"StreamThen"],[3,"StreamTimeout"],[3,"StreamMap"],[3,"StreamAndThen"],[3,"SyncContext"],[3,"Context"],[3,"MapErr"],[3,"FromErr"],[3,"StreamFinish"],[3,"Timeout"],[3,"Map"],[3,"StreamFold"],[3,"TcpConnector"],[3,"Then"],[3,"DropErr"],[3,"FutureWrap"],[3,"FutureResult"],[3,"AndThen"],[3,"Addr"],[3,"Connect"],[3,"Resolve"],[3,"SpawnHandle"],[3,"Recipient"],[3,"Arbiter"],[3,"Resolver"],[3,"DefaultSignalsHandler"],[3,"ProcessSignals"],[3,"System"],[3,"Registry"],[3,"SystemRegistry"],[3,"Finish"],[3,"Condition"],[3,"Mailbox"],[3,"RecipientRequest"],[3,"Request"],[3,"ActorResponse"],[3,"Response"],[3,"NormalizePath"],[3,"MessageBody"],[3,"UrlEncoded"],[3,"HttpResponseBuilder"],[3,"ConnectionInfo"],[3,"JsonConfig"],[3,"JsonBody"],[3,"Params"],[3,"Payload"],[3,"PayloadBuffer"],[3,"Resource"],[3,"Route"],[3,"ResourceInfo"],[3,"Router"],[3,"ResourceDef"],[3,"StartActor"],[3,"Execute"],[3,"Writer"],[3,"FramedWrite"],[3,"Supervisor"],[3,"SyncArbiter"],[3,"Envelope"],[3,"ContextParts"],[3,"ContextFut"]]}; initSearch(searchIndex); diff --git a/static/api/actix-web/stable/settings.html b/static/api/actix-web/stable/settings.html index 5c765ce..32b3d6e 100644 --- a/static/api/actix-web/stable/settings.html +++ b/static/api/actix-web/stable/settings.html @@ -1 +1 @@ -Rustdoc settings

    Rustdoc settings

    Auto-hide item declarations.
    Auto-hide item attributes.
    Directly go to item in search if there is only one result
    \ No newline at end of file +Rustdoc settings

    Rustdoc settings

    Auto-hide item declarations.
    Auto-hide item attributes.
    Auto-hide trait implementations documentation
    Directly go to item in search if there is only one result
    \ No newline at end of file diff --git a/static/api/actix-web/stable/src/actix_web/application.rs.html b/static/api/actix-web/stable/src/actix_web/application.rs.html index 220cbc1..5669e9c 100644 --- a/static/api/actix-web/stable/src/actix_web/application.rs.html +++ b/static/api/actix-web/stable/src/actix_web/application.rs.html @@ -855,6 +855,30 @@ 855 856 857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881
     use std::rc::Rc;
     
    @@ -1029,7 +1053,9 @@
         /// In the following example only requests with an `/app/` path
         /// prefix get handled. Requests with path `/app/test/` would be
         /// handled, while requests with the paths `/application` or
    -    /// `/other/...` would return `NOT FOUND`.
    +    /// `/other/...` would return `NOT FOUND`. It is also possible to
    +    /// handle `/app` path, to do this you can register resource for
    +    /// empty string `""`
         ///
         /// ```rust
         /// # extern crate actix_web;
    @@ -1038,6 +1064,8 @@
         /// fn main() {
         ///     let app = App::new()
         ///         .prefix("/app")
    +    ///         .resource("", |r| r.f(|_| HttpResponse::Ok()))  // <- handle `/app` path
    +    ///         .resource("/", |r| r.f(|_| HttpResponse::Ok())) // <- handle `/app/` path
         ///         .resource("/test", |r| {
         ///             r.get().f(|_| HttpResponse::Ok());
         ///             r.head().f(|_| HttpResponse::MethodNotAllowed());
    @@ -1489,6 +1517,7 @@
             assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
     
             let app = App::new()
    +            .resource("/test", |r| r.f(|_| HttpResponse::Ok()))
                 .default_resource(|r| r.f(|_| HttpResponse::MethodNotAllowed()))
                 .finish();
             let req = TestRequest::with_uri("/blah").request();
    @@ -1679,6 +1708,23 @@
             assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
         }
     
    +    #[test]
    +    fn test_option_responder() {
    +        let app = App::new()
    +            .resource("/none", |r| r.f(|_| -> Option<&'static str> { None }))
    +            .resource("/some", |r| r.f(|_| Some("some")))
    +            .finish();
    +
    +        let req = TestRequest::with_uri("/none").request();
    +        let resp = app.run(req);
    +        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
    +
    +        let req = TestRequest::with_uri("/some").request();
    +        let resp = app.run(req);
    +        assert_eq!(resp.as_msg().status(), StatusCode::OK);
    +        assert_eq!(resp.as_msg().body(), &Body::Binary(Binary::Slice(b"some")));
    +    }
    +
         #[test]
         fn test_filter() {
             let mut srv = TestServer::with_factory(|| {
    @@ -1697,21 +1743,23 @@
         }
     
         #[test]
    -    fn test_option_responder() {
    -        let app = App::new()
    -            .resource("/none", |r| r.f(|_| -> Option<&'static str> { None }))
    -            .resource("/some", |r| r.f(|_| Some("some")))
    -            .finish();
    +    fn test_prefix_root() {
    +        let mut srv = TestServer::with_factory(|| {
    +            App::new()
    +                .prefix("/test")
    +                .resource("/", |r| r.f(|_| HttpResponse::Ok()))
    +                .resource("", |r| r.f(|_| HttpResponse::Created()))
    +        });
     
    -        let req = TestRequest::with_uri("/none").request();
    -        let resp = app.run(req);
    -        assert_eq!(resp.as_msg().status(), StatusCode::NOT_FOUND);
    +        let request = srv.get().uri(srv.url("/test/")).finish().unwrap();
    +        let response = srv.execute(request.send()).unwrap();
    +        assert_eq!(response.status(), StatusCode::OK);
     
    -        let req = TestRequest::with_uri("/some").request();
    -        let resp = app.run(req);
    -        assert_eq!(resp.as_msg().status(), StatusCode::OK);
    -        assert_eq!(resp.as_msg().body(), &Body::Binary(Binary::Slice(b"some")));
    +        let request = srv.get().uri(srv.url("/test")).finish().unwrap();
    +        let response = srv.execute(request.send()).unwrap();
    +        assert_eq!(response.status(), StatusCode::CREATED);
         }
    +
     }
     
    \ No newline at end of file diff --git a/static/api/actix-web/stable/src/actix_web/client/connector.rs.html b/static/api/actix-web/stable/src/actix_web/client/connector.rs.html index 92b66aa..402c991 100644 --- a/static/api/actix-web/stable/src/actix_web/client/connector.rs.html +++ b/static/api/actix-web/stable/src/actix_web/client/connector.rs.html @@ -1147,6 +1147,7 @@ 1147 1148 1149 +1150
     use std::collections::{HashMap, VecDeque};
     use std::net::Shutdown;
    @@ -1749,7 +1750,7 @@
                         }
                         Acquire::Available => {
                             // create new connection
    -                        self.connect_waiter(key.clone(), waiter, ctx);
    +                        self.connect_waiter(&key, waiter, ctx);
                         }
                     }
                 }
    @@ -1758,7 +1759,8 @@
             self.waiters = Some(act_waiters);
         }
     
    -    fn connect_waiter(&mut self, key: Key, waiter: Waiter, ctx: &mut Context<Self>) {
    +    fn connect_waiter(&mut self, key: &Key, waiter: Waiter, ctx: &mut Context<Self>) {
    +        let key = key.clone();
             let conn = AcquiredConn(key.clone(), Some(self.acq_tx.clone()));
     
             let key2 = key.clone();
    @@ -1785,7 +1787,7 @@
                                     act.connector
                                         .connect_async(&key.host, stream)
                                         .into_actor(act)
    -                                    .then(move |res, act, _| {
    +                                    .then(move |res, _, _| {
                                             match res {
                                                 Err(e) => {
                                                     let _ = waiter.tx.send(Err(
    @@ -1978,7 +1980,7 @@
                     wait,
                     conn_timeout,
                 };
    -            self.connect_waiter(key.clone(), waiter, ctx);
    +            self.connect_waiter(&key, waiter, ctx);
     
                 return ActorResponse::async(
                     rx.map_err(|_| ClientConnectorError::Disconnected)
    @@ -2035,7 +2037,7 @@
                         wait,
                         conn_timeout,
                     };
    -                self.connect_waiter(key.clone(), waiter, ctx);
    +                self.connect_waiter(&key, waiter, ctx);
     
                     ActorResponse::async(
                         rx.map_err(|_| ClientConnectorError::Disconnected)
    diff --git a/static/api/actix-web/stable/src/actix_web/client/pipeline.rs.html b/static/api/actix-web/stable/src/actix_web/client/pipeline.rs.html
    index 763b722..e194330 100644
    --- a/static/api/actix-web/stable/src/actix_web/client/pipeline.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/client/pipeline.rs.html
    @@ -769,7 +769,7 @@
     
                         match pl.parse() {
                             Ok(Async::Ready(mut resp)) => {
    -                            if self.req.method() == &Method::HEAD {
    +                            if self.req.method() == Method::HEAD {
                                     pl.parser.take();
                                 }
                                 resp.set_pipeline(pl);
    diff --git a/static/api/actix-web/stable/src/actix_web/extractor.rs.html b/static/api/actix-web/stable/src/actix_web/extractor.rs.html
    index 2f4f62f..1e274f3 100644
    --- a/static/api/actix-web/stable/src/actix_web/extractor.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/extractor.rs.html
    @@ -1,798 +1,1013 @@
    -extractor.rs.html -- source
      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
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -389
    -390
    -391
    -392
    -393
    -394
    -395
    -396
    -397
    -398
    -399
    -400
    -401
    -402
    -403
    -404
    -405
    -406
    -407
    -408
    -409
    -410
    -411
    -412
    -413
    -414
    -415
    -416
    -417
    -418
    -419
    -420
    -421
    -422
    -423
    -424
    -425
    -426
    -427
    -428
    -429
    -430
    -431
    -432
    -433
    -434
    -435
    -436
    -437
    -438
    -439
    -440
    -441
    -442
    -443
    -444
    -445
    -446
    -447
    -448
    -449
    -450
    -451
    -452
    -453
    -454
    -455
    -456
    -457
    -458
    -459
    -460
    -461
    -462
    -463
    -464
    -465
    -466
    -467
    -468
    -469
    -470
    -471
    -472
    -473
    -474
    -475
    -476
    -477
    -478
    -479
    -480
    -481
    -482
    -483
    -484
    -485
    -486
    -487
    -488
    -489
    -490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
    -502
    -503
    -504
    -505
    -506
    -507
    -508
    -509
    -510
    -511
    -512
    -513
    -514
    -515
    -516
    -517
    -518
    -519
    -520
    -521
    -522
    -523
    -524
    -525
    -526
    -527
    -528
    -529
    -530
    -531
    -532
    -533
    -534
    -535
    -536
    -537
    -538
    -539
    -540
    -541
    -542
    -543
    -544
    -545
    -546
    -547
    -548
    -549
    -550
    -551
    -552
    -553
    -554
    -555
    -556
    -557
    -558
    -559
    -560
    -561
    -562
    -563
    -564
    -565
    -566
    -567
    -568
    -569
    -570
    -571
    -572
    -573
    -574
    -575
    -576
    -577
    -578
    -579
    -580
    -581
    -582
    -583
    -584
    -585
    -586
    -587
    -588
    -589
    -590
    -591
    -592
    -593
    -594
    -595
    -596
    -597
    -598
    -599
    -600
    -601
    -602
    -603
    -604
    -605
    -606
    -607
    -608
    -609
    -610
    -611
    -612
    -613
    -614
    -615
    -616
    -617
    -618
    -619
    -620
    -621
    -622
    -623
    -624
    -625
    -626
    -627
    -628
    -629
    -630
    -631
    -632
    -633
    -634
    -635
    -636
    -637
    -638
    -639
    -640
    -641
    -642
    -643
    -644
    -645
    -646
    -647
    -648
    -649
    -650
    -651
    -652
    -653
    -654
    -655
    -656
    -657
    -658
    -659
    -660
    -661
    -662
    -663
    -664
    -665
    -666
    -667
    -668
    -669
    -670
    -671
    -672
    -673
    -674
    -675
    -676
    -677
    -678
    -679
    -680
    -681
    -682
    -683
    -684
    -685
    -686
    -687
    -688
    -689
    -690
    -691
    -692
    -693
    -694
    -695
    -696
    -697
    -698
    -699
    -700
    -701
    -702
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    -728
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    -739
    -740
    -741
    -742
    -743
    -744
    -745
    -746
    -747
    -748
    -749
    -750
    -751
    -752
    -753
    -754
    -755
    -756
    -757
    -758
    -759
    -760
    -761
    -762
    -763
    -764
    -765
    -766
    -767
    -768
    -769
    -770
    -771
    -772
    -773
    -774
    -775
    -776
    -777
    -778
    -779
    -780
    -781
    -782
    -783
    -784
    -785
    -786
    -787
    -788
    -789
    -790
    -791
    -792
    -793
    -794
    -795
    +extractor.rs.html -- source
       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
    + 184
    + 185
    + 186
    + 187
    + 188
    + 189
    + 190
    + 191
    + 192
    + 193
    + 194
    + 195
    + 196
    + 197
    + 198
    + 199
    + 200
    + 201
    + 202
    + 203
    + 204
    + 205
    + 206
    + 207
    + 208
    + 209
    + 210
    + 211
    + 212
    + 213
    + 214
    + 215
    + 216
    + 217
    + 218
    + 219
    + 220
    + 221
    + 222
    + 223
    + 224
    + 225
    + 226
    + 227
    + 228
    + 229
    + 230
    + 231
    + 232
    + 233
    + 234
    + 235
    + 236
    + 237
    + 238
    + 239
    + 240
    + 241
    + 242
    + 243
    + 244
    + 245
    + 246
    + 247
    + 248
    + 249
    + 250
    + 251
    + 252
    + 253
    + 254
    + 255
    + 256
    + 257
    + 258
    + 259
    + 260
    + 261
    + 262
    + 263
    + 264
    + 265
    + 266
    + 267
    + 268
    + 269
    + 270
    + 271
    + 272
    + 273
    + 274
    + 275
    + 276
    + 277
    + 278
    + 279
    + 280
    + 281
    + 282
    + 283
    + 284
    + 285
    + 286
    + 287
    + 288
    + 289
    + 290
    + 291
    + 292
    + 293
    + 294
    + 295
    + 296
    + 297
    + 298
    + 299
    + 300
    + 301
    + 302
    + 303
    + 304
    + 305
    + 306
    + 307
    + 308
    + 309
    + 310
    + 311
    + 312
    + 313
    + 314
    + 315
    + 316
    + 317
    + 318
    + 319
    + 320
    + 321
    + 322
    + 323
    + 324
    + 325
    + 326
    + 327
    + 328
    + 329
    + 330
    + 331
    + 332
    + 333
    + 334
    + 335
    + 336
    + 337
    + 338
    + 339
    + 340
    + 341
    + 342
    + 343
    + 344
    + 345
    + 346
    + 347
    + 348
    + 349
    + 350
    + 351
    + 352
    + 353
    + 354
    + 355
    + 356
    + 357
    + 358
    + 359
    + 360
    + 361
    + 362
    + 363
    + 364
    + 365
    + 366
    + 367
    + 368
    + 369
    + 370
    + 371
    + 372
    + 373
    + 374
    + 375
    + 376
    + 377
    + 378
    + 379
    + 380
    + 381
    + 382
    + 383
    + 384
    + 385
    + 386
    + 387
    + 388
    + 389
    + 390
    + 391
    + 392
    + 393
    + 394
    + 395
    + 396
    + 397
    + 398
    + 399
    + 400
    + 401
    + 402
    + 403
    + 404
    + 405
    + 406
    + 407
    + 408
    + 409
    + 410
    + 411
    + 412
    + 413
    + 414
    + 415
    + 416
    + 417
    + 418
    + 419
    + 420
    + 421
    + 422
    + 423
    + 424
    + 425
    + 426
    + 427
    + 428
    + 429
    + 430
    + 431
    + 432
    + 433
    + 434
    + 435
    + 436
    + 437
    + 438
    + 439
    + 440
    + 441
    + 442
    + 443
    + 444
    + 445
    + 446
    + 447
    + 448
    + 449
    + 450
    + 451
    + 452
    + 453
    + 454
    + 455
    + 456
    + 457
    + 458
    + 459
    + 460
    + 461
    + 462
    + 463
    + 464
    + 465
    + 466
    + 467
    + 468
    + 469
    + 470
    + 471
    + 472
    + 473
    + 474
    + 475
    + 476
    + 477
    + 478
    + 479
    + 480
    + 481
    + 482
    + 483
    + 484
    + 485
    + 486
    + 487
    + 488
    + 489
    + 490
    + 491
    + 492
    + 493
    + 494
    + 495
    + 496
    + 497
    + 498
    + 499
    + 500
    + 501
    + 502
    + 503
    + 504
    + 505
    + 506
    + 507
    + 508
    + 509
    + 510
    + 511
    + 512
    + 513
    + 514
    + 515
    + 516
    + 517
    + 518
    + 519
    + 520
    + 521
    + 522
    + 523
    + 524
    + 525
    + 526
    + 527
    + 528
    + 529
    + 530
    + 531
    + 532
    + 533
    + 534
    + 535
    + 536
    + 537
    + 538
    + 539
    + 540
    + 541
    + 542
    + 543
    + 544
    + 545
    + 546
    + 547
    + 548
    + 549
    + 550
    + 551
    + 552
    + 553
    + 554
    + 555
    + 556
    + 557
    + 558
    + 559
    + 560
    + 561
    + 562
    + 563
    + 564
    + 565
    + 566
    + 567
    + 568
    + 569
    + 570
    + 571
    + 572
    + 573
    + 574
    + 575
    + 576
    + 577
    + 578
    + 579
    + 580
    + 581
    + 582
    + 583
    + 584
    + 585
    + 586
    + 587
    + 588
    + 589
    + 590
    + 591
    + 592
    + 593
    + 594
    + 595
    + 596
    + 597
    + 598
    + 599
    + 600
    + 601
    + 602
    + 603
    + 604
    + 605
    + 606
    + 607
    + 608
    + 609
    + 610
    + 611
    + 612
    + 613
    + 614
    + 615
    + 616
    + 617
    + 618
    + 619
    + 620
    + 621
    + 622
    + 623
    + 624
    + 625
    + 626
    + 627
    + 628
    + 629
    + 630
    + 631
    + 632
    + 633
    + 634
    + 635
    + 636
    + 637
    + 638
    + 639
    + 640
    + 641
    + 642
    + 643
    + 644
    + 645
    + 646
    + 647
    + 648
    + 649
    + 650
    + 651
    + 652
    + 653
    + 654
    + 655
    + 656
    + 657
    + 658
    + 659
    + 660
    + 661
    + 662
    + 663
    + 664
    + 665
    + 666
    + 667
    + 668
    + 669
    + 670
    + 671
    + 672
    + 673
    + 674
    + 675
    + 676
    + 677
    + 678
    + 679
    + 680
    + 681
    + 682
    + 683
    + 684
    + 685
    + 686
    + 687
    + 688
    + 689
    + 690
    + 691
    + 692
    + 693
    + 694
    + 695
    + 696
    + 697
    + 698
    + 699
    + 700
    + 701
    + 702
    + 703
    + 704
    + 705
    + 706
    + 707
    + 708
    + 709
    + 710
    + 711
    + 712
    + 713
    + 714
    + 715
    + 716
    + 717
    + 718
    + 719
    + 720
    + 721
    + 722
    + 723
    + 724
    + 725
    + 726
    + 727
    + 728
    + 729
    + 730
    + 731
    + 732
    + 733
    + 734
    + 735
    + 736
    + 737
    + 738
    + 739
    + 740
    + 741
    + 742
    + 743
    + 744
    + 745
    + 746
    + 747
    + 748
    + 749
    + 750
    + 751
    + 752
    + 753
    + 754
    + 755
    + 756
    + 757
    + 758
    + 759
    + 760
    + 761
    + 762
    + 763
    + 764
    + 765
    + 766
    + 767
    + 768
    + 769
    + 770
    + 771
    + 772
    + 773
    + 774
    + 775
    + 776
    + 777
    + 778
    + 779
    + 780
    + 781
    + 782
    + 783
    + 784
    + 785
    + 786
    + 787
    + 788
    + 789
    + 790
    + 791
    + 792
    + 793
    + 794
    + 795
    + 796
    + 797
    + 798
    + 799
    + 800
    + 801
    + 802
    + 803
    + 804
    + 805
    + 806
    + 807
    + 808
    + 809
    + 810
    + 811
    + 812
    + 813
    + 814
    + 815
    + 816
    + 817
    + 818
    + 819
    + 820
    + 821
    + 822
    + 823
    + 824
    + 825
    + 826
    + 827
    + 828
    + 829
    + 830
    + 831
    + 832
    + 833
    + 834
    + 835
    + 836
    + 837
    + 838
    + 839
    + 840
    + 841
    + 842
    + 843
    + 844
    + 845
    + 846
    + 847
    + 848
    + 849
    + 850
    + 851
    + 852
    + 853
    + 854
    + 855
    + 856
    + 857
    + 858
    + 859
    + 860
    + 861
    + 862
    + 863
    + 864
    + 865
    + 866
    + 867
    + 868
    + 869
    + 870
    + 871
    + 872
    + 873
    + 874
    + 875
    + 876
    + 877
    + 878
    + 879
    + 880
    + 881
    + 882
    + 883
    + 884
    + 885
    + 886
    + 887
    + 888
    + 889
    + 890
    + 891
    + 892
    + 893
    + 894
    + 895
    + 896
    + 897
    + 898
    + 899
    + 900
    + 901
    + 902
    + 903
    + 904
    + 905
    + 906
    + 907
    + 908
    + 909
    + 910
    + 911
    + 912
    + 913
    + 914
    + 915
    + 916
    + 917
    + 918
    + 919
    + 920
    + 921
    + 922
    + 923
    + 924
    + 925
    + 926
    + 927
    + 928
    + 929
    + 930
    + 931
    + 932
    + 933
    + 934
    + 935
    + 936
    + 937
    + 938
    + 939
    + 940
    + 941
    + 942
    + 943
    + 944
    + 945
    + 946
    + 947
    + 948
    + 949
    + 950
    + 951
    + 952
    + 953
    + 954
    + 955
    + 956
    + 957
    + 958
    + 959
    + 960
    + 961
    + 962
    + 963
    + 964
    + 965
    + 966
    + 967
    + 968
    + 969
    + 970
    + 971
    + 972
    + 973
    + 974
    + 975
    + 976
    + 977
    + 978
    + 979
    + 980
    + 981
    + 982
    + 983
    + 984
    + 985
    + 986
    + 987
    + 988
    + 989
    + 990
    + 991
    + 992
    + 993
    + 994
    + 995
    + 996
    + 997
    + 998
    + 999
    +1000
    +1001
    +1002
    +1003
    +1004
    +1005
    +1006
    +1007
    +1008
    +1009
    +1010
     
     use std::marker::PhantomData;
     use std::ops::{Deref, DerefMut};
    @@ -802,7 +1017,7 @@
     use bytes::Bytes;
     use encoding::all::UTF_8;
     use encoding::types::{DecoderTrap, Encoding};
    -use futures::{Async, Future, Poll};
    +use futures::{future, Async, Future, Poll};
     use mime::Mime;
     use serde::de::{self, DeserializeOwned};
     use serde_urlencoded;
    @@ -813,6 +1028,7 @@
     use httpmessage::{HttpMessage, MessageBody, UrlEncoded};
     use httprequest::HttpRequest;
     
    +#[derive(PartialEq, Eq, PartialOrd, Ord)]
     /// Extract typed information from the request's path.
     ///
     /// ## Example
    @@ -924,6 +1140,7 @@
         }
     }
     
    +#[derive(PartialEq, Eq, PartialOrd, Ord)]
     /// Extract typed information from from the request's query.
     ///
     /// ## Example
    @@ -1011,6 +1228,7 @@
         }
     }
     
    +#[derive(PartialEq, Eq, PartialOrd, Ord)]
     /// Extract typed information from the request's body.
     ///
     /// To extract typed information from request's body, the type `T` must
    @@ -1251,6 +1469,126 @@
         }
     }
     
    +/// Optionally extract a field from the request
    +///
    +/// If the FromRequest for T fails, return None rather than returning an error response
    +///
    +/// ## Example
    +///
    +/// ```rust
    +/// # extern crate actix_web;
    +/// extern crate rand;
    +/// #[macro_use] extern crate serde_derive;
    +/// use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
    +/// use actix_web::error::ErrorBadRequest;
    +///
    +/// #[derive(Debug, Deserialize)]
    +/// struct Thing { name: String }
    +///
    +/// impl<S> FromRequest<S> for Thing {
    +///     type Config = ();
    +///     type Result = Result<Thing, Error>;
    +///
    +///     #[inline]
    +///     fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
    +///         if rand::random() {
    +///             Ok(Thing { name: "thingy".into() })
    +///         } else {
    +///             Err(ErrorBadRequest("no luck"))
    +///         }
    +///
    +///     }
    +/// }
    +///
    +/// /// extract text data from request
    +/// fn index(supplied_thing: Option<Thing>) -> Result<String> {
    +///     match supplied_thing {
    +///         // Puns not intended
    +///         Some(thing) => Ok(format!("Got something: {:?}", thing)),
    +///         None => Ok(format!("No thing!"))
    +///     }
    +/// }
    +///
    +/// fn main() {
    +///     let app = App::new().resource("/users/:first", |r| {
    +///         r.method(http::Method::POST).with(index)
    +///     });
    +/// }
    +/// ```
    +impl<T: 'static, S: 'static> FromRequest<S> for Option<T>
    +where
    +    T: FromRequest<S>,
    +{
    +    type Config = T::Config;
    +    type Result = Box<Future<Item = Option<T>, Error = Error>>;
    +
    +    #[inline]
    +    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
    +        Box::new(T::from_request(req, cfg).into().then(|r| match r {
    +            Ok(v) => future::ok(Some(v)),
    +            Err(_) => future::ok(None),
    +        }))
    +    }
    +}
    +
    +/// Optionally extract a field from the request or extract the Error if unsuccessful
    +///
    +/// If the FromRequest for T fails, inject Err into handler rather than returning an error response
    +///
    +/// ## Example
    +///
    +/// ```rust
    +/// # extern crate actix_web;
    +/// extern crate rand;
    +/// #[macro_use] extern crate serde_derive;
    +/// use actix_web::{http, App, Result, HttpRequest, Error, FromRequest};
    +/// use actix_web::error::ErrorBadRequest;
    +///
    +/// #[derive(Debug, Deserialize)]
    +/// struct Thing { name: String }
    +///
    +/// impl<S> FromRequest<S> for Thing {
    +///     type Config = ();
    +///     type Result = Result<Thing, Error>;
    +///
    +///     #[inline]
    +///     fn from_request(req: &HttpRequest<S>, _cfg: &Self::Config) -> Self::Result {
    +///         if rand::random() {
    +///             Ok(Thing { name: "thingy".into() })
    +///         } else {
    +///             Err(ErrorBadRequest("no luck"))
    +///         }
    +///
    +///     }
    +/// }
    +///
    +/// /// extract text data from request
    +/// fn index(supplied_thing: Result<Thing>) -> Result<String> {
    +///     match supplied_thing {
    +///         Ok(thing) => Ok(format!("Got thing: {:?}", thing)),
    +///         Err(e) => Ok(format!("Error extracting thing: {}", e))
    +///     }
    +/// }
    +///
    +/// fn main() {
    +///     let app = App::new().resource("/users/:first", |r| {
    +///         r.method(http::Method::POST).with(index)
    +///     });
    +/// }
    +/// ```
    +impl<T: 'static, S: 'static> FromRequest<S> for Result<T, Error>
    +where
    +    T: FromRequest<S>,
    +{
    +    type Config = T::Config;
    +    type Result = Box<Future<Item = Result<T, Error>, Error = Error>>;
    +
    +    #[inline]
    +    fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
    +        Box::new(T::from_request(req, cfg).into().then(future::ok))
    +    }
    +}
    +
     /// Payload configuration for request's payload.
     pub struct PayloadConfig {
         limit: usize,
    @@ -1476,6 +1814,98 @@
             }
         }
     
    +    #[test]
    +    fn test_option() {
    +        let req = TestRequest::with_header(
    +            header::CONTENT_TYPE,
    +            "application/x-www-form-urlencoded",
    +        ).finish();
    +
    +        let mut cfg = FormConfig::default();
    +        cfg.limit(4096);
    +
    +        match Option::<Form<Info>>::from_request(&req, &cfg)
    +            .poll()
    +            .unwrap()
    +        {
    +            Async::Ready(r) => assert_eq!(r, None),
    +            _ => unreachable!(),
    +        }
    +
    +        let req = TestRequest::with_header(
    +            header::CONTENT_TYPE,
    +            "application/x-www-form-urlencoded",
    +        ).header(header::CONTENT_LENGTH, "9")
    +            .set_payload(Bytes::from_static(b"hello=world"))
    +            .finish();
    +
    +        match Option::<Form<Info>>::from_request(&req, &cfg)
    +            .poll()
    +            .unwrap()
    +        {
    +            Async::Ready(r) => assert_eq!(
    +                r,
    +                Some(Form(Info {
    +                    hello: "world".into()
    +                }))
    +            ),
    +            _ => unreachable!(),
    +        }
    +
    +        let req = TestRequest::with_header(
    +            header::CONTENT_TYPE,
    +            "application/x-www-form-urlencoded",
    +        ).header(header::CONTENT_LENGTH, "9")
    +            .set_payload(Bytes::from_static(b"bye=world"))
    +            .finish();
    +
    +        match Option::<Form<Info>>::from_request(&req, &cfg)
    +            .poll()
    +            .unwrap()
    +        {
    +            Async::Ready(r) => assert_eq!(r, None),
    +            _ => unreachable!(),
    +        }
    +    }
    +
    +    #[test]
    +    fn test_result() {
    +        let req = TestRequest::with_header(
    +            header::CONTENT_TYPE,
    +            "application/x-www-form-urlencoded",
    +        ).header(header::CONTENT_LENGTH, "11")
    +            .set_payload(Bytes::from_static(b"hello=world"))
    +            .finish();
    +
    +        match Result::<Form<Info>, Error>::from_request(&req, &FormConfig::default())
    +            .poll()
    +            .unwrap()
    +        {
    +            Async::Ready(Ok(r)) => assert_eq!(
    +                r,
    +                Form(Info {
    +                    hello: "world".into()
    +                })
    +            ),
    +            _ => unreachable!(),
    +        }
    +
    +        let req = TestRequest::with_header(
    +            header::CONTENT_TYPE,
    +            "application/x-www-form-urlencoded",
    +        ).header(header::CONTENT_LENGTH, "9")
    +            .set_payload(Bytes::from_static(b"bye=world"))
    +            .finish();
    +
    +        match Result::<Form<Info>, Error>::from_request(&req, &FormConfig::default())
    +            .poll()
    +            .unwrap()
    +        {
    +            Async::Ready(r) => assert!(r.is_err()),
    +            _ => unreachable!(),
    +        }
    +    }
    +
         #[test]
         fn test_payload_config() {
             let req = TestRequest::default().finish();
    diff --git a/static/api/actix-web/stable/src/actix_web/fs.rs.html b/static/api/actix-web/stable/src/actix_web/fs.rs.html
    index ddc446b..3315fb9 100644
    --- a/static/api/actix-web/stable/src/actix_web/fs.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/fs.rs.html
    @@ -1791,16 +1791,21 @@
     1791
     1792
     1793
    +1794
    +1795
    +1796
    +1797
    +1798
     
     //! Static files support
     use std::fmt::Write;
     use std::fs::{DirEntry, File, Metadata};
     use std::io::{Read, Seek};
    +use std::marker::PhantomData;
     use std::ops::{Deref, DerefMut};
     use std::path::{Path, PathBuf};
     use std::time::{SystemTime, UNIX_EPOCH};
     use std::{cmp, io};
    -use std::marker::PhantomData;
     
     #[cfg(unix)]
     use std::os::unix::fs::MetadataExt;
    @@ -1816,13 +1821,13 @@
     use error::{Error, StaticFileError};
     use handler::{AsyncResult, Handler, Responder, RouteHandler, WrapHandler};
     use header;
    +use header::{ContentDisposition, DispositionParam, DispositionType};
     use http::{ContentEncoding, Method, StatusCode};
     use httpmessage::HttpMessage;
     use httprequest::HttpRequest;
     use httpresponse::HttpResponse;
     use param::FromParam;
     use server::settings::DEFAULT_CPUPOOL;
    -use header::{ContentDisposition, DispositionParam, DispositionType};
     
     ///Describes `StaticFiles` configiration
     ///
    @@ -1900,7 +1905,7 @@
     
     /// A file with an associated name.
     #[derive(Debug)]
    -pub struct NamedFile<C=DefaultConfig> {
    +pub struct NamedFile<C = DefaultConfig> {
         path: PathBuf,
         file: File,
         content_type: mime::Mime,
    @@ -1982,7 +1987,7 @@
                 cpu_pool,
                 encoding,
                 status_code: StatusCode::OK,
    -            _cd_map: PhantomData
    +            _cd_map: PhantomData,
             })
         }
     
    @@ -2160,21 +2165,22 @@
                 return Ok(resp.streaming(reader));
             }
     
    -        if !C::is_method_allowed(req.method())
    -        {
    +        if !C::is_method_allowed(req.method()) {
                 return Ok(HttpResponse::MethodNotAllowed()
                     .header(header::CONTENT_TYPE, "text/plain")
                     .header(header::ALLOW, "GET, HEAD")
                     .body("This resource only supports GET and HEAD."));
             }
     
    -        let etag = match C::is_use_etag() {
    -            true => self.etag(),
    -            false => None,
    +        let etag = if C::is_use_etag() {
    +            self.etag()
    +        } else {
    +            None
             };
    -        let last_modified = match C::is_use_last_modifier() {
    -            true => self.last_modified(),
    -            false => None,
    +        let last_modified = if C::is_use_last_modifier() {
    +            self.last_modified()
    +        } else {
    +            None
             };
     
             // check preconditions
    @@ -2431,7 +2437,7 @@
     ///         .finish();
     /// }
     /// ```
    -pub struct StaticFiles<S, C=DefaultConfig> {
    +pub struct StaticFiles<S, C = DefaultConfig> {
         directory: PathBuf,
         index: Option<String>,
         show_index: bool,
    @@ -2466,7 +2472,9 @@
         /// Create new `StaticFiles` instance for specified base directory.
         ///
         /// Identical with `new` but allows to specify configiration to use.
    -    pub fn with_config<T: Into<PathBuf>>(dir: T, config: C) -> Result<StaticFiles<S, C>, Error> {
    +    pub fn with_config<T: Into<PathBuf>>(
    +        dir: T, config: C,
    +    ) -> Result<StaticFiles<S, C>, Error> {
             // use default CpuPool
             let pool = { DEFAULT_CPUPOOL.lock().clone() };
     
    @@ -2476,7 +2484,7 @@
         /// Create new `StaticFiles` instance for specified base directory with config and
         /// `CpuPool`.
         pub fn with_config_pool<T: Into<PathBuf>>(
    -        dir: T, pool: CpuPool, _: C
    +        dir: T, pool: CpuPool, _: C,
         ) -> Result<StaticFiles<S, C>, Error> {
             let dir = dir.into().canonicalize()?;
     
    @@ -2495,7 +2503,7 @@
                 renderer: Box::new(directory_listing),
                 _chunk_size: 0,
                 _follow_symlinks: false,
    -            _cd_map: PhantomData
    +            _cd_map: PhantomData,
             })
         }
     
    @@ -2858,7 +2866,6 @@
                 resp.headers().get(header::CONTENT_DISPOSITION).unwrap(),
                 "inline; filename=\"test.png\""
             );
    -
         }
     
         #[test]
    @@ -3090,24 +3097,27 @@
             fn is_method_allowed(method: &Method) -> bool {
                 match *method {
                     Method::HEAD => true,
    -                _ => false
    +                _ => false,
                 }
             }
         }
     
         #[test]
         fn test_named_file_not_allowed() {
    -        let file = NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
    +        let file =
    +            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
             let req = TestRequest::default().method(Method::POST).finish();
             let resp = file.respond_to(&req).unwrap();
             assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
     
    -        let file = NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
    +        let file =
    +            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
             let req = TestRequest::default().method(Method::PUT).finish();
             let resp = file.respond_to(&req).unwrap();
             assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
     
    -        let file = NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
    +        let file =
    +            NamedFile::open_with_config("Cargo.toml", OnlyMethodHeadConfig).unwrap();
             let req = TestRequest::default().method(Method::GET).finish();
             let resp = file.respond_to(&req).unwrap();
             assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
    diff --git a/static/api/actix-web/stable/src/actix_web/handler.rs.html b/static/api/actix-web/stable/src/actix_web/handler.rs.html
    index d27b54d..ee7a29c 100644
    --- a/static/api/actix-web/stable/src/actix_web/handler.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/handler.rs.html
    @@ -557,8 +557,6 @@
     557
     558
     559
    -560
    -561
     
     use std::marker::PhantomData;
     use std::ops::Deref;
    @@ -970,9 +968,7 @@
             false
         }
     
    -    fn default_resource(&mut self, _: DefaultResource<S>) {
    -        unimplemented!()
    -    }
    +    fn default_resource(&mut self, _: DefaultResource<S>) {}
     
         fn finish(&mut self) {}
     }
    diff --git a/static/api/actix-web/stable/src/actix_web/lib.rs.html b/static/api/actix-web/stable/src/actix_web/lib.rs.html
    index 3cafbeb..4783063 100644
    --- a/static/api/actix-web/stable/src/actix_web/lib.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/lib.rs.html
    @@ -344,9 +344,9 @@
     //!   dependency
     //! * `brotli` - enables `brotli` compression support, requires `c`
     //!   compiler
    -//! * `flate-c` - enables `gzip`, `deflate` compression support, requires
    +//! * `flate2-c` - enables `gzip`, `deflate` compression support, requires
     //!   `c` compiler
    -//! * `flate-rust` - experimental rust based implementation for
    +//! * `flate2-rust` - experimental rust based implementation for
     //!   `gzip`, `deflate` compression.
     //!
     #![cfg_attr(actix_nightly, feature(
    diff --git a/static/api/actix-web/stable/src/actix_web/middleware/logger.rs.html b/static/api/actix-web/stable/src/actix_web/middleware/logger.rs.html
    index 5172cf5..62a8ded 100644
    --- a/static/api/actix-web/stable/src/actix_web/middleware/logger.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/middleware/logger.rs.html
    @@ -410,7 +410,7 @@
     /// default format:
     ///
     /// ```ignore
    -///  %a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
    +///  %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
     /// ```
     /// ```rust
     /// # extern crate actix_web;
    @@ -479,7 +479,7 @@
         /// Create `Logger` middleware with format:
         ///
         /// ```ignore
    -    /// %a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
    +    /// %a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
         /// ```
         fn default() -> Logger {
             Logger {
    @@ -528,7 +528,7 @@
     impl Default for Format {
         /// Return the default formatting style for the `Logger`:
         fn default() -> Format {
    -        Format::new(r#"%a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T"#)
    +        Format::new(r#"%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T"#)
         }
     }
     
    diff --git a/static/api/actix-web/stable/src/actix_web/middleware/session.rs.html b/static/api/actix-web/stable/src/actix_web/middleware/session.rs.html
    index dc33c90..529c20a 100644
    --- a/static/api/actix-web/stable/src/actix_web/middleware/session.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/middleware/session.rs.html
    @@ -605,6 +605,14 @@
     605
     606
     607
    +608
    +609
    +610
    +611
    +612
    +613
    +614
    +615
     
     //! User sessions.
     //!
    @@ -966,6 +974,7 @@
         path: String,
         domain: Option<String>,
         secure: bool,
    +    http_only: bool,
         max_age: Option<Duration>,
         same_site: Option<SameSite>,
     }
    @@ -979,6 +988,7 @@
                 path: "/".to_owned(),
                 domain: None,
                 secure: true,
    +            http_only: true,
                 max_age: None,
                 same_site: None,
             }
    @@ -996,7 +1006,7 @@
             let mut cookie = Cookie::new(self.name.clone(), value);
             cookie.set_path(self.path.clone());
             cookie.set_secure(self.secure);
    -        cookie.set_http_only(true);
    +        cookie.set_http_only(self.http_only);
     
             if let Some(ref domain) = self.domain {
                 cookie.set_domain(domain.clone());
    @@ -1140,6 +1150,12 @@
             self
         }
     
    +    /// Sets the `http_only` field in the session cookie being built.
    +    pub fn http_only(mut self, value: bool) -> CookieSessionBackend {
    +        Rc::get_mut(&mut self.0).unwrap().http_only = value;
    +        self
    +    }
    +
         /// Sets the `same_site` field in the session cookie being built.
         pub fn same_site(mut self, value: SameSite) -> CookieSessionBackend {
             Rc::get_mut(&mut self.0).unwrap().same_site = Some(value);
    diff --git a/static/api/actix-web/stable/src/actix_web/pipeline.rs.html b/static/api/actix-web/stable/src/actix_web/pipeline.rs.html
    index 7d97f9f..5ca5b46 100644
    --- a/static/api/actix-web/stable/src/actix_web/pipeline.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/pipeline.rs.html
    @@ -1182,7 +1182,7 @@
         _h: PhantomData<H>,
     }
     
    -#[derive(PartialEq)]
    +#[derive(PartialEq, Debug)]
     enum RunningState {
         Running,
         Paused,
    diff --git a/static/api/actix-web/stable/src/actix_web/router.rs.html b/static/api/actix-web/stable/src/actix_web/router.rs.html
    index 1cd1989..c70df9d 100644
    --- a/static/api/actix-web/stable/src/actix_web/router.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/router.rs.html
    @@ -1555,7 +1555,7 @@
         ///
         /// Panics if path pattern is wrong.
         pub fn new(path: &str) -> Self {
    -        ResourceDef::with_prefix(path, "/", false)
    +        ResourceDef::with_prefix(path, if path.is_empty() { "" } else { "/" }, false)
         }
     
         /// Parse path pattern and create new `Resource` instance.
    diff --git a/static/api/actix-web/stable/src/actix_web/server/h2.rs.html b/static/api/actix-web/stable/src/actix_web/server/h2.rs.html
    index ea1e937..2c58bed 100644
    --- a/static/api/actix-web/stable/src/actix_web/server/h2.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/server/h2.rs.html
    @@ -440,6 +440,8 @@
     440
     441
     442
    +443
    +444
     
     use std::collections::VecDeque;
     use std::io::{Read, Write};
    @@ -598,7 +600,9 @@
                             }
                         }
     
    -                    if !item.flags.contains(EntryFlags::WRITE_DONE) {
    +                    if item.flags.contains(EntryFlags::FINISHED)
    +                        && !item.flags.contains(EntryFlags::WRITE_DONE)
    +                    {
                             match item.stream.poll_completed(false) {
                                 Ok(Async::NotReady) => (),
                                 Ok(Async::Ready(_)) => {
    diff --git a/static/api/actix-web/stable/src/actix_web/server/h2writer.rs.html b/static/api/actix-web/stable/src/actix_web/server/h2writer.rs.html
    index 2761ac0..aae5641 100644
    --- a/static/api/actix-web/stable/src/actix_web/server/h2writer.rs.html
    +++ b/static/api/actix-web/stable/src/actix_web/server/h2writer.rs.html
    @@ -240,6 +240,26 @@
     240
     241
     242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
     
     #![cfg_attr(feature = "cargo-clippy", allow(redundant_field_names))]
     
    @@ -251,16 +271,18 @@
     use std::rc::Rc;
     use std::{cmp, io};
     
    -use http::header::{HeaderValue, CONNECTION, CONTENT_LENGTH, DATE, TRANSFER_ENCODING};
     use http::{HttpTryFrom, Method, Version};
     
     use super::helpers;
     use super::message::Request;
    -use super::output::{Output, ResponseInfo};
    +use super::output::{Output, ResponseInfo, ResponseLength};
     use super::settings::WorkerSettings;
     use super::{Writer, WriterState, MAX_WRITE_BUFFER_SIZE};
     use body::{Binary, Body};
     use header::ContentEncoding;
    +use http::header::{
    +    HeaderValue, CONNECTION, CONTENT_ENCODING, CONTENT_LENGTH, DATE, TRANSFER_ENCODING,
    +};
     use httpresponse::HttpResponse;
     
     const CHUNK_SIZE: usize = 16_384;
    @@ -335,50 +357,63 @@
             let mut info = ResponseInfo::new(req.inner.method == Method::HEAD);
             self.buffer.for_server(&mut info, &req.inner, msg, encoding);
     
    -        // http2 specific
    -        msg.headers_mut().remove(CONNECTION);
    -        msg.headers_mut().remove(TRANSFER_ENCODING);
    -
    -        // using helpers::date is quite a lot faster
    -        if !msg.headers().contains_key(DATE) {
    -            let mut bytes = BytesMut::with_capacity(29);
    -            self.settings.set_date(&mut bytes, false);
    -            msg.headers_mut()
    -                .insert(DATE, HeaderValue::try_from(bytes.freeze()).unwrap());
    -        }
    -
    -        let body = msg.replace_body(Body::Empty);
    -        match body {
    -            Body::Binary(ref bytes) => {
    -                if bytes.is_empty() {
    -                    msg.headers_mut()
    -                        .insert(CONTENT_LENGTH, HeaderValue::from_static("0"));
    -                    self.flags.insert(Flags::EOF);
    -                } else {
    -                    let mut val = BytesMut::new();
    -                    helpers::convert_usize(bytes.len(), &mut val);
    -                    let l = val.len();
    -                    msg.headers_mut().insert(
    -                        CONTENT_LENGTH,
    -                        HeaderValue::try_from(val.split_to(l - 2).freeze()).unwrap(),
    -                    );
    -                }
    -            }
    -            Body::Empty => {
    -                self.flags.insert(Flags::EOF);
    -                msg.headers_mut()
    -                    .insert(CONTENT_LENGTH, HeaderValue::from_static("0"));
    -            }
    -            _ => (),
    -        }
    -
    +        let mut has_date = false;
             let mut resp = Response::new(());
             *resp.status_mut() = msg.status();
             *resp.version_mut() = Version::HTTP_2;
             for (key, value) in msg.headers().iter() {
    +            match *key {
    +                // http2 specific
    +                CONNECTION | TRANSFER_ENCODING => continue,
    +                CONTENT_ENCODING => if encoding != ContentEncoding::Identity {
    +                    continue;
    +                },
    +                CONTENT_LENGTH => match info.length {
    +                    ResponseLength::None => (),
    +                    _ => continue,
    +                },
    +                DATE => has_date = true,
    +                _ => (),
    +            }
                 resp.headers_mut().insert(key, value.clone());
             }
     
    +        // set date header
    +        if !has_date {
    +            let mut bytes = BytesMut::with_capacity(29);
    +            self.settings.set_date(&mut bytes, false);
    +            resp.headers_mut()
    +                .insert(DATE, HeaderValue::try_from(bytes.freeze()).unwrap());
    +        }
    +
    +        // content length
    +        match info.length {
    +            ResponseLength::Zero => {
    +                resp.headers_mut()
    +                    .insert(CONTENT_LENGTH, HeaderValue::from_static("0"));
    +                self.flags.insert(Flags::EOF);
    +            }
    +            ResponseLength::Length(len) => {
    +                let mut val = BytesMut::new();
    +                helpers::convert_usize(len, &mut val);
    +                let l = val.len();
    +                resp.headers_mut().insert(
    +                    CONTENT_LENGTH,
    +                    HeaderValue::try_from(val.split_to(l - 2).freeze()).unwrap(),
    +                );
    +            }
    +            ResponseLength::Length64(len) => {
    +                let l = format!("{}", len);
    +                resp.headers_mut()
    +                    .insert(CONTENT_LENGTH, HeaderValue::try_from(l.as_str()).unwrap());
    +            }
    +            _ => (),
    +        }
    +        if let Some(ce) = info.content_encoding {
    +            resp.headers_mut()
    +                .insert(CONTENT_ENCODING, HeaderValue::try_from(ce).unwrap());
    +        }
    +
             match self
                 .respond
                 .send_response(resp, self.flags.contains(Flags::EOF))
    @@ -389,6 +424,7 @@
     
             trace!("Response: {:?}", msg);
     
    +        let body = msg.replace_body(Body::Empty);
             if let Body::Binary(bytes) = body {
                 if bytes.is_empty() {
                     Ok(WriterState::Done)
    @@ -472,15 +508,19 @@
                                 let cap = cmp::min(self.buffer.len(), CHUNK_SIZE);
                                 stream.reserve_capacity(cap);
                             } else {
    +                            if eof {
    +                                stream.reserve_capacity(0);
    +                                continue;
    +                            }
                                 self.flags.remove(Flags::RESERVED);
    -                            return Ok(Async::NotReady);
    +                            return Ok(Async::Ready(()));
                             }
                         }
                         Err(e) => return Err(io::Error::new(io::ErrorKind::Other, e)),
                     }
                 }
             }
    -        Ok(Async::NotReady)
    +        Ok(Async::Ready(()))
         }
     }
     

    Redirecting to struct.App.html...