blob: 1b7ce80293d903ea4d90d44ffb185c035ba82365 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// Copyright Epic Games, Inc. All Rights Reserved.
#include <zenutil/environmentoptions.h>
#include <zencore/filesystem.h>
namespace zen {
EnvironmentOptions::StringOption::StringOption(std::string& Value) : RefValue(Value)
{
}
void
EnvironmentOptions::StringOption::Parse(std::string_view Value)
{
RefValue = std::string(Value);
}
EnvironmentOptions::FilePathOption::FilePathOption(std::filesystem::path& Value) : RefValue(Value)
{
}
void
EnvironmentOptions::FilePathOption::Parse(std::string_view Value)
{
RefValue = MakeSafeAbsolutePath(Value);
}
EnvironmentOptions::BoolOption::BoolOption(bool& Value) : RefValue(Value)
{
}
void
EnvironmentOptions::BoolOption::Parse(std::string_view Value)
{
const std::string Lower = ToLower(Value);
if (Lower == "true" || Lower == "y" || Lower == "yes")
{
RefValue = true;
}
else if (Lower == "false" || Lower == "n" || Lower == "no")
{
RefValue = false;
}
}
std::shared_ptr<EnvironmentOptions::OptionValue>
EnvironmentOptions::MakeOption(std::string& Value)
{
return std::make_shared<StringOption>(Value);
}
std::shared_ptr<EnvironmentOptions::OptionValue>
EnvironmentOptions::MakeOption(std::filesystem::path& Value)
{
return std::make_shared<FilePathOption>(Value);
}
std::shared_ptr<EnvironmentOptions::OptionValue>
EnvironmentOptions::MakeOption(bool& Value)
{
return std::make_shared<BoolOption>(Value);
}
EnvironmentOptions::EnvironmentOptions()
{
}
void
EnvironmentOptions::Parse(const cxxopts::ParseResult& CmdLineResult)
{
for (auto& It : OptionMap)
{
std::string_view EnvName = It.first;
const Option& Opt = It.second;
if (CmdLineResult.count(Opt.CommandLineOptionName) == 0)
{
std::string EnvValue = GetEnvVariable(It.first);
if (!EnvValue.empty())
{
Opt.Value->Parse(EnvValue);
}
}
}
}
} // namespace zen
|