// Copyright 2020 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.driver.registrar;

using fuchsia.pkg;
using zx;

/// Protocol for registering additional driver packages with the driver manager.
[Discoverable]
protocol DriverRegistrar {
    /// Informs the driver manager that a new driver package is available.
    /// The driver manager will cache a copy of the driver.
    /// * error a zx_status value indicating failure. One of the following:
    ///     * `ZX_ERR_ACCESS_DENIED` if the device does not have permissions
    ///       to fetch the package.
    ///     * `ZX_ERR_NOT_FOUND` if the package does not exist.
    ///     * `ZX_ERR_IO` if there is some other unspecified error during I/O.
    ///     * `ZX_ERR_ADDRESS_UNREACHABLE` if the package resolver does not
    ///       know about the repo.
    ///     * `ZX_ERR_NO_SPACE` if the device is out of space.
    ///     * `ZX_ERR_UNAVAILABLE` if the package resolver could not be reached.
    ///     * `ZX_ERR_INTERNAL` if an unspecified error was encountered.
    Register(fuchsia.pkg.PackageUrl package_url) -> () error zx.status;
};
