use tokio::sync::oneshot;
use crate::prompt::AnswerPromptError;
#[derive(Debug)]
pub struct PendingAnswer<T> {
receiver: oneshot::Receiver<Result<T, AnswerPromptError>>,
}
impl<T> PendingAnswer<T> {
pub(super) fn new(receiver: oneshot::Receiver<Result<T, AnswerPromptError>>) -> Self {
Self { receiver }
}
pub async fn wait(self) -> Result<T, AnswerPromptError> {
match self.receiver.await {
Ok(answer) => answer,
Err(_dropped) => Err(AnswerPromptError::DroppedRequest),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::prompt::Confirmation;
#[test]
fn trait_send() {
fn assert_send<T: Send>() {}
assert_send::<PendingAnswer<Confirmation>>();
}
#[test]
fn trait_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<PendingAnswer<Confirmation>>();
}
#[test]
fn trait_unpin() {
fn assert_unpin<T: Unpin>() {}
assert_unpin::<PendingAnswer<Confirmation>>();
}
}