use super::*;
pub trait AddressableList<
'a,
ListAddr: Address + SubAddress<Self::AddedAddress, Output = Self::ItemAddress>,
>: Addressable<ListAddr> + Addressable<Self::ItemAddress>
{
type AddedAddress: Clone + 'static;
type ItemAddress: Address;
type ListOfAddressesStream: 'a
+ Stream<Item = StoreResult<(Self::AddedAddress, Self::ItemAddress), Self>> = Pin<
Box<dyn 'a + Stream<Item = StoreResult<(Self::AddedAddress, Self::ItemAddress), Self>>>,
>;
fn list(&self, addr: &ListAddr) -> Self::ListOfAddressesStream;
}
pub trait AddressableInsert<
'a,
Value,
ListAddr: Address + SubAddress<Self::AddedAddress, Output = Self::ItemAddress>,
>: AddressableList<'a, ListAddr>
{
fn insert(&self, addr: &ListAddr, items: Vec<Value>) -> Self::ListOfAddressesStream;
}
pub trait AddressableQuery<
'a,
Query,
ListAddr: Address + SubAddress<Self::AddedAddress, Output = Self::ItemAddress>,
>: AddressableList<'a, ListAddr>
{
fn query(&self, addr: &ListAddr, query: Query) -> Self::ListOfAddressesStream;
}