blob: 3ced7bd59710032c2aa09bd444fd73678607e127 [file] [log] [blame]
// Copyright 2017 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 "src/lib/cmx/runtime.h"
#include <trace/event.h>
#include "rapidjson/document.h"
#include "src/lib/json_parser/json_parser.h"
namespace component {
constexpr char kRunner[] = "runner";
bool RuntimeMetadata::ParseFromFileAt(int dirfd, const std::string& file,
json::JSONParser* json_parser) {
TRACE_DURATION("cmx", "RuntimeMetadata::ParseFromFileAt", "file", file);
runner_.clear();
null_ = true;
rapidjson::Document document = json_parser->ParseFromFileAt(dirfd, file);
if (json_parser->HasError()) {
return false;
}
return ParseFromDocument(document, json_parser);
}
bool RuntimeMetadata::ParseFromDocument(const rapidjson::Document& document,
json::JSONParser* json_parser) {
runner_.clear();
null_ = true;
const auto runner = document.FindMember(kRunner);
if (runner == document.MemberEnd()) {
// Valid config, but no runtime.
return true;
}
if (!runner->value.IsString()) {
json_parser->ReportError("'runner' is not a string.");
return false;
}
runner_ = runner->value.GetString();
null_ = false;
return true;
}
} // namespace component