# Panda-URI

Panda-URI - fast URI framework. It conforms to RFC 3986.

# Synopsis

```cpp
URISP u = new URI("http://mysite.com:8080/my/path?a=b&c=d#myhash");
CHECK(u->scheme() == "http");
CHECK(u->host() == "mysite.com");
CHECK(u->port() == 8080);
CHECK(u->path() == "/my/path");
CHECK(u->query_string() == "a=b&c=d");
CHECK(u->fragment() == "myhash");

URISP v = new URI(*u); // clone
v->port(443);
CHECK(v->port() == 443);

v->fragment("any_else");
CHECK(v->fragment() == "any_else");

CHECK(v->to_string() == "http://mysite.com:443/my/path?a=b&c=d#any_else");
```

# Build and Install

Panda-URI is suppose to be built with CMake.
```
mkdir build
cd build
cmake ..
cmake --build .
cmake --build . --target install
```

It can be used either way as installed stand alone library or subdirectory. It depends on
* [panda-lib](https://github.com/CrazyPandaLimited/panda-lib)
Make sure that [find_package](https://cmake.org/cmake/help/latest/command/find_package.html) can find it.

Tests use [Catch2](https://github.com/catchorg/Catch2). Tests are not built by default. To enable testing set PANDA_URI_TESTS=ON.

Parser is generated by [Ragel](http://www.colm.net/open-source/ragel/). All generated sources are commited to git so you do not need Ragel to build Panda-URI.

If you have any error messages about Ragel or files `parser.cc` and `parser_ext.cc` not found then check your `git status`. `make clean` deletes generated files, so you should launch `git checkout .` to recover them.