Code Monkey home page Code Monkey logo

rust's Introduction

WHATWG URL parser for Rust

Fast WHATWG URL Specification compliant URL parser for Rust. Well-tested and widely used by Node.js since Node 18.

The Ada library passes the full range of tests from the specification, across a wide range of platforms (e.g., Windows, Linux, macOS). It fully supports the relevant Unicode Technical Standard.

Usage

Here is an example illustrating a common usage:

use ada_url::Url;
fn main() {
    let u = Url::parse("http://www.google:8080/love#drug", None).expect("bad url");
    println!("port: {:?}", u.port());
    println!("hash: {:?}", u.hash());
    println!("pathname: {:?}", u.pathname());
    println!("href: {:?}", u.href());
    u.set_port("9999");
    println!("href: {:?}", u.href());
}

Features

std: Functionalities that require std. This feature is enabled by default, set no-default-features to true if you want no-std.

serde: Allow Url to work with serde. This feature is disabled by default. Enabling this feature without std would provide you only Serialize. Enabling this feature and std would provide you both Serialize and Deserialize.

libcpp: Build ada-url with libc++. This feature is disabled by default. Enabling this feature without libc++ installed would cause compile error.

Performance

Ada is fast. The benchmark below shows 3.34 times faster URL parsing compared to url

parse/ada_url           time:   [2.0790 µs 2.0812 µs 2.0835 µs]
                        thrpt:  [369.84 MiB/s 370.25 MiB/s 370.65 MiB/s]

parse/url               time:   [6.9266 µs 6.9677 µs 7.0199 µs]
                        thrpt:  [109.77 MiB/s 110.59 MiB/s 111.25 MiB/s]

Implemented traits

Url implements the following traits.

Trait(s) Description
Display Provides to_string and allows for the value to be used in format! macros (e.g. println!).
Debug Allows debugger output in format macros, ({:?} syntax)
PartialEq, Eq Allows for comparison, url1 == url2, url1.eq(url2)
PartialOrd, Ord Allows for ordering url1 < url2, done so alphabetically. This is also allows Url to be used as a key in a BTreeMap
Hash Makes it so that Url can be hashed based on the string representation. This is important so that Url can be used as a key in a HashMap
FromStr Allows for use with str's parse method
TryFrom<String>, TryFrom<&str> Provides try_into methods for String and &str
Borrow<str>, Borrow<[u8]> Used in some crates so that the Url can be used as a key.
Deref<Target=str> Allows for &Url to dereference as a &str. Also provides a number of string methods
AsRef<[u8]>, AsRef<str> Used to do a cheap reference-to-reference conversion.
Send Used to declare that the type can be transferred across thread boundaries.
Sync Used to declare that the type is thread-safe.

Development

justfile

The justfile contains commands (called "recipes") that can be executed by just for convenience.

Run all lints and tests:

just all

Skipping features:

just all --skip=libcpp,serde

License

This code is made available under the Apache License 2.0 as well as the MIT license.

Our tests include third-party code and data. The benchmarking code includes third-party code: it is provided for research purposes only and not part of the library.

rust's People

Contributors

anonrig avatar ksxgithub avatar chanced avatar d3lm avatar brooooooklyn avatar lemire avatar boshen avatar rreverser avatar triniwiz avatar ttsugriy avatar ulisesgascon avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.