use bevy_ecs::prelude::{Entity, Resource};
use backtrace::Backtrace;
use anyhow::Error as Anyhow;
use std::sync::Arc;
use crate::{Broken, Cancel, Disposal, OperationError};
#[derive(Resource, Default, Clone, Debug)]
pub struct UnhandledErrors {
pub setup: Vec<SetupFailure>,
pub cancellations: Vec<CancelFailure>,
pub operations: Vec<OperationError>,
pub disposals: Vec<DisposalFailure>,
pub stop_tasks: Vec<StopTaskFailure>,
pub broken: Vec<Broken>,
pub unused_targets: Vec<UnusedTargetDrop>,
pub connections: Vec<ConnectionFailure>,
pub miscellaneous: Vec<MiscellaneousFailure>,
}
impl UnhandledErrors {
pub fn is_empty(&self) -> bool {
self.setup.is_empty()
&& self.cancellations.is_empty()
&& self.operations.is_empty()
&& self.disposals.is_empty()
&& self.stop_tasks.is_empty()
&& self.broken.is_empty()
&& self.unused_targets.is_empty()
&& self.connections.is_empty()
&& self.miscellaneous.is_empty()
}
}
#[derive(Clone, Debug)]
pub struct SetupFailure {
pub broken_node: Entity,
pub error: OperationError,
}
#[derive(Clone, Debug)]
pub struct CancelFailure {
pub error: OperationError,
pub cancel: Cancel,
}
impl CancelFailure {
pub fn new(error: OperationError, cancel: Cancel) -> Self {
Self { error, cancel }
}
}
#[derive(Clone, Debug)]
pub struct DisposalFailure {
pub disposal: Disposal,
pub broken_node: Entity,
pub backtrace: Option<Backtrace>,
}
#[derive(Clone, Debug)]
pub struct StopTaskFailure {
pub task: Entity,
pub backtrace: Option<Backtrace>,
}
#[derive(Clone, Debug)]
pub struct UnusedTargetDrop {
pub unused_target: Entity,
pub dropped_impulses: Vec<Entity>,
}
#[derive(Clone, Debug)]
pub struct ConnectionFailure {
pub original_target: Entity,
pub new_target: Entity,
pub backtrace: Backtrace,
}
#[derive(Clone, Debug)]
pub struct MiscellaneousFailure {
pub error: Arc<Anyhow>,
pub backtrace: Option<Backtrace>,
}