// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_PERSISTENT_CACHE_BACKEND_H_
#define COMPONENTS_PERSISTENT_CACHE_BACKEND_H_

#include <stdint.h>

#include <optional>

#include "base/component_export.h"
#include "base/containers/span.h"
#include "base/types/expected.h"
#include "components/persistent_cache/buffer_provider.h"
#include "components/persistent_cache/entry_metadata.h"
#include "components/persistent_cache/lock_state.h"
#include "components/persistent_cache/transaction_error.h"

namespace persistent_cache {

enum class BackendType;

// The persistence mechanism backing up the cache.
class COMPONENT_EXPORT(PERSISTENT_CACHE) Backend {
 public:
  virtual ~Backend();

  // Not copyable or moveable.
  Backend(const Backend&) = delete;
  Backend(Backend&&) = delete;
  Backend& operator=(const Backend&) = delete;
  Backend& operator=(Backend&&) = delete;

  // See `PersistentCache::Find()`.
  // Note: Backends have to outlive entries they vend.
  //
  // Thread-safe.
  virtual base::expected<std::optional<EntryMetadata>, TransactionError> Find(
      base::span<const uint8_t> key,
      BufferProvider buffer_provider) = 0;

  // See `PersistentCache::Insert()`.
  // Thread-safe.
  virtual base::expected<void, TransactionError> Insert(
      base::span<const uint8_t> key,
      base::span<const uint8_t> content,
      EntryMetadata metadata) = 0;

  // Used to get type of instance. Intended for things like metrics recording.
  // Externally behavior of all backend types should be equivalent and control
  // flow should not be tailored to the type.
  virtual BackendType GetType() const = 0;

  // Used to understand if the instance has read only access. Intended for
  // things like metrics recording. Externally behavior of all backend types
  // should be equivalent for reads. Writes should probably not be attempted if
  // not permitted.
  virtual bool IsReadOnly() const = 0;

  // See `PersistentCache::Abandon()` documentation.
  virtual LockState Abandon() = 0;

 protected:
  Backend();
};

}  // namespace persistent_cache

#endif  // COMPONENTS_PERSISTENT_CACHE_BACKEND_H_
