use super::{super::problem::*, receiver::*};
use std::{cell::*, sync::*};
pub type ProblemReceiverRef<'receiver> = Arc<RefCell<&'receiver mut dyn ProblemReceiver>>;
impl<'receiver> ProblemReceiver for ProblemReceiverRef<'receiver> {
fn give(&mut self, problem: Problem) -> Result<(), Problem> {
self.borrow_mut().give(problem)
}
}
pub trait ProblemReceiverAsRef<'this, ProblemReceiverT> {
fn as_ref(&'this mut self) -> ProblemReceiverRef<'this>;
}
impl<'this, ProblemReceiverT> ProblemReceiverAsRef<'this, ProblemReceiverT> for ProblemReceiverT
where
ProblemReceiverT: ProblemReceiver,
{
fn as_ref(&'this mut self) -> ProblemReceiverRef<'this> {
ProblemReceiverRef::new(RefCell::new(self))
}
}