url-domain-parse

Crates.iourl-domain-parse
lib.rsurl-domain-parse
version0.1.4
created_at2026-01-14 11:33:06.958079+00
updated_at2026-01-16 11:21:17.338654+00
descriptionA Rust library for parsing URLs.
homepage
repositoryhttps://github.com/lucas11776-golang/url-domain-parse
max_upload_size
id2042631
size442,075
Themba (lucas11776)

documentation

README

url-domain-parse

A library for parsing URLs.

Why?

url-domain-parse provides some schemes unavailable in other url parsing crates (i.e. sftp, ssh, s3) and it also provides (subdomain, top level domain, second level domain).

Usage

Parsing IP Address

url-domain-parse provides easy to use API lets take look as an example were we are parsing IP address.

use url::ParseError;
use url_domain_parse::Url;

fn main() -> Result<(), ParseError> {
    let url = Url::parse("http://root:admin@127.0.0.1:83/files/upload?run=background#server=2")?;

    assert_eq!("http", url.scheme());
    assert_eq!(false, url.cannot_be_a_base());
    assert_eq!("root", url.username());
    assert_eq!(Some("admin".to_string()), url.password());
    assert_eq!(Some("127.0.0.1".to_string()), url.host());
    assert_eq!(Some("127.0.0.1".to_string()), url.base_host());
    assert_eq!(None, url.domain());
    assert_eq!(None, url.subdomain());
    assert_eq!(None, url.top_level_domain());
    assert_eq!(None, url.second_level_domain());
    assert_eq!(Some(83), url.port());
    assert_eq!("/files/upload", url.path());
    assert_eq!(Some("run=background".to_string()), url.query());
    assert_eq!(Some("server=2".to_string()), url.fragment());

    println!("{:?}", url);

    Ok(())
}

Parsing Domain

use url::ParseError;
use url_domain_parse::Url;

fn main() -> Result<(), ParseError> {
    let url = Url::parse("https://example.com/accounts?page=203#info=1,3")?;

    assert_eq!("https", url.scheme());
    assert_eq!(false, url.cannot_be_a_base());
    assert_eq!("", url.username());
    assert_eq!(None, url.password());
    assert_eq!(Some("example.com".to_string()), url.host());
    assert_eq!(Some("example.com".to_string()), url.base_host());
    assert_eq!(Some("example.com".to_string()), url.domain());
    assert_eq!(Some("example.com".to_string()), url.domain());
    assert_eq!(None, url.subdomain());
    assert_eq!(Some("com".to_string()), url.top_level_domain());
    assert_eq!(Some("com".to_string()), url.second_level_domain());
    assert_eq!(None, url.port());
    assert_eq!("/accounts", url.path());
    assert_eq!(Some("page=203".to_string()), url.query());
    assert_eq!(Some("info=1,3".to_string()), url.fragment());

    println!("{:?}", url);

    Ok(())
}

Parsing Subdomain

use url::ParseError;
use url_domain_parse::Url;

fn main() -> Result<(), ParseError> {
    let url = Url::parse("https://docs.v1.example.co.za/profile")?;

    assert_eq!("https", url.scheme());
    assert_eq!(false, url.cannot_be_a_base());
    assert_eq!("", url.username());
    assert_eq!(None, url.password());
    assert_eq!(Some("docs.v1.example.co.za".to_string()), url.host());
    assert_eq!(Some("example.co.za".to_string()), url.base_host());
    assert_eq!(Some("docs.v1.example.co.za".to_string()), url.domain());
    assert_eq!(Some("docs.v1".to_string()), url.subdomain());
    assert_eq!(Some("za".to_string()), url.top_level_domain());
    assert_eq!(Some("co.za".to_string()), url.second_level_domain());
    assert_eq!(None, url.port());
    assert_eq!("/profile", url.path());
    assert_eq!(None, url.query());
    assert_eq!(None, url.fragment());

    println!("{:?}", url);

    Ok(())
}
Commit count: 0

cargo fmt