pub struct RequestTarget<'a> { /* private fields */ }Expand description
Validated complete origin-form HTTP request target.
Implementations§
Source§impl<'a> RequestTarget<'a>
impl<'a> RequestTarget<'a>
Sourcepub fn new(value: &'a str) -> Result<Self, RequestTargetError>
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?
More examples
49 fn prepare<'storage>(
50 &self,
51 storage: PreparationStorage<'storage>,
52 ) -> Result<PreparedRequest<'storage>, Self::Error> {
53 let (target_storage, _body_storage) = storage.into_parts();
54 let target = target_storage
55 .get_mut(..17)
56 .ok_or(PrepareError::TargetBuffer)?;
57 target.copy_from_slice(b"/resources?page=1");
58 let target = core::str::from_utf8(target).map_err(|_| PrepareError::InvalidTarget)?;
59 let target = RequestTarget::new(target).map_err(|_| PrepareError::InvalidTarget)?;
60 let request = TransportRequest::new(Method::Get, target);
61 let metadata = OperationMetadata::new(
62 OperationImpact::ReadOnly,
63 RequestSemantics::Safe,
64 RetryEligibility::ExplicitPolicy,
65 CostIntent::NoKnownCost,
66 RequestIdPolicy::Protected,
67 )
68 .map_err(|_| PrepareError::InvalidMetadata)?;
69 let response_policy = ResponsePolicy::new(
70 &OK_STATUS,
71 ContentTypePolicy::Required(&JSON_MEDIA),
72 ResponseBodyPolicy::Required,
73 65_536,
74 )
75 .map_err(|_| PrepareError::InvalidResponsePolicy)?;
76 let endpoint =
77 EndpointIdentity::new(EndpointScheme::Https, "api.example.invalid", 443, "/v1")
78 .map_err(|_| PrepareError::InvalidEndpoint)?;
79 let authentication_policy = AuthenticationScopePolicy::new(
80 ScopeRequirement::Required(ExampleProvider::ID),
81 ScopeRequirement::Required(ComputeService::ID),
82 ScopeRequirement::Required(endpoint),
83 ScopeRequirement::Forbidden,
84 ScopeRequirement::Forbidden,
85 ScopeRequirement::Forbidden,
86 );
87 let content_type =
88 HeaderName::new("content-type").map_err(|_| PrepareError::InvalidRawResponsePolicy)?;
89 let request_id =
90 HeaderName::new("x-request-id").map_err(|_| PrepareError::InvalidRawResponsePolicy)?;
91 let raw_response_policy = RawResponsePolicy::new(
92 65_536,
93 65_536,
94 ResponseMediaPolicy::Required(&JSON_MEDIA),
95 ResponseMediaPolicy::Required(&JSON_MEDIA),
96 &[content_type, request_id],
97 8,
98 )
99 .map_err(|_| PrepareError::InvalidRawResponsePolicy)?;
100 PreparedRequest::new(
101 request,
102 ProviderService::from_marker::<ComputeService>(EndpointPolicy::fixed(endpoint)),
103 metadata,
104 response_policy,
105 authentication_policy,
106 raw_response_policy,
107 )
108 .map_err(|_| PrepareError::InvalidRawResponsePolicy)
109 }Sourcepub fn assemble<'output>(
path: RequestPath<'_>,
query: RequestQuery<'_>,
output: &'output mut [u8],
) -> Result<RequestTarget<'output>, RequestTargetError>
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.
Sourcepub const fn path(self) -> RequestPath<'a>
pub const fn path(self) -> RequestPath<'a>
Returns the validated path component.
Sourcepub const fn query(self) -> RequestQuery<'a>
pub const fn query(self) -> RequestQuery<'a>
Returns the explicit query state and dialect.
Sourcepub fn query_bytes(self) -> Option<&'a [u8]>
pub fn query_bytes(self) -> Option<&'a [u8]>
Returns the exact final query bytes for signing or fingerprinting.
Trait Implementations§
Source§impl<'a> Clone for RequestTarget<'a>
impl<'a> Clone for RequestTarget<'a>
Source§fn clone(&self) -> RequestTarget<'a>
fn clone(&self) -> RequestTarget<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more