// 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 advertise(Advertisement ad, String[] visibility, AdvertiseResponse callback);
    interface AdvertiseResponse extends org.chromium.mojo.bindings.Callbacks.Callback3<byte[], Closer, Error> { }

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

