cad_cs/libs/cs/macros.rs
1// 📃 ./src/libs/cs/macros.rs
2
3/*/
4 * // Makro generujące Cs<N>
5 * #[macro_export]
6 * macro_rules! cs {
7 * ($($x:expr),* $(,)?) => {
8 * $crate::libs::cs::Cs([$($x as f64),*])
9 * };
10 * }
11 */
12
13/// 📚 【 POL 】: Konstruktor makrowy dla `Cs<N>`. Obsługuje rzutowanie typów numerycznych na f64.
14/// 📚 【 ENG 】: Macro constructor for `Cs<N>`. Handles casting of numerical types to f64.
15///
16/// # Examples: `cs![1, 2]` (Cs2), `cs![1, 2, 3]` (Cs3)
17#[macro_export]
18macro_rules! cs {
19 // Dopasowanie dokładnie dla 2 elementów
20 ($x:expr, $y:expr $(,)?) => {
21 $crate::libs::cs::model::Cs([$x as f64, $y as f64])
22 };
23 // Dopasowanie dokładnie dla 3 elementów
24 ($x:expr, $y:expr, $z:expr $(,)?) => {
25 $crate::libs::cs::model::Cs([$x as f64, $y as f64, $z as f64])
26 };
27}
28
29/// 📚 【 POL 】: Konstruktor makrowy tworzący instancję Angle z formatu DMS.
30/// 📚 【 ENG 】: Macro constructor creating an Angle instance from DMS format.
31#[macro_export]
32macro_rules! dms_angle {
33 ($d:expr, $m:expr, $s:expr) => {
34 // W pełni kwalifikowana ścieżka uwalnia użytkownika z konieczności importowania AbstractAngle!
35 <$crate::libs::angle::Angle as $crate::libs::angle::AbstractAngle>::from_dms($d as i16, $m as u8, $s as f32)
36 };
37}
38
39/// 📚 【 POL 】: Konwertuje format DMS bezpośrednio do wartości f64 w radianach.
40/// 📚 【 ENG 】: Converts DMS format directly to a f64 value in radians.
41#[macro_export]
42macro_rules! dms {
43 ($d:expr, $m:expr, $s:expr) => {
44 // Tutaj tak samo - wywołujemy .rad() bezpośrednio z traita, aby uniknąć błędów zakresu (scope).
45 <$crate::libs::angle::Angle as $crate::libs::angle::AbstractAngle>::rad(
46 <$crate::libs::angle::Angle as $crate::libs::angle::AbstractAngle>::from_dms($d as i16, $m as u8, $s as f32)
47 )
48 };
49}
50
51/// 📚 【 POL】: Makro implementujące trait AbstractSignStrExt dla wskazanych typów liczbowych i zdefiniowanego punktu zera.
52/// 📚 【 ENG】: Macro implementing the AbstractSignStrExt trait for specified numerical types and a defined zero point.
53#[macro_export]
54macro_rules! impl_sign_str {
55 ($t:ty, $zero:expr) => {
56 impl $crate::libs::cs::abstracts::AbstractSignStrExt for $t {
57 #[inline]
58 fn sign_str(self) -> &'static str { if self >= $zero { "+" } else { "-" } }
59 #[inline]
60 fn sign_sn(self) -> &'static str { if self >= $zero { "N" } else { "S" } }
61 #[inline]
62 fn sign_we(self) -> &'static str { if self >= $zero { "E" } else { "W" } }
63 }
64 };
65}