// 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.exception.internal;

using zx;
using fuchsia.component;

/// Internal protocol that allows exceptions.cml to build crash reports and send them to the system
/// crash reporter in an isolated process.
closed protocol CrashReporter {
    /// A CrashReporter needs an optional exception, process, and thread so it can attempt to create
    /// a crash report with a minidump and annotations on the thread that crashed.
    ///
    /// Returns the moniker of the component that crashed, if available.
    strict Send(resource struct {
        exception zx.Handle:<EXCEPTION, optional>;
        crashed_process zx.Handle:<PROCESS, optional>;
        crashed_thread zx.Handle:<THREAD, optional>;
    }) -> (struct {
        moniker string:<fuchsia.component.MAX_MONIKER_LENGTH, optional>;
    });
};
