// chromeos/crosapi/mojom/device_attributes.mojom-test-utils.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2019 The Chromium 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 CHROMEOS_CROSAPI_MOJOM_DEVICE_ATTRIBUTES_MOJOM_TEST_UTILS_H_
#define CHROMEOS_CROSAPI_MOJOM_DEVICE_ATTRIBUTES_MOJOM_TEST_UTILS_H_

#include "chromeos/crosapi/mojom/device_attributes.mojom.h"


namespace crosapi {
namespace mojom {


class  DeviceAttributesInterceptorForTesting : public DeviceAttributes {
  virtual DeviceAttributes* GetForwardingInterface() = 0;
  void GetDirectoryDeviceId(GetDirectoryDeviceIdCallback callback) override;
  void GetDeviceSerialNumber(GetDeviceSerialNumberCallback callback) override;
  void GetDeviceAssetId(GetDeviceAssetIdCallback callback) override;
  void GetDeviceAnnotatedLocation(GetDeviceAnnotatedLocationCallback callback) override;
  void GetDeviceHostname(GetDeviceHostnameCallback callback) override;
};
class  DeviceAttributesAsyncWaiter {
 public:
  explicit DeviceAttributesAsyncWaiter(DeviceAttributes* proxy);

  DeviceAttributesAsyncWaiter(const DeviceAttributesAsyncWaiter&) = delete;
  DeviceAttributesAsyncWaiter& operator=(const DeviceAttributesAsyncWaiter&) = delete;

  ~DeviceAttributesAsyncWaiter();
  void GetDirectoryDeviceId(
      DeviceAttributesStringResultPtr* out_result);
  void GetDeviceSerialNumber(
      DeviceAttributesStringResultPtr* out_result);
  void GetDeviceAssetId(
      DeviceAttributesStringResultPtr* out_result);
  void GetDeviceAnnotatedLocation(
      DeviceAttributesStringResultPtr* out_result);
  void GetDeviceHostname(
      DeviceAttributesStringResultPtr* out_result);

 private:
  DeviceAttributes* const proxy_;
};




}  // namespace mojom
}  // namespace crosapi

#endif  // CHROMEOS_CROSAPI_MOJOM_DEVICE_ATTRIBUTES_MOJOM_TEST_UTILS_H_