// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

use crate::{
    event,
    stream::{recv, send},
};
use std::sync::Arc;

#[cfg(any(feature = "testing", test))]
pub mod bach;
#[cfg(feature = "tokio")]
pub mod tokio;

pub type ArcHandle<Sub> = Arc<dyn Handle<Sub>>;

pub trait Handle<Sub>: 'static + Send + Sync
where
    Sub: event::Subscriber,
{
    fn spawn_recv_shutdown(&self, shutdown: recv::application::Shutdown<Sub>);
    fn spawn_send_shutdown(&self, shutdown: send::application::Shutdown<Sub>);
}
