blob: 6cc0ddd8e6ab43aa6c2c7d8735d984f766f76746 [file] [log] [blame]
// Copyright 2019 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_STORAGE_LIB_PAVER_STREAM_READER_H_
#define SRC_STORAGE_LIB_PAVER_STREAM_READER_H_
#include <fidl/fuchsia.paver/cpp/wire.h>
#include <lib/zx/channel.h>
#include <lib/zx/result.h>
#include <lib/zx/vmo.h>
#include <memory>
#include "src/storage/fvm/sparse_reader.h"
namespace paver {
// Implements fvm::ReaderInterface to allow interoperability between paver and
// fvm sparse reader library.
class StreamReader : public fvm::ReaderInterface {
public:
static zx::result<std::unique_ptr<StreamReader>> Create(
fidl::ClientEnd<fuchsia_paver::PayloadStream> stream);
~StreamReader() override = default;
zx_status_t Read(void* buf, size_t buf_size, size_t* size_actual) final;
private:
StreamReader(fidl::ClientEnd<fuchsia_paver::PayloadStream> stream, zx::vmo vmo)
: stream_(std::move(stream)), vmo_(std::move(vmo)) {}
StreamReader(const StreamReader&) = delete;
StreamReader& operator=(const StreamReader&) = delete;
StreamReader(StreamReader&&) = delete;
StreamReader& operator=(StreamReader&&) = delete;
fidl::WireSyncClient<fuchsia_paver::PayloadStream> stream_;
zx::vmo vmo_;
zx_off_t offset_ = 0;
size_t size_ = 0;
};
} // namespace paver
#endif // SRC_STORAGE_LIB_PAVER_STREAM_READER_H_