1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
use crate::error::Result;
use crate::geometry_processor::GeomProcessor;
use crate::property_processor::PropertyProcessor;
/// Feature processing trait
#[allow(unused_variables)]
pub trait FeatureProcessor: GeomProcessor + PropertyProcessor {
/// Begin of dataset processing
///
/// ## Invariants
///
/// - `dataset_begin` is called _only once_ for an entire dataset.
/// - `dataset_begin` is called before all other methods, including `feature_begin`,
/// `properties_begin`, `geometry_begin`, and all methods from [`GeomProcessor`] and
/// [`PropertyProcessor`]
fn dataset_begin(&mut self, name: Option<&str>) -> Result<()> {
Ok(())
}
/// End of dataset processing
///
/// ## Invariants
///
/// - `dataset_end` is called _only once_ for an entire dataset.
/// - No other methods may be called after `dataset_end`.
fn dataset_end(&mut self) -> Result<()> {
Ok(())
}
/// Begin of feature processing
///
/// - `idx`: the positional row index in the dataset. For the `n`th row, `idx` will be
/// `n`.
/// - `feature_begin` will be called before both `properties_begin` and `geometry_begin`.
fn feature_begin(&mut self, idx: u64) -> Result<()> {
Ok(())
}
/// End of feature processing
///
/// - `idx`: the positional row index in the dataset. For the `n`th row, `idx` will be
/// `n`.
/// - `feature_end` will be called after both `properties_end` and `geometry_end`.
fn feature_end(&mut self, idx: u64) -> Result<()> {
Ok(())
}
/// Begin of feature property processing
///
/// ## Invariants
///
/// - `properties_begin` will not be called a second time before `properties_end` is called.
fn properties_begin(&mut self) -> Result<()> {
Ok(())
}
/// End of feature property processing
fn properties_end(&mut self) -> Result<()> {
Ok(())
}
/// Begin of feature geometry processing
///
/// ## Following events
///
/// - Relevant methods from [`GeomProcessor`] will be called for each geometry.
fn geometry_begin(&mut self) -> Result<()> {
Ok(())
}
/// End of feature geometry processing
fn geometry_end(&mut self) -> Result<()> {
Ok(())
}
}