blob: 27a75ecff149f60efadbc04316a61b58fc70f217 [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 "peridot/bin/ledger/app/ledger_impl.h"
#include <memory>
#include <string>
#include <utility>
#include <fuchsia/ledger/internal/cpp/fidl.h>
#include <lib/callback/trace_callback.h>
#include <lib/fidl/cpp/optional.h>
#include <lib/fxl/logging.h>
#include <trace/event.h>
#include <zircon/syscalls.h>
#include "peridot/bin/ledger/app/constants.h"
#include "peridot/bin/ledger/app/page_impl.h"
#include "peridot/bin/ledger/fidl/include/types.h"
namespace ledger {
LedgerImpl::LedgerImpl(Environment* environment, Delegate* delegate)
: environment_(environment), delegate_(delegate) {}
LedgerImpl::~LedgerImpl() {}
void LedgerImpl::GetRootPage(fidl::InterfaceRequest<Page> page_request,
GetRootPageCallback callback) {
delegate_->GetPage(
kRootPageId, Delegate::PageState::NAMED, std::move(page_request),
TRACE_CALLBACK(std::move(callback), "ledger", "ledger_get_root_page"));
}
void LedgerImpl::GetPage(PageIdPtr id,
fidl::InterfaceRequest<Page> page_request,
GetPageCallback 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(std::move(callback), "ledger", "ledger_get_page"));
}
void LedgerImpl::SetConflictResolverFactory(
fidl::InterfaceHandle<ConflictResolverFactory> factory,
SetConflictResolverFactoryCallback callback) {
TRACE_DURATION("ledger", "ledger_set_conflict_resolver_factory");
delegate_->SetConflictResolverFactory(std::move(factory));
callback(Status::OK);
}
} // namespace ledger