Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/jekyll-gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ concurrency:
jobs:
# Build job
build:
if: github.repository == 'getml/reflect-cpp'
if: github.repository == 'munich-data-engineering/reflect-cpp'
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -41,7 +41,7 @@ jobs:

# Deployment job
deploy:
if: github.repository == 'getml/reflect-cpp'
if: github.repository == 'munich-data-engineering/reflect-cpp'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ if (REFLECTCPP_USE_VCPKG)
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file")
endif ()

project(reflectcpp VERSION 0.25.0 LANGUAGES CXX)
project(reflectcpp VERSION 0.26.0 LANGUAGES CXX)

find_package(ament_cmake QUIET)

Expand Down Expand Up @@ -588,7 +588,7 @@ set(CPACK_RPM_PACKAGE_REQUIRES "")
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
set(CPACK_RPM_PACKAGE_URL "https://rfl.getml.com")
set(CPACK_RPM_PACKAGE_URL "https://munich-data-engineering.github.io/reflect-cpp")

include(CPack)

Expand Down
46 changes: 23 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
# ![C++](https://img.shields.io/badge/c++-%2300599C.svg?style=for-the-badge&logo=c%2B%2B&logoColor=white) reflect-cpp

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/getml/reflect-cpp/graphs/commit-activity)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/munich-data-engineering/reflect-cpp/graphs/commit-activity)
[![Generic badge](https://img.shields.io/badge/C++-20-blue.svg)](https://shields.io/)
[![Generic badge](https://img.shields.io/badge/gcc-11+-blue.svg)](https://shields.io/)
[![Generic badge](https://img.shields.io/badge/clang-14+-blue.svg)](https://shields.io/)
[![Generic badge](https://img.shields.io/badge/MSVC-17+-blue.svg)](https://shields.io/)
[![Conan Center](https://img.shields.io/conan/v/reflect-cpp)](https://conan.io/center/recipes/reflect-cpp)

**📖 Documentation**: https://rfl.getml.com
**📖 Documentation**: https://munich-data-engineering.github.io/reflect-cpp

![image](banner1.png)

**reflect-cpp** is a C++-20/C++-26 library for **fast serialization, deserialization and validation** using reflection, similar to [pydantic](https://github.com/pydantic/pydantic) in Python, [serde](https://github.com/serde-rs) in Rust, [encoding](https://github.com/golang/go/tree/master/src/encoding) in Go or [aeson](https://github.com/haskell/aeson/tree/master) in Haskell.

reflect-cpp supports C++-26 reflection, but most of the functionality is also available in C++-20, except where explicitly noted otherwise.

Moreover, reflect-cpp is the basis for [sqlgen](https://github.com/getml/sqlgen), a **modern, type-safe ORM and SQL query generator** for C++20, inspired by Python's SQLAlchemy/SQLModel and Rust's Diesel. It provides a fluent, composable interface for database operations with compile-time type checking and SQL injection protection.
[Moreover, reflect-cpp is the basis for [sqlgen](https://github.com/munich-data-engineering/sqlgen), a **modern, type-safe ORM and SQL query generator** for C++20, inspired by Python's SQLAlchemy/SQLModel and Rust's Diesel. It provides a fluent, composable interface for database operations with compile-time type checking and SQL injection protection.]

reflect-cpp and sqlgen fill important gaps in C++ development. They reduce boilerplate code and increase code safety. Together, they enable reliable and efficient ETL pipelines.

### Design principles for reflect-cpp include:

- Close integration with [containers](https://github.com/getml/reflect-cpp?tab=readme-ov-file#support-for-containers) from the C++ standard library
[- Close integration with [containers](https://github.com/munich-data-engineering/reflect-cpp?tab=readme-ov-file#support-for-containers) from the C++ standard library]
- Close adherence to C++ idioms
- Out-of-the-box support for [JSON](https://rfl.getml.com/supported_formats/json)
- Simple [installation](https://rfl.getml.com/install)
- Simple extendability to [other serialization formats](https://rfl.getml.com/supported_formats/supporting_your_own_format)
- Simple extendability to [custom classes](https://rfl.getml.com/concepts/custom_classes)
- Being one of the fastest serialization libraries in existence, as demonstrated by our [benchmarks](https://rfl.getml.com/benchmarks)
- Out-of-the-box support for [JSON](https://munich-data-engineering.github.io/reflect-cpp/supported_formats/json)
- Simple [installation](https://munich-data-engineering.github.io/reflect-cpp/install)
- Simple extendability to [other serialization formats](https://munich-data-engineering.github.io/reflect-cpp/supported_formats/supporting_your_own_format)
- Simple extendability to [custom classes](https://munich-data-engineering.github.io/reflect-cpp/concepts/custom_classes)
- Being one of the fastest serialization libraries in existence, as demonstrated by our [benchmarks](https://munich-data-engineering.github.io/reflect-cpp/benchmarks)

<br>

Expand All @@ -51,17 +51,17 @@ reflect-cpp and sqlgen fill important gaps in C++ development. They reduce boile
- [The team behind reflect-cpp](#the-team-behind-reflect-cpp)
- [License](#license)

### More in our [documentation](https://rfl.getml.com):
- [Installation ↗](https://rfl.getml.com/install/#option-2-compilation-using-cmake)
- [C++26 reflection ↗](https://rfl.getml.com/cpp26_reflection)
- [Benchmarks ↗](https://rfl.getml.com/benchmarks)
- [How to contribute ↗](https://rfl.getml.com/contributing)
- [Compiling and running the tests ↗](https://rfl.getml.com/contributing/#compiling-and-running-the-tests)
### More in our [documentation](https://munich-data-engineering.github.io/reflect-cpp):
- [Installation ↗](https://munich-data-engineering.github.io/reflect-cpp/install/#option-2-compilation-using-cmake)
- [C++26 reflection ↗](https://munich-data-engineering.github.io/reflect-cpp/cpp26_reflection)
- [Benchmarks ↗](https://munich-data-engineering.github.io/reflect-cpp/benchmarks)
- [How to contribute ↗](https://munich-data-engineering.github.io/reflect-cpp/contributing)
- [Compiling and running the tests ↗](https://munich-data-engineering.github.io/reflect-cpp/contributing/#compiling-and-running-the-tests)


## Serialization formats

reflect-cpp provides a unified reflection-based interface across different serialization formats. It is deliberately designed in a very modular way, using [concepts](https://en.cppreference.com/w/cpp/language/constraints), to make it as easy as possible to interface various C or C++ libraries related to serialization. Refer to the [documentation](https://rfl.getml.com/supported_formats/bson/) for details.
reflect-cpp provides a unified reflection-based interface across different serialization formats. It is deliberately designed in a very modular way, using [concepts](https://en.cppreference.com/w/cpp/language/constraints), to make it as easy as possible to interface various C or C++ libraries related to serialization. Refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/supported_formats/bson/) for details.

The following table lists the serialization formats currently supported by reflect-cpp and the underlying libraries used:

Expand All @@ -86,7 +86,7 @@ The following table lists the serialization formats currently supported by refle
| YAML | [yaml-cpp](https://github.com/jbeder/yaml-cpp) | >= 0.8.0 | MIT | Textual format with an emphasis on readability |
| yas | [yas](https://github.com/niXman/yas) | >= 7.1.0 | BSL 1.0 | Very fast and compact serialization library |

Support for more serialization formats is in development. Refer to the [issues](https://github.com/getml/reflect-cpp/issues) for details.
[Support for more serialization formats is in development. Refer to the [issues](https://github.com/munich-data-engineering/reflect-cpp/issues) for details.]

Please also refer to the *conanfile.py* or *vcpkg.json* in this repository.

Expand Down Expand Up @@ -366,7 +366,7 @@ struct Config {
// ./app data.csv -o /tmp/out -v --count=10
```

Nested structs, `std::optional`, `std::vector`, enums, `rfl::Flatten` and `rfl::Rename` are all supported. Refer to the [documentation](https://rfl.getml.com/cli) for details.
Nested structs, `std::optional`, `std::vector`, enums, `rfl::Flatten` and `rfl::Rename` are all supported. Refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/cli) for details.

### Error messages

Expand Down Expand Up @@ -483,7 +483,7 @@ This results in the following JSON string:
{"shape":"Rectangle","height":10.0,"width":5.0}
```

Other forms of tagging are supported as well. Refer to the [documentation](https://rfl.getml.com/docs-readme) for details.
Other forms of tagging are supported as well. Refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/docs-readme) for details.

### Extra fields

Expand Down Expand Up @@ -666,7 +666,7 @@ In addition, it supports the following custom containers:

#### Custom classes

Finally, it is very easy to extend full support to your own classes, refer to the [documentation](https://rfl.getml.com/docs-readme) for details.
Finally, it is very easy to extend full support to your own classes, refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/docs-readme) for details.


## Installation
Expand Down Expand Up @@ -714,7 +714,7 @@ cmake --build build -j 4 # gcc, clang
cmake --build build --config Release -j 4 # MSVC
```

For other installation methods, refer to the [documentation](https://rfl.getml.com/docs-readme).
For other installation methods, refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/docs-readme).

### Compiling with C++-26 reflection

Expand All @@ -729,11 +729,11 @@ cmake --build build -j 4

With C++-26 reflection, fixed-size C arrays and inheritance are supported out of the box (no
`-DREFLECT_CPP_C_ARRAYS_OR_INHERITANCE` flag needed), and there are no range restrictions for
enums. Refer to the [documentation](https://rfl.getml.com/cpp26_reflection) for details.
enums. Refer to the [documentation](https://munich-data-engineering.github.io/reflect-cpp/cpp26_reflection) for details.

## The team behind reflect-cpp

reflect-cpp has been developed by [getML (Code17 GmbH)](https://getml.com), a company specializing in software engineering and machine learning for enterprise applications. reflect-cpp is currently maintained by Patrick Urbanke and Manuel Bellersen, with major contributions coming from the community.
reflect-cpp has been developed by [Munich Data Engineering](https://www.munich-data-engineering.com), a company specializing in software engineering and machine learning for enterprise applications.

### Related projects

Expand Down
4 changes: 2 additions & 2 deletions benchmarks/README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Benchmarks

reflect-cpp conducts continuuous benchmarking through its [Github Actions](https://github.com/getml/reflect-cpp/actions) pipelines for different compilers, operating systems
reflect-cpp conducts continuuous benchmarking through its [Github Actions](https://github.com/munich-data-engineering/reflect-cpp/actions) pipelines for different compilers, operating systems
and architectures. Currently, we benchmark the following:

1. How reflect-cpp's JSON parser compares to other JSON libraries for C or C++
2. How the different formats supported by reflect-cpp compare to each other

## Viewing the benchmark results

To view the benchmark results, go to the [Actions tab](https://github.com/getml/reflect-cpp/actions)
To view the benchmark results, go to the [Actions tab](https://github.com/munich-data-engineering/reflect-cpp/actions)
of this Github repository, click on a recent run you are interested in and scroll down to view the summary.

## Running the benchmark results on your own machine
Expand Down
2 changes: 1 addition & 1 deletion conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class ReflectCppConan(ConanFile):
description = "C++-20 library for fast serialization, deserialization and validation using reflection"
license = "MIT"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/getml/reflect-cpp"
homepage = "https://github.com/munich-data-engineering/reflect-cpp"
topics = (
"reflection",
"serialization",
Expand Down
4 changes: 2 additions & 2 deletions docs/content/benchmarks.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Benchmarks

reflect-cpp conducts continuuous benchmarking across different operating systems, compilers and architectures
and publishes the results on its [Actions tab](https://github.com/getml/reflect-cpp/actions).
Refer to the [benchmarks folder](https://github.com/getml/reflect-cpp/tree/main/benchmarks) for details.
and publishes the results on its [Actions tab](https://github.com/munich-data-engineering/reflect-cpp/actions).
Refer to the [benchmarks folder](https://github.com/munich-data-engineering/reflect-cpp/tree/main/benchmarks) for details.

The benchmarks show that reflect-cpp is not only very convenient, but also one the fastest JSON libraries for C++.
It is faster than RapidJSON and about 10 times faster than nlohmann/json. It can be even faster than that,
Expand Down
2 changes: 1 addition & 1 deletion docs/content/build_docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ All params support `true` or `false` toggles. Refer to the [Hextra documentation

## CI/CD: GitHub Pages Deployment

The file `.github/workflows/docs.yaml` automates building and deploying the documentation to [GitHub Pages](https://getml.github.io/reflect-cpp/). It runs on every push to the `main` branch.
The file `.github/workflows/docs.yaml` automates building and deploying the documentation to [GitHub Pages](https://munich-data-engineering.github.io/reflect-cpp/). It runs on every push to the `main` branch.

### How It Works

Expand Down
2 changes: 1 addition & 1 deletion docs/content/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ over
```cpp
#include "rfl/internal/to_ptr_named_tuple.hpp"
```
For further details and reasoning, please refer to [#30](https://github.com/getml/reflect-cpp/issues/30).
For further details and reasoning, please refer to [#30](https://github.com/munich-data-engineering/reflect-cpp/issues/30).

Headers should be self-contained. This will be checked by the CI.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/custom_classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ routines in reflect-cpp.
Please be aware that due to limitations of the Avro format, it is a good idea to always have a struct as your
`ReflectionType` when using Avro to avoid infinite recursions.

If you absolutely do not want to make any changes to your original class, you can implement a [custom parser](https://github.com/getml/reflect-cpp/blob/main/docs/custom_parser.md).
If you absolutely do not want to make any changes to your original class, you can implement a [custom parser](https://github.com/munich-data-engineering/reflect-cpp/blob/main/docs/custom_parser.md).

## Example 1: Using an Impl struct

Expand Down
2 changes: 1 addition & 1 deletion docs/content/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ CMake-config package.
# adding the entry to your vcs .repos file, or create one
# reflect-cpp:
# type: git
# url: git@github.com:getml/reflect-cpp.git
# url: git@github.com:munich-data-engineering/reflect-cpp.git
# version: main
vcs import src < src/.repos
```
Expand Down
6 changes: 3 additions & 3 deletions docs/content/supported_formats/supporting_your_own_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ you have chosen.

The reader and writer constitute a thin layer between the serialization library of your choice and reflect-cpp.

The requirements are laid down in the concepts [IsReader](https://github.com/getml/reflect-cpp/blob/main/include/rfl/parsing/IsReader.hpp) and
[IsWriter](https://github.com/getml/reflect-cpp/blob/main/include/rfl/parsing/IsWriter.hpp) and also documented below.
The requirements are laid down in the concepts [IsReader](https://github.com/munich-data-engineering/reflect-cpp/blob/main/include/rfl/parsing/IsReader.hpp) and
[IsWriter](https://github.com/munich-data-engineering/reflect-cpp/blob/main/include/rfl/parsing/IsWriter.hpp) and also documented below.

Using the reader and the writer you can define your parser like this:

Expand Down Expand Up @@ -53,7 +53,7 @@ std::string write(const T& _obj) {
In the following two sections, we will provide templates for your `Reader` and `Writer`.
You should probably just copy + paste this into your own code and fill in the blanks.

As a reference, you can take a look at how this is done for JSON: https://github.com/getml/reflect-cpp/tree/main/include/rfl/json
As a reference, you can take a look at how this is done for JSON: https://github.com/munich-data-engineering/reflect-cpp/tree/main/include/rfl/json

## Implementing your own writer

Expand Down
2 changes: 1 addition & 1 deletion docs/hugo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ menu:
type: search
- name: GitHub
weight: 6
url: "https://github.com/getml/reflect-cpp/"
url: "https://github.com/munich-data-engineering/reflect-cpp/"
params:
icon: github

Expand Down
2 changes: 1 addition & 1 deletion package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>reflectcpp</name>
<version>0.25.0</version>
<version>0.26.0</version>
<description>C++ reflection library</description>
<maintainer email="liuzicheng1987@example.com">liuzicheng1987</maintainer>
<license>MIT</license>
Expand Down
2 changes: 1 addition & 1 deletion vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "reflectcpp",
"version-string": "0.25.0",
"version-string": "0.26.0",
"dependencies": [
{
"name": "vcpkg-cmake"
Expand Down
Loading