5个版本
0.1.4 | 2020年4月24日 |
---|---|
0.1.3 | 2020年4月23日 |
0.1.2 | 2020年4月22日 |
0.1.1 | 2020年4月20日 |
0.1.0 | 2020年4月17日 |
#226 in 可视化
14KB
166 行
Rust语言的经典占星术
由Stéphane Bressani创建的Rust库([email protected])
使用Astrodienst AG的Swiss ephemeris C库,由Dieter Koch和Alois Treindl提供(https://www.astro.com/ftp/swisseph/)
源代码在CC许可下发布,允许用于商业项目。此软件使用的是Swiss ephemeris,其许可协议为GPL。
因此,如果您想在商业项目中使用astro_compute_swisseph,您必须遵守GPL许可协议或购买Swiss Ephemeris的商业许可。
库的使用
获取版本作为指针const c_char
pub extern "C" fn sweversion() -> *const c_char {
CString::new(handler_swe02::version()).unwrap().into_raw()
}
获取包含所有svg和位置的json作为指针const c_char
#[no_mangle]
pub extern "C" fn compute(
year: c_int,
month: c_int,
day: c_int,
hour: c_int,
min: c_int,
sec: c_double,
lat: c_double,
lng: c_double,
max_size: c_double,
language: c_int,
path: *const c_char,
) -> *const c_char {
let lang: Language = match FromPrimitive::from_i32(language as i32) {
Some(Language::English) => Language::English,
Some(Language::French) => Language::French,
None => Language::English,
};
let d = DataChartNatal {
year: year,
month: month,
day: day,
hour: hour,
min: min,
sec: sec as f32,
lat: lat as f32,
lng: lng as f32,
};
let path_c_str = unsafe { CStr::from_ptr(path) };
let path_str: &str = path_c_str.to_str().unwrap();
let data = svg_draw::chart(max_size as f32, d, &path_str, lang);
CString::new(serde_json::to_string(&data).unwrap())
.unwrap()
.into_raw()
}
用于天文转移
#[no_mangle]
pub extern "C" fn compute_transit(
year: c_int,
month: c_int,
day: c_int,
hour: c_int,
min: c_int,
sec: c_double,
lat: c_double,
lng: c_double,
year_transit: c_int,
month_transit: c_int,
day_transit: c_int,
hour_transit: c_int,
min_transit: c_int,
sec_transit: c_double,
lat_transit: c_double,
lng_transit: c_double,
max_size: c_double,
language: c_int,
path: *const c_char,
) -> *const c_char {
let lang: Language = match FromPrimitive::from_i32(language as i32) {
Some(Language::English) => Language::English,
Some(Language::French) => Language::French,
None => Language::English,
};
let d = DataChartNatal {
year: year,
month: month,
day: day,
hour: hour,
min: min,
sec: sec as f32,
lat: lat as f32,
lng: lng as f32,
};
let d_t = DataChartNatal {
year: year_transit,
month: month_transit,
day: day_transit,
hour: hour_transit,
min: min_transit,
sec: sec_transit as f32,
lat: lat_transit as f32,
lng: lng_transit as f32,
};
let path_c_str = unsafe { CStr::from_ptr(path) };
let path_str: &str = path_c_str.to_str().unwrap();
let data =
svg_draw::chart_with_transit(max_size as f32, d, d_t, &path_str, lang);
CString::new(serde_json::to_string(&data).unwrap())
.unwrap()
.into_raw()
}
用于所有方面(目前只包括主要方面)
#[no_mangle]
pub extern "C" fn aspects(language: c_int) -> *const c_char {
let lang: Language = match FromPrimitive::from_i32(language as i32) {
Some(Language::English) => Language::English,
Some(Language::French) => Language::French,
None => Language::English,
};
let data = svg_draw::all_aspects(lang);
CString::new(serde_json::to_string(&data).unwrap())
.unwrap()
.into_raw()
}
版本
0.1.4
- 修复文档
0.1.3
- 更新文档
0.1.2
- 更新与占星术crate的连接
0.1.1
- 更新文档
0.1.0
- 一些用于extern c使用的函数(c -> rust -> c)
依赖项
~11MB
~141K SLoC