blob: d21193902b06df9de26a7c0f5fd2dc5536c3f3c9 [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.
#ifndef PERIDOT_BIN_LEDGER_APP_PAGE_UTILS_H_
#define PERIDOT_BIN_LEDGER_APP_PAGE_UTILS_H_
#include <functional>
#include <lib/fit/function.h>
#include <lib/fsl/vmo/sized_vmo.h>
#include <lib/fxl/macros.h>
#include <lib/fxl/strings/string_view.h>
#include "peridot/bin/ledger/fidl/include/types.h"
#include "peridot/bin/ledger/storage/public/page_storage.h"
#include "peridot/lib/convert/convert.h"
namespace ledger {
class PageUtils {
public:
// Converts a status from storage into a status from the FIDL API. If the
// storage status is storage::Status::NOT_FOUND, |not_found_status| will be
// returned.
static Status ConvertStatus(storage::Status status,
Status not_found_status = Status::INTERNAL_ERROR);
// Retrieves the data referenced by the given identifier as a StringView with
// no offset.
static void ResolveObjectIdentifierAsStringView(
storage::PageStorage* storage,
storage::ObjectIdentifier object_identifier,
storage::PageStorage::Location location, Status not_found_status,
fit::function<void(Status, fxl::StringView)> callback);
// Retrieves the data referenced by the given identifier and returns a subset
// of its contents as a buffer. |offset| can be negative. In that case, the
// offset is understood as starting from the end of the contents.
static void ResolveObjectIdentifierAsBuffer(
storage::PageStorage* storage,
storage::ObjectIdentifier object_identifier, int64_t offset,
int64_t max_size, storage::PageStorage::Location location,
Status not_found_status,
fit::function<void(Status, fsl::SizedVmo)> callback);
// Returns true if a key matches the provided prefix, false otherwise.
static bool MatchesPrefix(const std::string& key, const std::string& prefix);
private:
FXL_DISALLOW_COPY_AND_ASSIGN(PageUtils);
};
} // namespace ledger
#endif // PERIDOT_BIN_LEDGER_APP_PAGE_UTILS_H_