// 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 Discovery extends org.chromium.mojo.bindings.Interface {

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

    NamedManager<Discovery, Discovery.Proxy> MANAGER = Discovery_Internal.MANAGER;

    void startAdvertising(Service service, String[] visibility, StartAdvertisingResponse callback);
    interface StartAdvertisingResponse extends org.chromium.mojo.bindings.Callbacks.Callback2<String, Error> { }

    void stopAdvertising(String instanceId, StopAdvertisingResponse callback);
    interface StopAdvertisingResponse extends org.chromium.mojo.bindings.Callbacks.Callback1<Error> { }

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

    void stopScan(int scanId, StopScanResponse callback);
    interface StopScanResponse extends org.chromium.mojo.bindings.Callbacks.Callback1<Error> { }
}

