pub struct SenderList {
patterns: Vec<String>,
categories: Vec<String>,
numbers: Vec<String>,
cards: Vec<String>,
}Expand description
A list of who may reach you, one entry per line, # for comments: an
address, or a pattern holding * for any run of characters
(*@example.org: everyone there; *@*.example.org: its subdomains;
news*@example.org; @example.org and a bare example.org stand for
*@example.org); a phone number, tel:+33465711234, however written, or
a prefix with * (tel:+3319900*); a contact card, contact:<its UID>: all
its addresses and numbers, now and later; a category of your contacts,
category:Friends. Five such lists exist: the senders you let in (the
screener’s), and who is safe, neutral, restricted or blocked (Senders).
Fields§
§patterns: Vec<String>Patterns, lower case, as normalize writes them.
categories: Vec<String>Categories of your contacts, as written (category:Friends).
numbers: Vec<String>Phone numbers and prefixes, as written after tel:: compared by their key (number_key).
cards: Vec<String>Contact cards, by their UID (contact:…).
Implementations§
Source§impl SenderList
impl SenderList
pub fn parse(text: &str) -> Self
Sourcepub fn categories(&self) -> &[String]
pub fn categories(&self) -> &[String]
The categories of your contacts it names, as written.
Sourcefn names_category(&self, keys: &[String]) -> Option<&str>
fn names_category(&self, keys: &[String]) -> Option<&str>
The first of keys (categories as compared, category_key) it names, as written.
Sourcefn names_card(&self, uid: &str) -> bool
fn names_card(&self, uid: &str) -> bool
Whether it names this card (its UID).
Sourcefn holds(&self, address: &str) -> bool
fn holds(&self, address: &str) -> bool
Whether it holds this very address (not a pattern that fits it).
Sourcefn holds_number(&self, key: &str, region: Option<&Region>) -> bool
fn holds_number(&self, key: &str, region: Option<&Region>) -> bool
Whether it holds this very number (key, as number_key reads it), not a prefix that fits it.
Sourcefn prefixes(&self, region: Option<&Region>) -> Vec<String>
fn prefixes(&self, region: Option<&Region>) -> Vec<String>
Its prefixes, keyed (tel:+3319900*).
Sourcepub fn names(&self, address: &str) -> Option<usize>
pub fn names(&self, address: &str) -> Option<usize>
How precisely the list names an address: its most precise entry that fits it.
pub fn knows(&self, card: &Card) -> bool
Sourcepub fn load(path: &Path) -> SenderList
pub fn load(path: &Path) -> SenderList
Reads the file; the list is empty when it does not exist yet.
Sourcepub fn entries(&self) -> Vec<String>
pub fn entries(&self) -> Vec<String>
Every address and pattern: addresses, then patterns, each sorted.
Sourcefn rewrite(path: &Path, gone: impl Fn(&str) -> bool) -> Result<(), String>
fn rewrite(path: &Path, gone: impl Fn(&str) -> bool) -> Result<(), String>
The file’s lines but those gone names, written beside, then moved: a
crash halfway never empties a list, which would let every blocked
sender back in. Nothing is written when no line goes.
Read and written under the file’s lock, which the sharing takes too.
Sourcefn append(path: &Path, line: &str) -> Result<(), String>
fn append(path: &Path, line: &str) -> Result<(), String>
A line at the end of the file, the file made if needed.
Sourcepub fn remove(path: &Path, entry: &str) -> Result<(), String>
pub fn remove(path: &Path, entry: &str) -> Result<(), String>
Takes an address or a pattern out of the file, keeping the other lines
and the comments; @example.org and *@example.org are the same entry.
Sourcepub fn remove_category(path: &Path, name: &str) -> Result<(), String>
pub fn remove_category(path: &Path, name: &str) -> Result<(), String>
Takes a category’s line out of the file, the other lines and the comments kept.
Sourcepub fn remove_entry(
path: &Path,
entry: &Entry,
region: Option<&Region>,
) -> Result<(), String>
pub fn remove_entry( path: &Path, entry: &Entry, region: Option<&Region>, ) -> Result<(), String>
Takes an entry out of the file, however its line writes it (a number with or without spaces, a category without case or accents), the other lines and the comments kept.
Sourcepub fn add_entry(
path: &Path,
entry: &Entry,
region: Option<&Region>,
) -> Result<(), String>
pub fn add_entry( path: &Path, entry: &Entry, region: Option<&Region>, ) -> Result<(), String>
Adds an entry at the end of the file, as Entry::line writes it; nothing when it is already there.
Trait Implementations§
Source§impl Clone for SenderList
impl Clone for SenderList
Source§fn clone(&self) -> SenderList
fn clone(&self) -> SenderList
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SenderList
impl Debug for SenderList
Source§impl Default for SenderList
impl Default for SenderList
Source§fn default() -> SenderList
fn default() -> SenderList
Auto Trait Implementations§
impl Freeze for SenderList
impl RefUnwindSafe for SenderList
impl Send for SenderList
impl Sync for SenderList
impl Unpin for SenderList
impl UnsafeUnpin for SenderList
impl UnwindSafe for SenderList
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.