pub struct ExternalUrl(/* private fields */);Expand description
An absolute HTTP(S) URL accepted for opening outside the application.
Validation uses a standards-compliant parser, while the accepted source is preserved byte-for-byte so query strings and fragments reach the system opener unchanged.
User info, ports, query strings, and fragments are allowed and may contain sensitive data. Debug output includes the stored source, so callers must not log values indiscriminately. Host adapters must pass the URL as one argument to an opener API/process and never interpolate it into a shell command.
§Examples
use ailloli_ui_runtime::app::ExternalUrl;
let source = "https://example.com:8443/docs?q=rust#api";
let url = ExternalUrl::parse(source)?;
assert_eq!(url.as_str(), source);Implementations§
Source§impl ExternalUrl
Provides the operations defined for ExternalUrl.
impl ExternalUrl
Provides the operations defined for ExternalUrl.
Sourcepub fn parse(value: impl AsRef<str>) -> Result<Self, ExternalUrlError>
pub fn parse(value: impl AsRef<str>) -> Result<Self, ExternalUrlError>
Validates and preserves an absolute HTTP or HTTPS URL.
Empty input and any leading/trailing Unicode whitespace are rejected before parsing. The parsed scheme must be HTTP(S) and a host must be present. The original bytes (not the parser’s normalized serialization) are stored. Validation performs no DNS, network, allow-list, credential, or reachability check.
§Errors
Returns a specific ExternalUrlError in validation order. Errors never
include the rejected source string.
§Examples
use ailloli_ui_runtime::app::{ExternalUrl, ExternalUrlError};
assert!(ExternalUrl::parse("http://localhost").is_ok());
assert_eq!(ExternalUrl::parse(" file:///tmp/x"), Err(ExternalUrlError::SurroundingWhitespace));
assert_eq!(ExternalUrl::parse("file:///tmp/x"), Err(ExternalUrlError::UnsupportedScheme));Sourcepub fn as_str(&self) -> &str
pub fn as_str(&self) -> &str
Borrows the exact accepted source string.
No normalization, redaction, or percent-decoding is performed.
§Examples
use ailloli_ui_runtime::app::ExternalUrl;
let url = ExternalUrl::parse("HTTPS://EXAMPLE.COM/a%20b?q=1#x")?;
assert_eq!(url.as_str(), "HTTPS://EXAMPLE.COM/a%20b?q=1#x");Trait Implementations§
Source§impl Clone for ExternalUrl
impl Clone for ExternalUrl
Source§fn clone(&self) -> ExternalUrl
fn clone(&self) -> ExternalUrl
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ExternalUrl
impl Debug for ExternalUrl
Source§impl Hash for ExternalUrl
impl Hash for ExternalUrl
Source§impl PartialEq for ExternalUrl
impl PartialEq for ExternalUrl
Source§impl TryFrom<&str> for ExternalUrl
Implements the TryFrom<&str> contract for ExternalUrl.
impl TryFrom<&str> for ExternalUrl
Implements the TryFrom<&str> contract for ExternalUrl.
Source§impl TryFrom<String> for ExternalUrl
Implements the TryFrom<String> contract for ExternalUrl.
impl TryFrom<String> for ExternalUrl
Implements the TryFrom<String> contract for ExternalUrl.
impl Eq for ExternalUrl
impl StructuralPartialEq for ExternalUrl
Auto Trait Implementations§
impl Freeze for ExternalUrl
impl RefUnwindSafe for ExternalUrl
impl Send for ExternalUrl
impl Sync for ExternalUrl
impl Unpin for ExternalUrl
impl UnwindSafe for ExternalUrl
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<A> IntoClickAction<A> for Awhere
A: Clone + 'static,
impl<A> IntoClickAction<A> for Awhere
A: Clone + 'static,
Source§fn into_click_action(self) -> ClickAction<A>
fn into_click_action(self) -> ClickAction<A>
Implements the into_click_action helper used by this module.