// 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.update.verify;

/// An abstract representation of an update verifier, to be used when
/// verifying if an update should be committed. This is abstracted into a
/// separate protocol because in the future, we may add more verifiers.
///
/// This is unrelated to the verification in verified execution.
///
/// TODO(https://fxbug.dev/42133519) migrate to services design.
closed protocol Verifier {
    /// Verifies the update we just applied does not compromise an OTA dependency.
    /// If the verification fails, the [`Verifier`] should log the reason why.
    ///
    /// The caller is responsible for setting any timeouts.
    ///
    /// + request `options` the configuration to use when verifying.
    /// * error a value describing the cause of verification failure.
    strict Verify(struct {
        options @generated_name("VerifyOptions") table {};
    }) -> () error @generated_name("VerifyError") flexible enum {
        /// A problem occurred when doing update verification.
        INTERNAL = 1;
    };
};

/// An update verifier to determine if Blobfs is working as expected.
@discoverable
closed protocol BlobfsVerifier {
    compose Verifier;
};

/// An update verifier to determine if Netstack is working as expected.
@discoverable
closed protocol NetstackVerifier {
    compose Verifier;
};
