NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #508 most downloaded on crates.io
IRI as string types
Last release 2 months ago
26 Jul 2026
Ships unpredictably
gaps range from 8 days to 1.6 years
Nearly every release is documented
notes for 30 of 32 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
40 releases · first in 2018
Reject an empty fragment correctly for absolute IRIs.
types::RiAbsoluteStr. Now the parser is fixed to reject them.Make template::simple_context::SimpleContext::insert() ignore the entry if the given key is invalid as a variable name.
template::context::simple_context::SimpleContext::insert() ignore the
entry if the given key is invalid as a variable name.build::Builder.build::Builder.
From<&'a RiRelativeString<S>> for build::Builder<'a>From<&'a RiString<S>> for build::Builder<'a>From<&'a RiAbsoluteString<S>> for build::Builder<'a>From<&'a RiReferenceString<S>> for build::Builder<'a>template::context::simple_context::SimpleContext::insert() ignore the
entry if the given key is invalid as a variable name.
get() requires key: VarName<'_> parameter.docs.rs).One column per quarter.
Add helpers to make it easy to implement template::Context trait.
template::context::Context trait.template::context::Context trait.
template::context::VisitValueNaive traittemplate::context::visit_value_naive functionimpl_template_context_naive! macroAdd utility functions to visit a list or an associative array for URI template expansion.
build::Builder from IRI reference types.percent_encode::decode::decode_whatwg_bytes() and related types for
percent-decoding by the user.reg-name and ireg-name syntax.template::context::Visitor::visit_list_direct()template::context::Visitor::visit_assoc_direct(){,try_}replace_host{,_reg_name} methods to types
that can contain authorities (i.e.,
Ri{Absolute,Reference,Relative,}String).types::generic::RiAbsoluteString::replace_hosttypes::generic::RiAbsoluteString::replace_host_reg_nametypes::generic::RiAbsoluteString::try_replace_hosttypes::generic::RiAbsoluteString::try_replace_host_reg_nametypes::generic::RiReferenceString::replace_hosttypes::generic::RiReferenceString::replace_host_reg_nametypes::generic::RiReferenceString::try_replace_hosttypes::generic::RiReferenceString::try_replace_host_reg_nametypes::generic::RiRelativeString::replace_hosttypes::generic::RiRelativeString::replace_host_reg_nametypes::generic::RiRelativeString::try_replace_hosttypes::generic::RiRelativeString::try_replace_host_reg_nametypes::generic::RiString::replace_hosttypes::generic::RiString::replace_host_reg_nametypes::generic::RiString::try_replace_hosttypes::generic::RiString::try_replace_host_reg_namebuild::Builder from IRI reference types.
From<types::RiAbsoluteStr<S>> for build::Builder<'_>From<types::RiReferenceStr<S>> for build::Builder<'_>From<types::RiRelativeStr<S>> for build::Builder<'_>From<types::RiStr<S>> for build::Builder<'_>percent_encode::decode::decode_whatwg_bytes() and related types for
percent-decoding by the user.
percent_decode::decode::decode_whatwg_bytes() functionpercent_decode::decode::PercentDecodedWhatwgBytyes typepercent_decode::decode::DecodedFragment typepercent_decode::decode::PercentDecodedBytesFragment iterator typereg-name and ireg-name syntax.
validate::reg_name()types::generic.Add syntax checkers for more components of URIs/IRIs.
validate::Error type.validate::path() function to accept paths starting with //.validate::scheme()validate::authority()validate::host()validate::port()validate::userinfo()validate::path_segment()path, query, and fragment components have
already been provided.validate::Error type.
validate::Error type will provide a little more detailed error info
through Display and ToString.validate::path() function to accept paths starting with //.
//foo/bar are valid although they cannot be used in some
contexts.tools.ietf.org has redirect, but the redirection
truncates the fragment, so the links to the specific sections of documents
had not been working as expected.www.rfc-editor.org, so the links
in the documents and comments must be working as expected.Fix decoding of percent-encoded invalid UTF-8 bytes.
Fix unconditional failure at RiReferenceStr::set_fragment()
RiReferenceStr::set_fragment()RiReferenceStr::set_fragment()Fix URI template expansion with template::DynamicContext to call the methods on_expansion_start and on_expansion_end.
template::DynamicContext to call
the methods on_expansion_start and on_expansion_end.template::DynamicContext to call
the methods on_expansion_start and on_expansion_end.Add fragment_str() methods that returns a fragment in a raw string slice.
fragment_str() methods that returns a fragment in a raw string slice.fragment_str() methods that returns a fragment in a raw string slice.
RiStr::fragment_str()RiReferenceStr::fragment_str()RiRelativeStr::fragment_str()Fix unsoundness of template::UriTemplateStr
template::UriTemplateStrtemplate::UriTemplateStr
#[repr(transparent)] to compile safely but did not.Fix calculation of template expansion error location.
template::UriTemplateStr::variables() methodtemplate::UriTemplateVariables<'_> iterator typetemplate::UriTemplateStr::expand_dynamic() and
template::UriTemplateStr::expand_dynamic_to_string().template::context::DynamicContext trait for mutable context.template::context::Visitor::purpose() method and
template::context::VisitPurpose type to enable users to know for what
purpose the variable is being visited.<template::Error as std::fmt::Display>::fmt), but not exposed through
any other public API.Add easy conversion from an expanded template into IRI/URI string types.
TryFrom<template::Expanded<'_, S, C>> for types::RiAbsoluteString<S>TryFrom<template::Expanded<'_, S, C>> for types::RiReferenceString<S>TryFrom<template::Expanded<'_, S, C>> for types::RiRelativeString<S>TryFrom<template::Expanded<'_, S, C>> for types::RiString<S>Fix a bug that some abnormal IRIs that have no authority and end with /. resulted in wrong normalization that generate unintentional authorities.
/.
resulted in wrong normalization that generate unintentional authorities.
/.
resulted in wrong normalization that generate unintentional authorities.
//..
a:/.//. and a:/bar/..//. should be normalized to a:/.//,
but the actual result was a:// due to this bug.Move template::VarName type into template::context module and deprecate the old name.
new_unchecked() methods to string types.template::VarName type into template::context module and deprecate the old name.template::context::VarName::new() method.resolve::FixedBaseResolver.new_unchecked() methods to string types.
template::UriTemplateStr::new_unchecked()template::UriTemplateString::new_unchecked()types::RiAbsoluteStr::new_unchecked()types::RiAbsoluteString::new_unchecked()types::RiFragmentStr::new_unchecked()types::RiFragmentString::new_unchecked()types::RiQueryStr::new_unchecked()types::RiQueryString::new_unchecked()types::RiReferenceStr::new_unchecked()types::RiReferenceString::new_unchecked()types::RiRelativeStr::new_unchecked()types::RiRelativeString::new_unchecked()types::RiStr::new_unchecked()types::RiString::new_unchecked()template::context::VarName::new() method.resolve::FixedBaseResolver.
resolve::FixedBaseResolver::scheme_str()resolve::FixedBaseResolver::authority_str()resolve::FixedBaseResolver::path_str()resolve::FixedBaseResolver::query()resolve::FixedBaseResolver::query_str()resolve::FixedBaseResolver::fragment_str()template::VarName type into template::context module and deprecate the old name.
template::VarName) is still available while it is marked as deprecated.Add template module that contains URI Template (RFC 6570) processor.
template module that contains URI Template
(RFC 6570) processor.PercentEncoded::{unreserve,characters} methods.template module that contains URI Template
(RFC 6570) processor.
PercentEncoded::{unreserve,characters} methods.
percent_encode::PercentEncoded::characters()percent_encode::PercentEncoded::unreserve()types::RiStr::normalize_but_preserve_authorityless_relative_path()types::RiStr::is_normalized_but_authorityless_relative_path_preserved()types::RiAbsoluteStr::normalize_but_preserve_authorityless_relative_path()types::RiAbsoluteStr::is_normalized_but_authorityless_relative_path_preserved()normalize::Normalized::and_normalize_but_preserve_authorityless_relative_path()normalize::Normalized::enable_normalization_preserving_authorityless_relative_path()types::RiStr::is_normalized_whatwg()types::RiAbsoluteStr::is_normalized_whatwg()Remove deprecated percent_encoding module and aliases defined in it.
memchr-std, serde-alloc, and serde-std features.
alloc and/or std features for additional dependencies are
automatically enabled when all of dependent featuers are enabled.
percent_encode::PercentEncode.format module that contains utilities for types with Display trait impl.
format::ToStringFallible trait.format::ToDedicatedString trait.format::write_to_slice function and format::CapacityOverflow type.format::try_append_to_string function.task module and task::ProcessAndWrite trait.
task module.ProcessAndWrite trait implementation from percent_encode::PercentEncoded type.ProcessAndWrite trait implementation from convert::MappedToUri type.normalize::NormalizationTask type.normalize::NormalizationTask type.
normalize::Normalized instead.Display-able types.
{BorrowedIri}::encode_to_uri to
convert::MappedToUri<'_, Self>.resolve::FixedBaseResolver::resolve() method to noramlize::Normalized.{BorrowedIri}::normalize() method to normalize::Normalized.{BorrowedIri}::resolve_against() method to normalize::Normalized.BufferError type.{OwnedIri}::encode_to_uri to {OwnedIri}::encode_to_uri_inline.{OwnedIri}::try_encode_to_uri_inline method.{OwnedIri}::try_encode_into_uri method.convert::MappedToUri<'_, T> generic over the spec.resolve module.normalize::Normalized type.resolve::FixedBaseResolver.{BorrowedIri}::is_normalized() methods to {BorrowedIri}::is_normalized_rfc3986().mask_password module.{BorrowedIri}::mask_password method.{OwnedIri}::remove_password_inline and {OwnedIri}::remove_nonempty_password_inline()
methods.percent_encoding module and aliases defined in it.build::Builder.
build::Builder::normalize() method.build::Built::ensure_rfc3986_normalizable() method.build::Builder::build().build::Builder::normalize_rfc3986() and
build::Builder::normalize_whatwg() methods.build::Error type.Option<&str> type for build::Builder::userinfopath component of relative IRIs if safely possible.percent_encode::PercentEncode.
percen_encode::PercentEncode::from_user()
percen_encode::PercentEncode::from_password()format::ToStringFallible trait.
Display-able values into String,
but without panicking on OOM.build::Built<'_, RiReferenceStr<S>>build::Built<'_, RiStr<S>>build::Built<'_, RiAbsoluteStr<S>>build::Built<'_, RiRelativeStr<S>>format::ToDedicatedString trait.
Display-able values into owned
dedicated IRI string types, with or without panicking on OOM.build::Built<'_, RiReferenceStr<S>> (Target = RiReferenceString<S>)build::Built<'_, RiStr<S>> (Target = RiString<S>)build::Built<'_, RiAbsoluteStr<S>> (Target = RiAbsoluteString<S>)build::Built<'_, RiRelativeStr<S>> (Target = RiRelativeString<S>)convert::MappedToUri<'_, RiReferenceStr<S>> (Target = RiReferenceString<S>)convert::MappedToUri<'_, RiStr<S>> (Target = RiString<S>)convert::MappedToUri<'_, RiAbsoluteStr<S>> (Target = RiAbsoluteString<S>)convert::MappedToUri<'_, RiRelativeStr<S>> (Target = RiRelativeString<S>)convert::MappedToUri<'_, RiQueryStr<S>> (Target = RiQueryString<S>)convert::MappedToUri<'_, RiFragmentStr<S>> (Target = RiFragmentString<S>)format::write_to_slice function and format::CapacityOverflow type.format::try_append_to_string function.{OwnedIri}::try_encode_to_uri_inline method.{OwnedIri}::try_encode_into_uri method.normalize::Normalized type.
normalize::NormalizationTask type in previous versions.mask_password module.
mask_password::PasswordMasked typemask_password::PasswordReplaced type{BorrowedIri}::mask_password method.
types::RiReferenceStr::mask_password()types::RiStr::mask_password()types::RiAbsoluteStr::mask_password()types::RiRelativeStr::mask_password(){OwnedIri}::remove_password_inline and {OwnedIri}::remove_nonempty_password_inline()
methods.
types::RiReferenceString::remove_password_inline()types::RiReferenceString::remove_nonempty_password_inline()types::RiString::remove_password_inline()types::RiString::remove_nonempty_password_inline()types::RiAbsoluteString::remove_password_inline()types::RiAbsoluteString::remove_nonempty_password_inline()types::RiRelativeString::remove_password_inline()types::RiRelativeString::remove_nonempty_password_inline()build::Builder::normalize() method.build::Built::ensure_rfc3986_normalizable() method.memchr-std, serde-alloc, and serde-std features.
alloc and/or std features for additional dependencies are
automatically enabled when all of dependent featuers are enabled.
ProcessAndWrite trait implementation from percent_encode::PercentEncoded type.ProcessAndWrite trait implementation from convert::MappedToUri type.{BorrowedIri}::encode_to_uri to
convert::MappedToUri<'_, Self>.
borrowed.encode_to_uri() in older versions should be rewritten
to borrowed.encode_to_uri().to_dedicated_string().{OwnedIri}::encode_to_uri to {OwnedIri}::encode_to_uri_inline.normalize::NormalizationTask type.
normalized::Normalized type instead.resolve module.
resolve::resolve()resolve::resolve_normalize()resolve::resolve_whatwg()resolve::resolve_normalize_whatwg()resolve::try_resolve()resolve::try_resolve_normalize()resolve::try_resolve_whatwg()resolve::try_resolve_normalize_whatwg()normalize::NormalizationTask type.
normalize::Normalized instead.resolve::FixedBaseResolver.
resolve::FixedBaseResolver::try_resolve()resolve::FixedBaseResolver::try_resolve_normalize()resolve::FixedBaseResolver::resolve_normalize()resolve::FixedBaseResolver::create_task()resolve::FixedBaseResolver::create_normalizing_task()resolve::FixedBaseResolver::resolve() to noramlize::Normalized.{BorrowedIri}::is_normalized methods to {BorrowedIri}::is_normalized_rfc3986.
types::RiStr::is_normalized to types::RiStr::is_normalized_rfc3986types::RiAbsoluteStr::is_normalized to types::RiAbsoluteStr::is_normalized_rfc3986{BorrowedIri}::normalize() method to normalize::Normalized.
types::RiStr::normalize()types::RiAbsoluteStr::normalize()types::RiReferenceStr::try_resolve_against()types::RiReferenceStr::try_resolve_whatwg_against()types::RiReferenceStr::resolve_whatwg_against()types::RiReferenceStr::try_resolve_normalize_against()types::RiReferenceStr::resolve_normalize_against()types::RiReferenceStr::try_resolve_normalize_whatwg_against()types::RiReferenceStr::resolve_normalize_whatwg_against()types::RiStr::try_normalize()types::RiStr::try_normalize_whatwg()types::RiStr::normalize_whatwg()types::RiAbsoluteStr::try_normalize()types::RiAbsoluteStr::try_normalize_whatwg()types::RiAbsoluteStr::normalize_whatwg()types::RiRelativeStr::try_resolve_against()types::RiRelativeStr::try_resolve_whatwg_against()types::RiRelativeStr::resolve_whatwg_against()types::RiRelativeStr::try_resolve_normalize_against()types::RiRelativeStr::resolve_normalize_against()types::RiRelativeStr::try_resolve_normalize_whatwg_against()types::RiRelativeStr::resolve_normalize_whatwg_against(){BorrowedIri}::resolve() method to normalize::Normalized.
types::RiReferenceStr::resolve_against()types::RiRelativeStr::resolve_against()BufferError type.task module.
task::Error typetask::ProcessAndWrite traitpercent_encoding module and aliases defined in it.
percent_encoding module.percent_encoding::PercentEncoded type alias.percent_encoding::PercentEncodedForIri type alias.percent_encoding::PercentEncodedForUri type alias.build::Builder::build().
Result<(), validate::Error> instead of
Result<(), build::Error>.build::Builder::normalize_rfc3986() and
build::Builder::normalize_whatwg() methods.
build::Builder::normalize() and
build::Builder::ensure_rfc3986_normalizable() instead.build::Error type.Option<&str> type for build::Builder::userinfo
&str.convert::MappedToUri<'_, T> generic over the spec.
convert::MappedToUri<'_, T> can be called for
{BorrowedIri}<S> where S: Spec.build::Builder::build() fails when user part contains a colon (:).path component of relative IRIs if safely possible.Deprecate percent_encoding module in favor of the new name percent_encode.
ensure_rfc3986_normalizable() methods to absolute IRI string types.build module.percent_encoding module in favor of the new name percent_encode.ensure_rfc3986_normalizable() methods to absolute IRI string types.
types::RiStr::ensure_rfc3986_normalizable()types::RiAbsoluteStr::ensure_rfc3986_normalizable()build module.
Builder type is a builder.DisplayBulid type is a validated build result (but not yet heap-allocates).PortBuilder and UserinfoBuilder types are intermediate types to
provide convenient generics to component setters.Error type is a builder error.Buildable trait indicates the syntax corresponding to the string types
(such as IriStr or UriReferenceStr) can be constructed by the builder.percent_encoding module in favor of the new name percent_encode.
percent_encoding
module to keep backward compatibility.Add functions with try_ prefix are introduced for normalization and IRI resolution, and deprecate non-try versions.
RiQueryStr and RiQueryString types for query.try_ prefix are introduced for normalization and
IRI resolution, and deprecate non-try versions.percent_encoding module.RiQueryStr and RiQueryString types for query.try_ prefix are introduced for normalization and resolution.
types::RiStr::try_normalize()types::RiStr::try_normalize_whatwg()types::RiAbsoluteStr::try_normalize()types::RiAbsoluteStr::try_normalize_whatwg()resolve::try_resolve()resolve::try_resolve_whatwg()resolve::try_resolve_normalize()resolve::try_resolve_normalize_whatwg()types::RiReferenceStr::try_resolve_against()types::RiReferenceStr::try_resolve_normalize_against()types::RiReferenceStr::try_resolve_whatwg_against()types::RiReferenceStr::try_resolve_normalize_whatwg_against()types::RiRelativeStr::try_resolve_against()types::RiRelativeStr::try_resolve_normalize_against()types::RiRelativeStr::try_resolve_whatwg_against()types::RiRelativeStr::try_resolve_normalize_whatwg_against()percent_encoding module.
percent_encoding::PercentEncodedpercent_encoding::PercentEncodedForIri (type alias)percent_encoding::PercentEncodedForUri (type alias)try function names for normalization and resolution.
types::RiStr::normalize()types::RiStr::normalize_whatwg()types::RiAbsoluteStr::normalize()types::RiAbsoluteStr::normalize_whatwg()resolve::resolve()resolve::resolve_whatwg()resolve::resolve_normalize()resolve::resolve_normalize_whatwg()types::RiReferenceStr::resolve_against()types::RiReferenceStr::resolve_normalize_against()types::RiReferenceStr::resolve_whatwg_against()types::RiReferenceStr::resolve_normalize_whatwg_against()types::RiRiAblosuteStrStr::resolve_against()types::RiRiAblosuteStrStr::resolve_normalize_against()types::RiRiAblosuteStrStr::resolve_whatwg_against()types::RiRiAblosuteStrStr::resolve_normalize_whatwg_against()try_ prefix instead.Implement IRI resolution and normalization that uses serialization algorithm described in WHATWG URL Standard.
//. The RFC versions fail
since scheme://not-a-host is invalid, but WHATWG versions serializes the
result as scheme:/.//not-a-host.resolve::resolve_whatwg()resolve::resolve_normalize_whatwg()normalize::NormalizationTask::enable_normalization()normalize::NormalizationTask::enable_whatwg_serialization()types::RiStr::is_normalized_whatwg()types::RiStr::normalize_whatwg()types::RiAbsoluteStr::is_normalized_whatwg()types::RiAbsoluteStr::normalize_whatwg()types::RiReferenceStr::resolve_normalize_whatwg_against()types::RiReferenceStr::resolve_whatwg_against()types::RiRelativeStr::resolve_normalize_whatwg_against()types::RiRelativeStr::resolve_whatwg_against()Decode percent-encoded unreserved characters on normalizaiton.
is_normalized method to absolute URI/IRI types.Cow, Box, Rc, and Arc.is_normalized method to absolute URI/IRI types.
Cow, Box, Rc, and Arc.
From<&'a $slice> for Cow<'a, $slice>From<&'_ $slice> for Box<$slice>From<&'_ $slice> for Rc<$slice>From<&'_ $slice> for Arc<$slice>From<$owned> for Cow<'_, $owned>From<$owned> for Box<$owned>Fix IPvFuture literal parsing again ( ).
Add FixedBaseResolver::base() method.
FixedBaseResolver::base() method.FixedBaseResolver::base() method.This entry describes the changes since the previous stable release (v0.4.1).
This entry describes the changes since the previous stable release (v0.4.1).
TryFrom<&[u8]> for the IRI string types.From<{owned URI}> for the owned IRI string types.as_slice method to the owned string types.convert::MappedToUri type.encode_to_uri() method for the IRI string types.encode_into_uri() method for the owned IRI string types.as_uri() method for the borrowed IRI string types.try_into_uri() method for the owned IRI string types.capacity() method to the owned string types.nom crate.serde+{alloc,std} without serde-{alloc,std}.parse example to show more information.normalize example.TryFrom<&[u8]> for the IRI string types.From<{owned URI}> for the owned IRI string types.as_slice method to the owned string types.convert::MappedToUri type.encode_to_uri() method for the IRI string types.encode_into_uri() method for the owned IRI string types.as_uri() method for the borrowed IRI string types.try_into_uri() method for the owned IRI string types.capacity() method to the owned string types.scheme, authority, path, and query.authority:
userinfo, host, and port.
components::AuthorityComponents type and authority_components method.{RiStr, RiAbsoluteStr}::normalize() methods.normalize::NormalizationTask.resolve_normalize for resolve.resolve_normalize_against for resolve_against.resolve::FixedBaseResolver to get normalize::NormalizationTask.NormalizationTask.normalize example.is_strict: bool parameter from resolve::resolve().Result.normalize module and the issue How /..//bar
should be resolved aganst scheme:?
(#8)./%2e%2e/ in the path are now recognized as /../, and
handled specially as "parent directory".nom crate.
serde+{alloc,std} without serde-{alloc,std}.
serde
and {alloc,std} are enabled but corresponding serde-{alloc,std} is not.serde-alloc or serde-std to use
serde support for owned string types.
parse example to show more information.No more API changes are planned until v0.5.0.
No more API changes are planned until v0.5.0.
as_uri() method for the borrowed IRI string types.try_into_uri() method for the owned IRI string types.parse example to show more information.normalize example.as_uri() method for the borrowed IRI string types.try_into_uri() method for the owned IRI string types.normalize example.parse example to show more information.Add more conversions from/to IRI string types.
From<{owned URI}> for the owned IRI string types.as_slice method to the owned string types.convert::MappedToUri type.encode_to_uri() method for the IRI string types.encode_into_uri() method for the owned IRI string types.normalize::NormalizationTask into newly added
task::ProcessAndWrite trait.
allocate_and_write, write_to_byte_slice, append_to_std_string,
and try_append_to_std_string is moved.NormalizationTask from a spec into a string slice type.NormalizationTask.normalize::create_task() function.From<{owned URI}> for the owned IRI string types.as_slice method to the owned string types.convert::MappedToUri type.encode_to_uri() method for the IRI string types.encode_into_uri() method for the owned IRI string types.normalize::NormalizationTask into newly added
task::ProcessAndWrite trait.
allocate_and_write, write_to_byte_slice, append_to_std_string,
and try_append_to_std_string is moved.NormalizationTask from a spec into a string slice type.
NormalizationTask<S> should be changed to NormalizationTask<RiStr<S>>
or NormalizationTask<RiAbsoluteStr<S>>.&RiAbsoluteStr<S> rather than &RiStr<S> when the input IRI
type is RiAbsoluteStr<S>.NormalizationTask.
normalize::create_task() function.Add normalize module, and unify it with IRI resolution.
normalize module, and unify it with IRI resolution.
resolve::{Error, ErrorKind} to normalize module.resolve::ResolutionTask to normalize::NormalizationTask.normalize::create_task function.{RiStr, RiAbsoluteStr}::normalize() methods.normalize module.
normalize::create_task() function.{RiStr, RiAbsoluteStr}::normalize() methods.resolve_normalize for resolve.resolve_normalize_against for resolve_against.resolve::{Error, ErrorKind} to normalize module.resolve::ResolutionTask to normalize::NormalizationTask.
resolve::FixedBaseResolver::create_task() returns NormalizationTask.Fix a bug that serde-std feature did not enable serde support for owned types.
serde-std feature did not enable serde support for owned types.serde-std feature did not enable serde support for owned types.
serde-std enables alloc features automatically.Add getters for major components of IRIs/URIs: scheme, authority, path, and query.
scheme, authority, path, and query.authority: userinfo, host, and port.
components::AuthorityComponents type and authority_components method.serde-std feature did not enable serde support for owned types.scheme, authority, path, and query.
scheme_str, authority_str, path_str, and query_str, respectively.fragment component is already provided.authority: userinfo, host, and port.
components::AuthorityComponents type and authority_components method.serde-std feature did not enable serde support for owned types.
serde-std enables alloc features automatically.Add conversion from a byte slice (&[u8]) into IRI string types.
&[u8]) into IRI string types.capacity method to allocated string types.is_strict: bool parameter from resolve::resolve().resolve::FixedBaseResolver, resolve::ResolutionTask, and resolve::Error types.
alloc feature is disabled.resolve() and its family returns Result<_, resolve::Error>./..//bar should be resolved aganst scheme:? (#8).%2E and %2e in path segment is handled as a plain period ..%2E) during IRI resolution (#9)nom.serde and std/alloc are enabled
without corresponding serde-{std,alloc} features.&[u8]) into IRI string types.capacity method to allocated string types.
shrink_to_fit() and len() already exists, so this would be useful to determine
when to do shrink_to_fit.resolve::FixedBaseResolver, resolve::ResolutionTask, and resolve::Error types.
alloc feature is disabled.is_strict: bool parameter from resolve::resolve().
resolve() and its family returns Result<_, resolve::Error>./..//bar should be resolved aganst scheme:? (#8).%2E and %2e in path segment is handled as a plain period ..unreserved character, and can be escaped at any time
(see RFC 3986 section 2.4.
This means that %2E and %2e in the path can be normalized to . before IRI resolution,
and thus they should also be handled specially during remove_dot_segments algorithm.%2E) during IRI resolution (#9)nom.
nom.serde and std/alloc are enabled
without corresponding serde-{std,alloc} features.
serde and std/alloc might be enabled independently from the different
indirect dependencies, so this situation should not be compilation error.* Bump internal dependency. + nom from v6 to v7. ### Changed (non-breaking) * Bump internal dependency. + nom from v6 to v7.
nom from v6 to v7.nom from v6 to v7.Strictly this is a breaking change, but this only forbids the meaningless trait impls, so no real world use cases won't be affected by this change.
nom crate is bumped to 6.serde::{Serialize, Deserialize} is now implemented only for types with valid spec types.serde::{Serialize, Deserialize} is now implemented only for types with valid spec types.
serde-alloc and serde-std flags are added to control serde's alloc and std support.std use flag to serde crate is now fixed.
Users who want to enable serde and std at the same time should also enable serde-std
feature. Same applies for serde and alloc pair.This release contains huge changes, and CHANGELOG may be incomplete. Beleive rustdoc rather than this CHANGELOG.
This release contains huge changes, and CHANGELOG may be incomplete. Beleive rustdoc rather than this CHANGELOG.
Deref impls for IRI string types.resolve::resolve_iri is now (more) polymorphic, and renamed to resolve::resolve.no_std environment.
std and alloc feature flags are added.std feature is enabled by default (and std enables alloc automatically).cargo +nightly update -Z minimal-versions && cargo test --all-features.types::Ri{,Absolute,Fragment,Reference,Relative}Str{,ing}.{Iri,Uri}{..}Str{,ing}.
IriAbsoluteStr instead of legacy AbsoluteIriStr.types::CreationError is now revived.types::IriCreationError is now removed in favor of types::CreationError.IriReferenceStr::resolve() is now removed.
Use IriReferenceStr::resolve_against() instead.Deref impls for IRI string types.
Deref, because they are not smart pointer types.IriReferenceStr::resolve_against() now returns Cow<'_, IriStr>, rather than IriString.resolve::resolve_iri is now polymorphic, and renamed to resolve::resolve.
no_std environment.
std and alloc feature flags are added.std feature is enabled by default (and std enables alloc automatically).no_std environment with allocator support, you can enable alloc feature.len() and is_empty() methods are added to all IRI string slice types.IriStr::fragment() is added.RelativeIriStr::resolve_against() is added.Fixed a bug that URI validators wrongly accepts non-ASCII characters.
foo:// or foo:////) are wrongly rejected.
foo:// or foo:////) are wrongly rejected
(7a40f4b72964d498970a356368dc320917d88e43).
IriReferenceStr::resolve() is renamed to resolve_against().
IriReferenceStr::resolve() is renamed to resolve_against().
IriReferenceStr::resolve() is renamed to resolve_against()
(4d64ee9884713644b69b8f227f32637d877a9d5f).
resolve() was an ambiguous name, and people cannot know which foo.resolve(bar) means:
"resolve foo against bar" or "foo resolves bar".resolve_against() is more clear. foo.resolve_against(bar) can be natuarally
interpreted as "resolve foo against bar".IriFragmentStr::from_prefixed() is added.
*Str::new() methods are added.IriFragmentStr::from_prefixed() is added.types::CreationError is renamed to types::IriCreationError.
*Str::new() methods are added (39c8f735ccf6f28aaf2f16dcdc579fb3838bb5fb).
<&FooStr>::try_from(s) (where s: &str),
but this is redundant.
Now FooStr::new(s) can be used instead of <&FooStr>::try_from(s) for s: &str.IriFragmentStr::from_prefixed() is added (34cec2f422ba8046134668bdb662f69c9db7f52c).
IriFragmentStr from the given string with leading hash (#) character.
For example, IriFragmentStr::from_prefixed("#foo") is same as IriFragmentStr::new("foo").types::CreationError is renamed to types::IriCreationError
(c6e930608f158281d059e632ffc6117bddf18ebc, c0e650c5e19f1775cf82960afc9610994afba66e).
lexical feature of nom crate (a2d5bcd02e02e80af1c4fc8c14d768ca519ef467).
* Use nom 5.0.0. + This is non-breaking change.
Implement Clone and Copy for validation error types.
Clone and Copy for validation error types.shrink_to_fit() methods for types::iri::*String types.set_fragment() methods for types::iri::*String types
(except for AbsoluteIriString).as_str() method for types::iri::*Str types.types::iri::IriFragment{Str,String} type.fragment() from IriStr to IriReferenceStr.Clone and Copy for validation error types
(validate::{iri,uri}::Error) (8c6af409963a).shrink_to_fit() methods for types::iri::*String types (c8671876229f).set_fragment() methods for types::iri::*String types
(except for AbsoluteIriString) (5ae09a327d93).as_str() method for types::iri::*Str types (0984140105a1).types::iri::IriFragment{Str,String} type (1c5e06192cf8).
types::iri::{AbsoluteIri,Iri,IriReference,RelativeIri}String::TryFrom<_> now
returns types::iri::CreationError as an error (8c6af409963a).
CreationError owns the source data so that it is not lost on conversion
failure.CreationError::into_source() returns the source data which cannot be
converted into an IRI type.validate::iri::Error is used to represent error, but it does
not own the source data.fragment() from IriStr to IriReferenceStr (1c5e06192cf8).
v.fragment() for v: &IriStr is still available thanks to Deref.[Unreleased]: [0.7.14]: [0.7.13]: [0.7.12]: [0.7.11]: [0.7.10]: [0.7.9]: [0.7.8]: [0.7.7]: [0.7.6]: [0.7.5]: [0.7.4]: [0.7.3]: [0.7.2]: [0.7.1]: [0.7.
Totally rewritten.
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →