// Copyright 2020 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_BLOBFS_BLOB_CORRUPTION_NOTIFIER_H_
#define SRC_STORAGE_BLOBFS_BLOB_CORRUPTION_NOTIFIER_H_

#include <fuchsia/blobfs/llcpp/fidl.h>
#include <lib/zx/channel.h>
#include <zircon/status.h>
#include <zircon/types.h>

#include "src/lib/digest/digest.h"

namespace blobfs {

// BlobCorruptionNotifier notifies a handler of blob corruption, if a handler has been registered.
class BlobCorruptionNotifier {
 public:
  // Notifies corrupt blob to the corruption handler service.
  virtual void NotifyCorruptBlob(const digest::Digest& digest) const = 0;
};

// Implementation of BlobCorruptionNotifier that nofities over a Fidl interface.
class FidlBlobCorruptionNotifier : public BlobCorruptionNotifier {
 public:
  void set_corruption_handler(fidl::ClientEnd<fuchsia_blobfs::CorruptBlobHandler> handler) {
    corruption_handler_ = std::move(handler);
  }

  // BlobCorruptionNotifier implementation:
  void NotifyCorruptBlob(const digest::Digest& digest) const override;

 private:
  // This handler can be null if no Fidl handler is registered.
  fidl::ClientEnd<fuchsia_blobfs::CorruptBlobHandler> corruption_handler_;
};

}  // namespace blobfs

#endif  // SRC_STORAGE_BLOBFS_BLOB_CORRUPTION_NOTIFIER_H_
