3030//!
3131//! ```
3232//! use grid_engine::grid_engine::GridEngine;
33+ //! # use std::error::Error;
3334//!
35+ //! # fn main() -> Result<(), Box<dyn Error>> {
3436//! let mut grid = GridEngine::new(10, 12);
3537//!
3638//! // Add items to the grid
37- //! grid.add_item("item1".to_string(), 2, 2, 2, 4).unwrap() ;
39+ //! grid.add_item("item1".to_string(), 2, 2, 2, 4)? ;
3840//!
3941//! // Move items (handles collisions automatically)
40- //! grid.move_item("item1", 4, 4).unwrap() ;
42+ //! grid.move_item("item1", 4, 4)? ;
4143//!
4244//! // Remove items
43- //! grid.remove_item("item1").unwrap();
45+ //! grid.remove_item("item1")?;
46+ //! #
47+ //! # Ok(())
48+ //! # }
4449//! ```
4550
4651use crate :: error:: { GridEngineError , InnerGridError , ItemError } ;
@@ -54,23 +59,92 @@ use std::{collections::BTreeMap, fmt::Debug};
5459#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
5560pub struct AddChangeData {
5661 /// The node being added to the grid
57- pub value : Node ,
62+ value : Node ,
63+ }
64+
65+ impl AddChangeData {
66+ /// Creates a new AddChangeData instance
67+ ///
68+ /// # Arguments
69+ ///
70+ /// * `value` - The node being added to the grid
71+ ///
72+ /// # Returns
73+ ///
74+ /// A new instance of AddChangeData
75+ pub fn new ( value : Node ) -> Self {
76+ Self { value }
77+ }
78+
79+ /// Returns the node being added
80+ pub fn value ( & self ) -> & Node {
81+ & self . value
82+ }
5883}
5984
6085/// Represents data for an item removal change
6186#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
6287pub struct RemoveChangeData {
6388 /// The node being removed from the grid
64- pub value : Node ,
89+ value : Node ,
90+ }
91+
92+ impl RemoveChangeData {
93+ /// Creates a new RemoveChangeData instance
94+ ///
95+ /// # Arguments
96+ ///
97+ /// * `value` - The node being removed from the grid
98+ ///
99+ /// # Returns
100+ ///
101+ /// A new instance of RemoveChangeData
102+ pub fn new ( value : Node ) -> Self {
103+ Self { value }
104+ }
105+
106+ /// Returns the node being removed
107+ pub fn value ( & self ) -> & Node {
108+ & self . value
109+ }
65110}
66111
67112/// Represents data for an item movement change
68113#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
69114pub struct MoveChangeData {
70115 /// The original state of the node
71- pub old_value : Node ,
116+ old_value : Node ,
72117 /// The new state of the node after movement
73- pub new_value : Node ,
118+ new_value : Node ,
119+ }
120+
121+ impl MoveChangeData {
122+ /// Creates a new MoveChangeData instance
123+ ///
124+ /// # Arguments
125+ ///
126+ /// * `old_value` - The original state of the node
127+ /// * `new_value` - The new state of the node after movement
128+ ///
129+ /// # Returns
130+ ///
131+ /// A new instance of MoveChangeData
132+ pub fn new ( old_value : Node , new_value : Node ) -> Self {
133+ Self {
134+ old_value,
135+ new_value,
136+ }
137+ }
138+
139+ /// Returns the original state of the node
140+ pub fn old_value ( & self ) -> & Node {
141+ & self . old_value
142+ }
143+
144+ /// Returns the new state of the node after movement
145+ pub fn new_value ( & self ) -> & Node {
146+ & self . new_value
147+ }
74148}
75149
76150/// Represents different types of changes that can occur in the grid
@@ -104,7 +178,7 @@ pub struct GridEngine {
104178 /// Changes waiting to be applied
105179 pending_changes : Vec < Change > ,
106180 /// Event system for tracking grid changes
107- pub events : GridEvents ,
181+ events : GridEvents ,
108182}
109183
110184impl GridEngine {
@@ -131,16 +205,36 @@ impl GridEngine {
131205 }
132206 }
133207
208+ /// Creates a new node with the specified parameters.
134209 fn new_node ( & mut self , id : String , x : usize , y : usize , w : usize , h : usize ) -> Node {
135210 Node :: new ( id, x, y, w, h)
136211 }
137212
213+ /// Creates a change operation to add a new node to the grid.
138214 fn create_add_change ( & mut self , node : Node ) {
139215 self . pending_changes
140216 . push ( Change :: Add ( AddChangeData { value : node } ) ) ;
141217 }
142218
143219 /// Get the nodes sorted by id
220+ ///
221+ /// # Example
222+ ///
223+ /// ```
224+ /// use grid_engine::grid_engine::GridEngine;
225+ ///
226+ /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
227+ /// let mut grid = GridEngine::new(10, 10);
228+ /// grid.add_item("b".to_string(), 0, 0, 2, 2).unwrap();
229+ /// grid.add_item("a".to_string(), 0, 2, 2, 2).unwrap();
230+ ///
231+ /// let nodes = grid.get_nodes();
232+ /// assert_eq!(nodes.len(), 2);
233+ /// assert_eq!(nodes[0].id(), "a");
234+ /// assert_eq!(nodes[1].id(), "b");
235+ /// # Ok(())
236+ /// # }
237+ /// ```
144238 pub fn get_nodes ( & self ) -> Vec < Node > {
145239 let mut cloned: Vec < Node > = self . items . values ( ) . cloned ( ) . collect ( ) ;
146240 // Would be better to sort by some created_at
@@ -157,6 +251,20 @@ impl GridEngine {
157251 /// # Returns
158252 ///
159253 /// A reference to the InnerGrid instance
254+ ///
255+ /// # Example
256+ ///
257+ /// ```
258+ /// use grid_engine::grid_engine::GridEngine;
259+ /// use std::error::Error;
260+ ///
261+ /// # fn main() -> Result<(), Box<dyn Error>> {
262+ /// let grid = GridEngine::new(10, 10);
263+ /// let inner_grid = grid.get_inner_grid();
264+ /// assert_eq!(inner_grid.rows(), 10);
265+ /// assert_eq!(inner_grid.cols(), 10);
266+ /// # Ok(())
267+ /// # }
160268 pub fn get_inner_grid ( & self ) -> & InnerGrid {
161269 & self . grid
162270 }
@@ -183,9 +291,19 @@ impl GridEngine {
183291 ///
184292 /// ```
185293 /// use grid_engine::grid_engine::GridEngine;
294+ /// use std::error::Error;
186295 ///
296+ /// # fn main() -> Result<(), Box<dyn Error>> {
187297 /// let mut grid = GridEngine::new(10, 10);
188- /// grid.add_item("box1".to_string(), 0, 0, 2, 2).unwrap(); // 2x2 item at top-left
298+ /// grid.add_item("box1".to_string(), 0, 0, 2, 2)?; // 2x2 item at top-left
299+ ///
300+ /// // Check if the item was added correctly
301+ /// let item = grid.get_nodes();
302+ /// assert_eq!(item.len(), 1);
303+ /// assert_eq!(item[0].id(), "box1");
304+ ///
305+ /// # Ok(())
306+ /// # }
189307 /// ```
190308 pub fn add_item (
191309 & mut self ,
@@ -239,10 +357,16 @@ impl GridEngine {
239357 ///
240358 /// ```
241359 /// use grid_engine::grid_engine::GridEngine;
360+ /// use std::error::Error;
361+ ///
362+ /// # fn main() -> Result<(), Box<dyn Error>> {
242363 ///
243364 /// let mut grid = GridEngine::new(10, 10);
244- /// grid.add_item("box1".to_string(), 0, 0, 2, 2).unwrap();
245- /// grid.remove_item("box1").unwrap(); // Removes the item
365+ /// grid.add_item("box1".to_string(), 0, 0, 2, 2)?;
366+ /// grid.remove_item("box1")?; // Removes the item
367+ ///
368+ /// # Ok(())
369+ /// # }
246370 /// ```
247371 pub fn remove_item ( & mut self , id : & str ) -> Result < Node , GridEngineError > {
248372 let node = match self . items . get ( id) {
@@ -409,10 +533,23 @@ impl GridEngine {
409533 ///
410534 /// ```
411535 /// use grid_engine::grid_engine::GridEngine;
536+ /// # use std::error::Error;
537+ ///
538+ /// # fn main() -> Result<(), Box<dyn Error>> {
412539 ///
413540 /// let mut grid = GridEngine::new(10, 10);
414- /// grid.add_item("box1".to_string(), 0, 0, 2, 2).unwrap();
415- /// grid.move_item("box1", 2, 2).unwrap(); // Moves box to position 2,2
541+ /// grid.add_item("box1".to_string(), 0, 0, 2, 2)?;
542+ /// grid.move_item("box1", 2, 2)?; // Moves box to position 2,2
543+ ///
544+ /// // Check if the item was moved correctly
545+ /// let item = grid.get_nodes();
546+ /// assert_eq!(item.len(), 1);
547+ /// assert_eq!(item[0].x(), &2);
548+ /// assert_eq!(item[0].y(), &2);
549+ ///
550+ /// # Ok(())
551+ /// # }
552+ ///
416553 /// ```
417554 pub fn move_item (
418555 & mut self ,
@@ -483,11 +620,20 @@ impl GridEngine {
483620 }
484621 }
485622
486- self . events . trigger_changes_event ( & ChangesEventValue {
487- changes : changes. to_vec ( ) ,
488- } ) ;
623+ self . events
624+ . trigger_changes_event ( & ChangesEventValue :: new ( changes. to_vec ( ) ) ) ;
489625 Ok ( ( ) )
490626 }
627+
628+ /// Returns a reference to the grid events system.
629+ pub fn events ( & self ) -> & GridEvents {
630+ & self . events
631+ }
632+
633+ /// Returns a mutable reference to the grid events system.
634+ pub fn events_mut ( & mut self ) -> & mut GridEvents {
635+ & mut self . events
636+ }
491637}
492638
493639mod tests {
0 commit comments