use bevy_ecs::prelude::Entity;
use std::sync::Arc;
use crate::{BufferAccessLifecycle, BufferKeyTag, ChannelSender};
pub struct BufferKeyBuilder {
scope: Entity,
session: Entity,
accessor: Entity,
lifecycle: Option<(ChannelSender, Arc<()>)>,
}
impl BufferKeyBuilder {
pub fn make_tag(&self, buffer: Entity) -> BufferKeyTag {
BufferKeyTag {
buffer,
session: self.session,
accessor: self.accessor,
lifecycle: self.lifecycle.as_ref().map(|(sender, tracker)| {
Arc::new(BufferAccessLifecycle::new(
self.scope,
buffer,
self.session,
self.accessor,
sender.clone(),
tracker.clone(),
))
}),
}
}
pub(crate) fn with_tracking(
scope: Entity,
session: Entity,
accessor: Entity,
sender: ChannelSender,
tracker: Arc<()>,
) -> Self {
Self {
scope,
session,
accessor,
lifecycle: Some((sender, tracker)),
}
}
pub(crate) fn without_tracking(scope: Entity, session: Entity, accessor: Entity) -> Self {
Self {
scope,
session,
accessor,
lifecycle: None,
}
}
}