ark-api-ffi 0.17.0-pre.15

Ark low-level Wasm FFI API
Documentation
define_api_id!(0xc59d_d1af_2a1f_5b37, "telemetry-v0");

use bytemuck::Pod;
use bytemuck::Zeroable;

pub type PlayerIdRepr = u64;

/// Key-value telemetry event string property
#[derive(Default, Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct EventProperty {
    /// Key string pointer
    pub key_ptr: u32,
    /// Key string length
    pub key_len: u32,

    /// Value string pointer
    pub value_ptr: u32,
    /// Value string length
    pub value_len: u32,
}

// NOTE: This uses the wrong module name "resource" here which should be "telemetry"
// but this is now baked in to the stable ABI name of the functions (doh!) so can't be changed here
//
// in future version of Telemetry API, do call the module "telemetry"!!
#[ark_api_macros::ark_bindgen(imports = "ark-telemetry-v0")]
mod resource {
    use super::*;
    extern "C" {
        /// Send a telemetry event
        ///
        /// Each event has a string name and user-defined set of key-value string properties
        #[with_memory]
        #[deprecated_infallible]
        pub fn send_event(name: &str, properties: &[EventProperty]);

        /// Send a telemetry event associated with a specific player
        ///
        /// Each event has a string name and user-defined set of key-value string properties
        #[with_memory]
        pub fn send_event_for_player(
            player_id: PlayerIdRepr,
            event_name: &str,
            event_properties: &[EventProperty],
        );
    }
}

pub use resource::*;