| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "garnet/bin/run_test_component/env_config.h" |
| |
| #include "lib/fxl/strings/substitute.h" |
| #include "lib/json/json_parser.h" |
| #include "rapidjson/document.h" |
| |
| namespace run { |
| namespace { |
| |
| using fxl::Substitute; |
| |
| } // namespace |
| |
| void EnvironmentConfig::CreateMap(const std::string& environment_name, |
| EnvironmentType env_type, |
| const rapidjson::Document& document) { |
| if (!document.HasMember(environment_name)) { |
| json_parser_.ReportError( |
| Substitute("Environment '$0' not found.", environment_name)); |
| return; |
| } |
| const rapidjson::Value& urls = document[environment_name]; |
| if (!urls.IsArray()) { |
| json_parser_.ReportError( |
| Substitute("'$0' section should be an array.", environment_name)); |
| return; |
| } |
| for (const auto& url : urls.GetArray()) { |
| if (!url.IsString()) { |
| json_parser_.ReportError(Substitute( |
| "'$0' section should be a string array.", environment_name)); |
| return; |
| } |
| url_map_[url.GetString()] = env_type; |
| } |
| } |
| |
| bool EnvironmentConfig::ParseFromFile(const std::string& file_path) { |
| rapidjson::Document document = json_parser_.ParseFromFile(file_path); |
| if (json_parser_.HasError()) { |
| return false; |
| } |
| CreateMap("root", EnvironmentType::ROOT, document); |
| CreateMap("sys", EnvironmentType::SYS, document); |
| return !json_parser_.HasError(); |
| } |
| |
| } // namespace run |