#![allow(dead_code)]
#![allow(unreachable_pub)]
#![allow(clippy::unused_self)]
use std::{marker::PhantomData, ops::Deref};
use crate::{ModifiedStatus, OrphanedSubscriberError};
#[derive(Debug)]
pub struct Ref<T> {
phantom: PhantomData<T>,
}
impl<T> AsRef<T> for Ref<T> {
fn as_ref(&self) -> &T {
unimplemented!();
}
}
impl<T> Deref for Ref<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
unimplemented!();
}
}
impl<T> Drop for Ref<T> {
fn drop(&mut self) {
unimplemented!();
}
}
#[allow(missing_debug_implementations)]
pub struct Publisher<T> {
phantom: PhantomData<T>,
}
impl<T> Publisher<T> {
#[must_use]
#[allow(clippy::needless_pass_by_value)]
pub fn new(#[allow(unused_variables)] initial_value: T) -> Self {
unimplemented!()
}
#[must_use]
pub fn observe(&self) -> Observer<T> {
unimplemented!()
}
#[must_use]
pub fn subscribe(&self) -> Subscriber<T> {
unimplemented!()
}
#[must_use]
pub fn subscribe_changed(&self) -> Subscriber<T> {
unimplemented!()
}
#[must_use]
pub fn has_subscribers(&self) -> bool {
unimplemented!()
}
#[must_use]
pub fn read(&self) -> Ref<T> {
unimplemented!()
}
#[allow(clippy::needless_pass_by_value)]
pub fn write(&self, #[allow(unused_variables)] new_value: impl Into<T>) {
unimplemented!()
}
#[must_use]
#[allow(clippy::needless_pass_by_value)]
pub fn replace(&self, #[allow(unused_variables)] new_value: impl Into<T>) -> T {
unimplemented!()
}
#[allow(clippy::needless_pass_by_value)]
pub fn modify<M, N>(&self, #[allow(unused_variables)] modify: M) -> N
where
M: FnOnce(&mut T) -> N,
N: ModifiedStatus,
{
unimplemented!()
}
pub fn set_modified(&self) {
unimplemented!()
}
}
#[allow(missing_debug_implementations)]
pub struct Observer<T> {
phantom: PhantomData<T>,
}
impl<T> Observer<T> {
#[must_use]
pub fn read(&self) -> Ref<T> {
unimplemented!()
}
#[must_use]
pub fn subscribe(&self) -> Subscriber<T> {
unimplemented!()
}
#[must_use]
pub fn subscribe_changed(&self) -> Subscriber<T> {
unimplemented!()
}
}
impl<T> Clone for Observer<T> {
fn clone(&self) -> Self {
unimplemented!()
}
}
#[allow(missing_debug_implementations)]
pub struct Subscriber<T> {
phantom: PhantomData<T>,
}
impl<T> Subscriber<T> {
#[must_use]
pub fn read(&self) -> Ref<T> {
unimplemented!()
}
#[must_use]
pub fn read_ack(&mut self) -> Ref<T> {
unimplemented!()
}
pub fn mark_changed(&mut self) {
unimplemented!()
}
#[allow(clippy::unused_async)]
pub async fn changed(&mut self) -> Result<(), OrphanedSubscriberError> {
unimplemented!()
}
#[allow(clippy::unused_async)]
pub async fn read_changed(&mut self) -> Result<Ref<T>, OrphanedSubscriberError> {
unimplemented!()
}
pub async fn map_changed<U>(
&mut self,
mut map_fn: impl FnMut(&T) -> U,
) -> Result<U, OrphanedSubscriberError> {
self.read_changed().await.map(|next_ref| map_fn(&next_ref))
}
pub async fn filter_map_changed<U>(
&mut self,
mut filter_map_fn: impl FnMut(&T) -> Option<U>,
) -> Result<U, OrphanedSubscriberError> {
loop {
let next_changed = self.read_changed().await?;
if let Some(next_item) = filter_map_fn(&next_changed) {
return Ok(next_item);
}
}
}
}
impl<T> Clone for Subscriber<T> {
fn clone(&self) -> Self {
unimplemented!()
}
}