use brk_core::{AddressData, EmptyAddressData}; #[derive(Debug)] pub enum WithAddressDataSource { New(T), FromAddressDataStore(T), FromEmptyAddressDataStore(T), } impl WithAddressDataSource { pub fn is_new(&self) -> bool { matches!(self, Self::New(_)) } pub fn is_from_addressdata(&self) -> bool { matches!(self, Self::FromAddressDataStore(_)) } pub fn is_from_emptyaddressdata(&self) -> bool { matches!(self, Self::FromEmptyAddressDataStore(_)) } pub fn deref(&self) -> &T { match self { Self::New(v) => v, Self::FromAddressDataStore(v) => v, Self::FromEmptyAddressDataStore(v) => v, } } pub fn deref_mut(&mut self) -> &mut T { match self { Self::New(v) => v, Self::FromAddressDataStore(v) => v, Self::FromEmptyAddressDataStore(v) => v, } } } impl From> for WithAddressDataSource { fn from(value: WithAddressDataSource) -> Self { match value { WithAddressDataSource::New(v) => Self::New(v.into()), WithAddressDataSource::FromAddressDataStore(v) => Self::FromAddressDataStore(v.into()), WithAddressDataSource::FromEmptyAddressDataStore(v) => { Self::FromEmptyAddressDataStore(v.into()) } } } } impl From> for WithAddressDataSource { fn from(value: WithAddressDataSource) -> Self { match value { WithAddressDataSource::New(v) => Self::New(v.into()), WithAddressDataSource::FromAddressDataStore(v) => Self::FromAddressDataStore(v.into()), WithAddressDataSource::FromEmptyAddressDataStore(v) => { Self::FromEmptyAddressDataStore(v.into()) } } } }