1use super::{ByColumnName, ByCondition, ByContent};
2
3/// An abstract factory for locations, to be used to find different things on the table.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Hash)]
5pub struct Locator;
6
7impl Locator {
8 /// Constructs a new location searcher for a cells with a given content.
9 pub fn content<S>(text: S) -> ByContent<S>
10 where
11 S: AsRef<str>,
12 {
13 ByContent::new(text)
14 }
15
16 /// Constructs a new location searcher for a column by its header.
17 pub fn column<S>(text: S) -> ByColumnName<S>
18 where
19 S: AsRef<str>,
20 {
21 ByColumnName::new(text)
22 }
23
24 /// Constructs a new location searcher with a specified condition closure.
25 ///
26 /// Return `true` if it shall be included in output.
27 /// Otherwise return `false`.
28 pub fn by<F>(condition: F) -> ByCondition<F>
29 where
30 F: Fn(&str) -> bool,
31 {
32 ByCondition::new(condition)
33 }
34}
35