https://github.com/youyuanwu/env-cpp
env-cpp is a C++ lib for parsing env vars into struct, using refl-cpp
https://github.com/youyuanwu/env-cpp
cpp environment-variables reflection
Last synced: 11 months ago
JSON representation
env-cpp is a C++ lib for parsing env vars into struct, using refl-cpp
- Host: GitHub
- URL: https://github.com/youyuanwu/env-cpp
- Owner: youyuanwu
- License: mit
- Created: 2021-07-03T18:48:44.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-07-14T03:51:56.000Z (almost 5 years ago)
- Last Synced: 2025-03-17T08:45:48.266Z (over 1 year ago)
- Topics: cpp, environment-variables, reflection
- Language: C++
- Homepage:
- Size: 6.84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# env-cpp
Parse environment variables to C++ struct, base on reflection [refl-cpp](https://github.com/veselink1/refl-cpp)
Work in progress.
## Example
```cpp
#include
#include "gtest/gtest.h"
#include "env.hpp"
// Declare struct as usual
struct Env
{
std::string EnvCPPString1;
std::string EnvCPPString2;
int EnvCPPInt;
long EnvCPPLong;
float EnvCPPFloat;
};
// Add struct meta data
// This needs to be in global namespace, and is a limitation of refl-cpp pkg.
REFL_TYPE(Env)
REFL_FIELD(EnvCPPString1, env::Name("EnvString1Override"))
REFL_FIELD(EnvCPPString2, env::Default("EnvString2DefaultValue"))
REFL_FIELD(EnvCPPInt, env::Required())
REFL_FIELD(EnvCPPLong)
REFL_FIELD(EnvCPPFloat)
REFL_END
TEST(Parse, Ok) {
bool ret;
std::string EnvCPPString1 = "Override Value";
ret = env::SetEnvVar("EnvString1Override",EnvCPPString1);
EXPECT_EQ(ret, true);
// string2 is not present in env
ret = env::UnsetEnvVar("EnvCPPString2");
EXPECT_EQ(ret, true);
int EnvCPPInt = 10;
ret = env::SetEnvVar("EnvCPPInt","10");
EXPECT_EQ(ret, true);
long EnvCPPLong = 20;
ret = env::SetEnvVar("EnvCPPLong","20");
EXPECT_EQ(ret, true);
float EnvCPPFloat = 10.1;
ret = env::SetEnvVar("EnvCPPFloat","10.1");
EXPECT_EQ(ret, true);
// Parse reads the Env struct meta-data and retrieves env values from OS
Env e;
env::Parse(e);
// Check Env e fields values are populated
EXPECT_EQ(e.EnvCPPString1,EnvCPPString1);
EXPECT_EQ(e.EnvCPPString2,std::string("EnvString2DefaultValue"));
EXPECT_EQ(e.EnvCPPInt,EnvCPPInt);
EXPECT_EQ(e.EnvCPPLong,EnvCPPLong);
EXPECT_EQ(e.EnvCPPFloat,EnvCPPFloat);
}
```
## Features
### Name
Use `env::Name("name override")` to override the struct name for env look up from OS.
### Default
Use `env::Default("default value")` to set default value for struct if env not found in OS.
### Required
Use `env::Required()` to mark env as required. `env::Parse()` will throw exception when env is not found in OS.