libswe_sys/swerust/swe08/
handler.rs

1use crate::raw;
2use crate::sweconst::Calandar;
3use std::ffi::{CStr, CString};
4// use std::os::raw::c_char;
5
6/*
7 * 8. Date and time conversion functions
8 */
9pub fn julday(
10    year: i32,
11    month: i32,
12    day: i32,
13    hour: f64,
14    calandar: Calandar,
15) -> f64 {
16    let result: f64 =
17        unsafe { raw::swe_julday(year, month, day, hour, calandar as i32) };
18    result
19}
20
21/// [0 -> jday / 1 -> utc]
22#[derive(Debug, Clone)]
23pub struct UtcTimeZoneResult {
24    pub year: [i32; 2],
25    pub month: [i32; 2],
26    pub day: [i32; 2],
27    pub hour: [i32; 2],
28    pub min: [i32; 2],
29    pub sec: [f64; 2],
30}
31
32pub fn utc_time_zone(
33    year: i32,
34    month: i32,
35    day: i32,
36    hour: i32,
37    min: i32,
38    sec: f64,
39    timezone: f64,
40) -> UtcTimeZoneResult {
41    let mut year_out = [0; 2];
42    let mut month_out = [0; 2];
43    let mut day_out = [0; 2];
44    let mut hour_out = [0; 2];
45    let mut min_out = [0; 2];
46    let mut sec_out = [0.0; 2];
47    unsafe {
48        let p_year_out = year_out.as_mut_ptr();
49        let p_month_out = month_out.as_mut_ptr();
50        let p_day_out = day_out.as_mut_ptr();
51        let p_hour_out = hour_out.as_mut_ptr();
52        let p_min_out = min_out.as_mut_ptr();
53        let p_sec_out = sec_out.as_mut_ptr();
54        raw::swe_utc_time_zone(
55            year,
56            month,
57            day,
58            hour,
59            min,
60            sec,
61            timezone,
62            p_year_out,
63            p_month_out,
64            p_day_out,
65            p_hour_out,
66            p_min_out,
67            p_sec_out,
68        );
69        UtcTimeZoneResult {
70            year: year_out,
71            month: month_out,
72            day: day_out,
73            hour: hour_out,
74            min: min_out,
75            sec: sec_out,
76        }
77    }
78}
79
80#[derive(Debug, Clone)]
81pub struct UtcToJdResult {
82    pub julian_day_et: f64,
83    pub julian_day_ut: f64,
84    pub err: String, // To do in other file same struct
85    pub result: i32,
86}
87pub fn utc_to_jd(
88    year: i32,
89    month: i32,
90    day: i32,
91    hour: i32,
92    min: i32,
93    sec: f64,
94    calandar: Calandar,
95) -> UtcToJdResult {
96    let mut dret = [0.0; 2];
97    let mut serr = [0; 255];
98    unsafe {
99        let p_dret = dret.as_mut_ptr();
100        let p_serr = serr.as_mut_ptr();
101        let result = raw::swe_utc_to_jd(
102            year,
103            month,
104            day,
105            hour,
106            min,
107            sec,
108            calandar as i32,
109            p_dret,
110            p_serr,
111        );
112        let s_serr = CString::from(CStr::from_ptr(p_serr))
113            .to_str()
114            .unwrap()
115            .to_string();
116        UtcToJdResult {
117            julian_day_et: dret[0],
118            julian_day_ut: dret[1],
119            err: s_serr,
120            result,
121        }
122    }
123}