#ephemeris #swiss #astrology #version #lib #connected #rexport

libastro

与C库Swiss ephemeris连接的占星术库,以rexport形式输出到C语言

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