blob: dd746ba2e999bb2a2fc9fd6001aa2b3291c16b21 [file] [log] [blame]
// Copyright 2016 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/ledger/bin/app/ledger_impl.h"
#include <fuchsia/ledger/internal/cpp/fidl.h>
#include <lib/callback/trace_callback.h>
#include <lib/fidl/cpp/optional.h>
#include <trace/event.h>
#include <zircon/syscalls.h>
#include <memory>
#include <string>
#include <utility>
#include "src/ledger/bin/app/constants.h"
#include "src/ledger/bin/app/page_impl.h"
#include "src/ledger/bin/app/page_utils.h"
#include "src/ledger/bin/fidl/include/types.h"
#include "src/lib/fxl/logging.h"
namespace ledger {
LedgerImpl::LedgerImpl(Environment* environment, Delegate* delegate)
: environment_(environment), delegate_(delegate) {}
LedgerImpl::~LedgerImpl() {}
void LedgerImpl::GetRootPage(fidl::InterfaceRequest<Page> page_request,
fit::function<void(Status)> callback) {
delegate_->GetPage(
kRootPageId, Delegate::PageState::NAMED, std::move(page_request),
TRACE_CALLBACK(PageUtils::AdaptStatusCallback(std::move(callback)),
"ledger", "ledger_get_root_page"));
}
void LedgerImpl::GetPage(PageIdPtr id,
fidl::InterfaceRequest<Page> page_request,
fit::function<void(Status)> callback) {
Delegate::PageState page_state = Delegate::PageState::NAMED;
if (!id) {
id = fidl::MakeOptional(PageId());
environment_->random()->Draw(&id->id);
page_state = Delegate::PageState::NEW;
}
delegate_->GetPage(
id->id, page_state, std::move(page_request),
TRACE_CALLBACK(PageUtils::AdaptStatusCallback(std::move(callback)),
"ledger", "ledger_get_page"));
}
void LedgerImpl::SetConflictResolverFactory(
fidl::InterfaceHandle<ConflictResolverFactory> factory,
fit::function<void(Status)> callback) {
TRACE_DURATION("ledger", "ledger_set_conflict_resolver_factory");
delegate_->SetConflictResolverFactory(std::move(factory));
callback(Status::OK);
}
} // namespace ledger