Skip to content

TinyChain-Inc/pathlink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pathlink

A URL type whose path can also be used as a filesystem path, for Rust.

pathlink supports absolute HTTP and HTTPS links with IPv4, bracketed IPv6, and domain-name hosts, plus absolute path-only links:

use pathlink::{Domain, Link};

let http: Link = "http://127.0.0.1:8702/api".parse().expect("HTTP link");
let https: Link = "https://example.com/api".parse().expect("HTTPS link");
let idn: Link = "https://bücher.example/api".parse().expect("IDN link");
let local: Link = "/api".parse().expect("path-only link");

assert_eq!(idn.to_string(), "https://xn--bcher-kva.example/api");

let domain = Domain::new("EXAMPLE.COM").expect("domain");
assert_eq!(domain.as_str(), "example.com");

Host parsing intentionally accepts only the URL components represented by Host: a scheme, host address, and optional port. Userinfo, paths, queries, and fragments are rejected when parsing a Host.

For HTTP and HTTPS links, an empty path is equivalent to the root path according to IETF RFC 9110 Section 4.2.3, so parsing https://example.com canonicalizes and displays it as https://example.com/.

Domain names are normalized to ASCII/Punycode through the url crate's IDNA handling and then validated as DNS-style labels. Display, equality, ordering, hashing, and serialization use that normalized form. Address::Domain stores a validated Domain value backed by immutable shared string storage, so domain addresses cannot be constructed from an arbitrary String and cloning them does not clone the underlying domain string.

About

A URL type whose path can also be used as a filesystem path, for Rust

Resources

License

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages