use crate::grid::{ config::Entity, records::{ExactRecords, Records, RecordsMut}, }; /// A trait for configuring a single cell. /// /// ~~~~ Where cell represented by 'row' and 'column' indexes. ~~~~ /// /// A cell can be targeted by [`Cell`]. /// /// [`Cell`]: crate::object::Cell pub trait CellOption { /// Modification function of a single cell. fn change(self, records: &mut R, cfg: &mut C, entity: Entity); } #[cfg(feature = "std")] impl CellOption for String where R: Records + ExactRecords + RecordsMut, { fn change(self, records: &mut R, cfg: &mut C, entity: Entity) { (&self).change(records, cfg, entity); } } #[cfg(feature = "std")] impl CellOption for &String where R: Records + ExactRecords + RecordsMut, { fn change(self, records: &mut R, _: &mut C, entity: Entity) { let count_rows = records.count_rows(); let count_cols = records.count_columns(); for pos in entity.iter(count_rows, count_cols) { records.set(pos, self.clone()); } } } impl<'a, R, C> CellOption for &'a str where R: Records + ExactRecords + RecordsMut<&'a str>, { fn change(self, records: &mut R, _: &mut C, entity: Entity) { let count_rows = records.count_rows(); let count_cols = records.count_columns(); for pos in entity.iter(count_rows, count_cols) { records.set(pos, self); } } }