blob: cce1f3ec24e26b18bb38c7e4f74eb69a16d043cd [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.
#ifndef SRC_LIB_CMX_CMX_H_
#define SRC_LIB_CMX_CMX_H_
#include <regex>
#include <string>
#include <rapidjson/document.h>
#include "src/lib/cmx/facet_parser/cmx_facet_parser.h"
#include "src/lib/cmx/program.h"
#include "src/lib/cmx/runtime.h"
#include "src/lib/cmx/sandbox.h"
#include "src/lib/json_parser/json_parser.h"
#include "src/lib/pkg_url/fuchsia_pkg_url.h"
namespace component {
class CmxMetadata {
public:
CmxMetadata();
~CmxMetadata();
// Initializes the CmxMetadata from a JSON file. Returns false if there were
// any errors.
bool ParseFromFileAt(int dirfd, const std::string& file, json::JSONParser* json_parser);
bool ParseFromString(const std::string& data, const std::string& filename,
json::JSONParser* json_parser);
// Returns the Facet section value if found, else returns null value.
const rapidjson::Value& GetFacet(const std::string& key);
const SandboxMetadata& sandbox_meta() { return sandbox_meta_; }
const RuntimeMetadata& runtime_meta() { return runtime_meta_; }
const ProgramMetadata& program_meta() { return program_meta_; }
private:
static std::string GetCmxPathFromPath(const std::regex& regex, const std::string& path);
void ParseSandboxMetadata(const rapidjson::Document& document, json::JSONParser* json_parser);
void ParseProgramMetadata(const rapidjson::Document& document, json::JSONParser* json_parser);
bool ParseDocument(const rapidjson::Document& document, json::JSONParser* json_parser);
SandboxMetadata sandbox_meta_;
RuntimeMetadata runtime_meta_;
ProgramMetadata program_meta_;
CmxFacetParser facet_parser_;
};
} // namespace component
#endif // SRC_LIB_CMX_CMX_H_