pub struct Client { /* private fields */ }
Expand description
An async
client to construct and dispatch local requests.
For details, see the top-level documentation.
For the blocking
version, see
blocking::Client
.
§Multithreaded Tracking Synchronization Pitfalls
Unlike its blocking
variant, this async
Client
implements Sync
. However, using it in a multithreaded environment
while tracking cookies can result in surprising, non-deterministic behavior.
This is because while cookie modifications are serialized, the ordering
depends on the ordering of request dispatch.
If possible, refrain from sharing a single instance of a tracking Client
across multiple threads. Instead, prefer to create a unique instance of
Client
per thread. If this is not possible, ensure that you are not
depending on the ordering of cookie modifications or have arranged for
request dispatch to occur in a deterministic manner.
Alternatively, use an untracked client, which does not suffer from these pitfalls.
§Example
The following snippet creates a Client
from a Rocket
instance and
dispatches a local POST /
request with a body of Hello, world!
.
use rocket::local::asynchronous::Client;
let rocket = rocket::build();
let client = Client::tracked(rocket).await.expect("valid rocket");
let response = client.post("/")
.body("Hello, world!")
.dispatch()
.await;
Implementations§
Source§impl Client
impl Client
Sourcepub async fn tracked<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
pub async fn tracked<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
Construct a new Client
from an instance of Rocket
with cookie
tracking. This is typically the desired mode of operation for testing.
§Cookie Tracking
With cookie tracking enabled, a Client
propagates cookie changes made
by responses to previously dispatched requests. In other words,
succeeding requests reflect changes (additions and removals) made by any
prior responses.
Cookie tracking requires synchronization between dispatches. As such, cookie tracking should not be enabled if a local client is being used to serve requests on multiple threads.
§Errors
If launching the Rocket
instance would fail, excepting network errors,
the Error
is returned.
use rocket::local::asynchronous::Client;
let rocket = rocket::build();
let client = Client::tracked(rocket);
Sourcepub async fn untracked<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
pub async fn untracked<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
Construct a new Client
from an instance of Rocket
without
cookie tracking.
§Cookie Tracking
Unlike the tracked()
constructor, a Client
returned from this method does not automatically propagate cookie
changes and thus requires no synchronization between dispatches.
§Errors
If launching the Rocket
instance would fail, excepting network
errors, the Error
is returned.
use rocket::local::asynchronous::Client;
let rocket = rocket::build();
let client = Client::untracked(rocket);
Sourcepub async fn terminate(self) -> Rocket<Ignite>
pub async fn terminate(self) -> Rocket<Ignite>
Terminates Client
by initiating a graceful shutdown via
Shutdown::notify()
and running shutdown fairings.
This method must be called on a Client
if graceful shutdown is
required for testing as Drop
does not signal Shutdown
nor run
shutdown fairings. Returns the instance of Rocket
being managed by
this client after all shutdown fairings run to completion.
use rocket::local::asynchronous::Client;
let client: Client = client;
let rocket = client.terminate();
Sourcepub async fn new<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
👎Deprecated since 0.5.0: choose between Client::untracked()
and Client::tracked()
pub async fn new<P: Phase>(rocket: Rocket<P>) -> Result<Self, Error>
Client::untracked()
and Client::tracked()
Deprecated alias to Client::tracked()
.
Sourcepub fn rocket(&self) -> &Rocket<Orbit>
pub fn rocket(&self) -> &Rocket<Orbit>
Returns a reference to the Rocket
this client is creating requests
for.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let rocket = client.rocket();
Returns a cookie jar containing all of the cookies this client is currently tracking.
If cookie tracking is disabled, the returned jar will always be empty. Otherwise, it will contains all of the cookies collected from responses to requests dispatched by this client that have not expired.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let cookie = client.cookies();
Sourcepub fn get<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn get<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local GET
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.get("/hello");
Sourcepub fn put<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn put<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local PUT
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.put("/hello");
Sourcepub fn post<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn post<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local POST
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.post("/hello");
Sourcepub fn delete<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn delete<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local DELETE
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.delete("/hello");
Sourcepub fn options<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn options<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local OPTIONS
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.options("/hello");
Sourcepub fn head<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn head<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local HEAD
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.head("/hello");
Sourcepub fn patch<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
pub fn patch<'c, 'u: 'c, U>(&'c self, uri: U) -> LocalRequest<'c>
Create a local PATCH
request to the URI uri
.
When dispatched, the request will be served by the instance of Rocket
within self
. The request is not dispatched automatically. To actually
dispatch the request, call LocalRequest::dispatch()
on the returned
request.
§Example
use rocket::local::asynchronous::Client;
let client: &Client = client;
let req = client.patch("/hello");
Sourcepub fn req<'c, 'u: 'c, U>(&'c self, method: Method, uri: U) -> LocalRequest<'c>
pub fn req<'c, 'u: 'c, U>(&'c self, method: Method, uri: U) -> LocalRequest<'c>
Create a local GET
request to the URI uri
.
When dispatched, the request will be served by the instance of
Rocket within self
. The request is not dispatched automatically.
To actually dispatch the request, call LocalRequest::dispatch()
on the returned request.
§Example
use rocket::local::asynchronous::Client;
use rocket::http::Method;
let client: &Client = client;
client.req(Method::Get, "/hello");
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Client
impl !RefUnwindSafe for Client
impl Send for Client
impl Sync for Client
impl Unpin for Client
impl !UnwindSafe for Client
Blanket Implementations§
Source§impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
Source§impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.bright_black());
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.bright_green());
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.bright_yellow());
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.bright_magenta());
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.bright_white());
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.on_bright_black());
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.on_bright_green());
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.on_bright_yellow());
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
§Example
println!("{}", value.on_bright_blue());
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.on_bright_magenta());
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
§Example
println!("{}", value.on_bright_cyan());
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.on_bright_white());
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
§Example
println!("{}", value.underline());
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
§Example
println!("{}", value.rapid_blink());
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);