Skip to main content

RequestTarget

Struct RequestTarget 

Source
pub struct RequestTarget<'a> { /* private fields */ }
Expand description

Validated complete origin-form HTTP request target.

Implementations§

Source§

impl<'a> RequestTarget<'a>

Source

pub fn new(value: &'a str) -> Result<Self, RequestTargetError>

Validates a canonical /path?query target.

Use Self::assemble when query absence and presence must be selected explicitly or when a provider uses FormQuery.

Examples found in repository?
examples/provider_neutral.rs (line 7)
6fn main() {
7    let Ok(target) = RequestTarget::new("/resources?page=1") else {
8        return;
9    };
10    let request = TransportRequest::new(Method::Get, target);
11
12    assert_eq!(request.method(), Method::Get);
13    assert_eq!(request.target().as_str(), "/resources?page=1");
14    assert!(request.body().is_empty());
15}
More examples
Hide additional examples
examples/prepared_request.rs (line 56)
46    fn prepare<'storage>(
47        &self,
48        storage: PreparationStorage<'storage>,
49    ) -> Result<PreparedRequest<'storage>, Self::Error> {
50        let (target_storage, _body_storage) = storage.into_parts();
51        let target = target_storage
52            .get_mut(..17)
53            .ok_or(PrepareError::TargetBuffer)?;
54        target.copy_from_slice(b"/resources?page=1");
55        let target = core::str::from_utf8(target).map_err(|_| PrepareError::InvalidTarget)?;
56        let target = RequestTarget::new(target).map_err(|_| PrepareError::InvalidTarget)?;
57        let request = TransportRequest::new(Method::Get, target);
58        let metadata = OperationMetadata::new(
59            OperationImpact::ReadOnly,
60            RequestSemantics::Safe,
61            RetryEligibility::ExplicitPolicy,
62            CostIntent::NoKnownCost,
63        )
64        .map_err(|_| PrepareError::InvalidMetadata)?;
65        let response_policy = ResponsePolicy::new(
66            &OK_STATUS,
67            ContentTypePolicy::Required(&JSON_MEDIA),
68            ResponseBodyPolicy::Required,
69            65_536,
70        )
71        .map_err(|_| PrepareError::InvalidResponsePolicy)?;
72        let endpoint =
73            EndpointIdentity::new(EndpointScheme::Https, "api.example.invalid", 443, "/v1")
74                .map_err(|_| PrepareError::InvalidEndpoint)?;
75        Ok(PreparedRequest::new(
76            request,
77            ProviderService::from_marker::<ComputeService>(EndpointPolicy::fixed(endpoint)),
78            metadata,
79            response_policy,
80        ))
81    }
Source

pub fn assemble<'output>( path: RequestPath<'_>, query: RequestQuery<'_>, output: &'output mut [u8], ) -> Result<RequestTarget<'output>, RequestTargetError>

Atomically writes validated components into caller-owned storage.

Only output[..target.len()], equivalently Self::as_str, is initialized by this operation. The remaining tail is left untouched and may contain data from an earlier use. Never read, log, hash, sign, or transmit the backing buffer past target.len(). Apply the caller’s cleanup policy to the complete buffer before reusing it across a sensitive boundary.

Source

pub const fn as_str(self) -> &'a str

Returns the exact validated request target.

Examples found in repository?
examples/provider_neutral.rs (line 13)
6fn main() {
7    let Ok(target) = RequestTarget::new("/resources?page=1") else {
8        return;
9    };
10    let request = TransportRequest::new(Method::Get, target);
11
12    assert_eq!(request.method(), Method::Get);
13    assert_eq!(request.target().as_str(), "/resources?page=1");
14    assert!(request.body().is_empty());
15}
Source

pub const fn path(self) -> RequestPath<'a>

Returns the validated path component.

Source

pub const fn query(self) -> RequestQuery<'a>

Returns the explicit query state and dialect.

Source

pub fn query_bytes(self) -> Option<&'a [u8]>

Returns the exact final query bytes for signing or fingerprinting.

Source

pub const fn len(self) -> usize

Returns the complete target length.

Source

pub const fn is_empty(self) -> bool

Reports whether the complete target is empty.

Trait Implementations§

Source§

impl<'a> Clone for RequestTarget<'a>

Source§

fn clone(&self) -> RequestTarget<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for RequestTarget<'a>

Source§

impl Debug for RequestTarget<'_>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'a> Eq for RequestTarget<'a>

Source§

impl<'a> PartialEq for RequestTarget<'a>

Source§

fn eq(&self, other: &RequestTarget<'a>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for RequestTarget<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for RequestTarget<'a>

§

impl<'a> RefUnwindSafe for RequestTarget<'a>

§

impl<'a> Send for RequestTarget<'a>

§

impl<'a> Sync for RequestTarget<'a>

§

impl<'a> Unpin for RequestTarget<'a>

§

impl<'a> UnsafeUnpin for RequestTarget<'a>

§

impl<'a> UnwindSafe for RequestTarget<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.