// Copyright (C) 2025 Christian Mauduit <ufoot@ufoot.org>

/// Trait for 3D structures that have dimensions.
///
/// This trait provides a uniform interface for querying the dimensions
/// of 3D volumes and meshes.
///
/// # Example
///
/// ```
/// use shortestpath::mesh_3d::{Shape3D, Full3D};
///
/// let mesh = Full3D::new(10, 8, 5);
/// let (width, height, depth) = mesh.shape();
/// assert_eq!(width, 10);
/// assert_eq!(height, 8);
/// assert_eq!(depth, 5);
/// ```
pub trait Shape3D {
    /// Returns the dimensions of this 3D structure.
    ///
    /// # Returns
    ///
    /// A tuple `(width, height, depth)` representing the dimensions
    fn shape(&self) -> (usize, usize, usize);
}
