ada URL parser

May 05, 2023

https://github.com/ada-url/ada/tree/main

WHATWG-compliant and fast URL parser written in modern C++

The interesting bit to me is that this repo contains a useful tool: adaparse, which is a command line program that accepts a URL and prints a json blob with the URL's components:

$ adaparse https://github.com/ada-url/ada?arg=bananas
{
    "buffer":"https://github.com/ada-url/ada?arg=bananas",
    "protocol":"https:",
    "host":"github.com",
    "path":"/ada-url/ada",
    "opaque path":false,
    "query":"?arg=bananas",
    "protocol_end":6,
    "username_end":8,
    "host_start":8,
    "host_end":18,
    "port":null,
    "pathname_start":18,
    "search_start":30,
    "hash_start":null
}

I wish it split up the query parameters. It's used as a benchmark program, so I suppose it's less useful than trurl:

$ trurl --json https://github.com/ada-url/ada?arg=bananas
{
  "url": "https://github.com/ada-url/ada?arg=bananas",
  "scheme": "https",
  "host": "github.com",
  "port": "443",
  "path": "/ada-url/ada",
  "query": "arg=bananas",
}

Or Carl Johnson's parse-url (which I had to modify to build on modern go)

$ echo 'https://github.com/ada-url/ada?arg=bananas' | parse-url | jq .
{
  "Scheme": "https",
  "Opaque": "",
  "User": null,
  "Host": "github.com",
  "Path": "/ada-url/ada",
  "RawPath": "",
  "OmitHost": false,
  "ForceQuery": false,
  "RawQuery": "arg=bananas",
  "Fragment": "",
  "RawFragment": ""
}
↑ up