use super::Metadata;
use crate::authenticated::lookup::actors::tracker::ingress::Releaser;
use commonware_cryptography::PublicKey;
#[derive(Debug)]
pub struct Reservation<P: PublicKey> {
metadata: Metadata<P>,
releaser: Option<Releaser<P>>,
}
impl<P: PublicKey> Reservation<P> {
pub const fn new(metadata: Metadata<P>, releaser: Releaser<P>) -> Self {
Self {
metadata,
releaser: Some(releaser),
}
}
}
impl<P: PublicKey> Reservation<P> {
pub const fn metadata(&self) -> &Metadata<P> {
&self.metadata
}
}
impl<P: PublicKey> Drop for Reservation<P> {
fn drop(&mut self) {
let mut releaser = self
.releaser
.take()
.expect("Reservation::drop called twice");
releaser.release(self.metadata.clone());
}
}