Elle is a collection of libraries, written in modern C++ (C++14). It contains a rich set of highly reusable concepts, algorithms, API wrappers, ...
Elle is split into different smaller specialized libraries to provide elegant ways to approach coroutine, networking, formatting, serialization, logging, RPCs, etc.
Notes:
- Elle is under development, used and maintained by Infinit as a set of core libraries. APIs, structures and concepts may change over time. You can use it as is but we don't guarantee any API backward compatibility.
- Elle has a sub-library also called elle, which might change name in a near future.
reactor::http::Request r("https://en.wikipedia.org/w/api.php",
reactor::http::Method::GET);
r.query_string({
{"format", "json"},
{"action", "query"},
{"prop", "extracts"},
{"explaintext", ""},
{"exintro", ""},
{"titles", "JSON"}
});
// Perform the http request and yield until response is available.
r.finalize();
// Deserialize the json response.
std::cout << elle::json::pretty_print(elle::json::read(r)) << std::endl;
Full example here.
To download the sources and build Elle by yourself, you can just get it from GitHub by running the following commands.
git clone https://github.com/infinit/elle --recursive # Clone elle and its submodules.
As mentioned earlier, Elle is a set of libraries, designed to ease C++ development through robust and flexible implementations, including:
- elle: Utilities including serialization, logs, buffer, formatting, ...
- reactor: An asynchronous framework using a coroutines scheduler
- cryptography: Object-oriented cryptography wrapper around OpenSSL
- protocol: Network communication library (RPCs)
- das: Model manipulator and generator
- athena: Byzantine environment library
- aws: reactorified AWS API wrapper
- dropbox: reactorified Dropbox API wrapper
Elle uses Drake and has it as a submodule.
First you need to install drakes requirements.
sudo pip3 install elle/drake/requirements.txt # Install Drake dependencies.
Note: If you don't want Drake dependencies to be installed on your system, you should consider using virtualenv.
Then, change directory to _build/<architecture>
where you can find a generic Drake configuration script.
cd elle/_build/linux64
./drake //build -j 2 # Build all libraries using 2 jobs.
cd elle/_build/osx
./drake //build -j 2 # Build all libraries using 2 jobs.
Because Elle was designed to be modular, you can build specific parts of Elle by running ./drake //<module>/build
:
./drake //cryptography/build -j 2 # To build libcryptography and its dependencies.
./drake //reactor/build -j 2 # To build the libreactor and its dependencies.
./drake //protocol/build -j 2 # To build the libprotocol and its dependencies.
./drake //...
It will result on <module>/lib/lib<module>.so
and its dependencies on Linux, <module>/lib/lib<module>.dylib
on macOS, ...
Elle depends on a few libraries which are automatically downloaded and built for your system by Drake if needed.
- Boost (v1.60.0, patched)
- PatchELF (v0.9)
- zlib (v1.2.11)
- OpenSSL (v1.0.2g)
- curl (v7.48.0, patched)
- libarchive (v3.1.2, patched)
- OpenLDAP (v2.4.44)
- Website: https://infinit.sh/open-source
- Email: [email protected]