serf_core/delegate/
merge.rs1use memberlist_core::{CheapClone, transport::Id};
2use std::{future::Future, sync::Arc};
3
4use crate::types::Member;
5
6#[auto_impl::auto_impl(Box, Arc)]
13pub trait MergeDelegate: Send + Sync + 'static {
14 type Error: std::error::Error + Send + Sync + 'static;
16 type Id: Id;
18 type Address: CheapClone + Send + Sync + 'static;
20
21 fn notify_merge(
25 &self,
26 members: Arc<[Member<Self::Id, Self::Address>]>,
27 ) -> impl Future<Output = Result<(), Self::Error>> + Send;
28}
29
30#[derive(Debug, Clone, Copy)]
32pub struct DefaultMergeDelegate<I, A>(std::marker::PhantomData<(I, A)>);
33
34impl<I, A> Default for DefaultMergeDelegate<I, A> {
35 fn default() -> Self {
36 Self(Default::default())
37 }
38}
39
40impl<I, A> MergeDelegate for DefaultMergeDelegate<I, A>
41where
42 I: Id + Send + Sync + 'static,
43 A: CheapClone + Send + Sync + 'static,
44{
45 type Error = std::convert::Infallible;
46 type Id = I;
47 type Address = A;
48
49 async fn notify_merge(
50 &self,
51 _members: Arc<[Member<Self::Id, Self::Address>]>,
52 ) -> Result<(), Self::Error> {
53 Ok(())
54 }
55}