// 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;

using zx;

/// 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(fxbug.dev/31262): 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, zx.handle:CHANNEL channel);
};
