aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/environmentoptions.cpp
blob: ee40086c1d69fd259204b94992a5791ee0aca0d6 (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(EnvName);
			if (!EnvValue.empty())
			{
				Opt.Value->Parse(EnvValue);
			}
		}
	}
}

}  // namespace zen