#[cfg(feature = "zerocopy")]
use ::zerocopy::*;
use crate::{
scalar::{Scalard, Scalarf},
tuple::Tuple,
};
pub type Quat<T> = Quaternion<T>;
pub type Quatf = Quat<Scalarf>;
pub type Quatd = Quat<Scalard>;
#[derive(Debug, Clone, Copy, PartialEq)]
#[cfg_attr(feature = "sakka", derive(sakka::Encode, sakka::Decode))]
#[cfg_attr(feature = "zerocopy", derive(FromBytes, Immutable, IntoBytes, KnownLayout))]
#[repr(transparent)]
pub struct Quaternion<T> {
pub(crate) data: Tuple<T, 4>,
}
#[doc(hidden)]
#[repr(C)]
pub struct QuaternionFields<T> {
pub x: T,
pub y: T,
pub z: T,
pub w: T,
}