3 个版本
0.1.2 | 2024年8月10日 |
---|---|
0.1.1 | 2024年8月2日 |
0.1.0 | 2024年7月27日 |
#186 in 地理空间
每月352次下载
在 swisseph 中使用
2MB
36K SLoC
libswisseph-sys
Rust 对 swisseph C 库的系统封装
用法
默认情况下,主 pub 导出将是原始 bindgen 生成的文件。这些绑定要求用户知道函数期望的类型,因为许多函数接受不同大小数组的指针。
use libswisseph_sys::*;
TODO:进行中
还包括一个 tuple_result 模块,它提供了所有返回数据都由函数本身创建和返回的功能。错误代码也进行了检查,整个计算都被封装在 Result 类型中,以便 Rust 用户可以执行标准检查 Ok 或 Err。
use libswisseph_sys::tuple_result::*;
天文历文件
天文历文件被排除在这个crate之外,以便它适合crates.io。在swisseph C库中存在标准的天文历文件,根据所需的计算,还可以包括更多。例如:小行星、JPL等。
默认的天文历路径可以根据 swisseph C 库中描述的方式进行设置。有关更多详细信息,请参阅 https://github.com/aloistr/swisseph/。
示例用法
use libswisseph_sys::*;
let mut xx: [f64; 6] = [0.0; 6];
let mut serr = [0; 256];
let y = 2002;
let m = 1;
let d = 1;
let h = 0.0;
let i_flag = SE_GREG_CAL as i32;
let tjd_ut = swe_julday(y, m, d, h, i_flag);
let ipl = SE_SUN as i32;
swe_calc_ut(
tjd_ut,
ipl,
SEFLG_SPEED as i32,
xx.as_mut_ptr(),
serr.as_mut_ptr(),
);
let _lng = xx[0];
let _lat = xx[1];
let _speed = xx[3];
TODO
- 检查 bindgen 是否可以生成更易于使用的整数类型。函数和常量之间存在一些有符号和无符号类型的差异。例如,SE_ERR 是 -1,它生成一个 i32,但 SE_OK 是 0,因此生成一个 u32。
swisseph 文档
https://www.astro.com/swisseph/swephprg.htm https://www.astro.com/ftp/swisseph/doc/swisseph.pdf
致谢
- Astrodienst / @aloistr 对 swisseph 的贡献
- Stéphane Bressani / @stephaneworkspace 对他的封装和 Rust 项目的贡献
备注
u128 警告
Rustc u128 不是 ffi 安全的。任何引用 u128 的函数都被忽略,以防止编译错误。
添加了 swisseph c 库作为子模块
git submodule add https://github.com/aloistr/swisseph.git libswisseph/
不包括的函数
瑞士星历提供了一些未在头文件中引用的功能,因此将不包括在内。一些文件包含主函数,例如swevents进行事件计算并将结果输出到本地文件。
swedates存在重叠类型导致错误,因此未包含在内。