pub struct QueryParams { /* private fields */ }Expand description
Query parameters from an agent URI.
Stores key-value pairs from the query string, sorted lexicographically
by key for consistent normalization. Percent escapes in values decode to
octets, and the complete decoded sequence must be valid UTF-8. Invalid UTF-8
is rejected rather than replaced. Programmatically constructed values may
contain any characters. fmt::Display re-encodes every value octet outside
the ASCII alphanumeric, -, _, and . set using uppercase %XX, so its
output parses to the same values.
§Reserved Parameters
version: Capability version constraint (semver)attestation: Inline PASETO attestation tokenresolver: Hint for resolution endpointttl: Cache TTL hint in seconds
Parameters are held sorted by name, so two queries that differ only in the order they were written are equal and hash equally.
Implementations§
Source§impl QueryParams
impl QueryParams
Sourcepub fn parse(input: &str) -> Result<Self, QueryError>
pub fn parse(input: &str) -> Result<Self, QueryError>
Parses query parameters from a query string (without leading ‘?’).
Percent escapes decode to octets, and the complete decoded sequence must
be valid UTF-8. Invalid sequences are rejected rather than replaced.
Rendering with fmt::Display re-encodes every value octet outside the
ASCII alphanumeric, -, _, and . set as uppercase %XX, preserving
values across parse-display-parse round trips.
This standalone entry point enforces the same total-URI byte limit that
crate::AgentUri::parse applies.
§Errors
Input longer than 512 bytes (crate::MAX_URI_LENGTH) is rejected with
QueryError::TooLong. Other invalid parameters return their
corresponding QueryError variant.
Sourcepub fn iter(&self) -> impl Iterator<Item = (&str, &str)>
pub fn iter(&self) -> impl Iterator<Item = (&str, &str)>
Returns an iterator over the parameters.
Sourcepub fn with_param(&self, key: &str, value: &str) -> Result<Self, QueryError>
pub fn with_param(&self, key: &str, value: &str) -> Result<Self, QueryError>
Returns a new query with the given parameter added or updated.
The value may contain any characters. fmt::Display percent-encodes
every UTF-8 octet outside the ASCII alphanumeric, -, _, and . set.
§Errors
Returns QueryError if the parameter name is invalid.
§Examples
use agent_uri::QueryParams;
let query = QueryParams::new();
let updated = query.with_param("version", "2.0").unwrap();
assert_eq!(updated.get("version"), Some("2.0"));
let with_filter = updated.with_param("filter", "&b=c").unwrap();
assert_eq!(with_filter.get("filter"), Some("&b=c"));
let rendered = with_filter.to_string();
assert!(rendered.contains("filter=%26b%3Dc"));
assert_eq!(
QueryParams::parse(&rendered).unwrap().get("filter"),
Some("&b=c")
);Sourcepub fn without_param(&self, key: &str) -> Self
pub fn without_param(&self, key: &str) -> Self
Returns a new query without the given parameter.
§Examples
use agent_uri::QueryParams;
let query = QueryParams::parse("version=2.0&ttl=300").unwrap();
let updated = query.without_param("ttl");
assert!(updated.get("ttl").is_none());
assert_eq!(updated.get("version"), Some("2.0"));Sourcepub fn with_version(&self, v: &str) -> Result<Self, QueryError>
pub fn with_version(&self, v: &str) -> Result<Self, QueryError>
Returns a new query with the version parameter set.
§Errors
The return type is retained for API stability. This helper currently cannot fail because its fixed parameter name is valid and values may contain any characters.
§Examples
use agent_uri::QueryParams;
let query = QueryParams::new();
let updated = query.with_version("2.0").unwrap();
assert_eq!(updated.version(), Some("2.0"));Sourcepub fn with_ttl(&self, ttl: u64) -> Result<Self, QueryError>
pub fn with_ttl(&self, ttl: u64) -> Result<Self, QueryError>
Returns a new query with the TTL parameter set.
§Errors
The return type is retained for API stability. This helper currently cannot fail because its fixed parameter name and generated value are valid.
§Examples
use agent_uri::QueryParams;
let query = QueryParams::new();
let updated = query.with_ttl(300).unwrap();
assert_eq!(updated.ttl(), Some(300));Trait Implementations§
Source§impl Clone for QueryParams
impl Clone for QueryParams
Source§impl Debug for QueryParams
impl Debug for QueryParams
Source§impl Default for QueryParams
impl Default for QueryParams
Source§impl<'de> Deserialize<'de> for QueryParams
Available on crate feature serde only.
impl<'de> Deserialize<'de> for QueryParams
serde only.Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl Display for QueryParams
impl Display for QueryParams
impl Eq for QueryParams
Source§impl FromStr for QueryParams
impl FromStr for QueryParams
Source§impl Hash for QueryParams
impl Hash for QueryParams
Source§impl Ord for QueryParams
Orders by the parameters themselves rather than by their rendering.
impl Ord for QueryParams
Orders by the parameters themselves rather than by their rendering.
Rendering both sides to compare them allocated two Strings per
comparison, and percent-encoded every value on the way to throwing it away.
The map is already sorted by key, so comparing it directly is the same
walk without the encoding: pairs in key order, first difference wins.
Values that differ only in how they encode are the same value, and now sort
as one.
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for QueryParams
impl PartialEq for QueryParams
Source§impl PartialOrd for QueryParams
impl PartialOrd for QueryParams
Source§impl Serialize for QueryParams
Available on crate feature serde only.
impl Serialize for QueryParams
serde only.