mirl 9.2.0

Miners Rust Lib - A massive collection of ever growing and changing functions, structs, and enums. Check the description for compatibility and toggleable features! (Most of the lib is controlled by flags/features so the lib can continue to be lightweight despite its size)
#![allow(clippy::used_underscore_binding)]
use crate::math::geometry::{positioning::Position, EmptyShape, Shape};

#[cfg_attr(feature = "bitcode", derive(bitcode::Encode, bitcode::Decode))]
#[cfg_attr(
    feature = "wincode",
    derive(wincode::SchemaWrite, wincode::SchemaRead)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Hash)]
/// A shape with a 1 dimensional position and an x dimensional rotation
///
/// THERE IS NO FUCKING ROTATION, VELOCITY DESCRIBES DIRECTION
#[cfg_attr(feature = "c_compatible", repr(C))]
pub struct Rotation1D<V, S: Shape<V>, P: Position<V, S>> {
    /// The position
    pub position: P,
    #[allow(missing_docs)]
    pub _value_type: core::marker::PhantomData<V>,
    #[allow(missing_docs)]
    pub _shape: core::marker::PhantomData<S>,
}

#[cfg_attr(feature = "bitcode", derive(bitcode::Encode, bitcode::Decode))]
#[cfg_attr(
    feature = "wincode",
    derive(wincode::SchemaWrite, wincode::SchemaRead)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Hash)]
/// A shape with a 2 dimensional position and an x dimensional rotation
#[cfg_attr(feature = "c_compatible", repr(C))]
pub struct Rotation2D<
    V,
    S: Shape<V>,
    P: Position<V, S>,
    A: Position<V, EmptyShape>,
> {
    /// The position
    pub position: P,
    /// The rotation
    pub rotation: V,
    /// The pivot which to rotate around
    pub pivot: A,
    /// After storing the rotation, this is precomputed for further usage
    pub precomputed: (V, V),
    #[allow(missing_docs)]
    pub _shape: core::marker::PhantomData<S>,
}