// Copyright 2018 The Chromium OS 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 SHILL_ACCESSOR_INTERFACE_H_
#define SHILL_ACCESSOR_INTERFACE_H_

#include <map>
#include <memory>
#include <string>
#include <vector>

#include <base/macros.h>

#include "shill/data_types.h"
#include "shill/key_value_store.h"

namespace shill {

class Error;

// A templated abstract base class for objects that can be used to access
// properties stored in objects that are meant to be made available over RPC.
// The intended usage is that an object stores a maps of strings to
// AccessorInterfaces of the appropriate type, and then uses
// map[name]->Get() and map[name]->Set(value) to get and set the properties.
template <class T>
class AccessorInterface {
 public:
  AccessorInterface() = default;
  virtual ~AccessorInterface() = default;

  // Reset the property to its default value. Sets |error| on failure.
  virtual void Clear(Error* error) = 0;
  // Provides read-only access. Sets |error| on failure.
  virtual T Get(Error* error) = 0;
  // Attempts to set the wrapped value. Sets |error| on failure.  The
  // return value indicates whether or not the wrapped value was
  // modified. If the new value is the same as the old value, Set
  // returns false, but with |error| unchanged.
  virtual bool Set(const T& value, Error* error) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(AccessorInterface);
};

// Using a smart pointer here allows pointers to classes derived from
// AccessorInterface<> to be stored in maps and other STL container types.
using BoolAccessor = std::unique_ptr<AccessorInterface<bool>>;
using Int16Accessor = std::unique_ptr<AccessorInterface<int16_t>>;
using Int32Accessor = std::unique_ptr<AccessorInterface<int32_t>>;
// As mentioned in data_types.h, this is a separate typedef from
// StringAccessor despite having the same underlying type because RpcIdentifier
// may be serialized differently.
using RpcIdentifierAccessor = std::unique_ptr<AccessorInterface<RpcIdentifier>>;
using RpcIdentifiersAccessor =
    std::unique_ptr<AccessorInterface<RpcIdentifiers>>;
using StringAccessor = std::unique_ptr<AccessorInterface<std::string>>;
using StringmapAccessor = std::unique_ptr<AccessorInterface<Stringmap>>;
using StringmapsAccessor = std::unique_ptr<AccessorInterface<Stringmaps>>;
using StringsAccessor = std::unique_ptr<AccessorInterface<Strings>>;
using KeyValueStoreAccessor = std::unique_ptr<AccessorInterface<KeyValueStore>>;
using Uint8Accessor = std::unique_ptr<AccessorInterface<uint8_t>>;
using ByteArrayAccessor = std::unique_ptr<AccessorInterface<ByteArray>>;
using Uint16Accessor = std::unique_ptr<AccessorInterface<uint16_t>>;
using Uint16sAccessor = std::unique_ptr<AccessorInterface<Uint16s>>;
using Uint32Accessor = std::unique_ptr<AccessorInterface<uint32_t>>;
using Uint64Accessor = std::unique_ptr<AccessorInterface<uint64_t>>;

template <typename T>
using AccessorMap =
    std::map<std::string, std::unique_ptr<AccessorInterface<T>>>;

}  // namespace shill

#endif  // SHILL_ACCESSOR_INTERFACE_H_
