Crate yuri

Source
Expand description

§yuri

meme why uri when you can have yuri

no_std, alloc-free permissive URI Parser & Builder

let s = "https://foo:secret@foobar.test:666/?q=a&m=s#fragemnt";
let uri = yuri::Uri::new(s).expect("Failed to parse URI");

§Motivation

Optimise on size and being permissive and flexible minimally parsing in no_std & alloc-free environments.

Various RFCs / standards & intepretations complicate the picture,

e.g. punycode and this is left to the downstream consumer currently to validate.

We may in the future support opt-in further validation (e.g. IDNA), which the downstream consumer must consider.

§Benchmark

In MacBook M1 13“:

ScenarioCriterion
yuri::Uri New full HTTPs URL[65.657 ns 65.751 ns 65.846 ns]

§RFCs

RFCStatusDescription
rfc3986must2005 / Uniform Resource Identifier (URI): Generic Syntax
rfc6570maybe2012 / URI Template / variable expansion
rfc8820?2020 / URI Design and Ownership
rfc8615?2019 / Well-Known Uniform Resource Identifiers (HTTP)

Modules§

error
Error types

Structs§

Authority
Authority
Fragment
Fragment
Path
Path
Query
Query
SchemeData
Scheme data
Uri
URI
UserInfo
Authority userinfo

Enums§

Scheme
URI Scheme

Type Aliases§

SchemeTls
Whether the Scheme indicates explicit TLS