#janus #native-bindings #json #plugin-api #janus-gateway #jansson

sys jansson-sys

Jansson的本地绑定,Jansson是C语言JSON库

1个不稳定版本

使用旧的Rust 2015

0.1.0 2017年10月25日

#5#janus-gateway

Download history 23/week @ 2024-03-15 51/week @ 2024-03-22 91/week @ 2024-03-29 30/week @ 2024-04-05 60/week @ 2024-04-12 44/week @ 2024-04-19 31/week @ 2024-04-26 63/week @ 2024-05-03 58/week @ 2024-05-10 102/week @ 2024-05-17 70/week @ 2024-05-24 87/week @ 2024-05-31 58/week @ 2024-06-07 120/week @ 2024-06-14 49/week @ 2024-06-21 23/week @ 2024-06-28

263 每月下载量
2 crates 中使用

MPL-2.0 许可证

11KB
174

janus-plugin-rs

Documentation janus-plugin

用于创建Rust插件和事件处理器的库,用于 Janus。仍然相对不稳定。

[dependencies]
janus-plugin = "0.13.0"

兼容性

目前与Janus版本 >= 0.10.9 兼容;Janus相对频繁地对插件API进行破坏性更改,因此预计此库需要更新和重新编译,以便插件与新的Janus版本一起工作。

构建

需要链接到Jansson本地库(Ubuntu:libjansson-dev)的Jansson原生库;已测试与版本 >= 2.5 兼容。

$ cargo build --all

测试

$ cargo test --all

基本用法

Janus期望将插件作为库动态链接,然后调用其上的 create 函数以返回一个 janus_plugin 结构体,该结构体具有各种函数指针,当核心中发生与插件相关的事件时,Janus将调用这些函数。

这些绑定提供了一个接受插件元数据和一组 extern C Rust函数的 build_plugin! 宏,生成 janus_plugin 结构体的Rust版本,以及一个定义 create 函数以返回该结构的 export_plugin! 宏。因此,要实现插件,您应该编写一些处理函数,然后像这样使用这些宏

use std::os::raw::c_char;

// helper macro for generating C-style strings from Rust string literals at compile time
macro_rules! c_str {
    ($lit:expr) => {
        unsafe {
            std::ffi::CStr::from_ptr(concat!($lit, "\0").as_ptr() as *const c_char)
        }
    }
}

extern "C" fn init(callbacks: *mut PluginCallbacks, config_path: *const c_char) -> c_int {
    janus_info!("Plugin loaded!");
    0
}

extern "C" fn destroy() {
    janus_info!("Plugin destroyed!");
}

// ...other handlers omitted: see
// https://janus.conf.meetecho.com/docs/plugin_8h.html#details

const PLUGIN: Plugin = build_plugin!(
    LibraryMetadata {
        // The Janus plugin API version. The version compiled into the plugin
        // must be identical to the version in the Janus which loads the plugin.
        api_version: 15,
        // Incrementing plugin version number for your own use.
        version: 1,
        // Human-readable metadata which Janus can query.
        name: c_str!("My plugin name"),
        package: c_str!("My plugin package name"),
        version_str: c_str!(env!("CARGO_PKG_VERSION")),
        description: c_str!(env!("CARGO_PKG_DESCRIPTION")),
        author: c_str!(env!("CARGO_PKG_AUTHORS")),
    },
    init,
    destroy,
    // ...other handlers omitted: see
    // https://janus.conf.meetecho.com/docs/plugin_8h.html#details
);

export_plugin!(&PLUGIN);

示例

以下是使用这些绑定的项目

无运行时依赖项