text: // Copyright 2018 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 CHROMECAST_PUBLIC_BLUETOOTH_LE_SCANNER_H_
  #define CHROMECAST_PUBLIC_BLUETOOTH_LE_SCANNER_H_
  
  #include <cstdint>
  #include <string>
  #include <vector>
  
  #include "bluetooth_types.h"    // NOLINT(build/include)
  #include "chromecast_export.h"  // NOLINT(build/include)
  
  namespace chromecast {
  namespace bluetooth_v2_shlib {
  
  // Interface for BLE Scanner.
  class CHROMECAST_EXPORT LeScanner {
   public:
    struct ScanResult {
      ScanResult();
      ScanResult(const ScanResult& other);
      ~ScanResult();
  
      Addr addr;
      std::vector<uint8_t> adv_data;
      int rssi;
    };
  
    class Delegate {
     public:
      virtual void OnScanResult(const ScanResult& scan_result) = 0;
  
      virtual ~Delegate() = default;
    };
  
    // Returns true if this interface is implemented.
    static bool IsSupported() __attribute__((weak));
    static void SetDelegate(Delegate* delegate) __attribute__((weak));
  
    static bool StartScan() __attribute__((weak));
    static bool StopScan() __attribute__((weak));
  };
  
  inline LeScanner::ScanResult::ScanResult() = default;
  inline LeScanner::ScanResult::ScanResult(const LeScanner::ScanResult& other) =
      default;
  inline LeScanner::ScanResult::~ScanResult() = default;
  
  }  // namespace bluetooth_v2_shlib
  }  // namespace chromecast
  
  #endif  //  CHROMECAST_PUBLIC_BLUETOOTH_LE_SCANNER_H_
  