// Copyright Epic Games, Inc. All Rights Reserved. #include #include 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::MakeOption(std::string& Value) { return std::make_shared(Value); } std::shared_ptr EnvironmentOptions::MakeOption(std::filesystem::path& Value) { return std::make_shared(Value); } std::shared_ptr EnvironmentOptions::MakeOption(bool& Value) { return std::make_shared(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