libswe_sys/swerust/swe17/
handler.rs1extern crate math;
2use crate::raw;
3use crate::sweconst::Signs;
4use math::round;
5use strum::IntoEnumIterator;
6pub fn degnorm(x: f64) -> f64 {
13 unsafe { raw::swe_degnorm(x) }
14}
15
16pub fn radnorm(x: f64) -> f64 {
17 unsafe { raw::swe_radnorm(x) }
18}
19
20#[derive(Debug, Clone)]
21pub struct SplitDegResult {
22 pub print: String,
23 pub deg: i32,
24 pub min: i32,
25 pub sec: i32,
26 pub cdegfr: f64,
27 pub sign: Signs,
29 pub result: f64,
30}
31
32pub fn split_deg(ddeg: f64, roundflag: i32) -> SplitDegResult {
35 let sign_calc = round::floor(ddeg / 30.0, 0) as usize;
37 let house_calc = round::floor(ddeg / 30.0, 0);
38 let long_30 = (house_calc as f64 * 30.0) - ddeg;
39 let mut deg = [0; 1];
41 let mut min = [0; 1];
42 let mut sec = [0; 1];
43 let mut cdegfr = [0.0; 1];
44 let mut isgn = [0; 1];
45 let result: f64 = unsafe {
46 let p_deg = deg.as_mut_ptr();
47 let p_min = min.as_mut_ptr();
48 let p_sec = sec.as_mut_ptr();
49 let p_cdegfr = cdegfr.as_mut_ptr();
50 let p_isgn = isgn.as_mut_ptr();
51 raw::swe_split_deg(
52 long_30, roundflag, p_deg, p_min, p_sec, p_cdegfr, p_isgn,
53 )
54 };
55 let print = format!(
56 "{}{}{:02}{}{:02}",
57 i32::abs(deg[0]),
58 "°",
59 min[0],
60 "'",
61 sec[0],
62 );
63 SplitDegResult {
64 print,
65 deg: deg[0],
66 min: min[0],
67 sec: sec[0],
68 cdegfr: cdegfr[0],
69 sign: Signs::iter().nth(sign_calc).unwrap_or(Signs::Aries),
71 result,
72 }
73}