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

library fuchsia.sys;

/// An interface through which a client may request services from a host.
/// Instances of this interface are created within the context of an
/// already-identified client and host pair, so there is no need to explicitly
/// identify the client or host in the methods below.
///
/// This interface is deprecated.  Services should be published as directory
/// entries instead, just like files.
// TODO(ZX-1358): Point to the FIDL interface for file I/O once RIO is migrated.
protocol ServiceProvider {
    /// Asks the host to provide the service identified by `service_name` through
    /// the `channel` endpoint supplied by the caller. If the host is not willing
    /// or able to provide the requested service, it should close the `channel`.
    ConnectToService(string service_name, handle<channel> channel);
};
