// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Copyright 2014 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.

// This file is autogenerated by:
//     mojo/public/tools/bindings/mojom_bindings_generator.py
// For:
//     mojom/vanadium/discovery.mojom
//

package io.v.mojo.discovery;

public interface Scanner extends org.chromium.mojo.bindings.Interface {

    public interface Proxy extends Scanner, org.chromium.mojo.bindings.Interface.Proxy {
    }

    NamedManager<Scanner, Scanner.Proxy> MANAGER = Scanner_Internal.MANAGER;

    void scan(String query, ScanHandler scanHandler, ScanResponse callback);
    interface ScanResponse extends org.chromium.mojo.bindings.Callbacks.Callback2<Integer, Error> { }

    void stop(int h, StopResponse callback);
    interface StopResponse extends org.chromium.mojo.bindings.Callbacks.Callback1<Error> { }
}

