lighthouse_protocol/utils/
rot3.rs1use serde::{Deserialize, Serialize};
2
3use super::Zero;
4
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub struct Rot3<T> {
8 pub alpha: T,
9 pub beta: T,
10 pub gamma: T,
11}
12
13impl<T> Rot3<T> {
14 pub const fn new(alpha: T, beta: T, gamma: T) -> Self {
16 Self { alpha, beta, gamma }
17 }
18
19 pub fn map<U>(self, mut f: impl FnMut(T) -> U) -> Rot3<U> {
21 Rot3 {
22 alpha: f(self.alpha),
23 beta: f(self.beta),
24 gamma: f(self.gamma),
25 }
26 }
27}
28
29impl<T> Zero for Rot3<T> where T: Zero {
30 const ZERO: Self = Self::new(T::ZERO, T::ZERO, T::ZERO);
32}