blob: a92155f4ae8b185ad19adac0ddbab3f2b8dee83c [file] [log] [blame]
// 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.
#ifndef SRC_SYS_APPMGR_HUB_HUB_H_
#define SRC_SYS_APPMGR_HUB_HUB_H_
#include <fbl/ref_ptr.h>
#include <fs/pseudo_dir.h>
#include <fs/vnode.h>
#include "src/lib/fxl/macros.h"
#include "src/sys/appmgr/hub/hub_info.h"
namespace component {
class Hub {
public:
Hub(fbl::RefPtr<fs::PseudoDir> root);
const fbl::RefPtr<fs::PseudoDir>& dir() const { return dir_; }
zx_status_t AddEntry(fbl::String name, fbl::RefPtr<fs::Vnode> vn);
zx_status_t AddEntry(fbl::String name, fbl::String value);
zx_status_t SetName(fbl::String name) { return AddEntry("name", std::move(name)); }
zx_status_t SetJobId(fbl::String koid) { return AddEntry("job-id", std::move(koid)); }
zx_status_t EnsureComponentDir();
zx_status_t AddComponent(const HubInfo& hub_info);
zx_status_t RemoveComponent(const HubInfo& hub_info);
protected:
fbl::RefPtr<fs::PseudoDir> dir_;
fbl::RefPtr<fs::PseudoDir> component_dir_;
private:
FXL_DISALLOW_COPY_AND_ASSIGN(Hub);
};
} // namespace component
#endif // SRC_SYS_APPMGR_HUB_HUB_H_