// Copyright (c) 2011 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 CROS_DISKS_DEVICE_EVENT_H_
#define CROS_DISKS_DEVICE_EVENT_H_

#include <list>
#include <string>

namespace cros_disks {

// A simple data structure for holding a device event.
struct DeviceEvent {
  enum EventType {
    kIgnored,
    kDeviceAdded,
    kDeviceScanned,
    kDeviceRemoved,
    kDiskAdded,
    kDiskChanged,
    kDiskRemoved,
  };

  DeviceEvent() : event_type(kIgnored) {}

  DeviceEvent(EventType type, const std::string& path)
      : event_type(type), device_path(path) {}

  // NOTE: This operator== is needed due to the use of gmock matcher in
  // DeviceEventModeratorTest.
  bool operator==(const DeviceEvent& event) const;

  // Returns true if the event type is DiskAdded, DiskChanged or DiskRemoved.
  bool IsDiskEvent() const;

  EventType event_type;
  std::string device_path;
};

using DeviceEventList = std::list<DeviceEvent>;

}  // namespace cros_disks

#endif  // CROS_DISKS_DEVICE_EVENT_H_
