#ifndef RUBY_WHISPER_H #define RUBY_WHISPER_H #include "whisper.h" typedef struct { VALUE *context; VALUE user_data; VALUE callback; VALUE callbacks; } ruby_whisper_callback_container; typedef struct { struct whisper_context *context; } ruby_whisper; typedef struct { struct whisper_full_params params; bool diarize; ruby_whisper_callback_container *new_segment_callback_container; ruby_whisper_callback_container *progress_callback_container; ruby_whisper_callback_container *encoder_begin_callback_container; ruby_whisper_callback_container *abort_callback_container; VALUE vad_params; } ruby_whisper_params; typedef struct { struct whisper_vad_params params; } ruby_whisper_vad_params; typedef struct { VALUE context; int index; } ruby_whisper_segment; typedef struct { whisper_token_data *token_data; const char *text; } ruby_whisper_token; typedef struct { VALUE context; } ruby_whisper_model; typedef struct { struct whisper_vad_segments *segments; } ruby_whisper_vad_segments; typedef struct { VALUE segments; int index; } ruby_whisper_vad_segment; typedef struct { struct whisper_vad_context *context; } ruby_whisper_vad_context; #define GetContext(obj, rw) do { \ TypedData_Get_Struct((obj), ruby_whisper, &ruby_whisper_type, (rw)); \ if ((rw)->context == NULL) { \ rb_raise(rb_eRuntimeError, "Not initialized"); \ } \ } while (0) #define GetToken(obj, rwt) do { \ TypedData_Get_Struct((obj), ruby_whisper_token, &ruby_whisper_token_type, (rwt)); \ if ((rwt)->token_data == NULL) { \ rb_raise(rb_eRuntimeError, "Not initialized"); \ } \ } while (0) #define GetVADSegments(obj, rwvss) do { \ TypedData_Get_Struct((obj), ruby_whisper_vad_segments, &ruby_whisper_vad_segments_type, (rwvss)); \ if ((rwvss)->segments == NULL) { \ rb_raise(rb_eRuntimeError, "Not initialized"); \ } \ } while (0) #endif