pub trait AngleUnit<T = f32>: Clone + Copy + Debug + Default
where
T: AngleValue,
{
fn to_radians(value: T) -> Angle<Radians, T>;
fn to_degrees(value: T) -> Angle<Degrees, T>;
fn to_rotations(value: T) -> Angle<Rotations, T>;
fn to_percentage(value: T) -> Angle<Percentage, T>;
fn from_radians(value: T) -> Angle<Self, T>;
fn from_degrees(value: T) -> Angle<Self, T>;
fn from_rotations(value: T) -> Angle<Self, T>;
fn from_percentage(value: T) -> Angle<Self, T>;
}
pub trait FromOther<T = f32>: Sized {
fn from_other<U>(angle: impl Borrow<Angle<U, T>>) -> Self
where
U: AngleUnit<T>,
T: AngleValue;
}
pub trait ConvertAngle<T = f32> {
fn convert<U>(self) -> Angle<U, T>
where
U: AngleUnit<T>,
T: AngleValue;
}
use crate::{Angle, AngleValue, Degrees, Percentage, Radians, Rotations};
use core::{borrow::Borrow, fmt::Debug};