pub const ARCHIVE_BINDINGS: &str = "/* automatically generated by rust-bindgen 0.71.1 */\n\npub const AERON_NULL_VALUE: i32 = -1;\npub const AERON_CLIENT_ERROR_DRIVER_TIMEOUT: i32 = -1000;\npub const AERON_CLIENT_ERROR_CLIENT_TIMEOUT: i32 = -1001;\npub const AERON_CLIENT_ERROR_CONDUCTOR_SERVICE_TIMEOUT: i32 = -1002;\npub const AERON_CLIENT_ERROR_BUFFER_FULL: i32 = -1003;\npub const AERON_CLIENT_MAX_LOCAL_ADDRESS_STR_LEN: u32 = 64;\npub const AERON_RESPONSE_ADDRESS_TYPE_IPV4: u32 = 1;\npub const AERON_RESPONSE_ADDRESS_TYPE_IPV6: u32 = 2;\npub const AERON_DIR_ENV_VAR: &[u8; 10] = b\"AERON_DIR\\0\";\npub const AERON_DRIVER_TIMEOUT_ENV_VAR: &[u8; 21] = b\"AERON_DRIVER_TIMEOUT\\0\";\npub const AERON_CLIENT_RESOURCE_LINGER_DURATION_ENV_VAR: &[u8; 38] =\n b\"AERON_CLIENT_RESOURCE_LINGER_DURATION\\0\";\npub const AERON_CLIENT_IDLE_SLEEP_DURATION_ENV_VAR: &[u8; 33] =\n b\"AERON_CLIENT_IDLE_SLEEP_DURATION\\0\";\npub const AERON_CLIENT_PRE_TOUCH_MAPPED_MEMORY_ENV_VAR: &[u8; 37] =\n b\"AERON_CLIENT_PRE_TOUCH_MAPPED_MEMORY\\0\";\npub const AERON_CLIENT_NAME_ENV_VAR: &[u8; 18] = b\"AERON_CLIENT_NAME\\0\";\npub const AERON_AGENT_ON_START_FUNCTION_ENV_VAR: &[u8; 30] = b\"AERON_AGENT_ON_START_FUNCTION\\0\";\npub const AERON_COUNTER_CACHE_LINE_LENGTH: u32 = 64;\npub const AERON_COUNTER_MAX_CLIENT_NAME_LENGTH: u32 = 100;\npub const AERON_COUNTER_RECORD_UNUSED: u32 = 0;\npub const AERON_COUNTER_RECORD_ALLOCATED: u32 = 1;\npub const AERON_COUNTER_RECORD_RECLAIMED: i32 = -1;\npub const AERON_COUNTER_NOT_FREE_TO_REUSE: u64 = 9223372036854775807;\npub const AERON_NULL_COUNTER_ID: i32 = -1;\npub const AERON_PUBLICATION_NOT_CONNECTED: i32 = -1;\npub const AERON_PUBLICATION_BACK_PRESSURED: i32 = -2;\npub const AERON_PUBLICATION_ADMIN_ACTION: i32 = -3;\npub const AERON_PUBLICATION_CLOSED: i32 = -4;\npub const AERON_PUBLICATION_MAX_POSITION_EXCEEDED: i32 = -5;\npub const AERON_PUBLICATION_ERROR: i32 = -6;\npub const AERON_MAX_PATH: u32 = 4096;\npub const AERON_NULL_POSITION: i32 = -1;\npub const AERON_ARCHIVE_PROXY_REQUEST_BUFFER_LENGTH: u32 = 8192;\npub const AERON_ARCHIVE_PROXY_RETRY_ATTEMPTS_DEFAULT: u32 = 3;\npub const AERON_ARCHIVE_CONTROL_RESPONSE_POLLER_FRAGMENT_LIMIT_DEFAULT: u32 = 10;\npub const AERON_ARCHIVE_RECORDING_DESCRIPTOR_POLLER_FRAGMENT_LIMIT_DEFAULT: u32 = 10;\npub const AERON_ARCHIVE_RECORDING_SUBSCRIPTION_DESCRIPTOR_POLLER_FRAGMENT_LIMIT_DEFAULT: u32 = 10;\npub const AERON_COMPILER_GCC: u32 = 1;\npub const AERON_COMPILER_LLVM: u32 = 1;\npub const AERON_CPU_ARM: u32 = 1;\npub const AERON_SPY_PREFIX: &[u8; 11] = b\"aeron-spy:\\0\";\npub const AERON_IPC_CHANNEL: &[u8; 10] = b\"aeron:ipc\\0\";\npub const AERON_UDP_CHANNEL_RELIABLE_KEY: &[u8; 9] = b\"reliable\\0\";\npub const AERON_UDP_CHANNEL_TTL_KEY: &[u8; 4] = b\"ttl\\0\";\npub const AERON_UDP_CHANNEL_ENDPOINT_KEY: &[u8; 9] = b\"endpoint\\0\";\npub const AERON_UDP_CHANNEL_INTERFACE_KEY: &[u8; 10] = b\"interface\\0\";\npub const AERON_UDP_CHANNEL_CONTROL_KEY: &[u8; 8] = b\"control\\0\";\npub const AERON_UDP_CHANNEL_CONTROL_MODE_KEY: &[u8; 13] = b\"control-mode\\0\";\npub const AERON_UDP_CHANNEL_CONTROL_MODE_MANUAL_VALUE: &[u8; 7] = b\"manual\\0\";\npub const AERON_UDP_CHANNEL_CONTROL_MODE_DYNAMIC_VALUE: &[u8; 8] = b\"dynamic\\0\";\npub const AERON_UDP_CHANNEL_CONTROL_MODE_RESPONSE_VALUE: &[u8; 9] = b\"response\\0\";\npub const AERON_URI_INITIAL_TERM_ID_KEY: &[u8; 13] = b\"init-term-id\\0\";\npub const AERON_URI_TERM_ID_KEY: &[u8; 8] = b\"term-id\\0\";\npub const AERON_URI_TERM_OFFSET_KEY: &[u8; 12] = b\"term-offset\\0\";\npub const AERON_URI_ALIAS_KEY: &[u8; 6] = b\"alias\\0\";\npub const AERON_URI_TERM_LENGTH_KEY: &[u8; 12] = b\"term-length\\0\";\npub const AERON_URI_LINGER_TIMEOUT_KEY: &[u8; 7] = b\"linger\\0\";\npub const AERON_URI_MTU_LENGTH_KEY: &[u8; 4] = b\"mtu\\0\";\npub const AERON_URI_SPARSE_TERM_KEY: &[u8; 7] = b\"sparse\\0\";\npub const AERON_URI_EOS_KEY: &[u8; 4] = b\"eos\\0\";\npub const AERON_URI_TETHER_KEY: &[u8; 7] = b\"tether\\0\";\npub const AERON_URI_TAGS_KEY: &[u8; 5] = b\"tags\\0\";\npub const AERON_URI_SESSION_ID_KEY: &[u8; 11] = b\"session-id\\0\";\npub const AERON_URI_GROUP_KEY: &[u8; 6] = b\"group\\0\";\npub const AERON_URI_REJOIN_KEY: &[u8; 7] = b\"rejoin\\0\";\npub const AERON_URI_FC_KEY: &[u8; 3] = b\"fc\\0\";\npub const AERON_URI_GTAG_KEY: &[u8; 5] = b\"gtag\\0\";\npub const AERON_URI_CC_KEY: &[u8; 3] = b\"cc\\0\";\npub const AERON_URI_SPIES_SIMULATE_CONNECTION_KEY: &[u8; 4] = b\"ssc\\0\";\npub const AERON_URI_ATS_KEY: &[u8; 4] = b\"ats\\0\";\npub const AERON_URI_SOCKET_SNDBUF_KEY: &[u8; 10] = b\"so-sndbuf\\0\";\npub const AERON_URI_SOCKET_RCVBUF_KEY: &[u8; 10] = b\"so-rcvbuf\\0\";\npub const AERON_URI_RECEIVER_WINDOW_KEY: &[u8; 8] = b\"rcv-wnd\\0\";\npub const AERON_URI_MEDIA_RCV_TIMESTAMP_OFFSET_KEY: &[u8; 20] = b\"media-rcv-ts-offset\\0\";\npub const AERON_URI_CHANNEL_RCV_TIMESTAMP_OFFSET_KEY: &[u8; 22] = b\"channel-rcv-ts-offset\\0\";\npub const AERON_URI_CHANNEL_SND_TIMESTAMP_OFFSET_KEY: &[u8; 22] = b\"channel-snd-ts-offset\\0\";\npub const AERON_URI_TIMESTAMP_OFFSET_RESERVED: &[u8; 9] = b\"reserved\\0\";\npub const AERON_URI_RESPONSE_CORRELATION_ID_KEY: &[u8; 24] = b\"response-correlation-id\\0\";\npub const AERON_URI_NAK_DELAY_KEY: &[u8; 10] = b\"nak-delay\\0\";\npub const AERON_URI_UNTETHERED_WINDOW_LIMIT_TIMEOUT_KEY: &[u8; 32] =\n b\"untethered-window-limit-timeout\\0\";\npub const AERON_URI_UNTETHERED_RESTING_TIMEOUT_KEY: &[u8; 27] = b\"untethered-resting-timeout\\0\";\npub const AERON_URI_MAX_RESEND_KEY: &[u8; 11] = b\"max-resend\\0\";\npub const AERON_URI_STREAM_ID_KEY: &[u8; 10] = b\"stream-id\\0\";\npub const AERON_URI_PUBLICATION_WINDOW_KEY: &[u8; 8] = b\"pub-wnd\\0\";\npub const AERON_URI_INVALID_TAG: i32 = -1;\npub const AERON_URI_MAX_LENGTH: u32 = 4096;\npub const AERON_CACHE_LINE_LENGTH: u32 = 64;\npub const AERON_FORMAT_DATE_MAX_LENGTH: u32 = 100;\npub const AERON_FORMAT_NUMBER_TO_LOCALE_STR_LEN: u32 = 32;\npub const AERON_ERROR_MAX_TOTAL_LENGTH: u32 = 8192;\npub const AERON_MAP_DEFAULT_LOAD_FACTOR: f64 = 0.65;\npub const AERON_URI_STRING_BUILDER_PREFIX_KEY: &[u8; 9] = b\"__prefix\\0\";\npub const AERON_URI_STRING_BUILDER_MEDIA_KEY: &[u8; 8] = b\"__media\\0\";\npub const AERON_RES_HEADER_ADDRESS_LENGTH_IP4: u32 = 4;\npub const AERON_RES_HEADER_ADDRESS_LENGTH_IP6: u32 = 16;\npub const AERON_FRAME_HEADER_VERSION: u32 = 0;\npub const AERON_RES_HEADER_TYPE_NAME_TO_IP4_MD: u32 = 1;\npub const AERON_RES_HEADER_TYPE_NAME_TO_IP6_MD: u32 = 2;\npub const AERON_FRAME_MAX_MESSAGE_LENGTH: u32 = 16777216;\npub const AERON_OPT_HDR_ALIGNMENT: u32 = 4;\npub const AERON_ERROR_MAX_TEXT_LENGTH: u32 = 1023;\npub const AERON_ERROR_HAS_GROUP_TAG_FLAG: u32 = 8;\npub const AERON_LOGBUFFER_PARTITION_COUNT: u32 = 3;\npub const AERON_LOGBUFFER_TERM_MIN_LENGTH: u32 = 65536;\npub const AERON_LOGBUFFER_TERM_MAX_LENGTH: u32 = 1073741824;\npub const AERON_PAGE_MIN_SIZE: u32 = 4096;\npub const AERON_PAGE_MAX_SIZE: u32 = 1073741824;\npub const AERON_LOGBUFFER_PADDING_SIZE: u32 = 64;\npub const AERON_LOGBUFFER_DEFAULT_FRAME_HEADER_MAX_LENGTH: u32 = 128;\npub const AERON_MAX_UDP_PAYLOAD_LENGTH: u32 = 65504;\npub const AERON_LOGBUFFER_META_DATA_LENGTH: u32 = 4096;\npub const AERON_LOGBUFFER_FRAME_ALIGNMENT: u32 = 32;\npub const AERON_FILEUTIL_ERROR_ENOSPC: u32 = 28;\npub const AERON_PUBLICATIONS_DIR: &[u8; 13] = b\"publications\\0\";\npub const AERON_IMAGES_DIR: &[u8; 7] = b\"images\\0\";\npub const AERON_CNC_FILE: &[u8; 8] = b\"cnc.dat\\0\";\npub const AERON_LOSS_REPORT_FILE: &[u8; 16] = b\"loss-report.dat\\0\";\npub const AERON_LOSS_REPORTER_ENTRY_ALIGNMENT: u32 = 64;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct __darwin_pthread_handler_rec {\n pub __routine: ::std::option::Option<unsafe extern \"C\" fn(arg1: *mut ::std::os::raw::c_void)>,\n pub __arg: *mut ::std::os::raw::c_void,\n pub __next: *mut __darwin_pthread_handler_rec,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of __darwin_pthread_handler_rec\"]\n [::std::mem::size_of::<__darwin_pthread_handler_rec>() - 24usize];\n [\"Alignment of __darwin_pthread_handler_rec\"]\n [::std::mem::align_of::<__darwin_pthread_handler_rec>() - 8usize];\n [\"Offset of field: __darwin_pthread_handler_rec::__routine\"]\n [::std::mem::offset_of!(__darwin_pthread_handler_rec, __routine) - 0usize];\n [\"Offset of field: __darwin_pthread_handler_rec::__arg\"]\n [::std::mem::offset_of!(__darwin_pthread_handler_rec, __arg) - 8usize];\n [\"Offset of field: __darwin_pthread_handler_rec::__next\"]\n [::std::mem::offset_of!(__darwin_pthread_handler_rec, __next) - 16usize];\n};\nimpl Default for __darwin_pthread_handler_rec {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct _opaque_pthread_attr_t {\n pub __sig: ::std::os::raw::c_long,\n pub __opaque: [::std::os::raw::c_char; 56usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of _opaque_pthread_attr_t\"][::std::mem::size_of::<_opaque_pthread_attr_t>() - 64usize];\n [\"Alignment of _opaque_pthread_attr_t\"]\n [::std::mem::align_of::<_opaque_pthread_attr_t>() - 8usize];\n [\"Offset of field: _opaque_pthread_attr_t::__sig\"]\n [::std::mem::offset_of!(_opaque_pthread_attr_t, __sig) - 0usize];\n [\"Offset of field: _opaque_pthread_attr_t::__opaque\"]\n [::std::mem::offset_of!(_opaque_pthread_attr_t, __opaque) - 8usize];\n};\nimpl Default for _opaque_pthread_attr_t {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct _opaque_pthread_cond_t {\n pub __sig: ::std::os::raw::c_long,\n pub __opaque: [::std::os::raw::c_char; 40usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of _opaque_pthread_cond_t\"][::std::mem::size_of::<_opaque_pthread_cond_t>() - 48usize];\n [\"Alignment of _opaque_pthread_cond_t\"]\n [::std::mem::align_of::<_opaque_pthread_cond_t>() - 8usize];\n [\"Offset of field: _opaque_pthread_cond_t::__sig\"]\n [::std::mem::offset_of!(_opaque_pthread_cond_t, __sig) - 0usize];\n [\"Offset of field: _opaque_pthread_cond_t::__opaque\"]\n [::std::mem::offset_of!(_opaque_pthread_cond_t, __opaque) - 8usize];\n};\nimpl Default for _opaque_pthread_cond_t {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct _opaque_pthread_mutex_t {\n pub __sig: ::std::os::raw::c_long,\n pub __opaque: [::std::os::raw::c_char; 56usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of _opaque_pthread_mutex_t\"][::std::mem::size_of::<_opaque_pthread_mutex_t>() - 64usize];\n [\"Alignment of _opaque_pthread_mutex_t\"]\n [::std::mem::align_of::<_opaque_pthread_mutex_t>() - 8usize];\n [\"Offset of field: _opaque_pthread_mutex_t::__sig\"]\n [::std::mem::offset_of!(_opaque_pthread_mutex_t, __sig) - 0usize];\n [\"Offset of field: _opaque_pthread_mutex_t::__opaque\"]\n [::std::mem::offset_of!(_opaque_pthread_mutex_t, __opaque) - 8usize];\n};\nimpl Default for _opaque_pthread_mutex_t {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct _opaque_pthread_t {\n pub __sig: ::std::os::raw::c_long,\n pub __cleanup_stack: *mut __darwin_pthread_handler_rec,\n pub __opaque: [::std::os::raw::c_char; 8176usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of _opaque_pthread_t\"][::std::mem::size_of::<_opaque_pthread_t>() - 8192usize];\n [\"Alignment of _opaque_pthread_t\"][::std::mem::align_of::<_opaque_pthread_t>() - 8usize];\n [\"Offset of field: _opaque_pthread_t::__sig\"]\n [::std::mem::offset_of!(_opaque_pthread_t, __sig) - 0usize];\n [\"Offset of field: _opaque_pthread_t::__cleanup_stack\"]\n [::std::mem::offset_of!(_opaque_pthread_t, __cleanup_stack) - 8usize];\n [\"Offset of field: _opaque_pthread_t::__opaque\"]\n [::std::mem::offset_of!(_opaque_pthread_t, __opaque) - 16usize];\n};\nimpl Default for _opaque_pthread_t {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type __darwin_pthread_attr_t = _opaque_pthread_attr_t;\npub type __darwin_pthread_cond_t = _opaque_pthread_cond_t;\npub type __darwin_pthread_mutex_t = _opaque_pthread_mutex_t;\npub type __darwin_pthread_t = *mut _opaque_pthread_t;\npub type pthread_attr_t = __darwin_pthread_attr_t;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_context_stct {\n _unused: [u8; 0],\n}\npub type aeron_context_t = aeron_context_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_stct {\n _unused: [u8; 0],\n}\npub type aeron_t = aeron_stct;\n#[doc = \" Structure used to hold information for a try_claim function call.\"]\npub type aeron_buffer_claim_t = aeron_buffer_claim_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_publication_stct {\n _unused: [u8; 0],\n}\npub type aeron_publication_t = aeron_publication_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_exclusive_publication_stct {\n _unused: [u8; 0],\n}\npub type aeron_exclusive_publication_t = aeron_exclusive_publication_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_header_stct {\n _unused: [u8; 0],\n}\npub type aeron_header_t = aeron_header_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_header_values_frame_stct {\n pub frame_length: i32,\n pub version: i8,\n pub flags: u8,\n pub type_: i16,\n pub term_offset: i32,\n pub session_id: i32,\n pub stream_id: i32,\n pub term_id: i32,\n pub reserved_value: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_header_values_frame_stct\"]\n [::std::mem::size_of::<aeron_header_values_frame_stct>() - 32usize];\n [\"Alignment of aeron_header_values_frame_stct\"]\n [::std::mem::align_of::<aeron_header_values_frame_stct>() - 4usize];\n [\"Offset of field: aeron_header_values_frame_stct::frame_length\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, frame_length) - 0usize];\n [\"Offset of field: aeron_header_values_frame_stct::version\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, version) - 4usize];\n [\"Offset of field: aeron_header_values_frame_stct::flags\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, flags) - 5usize];\n [\"Offset of field: aeron_header_values_frame_stct::type_\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, type_) - 6usize];\n [\"Offset of field: aeron_header_values_frame_stct::term_offset\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, term_offset) - 8usize];\n [\"Offset of field: aeron_header_values_frame_stct::session_id\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, session_id) - 12usize];\n [\"Offset of field: aeron_header_values_frame_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, stream_id) - 16usize];\n [\"Offset of field: aeron_header_values_frame_stct::term_id\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, term_id) - 20usize];\n [\"Offset of field: aeron_header_values_frame_stct::reserved_value\"]\n [::std::mem::offset_of!(aeron_header_values_frame_stct, reserved_value) - 24usize];\n};\npub type aeron_header_values_frame_t = aeron_header_values_frame_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_header_values_stct {\n pub frame: aeron_header_values_frame_t,\n pub initial_term_id: i32,\n pub position_bits_to_shift: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_header_values_stct\"]\n [::std::mem::size_of::<aeron_header_values_stct>() - 44usize];\n [\"Alignment of aeron_header_values_stct\"]\n [::std::mem::align_of::<aeron_header_values_stct>() - 4usize];\n [\"Offset of field: aeron_header_values_stct::frame\"]\n [::std::mem::offset_of!(aeron_header_values_stct, frame) - 0usize];\n [\"Offset of field: aeron_header_values_stct::initial_term_id\"]\n [::std::mem::offset_of!(aeron_header_values_stct, initial_term_id) - 32usize];\n [\"Offset of field: aeron_header_values_stct::position_bits_to_shift\"]\n [::std::mem::offset_of!(aeron_header_values_stct, position_bits_to_shift) - 36usize];\n};\npub type aeron_header_values_t = aeron_header_values_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_publication_error_values_stct {\n pub registration_id: i64,\n pub destination_registration_id: i64,\n pub session_id: i32,\n pub stream_id: i32,\n pub receiver_id: i64,\n pub group_tag: i64,\n pub address_type: i16,\n pub source_port: u16,\n pub source_address: [u8; 16usize],\n pub error_code: i32,\n pub error_message_length: i32,\n pub error_message: [u8; 1usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_publication_error_values_stct\"]\n [::std::mem::size_of::<aeron_publication_error_values_stct>() - 72usize];\n [\"Alignment of aeron_publication_error_values_stct\"]\n [::std::mem::align_of::<aeron_publication_error_values_stct>() - 4usize];\n [\"Offset of field: aeron_publication_error_values_stct::registration_id\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, registration_id) - 0usize];\n [\"Offset of field: aeron_publication_error_values_stct::destination_registration_id\"][::std::mem::offset_of!(\n aeron_publication_error_values_stct,\n destination_registration_id\n )\n - 8usize];\n [\"Offset of field: aeron_publication_error_values_stct::session_id\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, session_id) - 16usize];\n [\"Offset of field: aeron_publication_error_values_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, stream_id) - 20usize];\n [\"Offset of field: aeron_publication_error_values_stct::receiver_id\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, receiver_id) - 24usize];\n [\"Offset of field: aeron_publication_error_values_stct::group_tag\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, group_tag) - 32usize];\n [\"Offset of field: aeron_publication_error_values_stct::address_type\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, address_type) - 40usize];\n [\"Offset of field: aeron_publication_error_values_stct::source_port\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, source_port) - 42usize];\n [\"Offset of field: aeron_publication_error_values_stct::source_address\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, source_address) - 44usize];\n [\"Offset of field: aeron_publication_error_values_stct::error_code\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, error_code) - 60usize];\n [\"Offset of field: aeron_publication_error_values_stct::error_message_length\"][::std::mem::offset_of!(\n aeron_publication_error_values_stct,\n error_message_length\n ) - 64usize];\n [\"Offset of field: aeron_publication_error_values_stct::error_message\"]\n [::std::mem::offset_of!(aeron_publication_error_values_stct, error_message) - 68usize];\n};\npub type aeron_publication_error_values_t = aeron_publication_error_values_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_subscription_stct {\n _unused: [u8; 0],\n}\npub type aeron_subscription_t = aeron_subscription_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_image_stct {\n _unused: [u8; 0],\n}\npub type aeron_image_t = aeron_image_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_counter_stct {\n _unused: [u8; 0],\n}\npub type aeron_counter_t = aeron_counter_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_log_buffer_stct {\n _unused: [u8; 0],\n}\npub type aeron_log_buffer_t = aeron_log_buffer_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_counters_reader_stct {\n _unused: [u8; 0],\n}\npub type aeron_counters_reader_t = aeron_counters_reader_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_client_registering_resource_stct {\n _unused: [u8; 0],\n}\npub type aeron_async_add_publication_t = aeron_client_registering_resource_stct;\npub type aeron_async_add_exclusive_publication_t = aeron_client_registering_resource_stct;\npub type aeron_async_add_subscription_t = aeron_client_registering_resource_stct;\npub type aeron_async_add_counter_t = aeron_client_registering_resource_stct;\npub type aeron_async_destination_t = aeron_client_registering_resource_stct;\npub type aeron_async_destination_by_id_t = aeron_client_registering_resource_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_image_fragment_assembler_stct {\n _unused: [u8; 0],\n}\npub type aeron_image_fragment_assembler_t = aeron_image_fragment_assembler_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_image_controlled_fragment_assembler_stct {\n _unused: [u8; 0],\n}\npub type aeron_image_controlled_fragment_assembler_t =\n aeron_image_controlled_fragment_assembler_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_fragment_assembler_stct {\n _unused: [u8; 0],\n}\npub type aeron_fragment_assembler_t = aeron_fragment_assembler_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_controlled_fragment_assembler_stct {\n _unused: [u8; 0],\n}\npub type aeron_controlled_fragment_assembler_t = aeron_controlled_fragment_assembler_stct;\nunsafe extern \"C\" {\n pub fn aeron_context_set_dir(\n context: *mut aeron_context_t,\n value: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_dir(context: *mut aeron_context_t) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_driver_timeout_ms(\n context: *mut aeron_context_t,\n value: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_driver_timeout_ms(context: *mut aeron_context_t) -> u64;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_keepalive_interval_ns(\n context: *mut aeron_context_t,\n value: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_keepalive_interval_ns(context: *mut aeron_context_t) -> u64;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_resource_linger_duration_ns(\n context: *mut aeron_context_t,\n value: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_resource_linger_duration_ns(context: *mut aeron_context_t) -> u64;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_idle_sleep_duration_ns(context: *mut aeron_context_t) -> u64;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_idle_sleep_duration_ns(\n context: *mut aeron_context_t,\n value: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_pre_touch_mapped_memory(\n context: *mut aeron_context_t,\n value: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_pre_touch_mapped_memory(context: *mut aeron_context_t) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_client_name(\n context: *mut aeron_context_t,\n value: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_client_name(\n context: *mut aeron_context_t,\n ) -> *const ::std::os::raw::c_char;\n}\n#[doc = \" The error handler to be called when an error occurs.\"]\npub type aeron_error_handler_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n errcode: ::std::os::raw::c_int,\n message: *const ::std::os::raw::c_char,\n ),\n>;\n#[doc = \" The error frame handler to be called when the driver notifies the client about an error frame being received.\\n The data passed to this callback will only be valid for the lifetime of the callback. The user should use\\n <code>aeron_publication_error_values_copy</code> if they require the data to live longer than that.\"]\npub type aeron_publication_error_frame_handler_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n error_frame: *mut aeron_publication_error_values_t,\n ),\n>;\nunsafe extern \"C\" {\n #[doc = \" Copy an existing aeron_publication_error_values_t to the supplied pointer. The caller is responsible for freeing the\\n allocated memory using aeron_publication_error_values_delete when the copy is not longer required.\\n\\n @param dst to copy the values to.\\n @param src to copy the values from.\\n @return 0 if this is successful, -1 otherwise. Will set aeron_errcode() and aeron_errmsg() on failure.\"]\n pub fn aeron_publication_error_values_copy(\n dst: *mut *mut aeron_publication_error_values_t,\n src: *mut aeron_publication_error_values_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete a instance of aeron_publication_error_values_t that was created when making a copy\\n (aeron_publication_error_values_copy). This should not be use on the pointer received via the aeron_frame_handler_t.\\n @param to_delete to be deleted.\"]\n pub fn aeron_publication_error_values_delete(to_delete: *mut aeron_publication_error_values_t);\n}\n#[doc = \" Generalised notification callback.\"]\npub type aeron_notification_t =\n ::std::option::Option<unsafe extern \"C\" fn(clientd: *mut ::std::os::raw::c_void)>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_error_handler(\n context: *mut aeron_context_t,\n handler: aeron_error_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_error_handler(context: *mut aeron_context_t) -> aeron_error_handler_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_error_handler_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_publication_error_frame_handler(\n context: *mut aeron_context_t,\n handler: aeron_publication_error_frame_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_publication_error_frame_handler(\n context: *mut aeron_context_t,\n ) -> aeron_publication_error_frame_handler_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_publication_error_frame_handler_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\n#[doc = \" Function called by aeron_client_t to deliver notification that the media driver has added an aeron_publication_t\\n or aeron_exclusive_publication_t successfully.\\n\\n Implementations should do the minimum work for passing off state to another thread for later processing.\\n\\n @param clientd to be returned in the call\\n @param async associated with the original add publication call\\n @param channel of the publication\\n @param stream_id within the channel of the publication\\n @param session_id of the publication\\n @param correlation_id used by the publication\"]\npub type aeron_on_new_publication_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n async_: *mut aeron_async_add_publication_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n session_id: i32,\n correlation_id: i64,\n ),\n>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_new_publication(\n context: *mut aeron_context_t,\n handler: aeron_on_new_publication_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_publication(\n context: *mut aeron_context_t,\n ) -> aeron_on_new_publication_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_publication_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_new_exclusive_publication(\n context: *mut aeron_context_t,\n handler: aeron_on_new_publication_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_exclusive_publication(\n context: *mut aeron_context_t,\n ) -> aeron_on_new_publication_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_exclusive_publication_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\n#[doc = \" Function called by aeron_client_t to deliver notification that the media driver has added an aeron_subscription_t\\n successfully.\\n\\n Implementations should do the minimum work for handing off state to another thread for later processing.\\n\\n @param clientd to be returned in the call\\n @param async associated with the original aeron_add_async_subscription call\\n @param channel of the subscription\\n @param stream_id within the channel of the subscription\\n @param session_id of the subscription\\n @param correlation_id used by the subscription\"]\npub type aeron_on_new_subscription_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n async_: *mut aeron_async_add_subscription_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n correlation_id: i64,\n ),\n>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_new_subscription(\n context: *mut aeron_context_t,\n handler: aeron_on_new_subscription_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_subscription(\n context: *mut aeron_context_t,\n ) -> aeron_on_new_subscription_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_new_subscription_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\n#[doc = \" Function called by aeron_client_t to deliver notifications that an aeron_image_t was added.\\n\\n @param clientd to be returned in the call.\\n @param subscription that image is part of.\\n @param image that has become available.\"]\npub type aeron_on_available_image_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n subscription: *mut aeron_subscription_t,\n image: *mut aeron_image_t,\n ),\n>;\n#[doc = \" Function called by aeron_client_t to deliver notifications that an aeron_image_t has been removed from use and\\n should not be used any longer.\\n\\n @param clientd to be returned in the call.\\n @param subscription that image is part of.\\n @param image that has become unavailable.\"]\npub type aeron_on_unavailable_image_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n subscription: *mut aeron_subscription_t,\n image: *mut aeron_image_t,\n ),\n>;\n#[doc = \" Function called by aeron_client_t to deliver notifications that a counter has been added to the driver.\\n\\n @param clientd to be returned in the call.\\n @param counters_reader that holds the counter.\\n @param registration_id of the counter.\\n @param counter_id of the counter.\"]\npub type aeron_on_available_counter_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n counters_reader: *mut aeron_counters_reader_t,\n registration_id: i64,\n counter_id: i32,\n ),\n>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_available_counter(\n context: *mut aeron_context_t,\n handler: aeron_on_available_counter_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_available_counter(\n context: *mut aeron_context_t,\n ) -> aeron_on_available_counter_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_available_counter_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\n#[doc = \" Function called by aeron_client_t to deliver notifications that a counter has been removed from the driver.\\n\\n @param clientd to be returned in the call.\\n @param counters_reader that holds the counter.\\n @param registration_id of the counter.\\n @param counter_id of the counter.\"]\npub type aeron_on_unavailable_counter_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n counters_reader: *mut aeron_counters_reader_t,\n registration_id: i64,\n counter_id: i32,\n ),\n>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_unavailable_counter(\n context: *mut aeron_context_t,\n handler: aeron_on_unavailable_counter_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_unavailable_counter(\n context: *mut aeron_context_t,\n ) -> aeron_on_unavailable_counter_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_unavailable_counter_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\n#[doc = \" Function called by aeron_client_t to deliver notifications that the client is closing.\\n\\n @param clientd to be returned in the call.\"]\npub type aeron_on_close_client_t =\n ::std::option::Option<unsafe extern \"C\" fn(clientd: *mut ::std::os::raw::c_void)>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_on_close_client(\n context: *mut aeron_context_t,\n handler: aeron_on_close_client_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_close_client(\n context: *mut aeron_context_t,\n ) -> aeron_on_close_client_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_on_close_client_clientd(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\nunsafe extern \"C\" {\n #[doc = \" Whether to use an invoker to control the conductor agent or spawn a thread.\"]\n pub fn aeron_context_set_use_conductor_agent_invoker(\n context: *mut aeron_context_t,\n value: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_use_conductor_agent_invoker(context: *mut aeron_context_t) -> bool;\n}\npub type aeron_agent_on_start_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n state: *mut ::std::os::raw::c_void,\n role_name: *const ::std::os::raw::c_char,\n ),\n>;\nunsafe extern \"C\" {\n pub fn aeron_context_set_agent_on_start_function(\n context: *mut aeron_context_t,\n value: aeron_agent_on_start_func_t,\n state: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_agent_on_start_function(\n context: *mut aeron_context_t,\n ) -> aeron_agent_on_start_func_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_context_get_agent_on_start_state(\n context: *mut aeron_context_t,\n ) -> *mut ::std::os::raw::c_void;\n}\nunsafe extern \"C\" {\n #[doc = \" Create a aeron_context_t struct and initialize with default values.\\n\\n @param context to create and initialize\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_context_init(context: *mut *mut aeron_context_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Close and delete aeron_context_t struct.\\n\\n @param context to close and delete\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_context_close(context: *mut aeron_context_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Create a aeron_t client struct and initialize from the aeron_context_t struct.\\n\\n The given aeron_context_t struct will be used exclusively by the client. Do not reuse between clients.\\n\\n @param aeron client to create and initialize.\\n @param context to use for initialization.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_init(\n client: *mut *mut aeron_t,\n context: *mut aeron_context_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Start an aeron_t. This may spawn a thread for the Client Conductor.\\n\\n @param client to start.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_start(client: *mut aeron_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Call the Conductor main do_work duty cycle once.\\n\\n Client must have been created with use conductor invoker set to true.\\n\\n @param client to call do_work duty cycle on.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_main_do_work(client: *mut aeron_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Call the Conductor Idle Strategy.\\n\\n @param client to idle.\\n @param work_count to pass to idle strategy.\"]\n pub fn aeron_main_idle_strategy(client: *mut aeron_t, work_count: ::std::os::raw::c_int);\n}\nunsafe extern \"C\" {\n #[doc = \" Close and delete aeron_t struct.\\n\\n @param client to close and delete\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_close(client: *mut aeron_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Determines if the client has been closed, e.g. via a driver timeout. Don\'t call this method after calling\\n aeron_close as that will have already freed the associated memory.\\n\\n @param client to check if closed.\\n @return true if it has been closed, false otherwise.\"]\n pub fn aeron_is_closed(client: *mut aeron_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Call stream_out to print the counter labels and values.\\n\\n @param client to get the counters from.\\n @param stream_out to call for each label and value.\"]\n pub fn aeron_print_counters(\n client: *mut aeron_t,\n stream_out: ::std::option::Option<\n unsafe extern \"C\" fn(arg1: *const ::std::os::raw::c_char),\n >,\n );\n}\nunsafe extern \"C\" {\n #[doc = \" Return the aeron_context_t that is in use by the given client.\\n\\n @param client to return the aeron_context_t for.\\n @return the aeron_context_t for the given client or NULL for an error.\"]\n pub fn aeron_context(client: *mut aeron_t) -> *mut aeron_context_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Return the client id in use by the client.\\n\\n @param client to return the client id for.\\n @return id value or -1 for an error.\"]\n pub fn aeron_client_id(client: *mut aeron_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Return a unique correlation id from the driver.\\n\\n @param client to use to get the id.\\n @return unique correlation id or -1 for an error.\"]\n pub fn aeron_next_correlation_id(client: *mut aeron_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously add a publication using the given client and return an object to use to determine when the\\n publication is available.\\n\\n @param async object to use for polling completion.\\n @param client to add the publication to.\\n @param uri for the channel of the publication.\\n @param stream_id for the publication.\\n @return 0 for success or -1 for an error.\"]\n pub fn aeron_async_add_publication(\n async_: *mut *mut aeron_async_add_publication_t,\n client: *mut aeron_t,\n uri: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the aeron_async_add_publication call.\\n\\n @param publication to set if completed successfully.\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_async_add_publication_poll(\n publication: *mut *mut aeron_publication_t,\n async_: *mut aeron_async_add_publication_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously add an exclusive publication using the given client and return an object to use to determine when the\\n publication is available.\\n\\n @param async object to use for polling completion.\\n @param client to add the publication to.\\n @param uri for the channel of the publication.\\n @param stream_id for the publication.\\n @return 0 for success or -1 for an error.\"]\n pub fn aeron_async_add_exclusive_publication(\n async_: *mut *mut aeron_async_add_exclusive_publication_t,\n client: *mut aeron_t,\n uri: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the aeron_async_add_exclusive_publication call.\\n\\n @param publication to set if completed successfully.\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_async_add_exclusive_publication_poll(\n publication: *mut *mut aeron_exclusive_publication_t,\n async_: *mut aeron_async_add_exclusive_publication_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously add a subscription using the given client and return an object to use to determine when the\\n subscription is available.\\n\\n @param async object to use for polling completion.\\n @param client to add the subscription to.\\n @param uri for the channel of the subscription.\\n @param stream_id for the subscription.\\n @param on_available_image_handler to be called when images become available on the subscription.\\n @param on_available_image_clientd to be passed when images become available on the subscription.\\n @param on_unavailable_image_handler to be called when images go unavailable on the subscription.\\n @param on_unavailable_image_clientd to be passed when images go unavailable on the subscription.\\n @return 0 for success or -1 for an error.\"]\n pub fn aeron_async_add_subscription(\n async_: *mut *mut aeron_async_add_subscription_t,\n client: *mut aeron_t,\n uri: *const ::std::os::raw::c_char,\n stream_id: i32,\n on_available_image_handler: aeron_on_available_image_t,\n on_available_image_clientd: *mut ::std::os::raw::c_void,\n on_unavailable_image_handler: aeron_on_unavailable_image_t,\n on_unavailable_image_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the aeron_async_add_subscription call.\\n\\n @param subscription to set if completed successfully.\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_async_add_subscription_poll(\n subscription: *mut *mut aeron_subscription_t,\n async_: *mut aeron_async_add_subscription_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return a reference to the counters reader of the given client.\\n\\n The aeron_counters_reader_t is maintained by the client. And should not be freed.\\n\\n @param client that contains the counters reader.\\n @return aeron_counters_reader_t or NULL for error.\"]\n pub fn aeron_counters_reader(client: *mut aeron_t) -> *mut aeron_counters_reader_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously add a counter using the given client and return an object to use to determine when the\\n counter is available.\\n\\n @param async object to use for polling completion.\\n @param client to add the counter to.\\n @param type_id for the counter.\\n @param key_buffer for the counter.\\n @param key_buffer_length for the counter.\\n @param label_buffer for the counter.\\n @param label_buffer_length for the counter.\\n @return 0 for success or -1 for an error.\"]\n pub fn aeron_async_add_counter(\n async_: *mut *mut aeron_async_add_counter_t,\n client: *mut aeron_t,\n type_id: i32,\n key_buffer: *const u8,\n key_buffer_length: usize,\n label_buffer: *const ::std::os::raw::c_char,\n label_buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the <code>aeron_async_add_counter</code> or <code>aeron_async_add_static_counter</code> calls.\\n\\n @param counter to set if completed successfully.\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_async_add_counter_poll(\n counter: *mut *mut aeron_counter_t,\n async_: *mut aeron_async_add_counter_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously allocates or returns an existing static counter instance using specified <code>type_id</code> and\\n <code>registration_id</code>. Such counter cannot be deleted and its lifecycle is decoupled from the client that created it.\\n Returns an object to use to determine when the counter is available.\\n\\n @param async object to use for polling completion.\\n @param client to add the counter to.\\n @param type_id for the counter.\\n @param key_buffer for the counter.\\n @param key_buffer_length for the counter.\\n @param label_buffer for the counter.\\n @param label_buffer_length for the counter.\\n @param registration_id that uniquely identifies the counter.\\n @return 0 for success or -1 for an error.\"]\n pub fn aeron_async_add_static_counter(\n async_: *mut *mut aeron_async_add_counter_t,\n client: *mut aeron_t,\n type_id: i32,\n key_buffer: *const u8,\n key_buffer_length: usize,\n label_buffer: *const ::std::os::raw::c_char,\n label_buffer_length: usize,\n registration_id: i64,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_on_available_counter_pair_stct {\n pub handler: aeron_on_available_counter_t,\n pub clientd: *mut ::std::os::raw::c_void,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_on_available_counter_pair_stct\"]\n [::std::mem::size_of::<aeron_on_available_counter_pair_stct>() - 16usize];\n [\"Alignment of aeron_on_available_counter_pair_stct\"]\n [::std::mem::align_of::<aeron_on_available_counter_pair_stct>() - 8usize];\n [\"Offset of field: aeron_on_available_counter_pair_stct::handler\"]\n [::std::mem::offset_of!(aeron_on_available_counter_pair_stct, handler) - 0usize];\n [\"Offset of field: aeron_on_available_counter_pair_stct::clientd\"]\n [::std::mem::offset_of!(aeron_on_available_counter_pair_stct, clientd) - 8usize];\n};\nimpl Default for aeron_on_available_counter_pair_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_on_available_counter_pair_t = aeron_on_available_counter_pair_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_on_unavailable_counter_pair_stct {\n pub handler: aeron_on_unavailable_counter_t,\n pub clientd: *mut ::std::os::raw::c_void,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_on_unavailable_counter_pair_stct\"]\n [::std::mem::size_of::<aeron_on_unavailable_counter_pair_stct>() - 16usize];\n [\"Alignment of aeron_on_unavailable_counter_pair_stct\"]\n [::std::mem::align_of::<aeron_on_unavailable_counter_pair_stct>() - 8usize];\n [\"Offset of field: aeron_on_unavailable_counter_pair_stct::handler\"]\n [::std::mem::offset_of!(aeron_on_unavailable_counter_pair_stct, handler) - 0usize];\n [\"Offset of field: aeron_on_unavailable_counter_pair_stct::clientd\"]\n [::std::mem::offset_of!(aeron_on_unavailable_counter_pair_stct, clientd) - 8usize];\n};\nimpl Default for aeron_on_unavailable_counter_pair_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_on_unavailable_counter_pair_t = aeron_on_unavailable_counter_pair_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_on_close_client_pair_stct {\n pub handler: aeron_on_close_client_t,\n pub clientd: *mut ::std::os::raw::c_void,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_on_close_client_pair_stct\"]\n [::std::mem::size_of::<aeron_on_close_client_pair_stct>() - 16usize];\n [\"Alignment of aeron_on_close_client_pair_stct\"]\n [::std::mem::align_of::<aeron_on_close_client_pair_stct>() - 8usize];\n [\"Offset of field: aeron_on_close_client_pair_stct::handler\"]\n [::std::mem::offset_of!(aeron_on_close_client_pair_stct, handler) - 0usize];\n [\"Offset of field: aeron_on_close_client_pair_stct::clientd\"]\n [::std::mem::offset_of!(aeron_on_close_client_pair_stct, clientd) - 8usize];\n};\nimpl Default for aeron_on_close_client_pair_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_on_close_client_pair_t = aeron_on_close_client_pair_stct;\nunsafe extern \"C\" {\n #[doc = \" Add a handler to be called when a new counter becomes available.\\n\\n NOTE: This function blocks until the handler is added by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_add_available_counter_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_available_counter_pair_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a previously added handler to be called when a new counter becomes available.\\n\\n NOTE: This function blocks until the handler is removed by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_remove_available_counter_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_available_counter_pair_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a handler to be called when a new counter becomes unavailable or goes away.\\n\\n NOTE: This function blocks until the handler is added by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_add_unavailable_counter_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_unavailable_counter_pair_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a previously added handler to be called when a new counter becomes unavailable or goes away.\\n\\n NOTE: This function blocks until the handler is removed by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_remove_unavailable_counter_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_unavailable_counter_pair_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a handler to be called when client is closed.\\n\\n NOTE: This function blocks until the handler is added by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_add_close_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_close_client_pair_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a previously added handler to be called when client is closed.\\n\\n NOTE: This function blocks until the handler is removed by the client conductor thread.\\n\\n @param client for the counter\\n @param pair holding the handler to call and a clientd to pass when called.\\n @return 0 for success and -1 for error\"]\n pub fn aeron_remove_close_handler(\n client: *mut aeron_t,\n pair: *mut aeron_on_close_client_pair_t,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C, packed(4))]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_counter_value_descriptor_stct {\n pub counter_value: i64,\n pub registration_id: i64,\n pub owner_id: i64,\n pub reference_id: i64,\n pub pad1: [u8; 96usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_counter_value_descriptor_stct\"]\n [::std::mem::size_of::<aeron_counter_value_descriptor_stct>() - 128usize];\n [\"Alignment of aeron_counter_value_descriptor_stct\"]\n [::std::mem::align_of::<aeron_counter_value_descriptor_stct>() - 4usize];\n [\"Offset of field: aeron_counter_value_descriptor_stct::counter_value\"]\n [::std::mem::offset_of!(aeron_counter_value_descriptor_stct, counter_value) - 0usize];\n [\"Offset of field: aeron_counter_value_descriptor_stct::registration_id\"]\n [::std::mem::offset_of!(aeron_counter_value_descriptor_stct, registration_id) - 8usize];\n [\"Offset of field: aeron_counter_value_descriptor_stct::owner_id\"]\n [::std::mem::offset_of!(aeron_counter_value_descriptor_stct, owner_id) - 16usize];\n [\"Offset of field: aeron_counter_value_descriptor_stct::reference_id\"]\n [::std::mem::offset_of!(aeron_counter_value_descriptor_stct, reference_id) - 24usize];\n [\"Offset of field: aeron_counter_value_descriptor_stct::pad1\"]\n [::std::mem::offset_of!(aeron_counter_value_descriptor_stct, pad1) - 32usize];\n};\nimpl Default for aeron_counter_value_descriptor_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_counter_value_descriptor_t = aeron_counter_value_descriptor_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_counter_metadata_descriptor_stct {\n pub state: i32,\n pub type_id: i32,\n pub free_for_reuse_deadline_ms: i64,\n pub key: [u8; 112usize],\n pub label_length: i32,\n pub label: [u8; 380usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_counter_metadata_descriptor_stct\"]\n [::std::mem::size_of::<aeron_counter_metadata_descriptor_stct>() - 512usize];\n [\"Alignment of aeron_counter_metadata_descriptor_stct\"]\n [::std::mem::align_of::<aeron_counter_metadata_descriptor_stct>() - 4usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::state\"]\n [::std::mem::offset_of!(aeron_counter_metadata_descriptor_stct, state) - 0usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::type_id\"]\n [::std::mem::offset_of!(aeron_counter_metadata_descriptor_stct, type_id) - 4usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::free_for_reuse_deadline_ms\"][::std::mem::offset_of!(\n aeron_counter_metadata_descriptor_stct,\n free_for_reuse_deadline_ms\n )\n - 8usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::key\"]\n [::std::mem::offset_of!(aeron_counter_metadata_descriptor_stct, key) - 16usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::label_length\"]\n [::std::mem::offset_of!(aeron_counter_metadata_descriptor_stct, label_length) - 128usize];\n [\"Offset of field: aeron_counter_metadata_descriptor_stct::label\"]\n [::std::mem::offset_of!(aeron_counter_metadata_descriptor_stct, label) - 132usize];\n};\nimpl Default for aeron_counter_metadata_descriptor_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_counter_metadata_descriptor_t = aeron_counter_metadata_descriptor_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_counters_reader_buffers_stct {\n pub values: *mut u8,\n pub metadata: *mut u8,\n pub values_length: usize,\n pub metadata_length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_counters_reader_buffers_stct\"]\n [::std::mem::size_of::<aeron_counters_reader_buffers_stct>() - 32usize];\n [\"Alignment of aeron_counters_reader_buffers_stct\"]\n [::std::mem::align_of::<aeron_counters_reader_buffers_stct>() - 8usize];\n [\"Offset of field: aeron_counters_reader_buffers_stct::values\"]\n [::std::mem::offset_of!(aeron_counters_reader_buffers_stct, values) - 0usize];\n [\"Offset of field: aeron_counters_reader_buffers_stct::metadata\"]\n [::std::mem::offset_of!(aeron_counters_reader_buffers_stct, metadata) - 8usize];\n [\"Offset of field: aeron_counters_reader_buffers_stct::values_length\"]\n [::std::mem::offset_of!(aeron_counters_reader_buffers_stct, values_length) - 16usize];\n [\"Offset of field: aeron_counters_reader_buffers_stct::metadata_length\"]\n [::std::mem::offset_of!(aeron_counters_reader_buffers_stct, metadata_length) - 24usize];\n};\nimpl Default for aeron_counters_reader_buffers_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_counters_reader_buffers_t = aeron_counters_reader_buffers_stct;\nunsafe extern \"C\" {\n #[doc = \" Get buffer pointers and lengths for the counters reader.\\n\\n @param reader reader containing the buffers.\\n @param buffers output structure to return the buffers.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_get_buffers(\n reader: *mut aeron_counters_reader_t,\n buffers: *mut aeron_counters_reader_buffers_t,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Function called by aeron_counters_reader_foreach_counter for each counter in the aeron_counters_reader_t.\\n\\n @param value of the counter.\\n @param id of the counter.\\n @param label for the counter.\\n @param label_length for the counter.\\n @param clientd to be returned in the call\"]\npub type aeron_counters_reader_foreach_counter_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n value: i64,\n id: i32,\n type_id: i32,\n key: *const u8,\n key_length: usize,\n label: *const ::std::os::raw::c_char,\n label_length: usize,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\nunsafe extern \"C\" {\n #[doc = \" Iterate over the counters in the counters_reader and call the given function for each counter.\\n\\n @param counters_reader to iterate over.\\n @param func to call for each counter.\\n @param clientd to pass for each call to func.\"]\n pub fn aeron_counters_reader_foreach_counter(\n counters_reader: *mut aeron_counters_reader_t,\n func: aeron_counters_reader_foreach_counter_func_t,\n clientd: *mut ::std::os::raw::c_void,\n );\n}\nunsafe extern \"C\" {\n #[doc = \" Iterate over allocated counters and find the first matching a given type id and registration id.\\n\\n @param counters_reader\\n @param type_id to find.\\n @param registration_id to find.\\n @return the counter id if found otherwise AERON_NULL_COUNTER_ID.\"]\n pub fn aeron_counters_reader_find_by_type_id_and_registration_id(\n counters_reader: *mut aeron_counters_reader_t,\n type_id: i32,\n registration_id: i64,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the current max counter id.\\n\\n @param reader to query\\n @return -1 on failure, max counter id on success.\"]\n pub fn aeron_counters_reader_max_counter_id(reader: *mut aeron_counters_reader_t) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the address for a counter.\\n\\n @param counters_reader that contains the counter\\n @param counter_id to find\\n @return address of the counter value\"]\n pub fn aeron_counters_reader_addr(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n ) -> *mut i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the registration id assigned to a counter.\\n\\n @param counters_reader representing the this pointer.\\n @param counter_id for which the registration id is requested.\\n @param registration_id pointer for value to be set on success.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_counter_registration_id(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n registration_id: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the owner id assigned to a counter which will typically be the client id.\\n\\n @param counters_reader representing the this pointer.\\n @param counter_id for which the owner id is requested.\\n @param owner_id pointer for value to be set on success.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_counter_owner_id(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n owner_id: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the reference id assigned to a counter which will typically be the registration id of an associated Image,\\n Subscription, Publication, etc.\\n\\n @param counters_reader representing the this pointer.\\n @param counter_id for which the reference id is requested.\\n @param reference_id pointer for value to be set on success.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_counter_reference_id(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n reference_id: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the state for a counter.\\n\\n @param counters_reader that contains the counter\\n @param counter_id to find\\n @param state out pointer for the current state to be stored in.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_counter_state(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n state: *mut i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the type id for a counter.\\n\\n @param counters_reader that contains the counter\\n @param counter_id to find\\n @param type id out pointer for the current state to be stored in.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_counter_type_id(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n type_id: *mut i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get a pointer to the key of a counter\'s metadata\\n\\n @param counters_reader that contains the counter\\n @param counter_id to find\\n @param key_p out pointer set to location of metadata key\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_metadata_key(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n key_p: *mut *mut u8,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the label for a counter.\\n\\n @param counters_reader that contains the counter\\n @param counter_id to find\\n @param buffer to store the counter in.\\n @param buffer_length length of the output buffer\\n @return -1 on failure, number of characters copied to buffer on success.\"]\n pub fn aeron_counters_reader_counter_label(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n buffer: *mut ::std::os::raw::c_char,\n buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the free for reuse deadline (ms) for a counter.\\n\\n @param counters_reader that contains the counter.\\n @param counter_id to find.\\n @param deadline_ms output value to store the deadline.\\n @return -1 on failure, 0 on success.\"]\n pub fn aeron_counters_reader_free_for_reuse_deadline_ms(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n deadline_ms: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Function called when filling in the reserved value field of a message.\\n\\n @param clientd passed to the offer function.\\n @param buffer of the entire frame, including Aeron data header.\\n @param frame_length of the entire frame.\"]\npub type aeron_reserved_value_supplier_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *mut u8,\n frame_length: usize,\n ) -> i64,\n>;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_iovec_stct {\n pub iov_base: *mut u8,\n pub iov_len: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_iovec_stct\"][::std::mem::size_of::<aeron_iovec_stct>() - 16usize];\n [\"Alignment of aeron_iovec_stct\"][::std::mem::align_of::<aeron_iovec_stct>() - 8usize];\n [\"Offset of field: aeron_iovec_stct::iov_base\"]\n [::std::mem::offset_of!(aeron_iovec_stct, iov_base) - 0usize];\n [\"Offset of field: aeron_iovec_stct::iov_len\"]\n [::std::mem::offset_of!(aeron_iovec_stct, iov_len) - 8usize];\n};\nimpl Default for aeron_iovec_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_iovec_t = aeron_iovec_stct;\n#[doc = \" Structure used to hold information for a try_claim function call.\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_buffer_claim_stct {\n pub frame_header: *mut u8,\n pub data: *mut u8,\n pub length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_buffer_claim_stct\"][::std::mem::size_of::<aeron_buffer_claim_stct>() - 24usize];\n [\"Alignment of aeron_buffer_claim_stct\"]\n [::std::mem::align_of::<aeron_buffer_claim_stct>() - 8usize];\n [\"Offset of field: aeron_buffer_claim_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_buffer_claim_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_buffer_claim_stct::data\"]\n [::std::mem::offset_of!(aeron_buffer_claim_stct, data) - 8usize];\n [\"Offset of field: aeron_buffer_claim_stct::length\"]\n [::std::mem::offset_of!(aeron_buffer_claim_stct, length) - 16usize];\n};\nimpl Default for aeron_buffer_claim_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\nunsafe extern \"C\" {\n #[doc = \" Commit the given buffer_claim as a complete message available for consumption.\\n\\n @param buffer_claim to commit.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_buffer_claim_commit(\n buffer_claim: *mut aeron_buffer_claim_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Abort the given buffer_claim and assign its position as padding.\\n\\n @param buffer_claim to abort.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_buffer_claim_abort(\n buffer_claim: *mut aeron_buffer_claim_t,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Configuration for a publication that does not change during it\'s lifetime.\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_publication_constants_stct {\n #[doc = \" Media address for delivery to the channel.\\n\\n This returns a pointer only valid for the lifetime of the publication.\"]\n pub channel: *const ::std::os::raw::c_char,\n #[doc = \" The registration used to register this Publication with the media driver by the first publisher.\"]\n pub original_registration_id: i64,\n #[doc = \" Get the registration id used to register this Publication with the media driver.\\n\\n If this value is different from the original_registration_id then a previous active registration exists.\"]\n pub registration_id: i64,\n #[doc = \" The maximum possible position this stream can reach due to its term buffer length.\\n\\n Maximum possible position is term-length times 2^31 in bytes.\"]\n pub max_possible_position: i64,\n #[doc = \" Number of bits to right shift a position to get a term count for how far the stream has progressed.\"]\n pub position_bits_to_shift: usize,\n #[doc = \" Get the length in bytes for each term partition in the log buffer.\"]\n pub term_buffer_length: usize,\n #[doc = \" Maximum message length supported in bytes. Messages may be made of multiple fragments if greater than\\n MTU length.\"]\n pub max_message_length: usize,\n #[doc = \" Maximum length of a message payload that fits within a message fragment.\\n\\n This is the MTU length minus the message fragment header length.\"]\n pub max_payload_length: usize,\n #[doc = \" Stream id of the publication.\"]\n pub stream_id: i32,\n #[doc = \" Session id of the publication.\"]\n pub session_id: i32,\n #[doc = \" The initial term id assigned when this publication was created. This can be used to determine how many\\n terms have passed since creation.\"]\n pub initial_term_id: i32,\n #[doc = \" Counter id for the publication limit.\"]\n pub publication_limit_counter_id: i32,\n #[doc = \" Counter id for the channel status indicator\"]\n pub channel_status_indicator_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_publication_constants_stct\"]\n [::std::mem::size_of::<aeron_publication_constants_stct>() - 88usize];\n [\"Alignment of aeron_publication_constants_stct\"]\n [::std::mem::align_of::<aeron_publication_constants_stct>() - 8usize];\n [\"Offset of field: aeron_publication_constants_stct::channel\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, channel) - 0usize];\n [\"Offset of field: aeron_publication_constants_stct::original_registration_id\"][::std::mem::offset_of!(\n aeron_publication_constants_stct,\n original_registration_id\n ) - 8usize];\n [\"Offset of field: aeron_publication_constants_stct::registration_id\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, registration_id) - 16usize];\n [\"Offset of field: aeron_publication_constants_stct::max_possible_position\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, max_possible_position) - 24usize];\n [\"Offset of field: aeron_publication_constants_stct::position_bits_to_shift\"][::std::mem::offset_of!(\n aeron_publication_constants_stct,\n position_bits_to_shift\n ) - 32usize];\n [\"Offset of field: aeron_publication_constants_stct::term_buffer_length\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, term_buffer_length) - 40usize];\n [\"Offset of field: aeron_publication_constants_stct::max_message_length\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, max_message_length) - 48usize];\n [\"Offset of field: aeron_publication_constants_stct::max_payload_length\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, max_payload_length) - 56usize];\n [\"Offset of field: aeron_publication_constants_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, stream_id) - 64usize];\n [\"Offset of field: aeron_publication_constants_stct::session_id\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, session_id) - 68usize];\n [\"Offset of field: aeron_publication_constants_stct::initial_term_id\"]\n [::std::mem::offset_of!(aeron_publication_constants_stct, initial_term_id) - 72usize];\n [\"Offset of field: aeron_publication_constants_stct::publication_limit_counter_id\"][::std::mem::offset_of!(\n aeron_publication_constants_stct,\n publication_limit_counter_id\n )\n - 76usize];\n [\"Offset of field: aeron_publication_constants_stct::channel_status_indicator_id\"][::std::mem::offset_of!(\n aeron_publication_constants_stct,\n channel_status_indicator_id\n ) - 80usize];\n};\nimpl Default for aeron_publication_constants_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[doc = \" Configuration for a publication that does not change during it\'s lifetime.\"]\npub type aeron_publication_constants_t = aeron_publication_constants_stct;\nunsafe extern \"C\" {\n #[doc = \" Non-blocking publish of a buffer containing a message.\\n\\n @param publication to publish on.\\n @param buffer to publish.\\n @param length of the buffer.\\n @param reserved_value_supplier to use for setting the reserved value field or NULL.\\n @param clientd to pass to the reserved_value_supplier.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_publication_offer(\n publication: *mut aeron_publication_t,\n buffer: *const u8,\n length: usize,\n reserved_value_supplier: aeron_reserved_value_supplier_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Non-blocking publish by gathering buffer vectors into a message.\\n\\n @param publication to publish on.\\n @param iov array for the vectors\\n @param iovcnt of the number of vectors\\n @param reserved_value_supplier to use for setting the reserved value field or NULL.\\n @param clientd to pass to the reserved_value_supplier.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_publication_offerv(\n publication: *mut aeron_publication_t,\n iov: *mut aeron_iovec_t,\n iovcnt: usize,\n reserved_value_supplier: aeron_reserved_value_supplier_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Try to claim a range in the publication log into which a message can be written with zero copy semantics.\\n Once the message has been written then aeron_buffer_claim_commit should be called thus making it available.\\n A claim length cannot be greater than max payload length.\\n <p>\\n <b>Note:</b> This method can only be used for message lengths less than MTU length minus header.\\n If the claim is held for more than the aeron.publication.unblock.timeout system property then the driver will\\n assume the publication thread is dead and will unblock the claim thus allowing other threads to make progress\\n and other claims to be sent to reach end-of-stream (EOS).\\n\\n @code\\n aeron_buffer_claim_t buffer_claim;\\n\\n if (aeron_publication_try_claim(publication, length, &buffer_claim) > 0L)\\n {\\n // work with buffer_claim->data directly.\\n aeron_buffer_claim_commit(&buffer_claim);\\n }\\n @endcode\\n\\n @param publication to publish to.\\n @param length of the message.\\n @param buffer_claim to be populated if the claim succeeds.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_publication_try_claim(\n publication: *mut aeron_publication_t,\n length: usize,\n buffer_claim: *mut aeron_buffer_claim_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the status of the media channel for this publication.\\n <p>\\n The status will be ERRORED (-1) if a socket exception occurs on setup and ACTIVE (1) if all is well.\\n\\n @param publication to check status of.\\n @return 1 for ACTIVE, -1 for ERRORED\"]\n pub fn aeron_publication_channel_status(publication: *mut aeron_publication_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Has the publication closed?\\n\\n @param publication to check\\n @return true if this publication is closed.\"]\n pub fn aeron_publication_is_closed(publication: *mut aeron_publication_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Has the publication seen an active Subscriber recently?\\n\\n @param publication to check.\\n @return true if this publication has recently seen an active subscriber otherwise false.\"]\n pub fn aeron_publication_is_connected(publication: *mut aeron_publication_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Fill in a structure with the constants in use by a publication.\\n\\n @param publication to get the constants for.\\n @param constants structure to fill in with the constants\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_publication_constants(\n publication: *mut aeron_publication_t,\n constants: *mut aeron_publication_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the current position to which the publication has advanced for this stream.\\n\\n @param publication to query.\\n @return the current position to which the publication has advanced for this stream or a negative error value.\"]\n pub fn aeron_publication_position(publication: *mut aeron_publication_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the position limit beyond which this publication will be back pressured.\\n\\n This should only be used as a guide to determine when back pressure is likely to be applied.\\n\\n @param publication to query.\\n @return the position limit beyond which this publication will be back pressured or a negative error value.\"]\n pub fn aeron_publication_position_limit(publication: *mut aeron_publication_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a destination manually to a multi-destination-cast publication.\\n\\n @param async object to use for polling completion.\\n @param publication to add destination to.\\n @param uri for the destination to add.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_publication_async_add_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_publication_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a destination manually from a multi-destination-cast publication.\\n\\n @param async object to use for polling completion.\\n @param publication to remove destination from.\\n @param uri for the destination to remove.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_publication_async_remove_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_publication_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a destination manually from a multi-destination-cast publication.\\n\\n @param async object to use for polling completion.\\n @param publication to remove destination from.\\n @param destination_registration_id for the destination to remove.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_publication_async_remove_destination_by_id(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_publication_t,\n destination_registration_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the add/remove of a destination to/from a publication.\\n\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_publication_async_destination_poll(\n async_: *mut aeron_async_destination_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a destination manually to a multi-destination-cast exclusive publication.\\n\\n @param async object to use for polling completion.\\n @param publication to add destination to.\\n @param uri for the destination to add.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_exclusive_publication_async_add_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_exclusive_publication_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a destination manually from a multi-destination-cast exclusive publication.\\n\\n @param async object to use for polling completion.\\n @param publication to remove destination from.\\n @param uri for the destination to remove.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_exclusive_publication_async_remove_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_exclusive_publication_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a destination manually from a multi-destination-cast publication.\\n\\n @param async object to use for polling completion.\\n @param publication to remove destination from.\\n @param destination_registration_id for the destination to remove.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_exclusive_publication_async_remove_destination_by_id(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n publication: *mut aeron_exclusive_publication_t,\n destination_registration_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of the add/remove of a destination to/from an exclusive publication.\\n\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_exclusive_publication_async_destination_poll(\n async_: *mut aeron_async_destination_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously close the publication. Will callback on the on_complete notification when the subscription is closed.\\n The callback is optional, use NULL for the on_complete callback if not required.\\n\\n @param publication to close\\n @param on_close_complete optional callback to execute once the subscription has been closed and freed. This may\\n happen on a separate thread, so the caller should ensure that clientd has the appropriate lifetime.\\n @param on_close_complete_clientd parameter to pass to the on_complete callback.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_publication_close(\n publication: *mut aeron_publication_t,\n on_close_complete: aeron_notification_t,\n on_close_complete_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the publication\'s channel\\n\\n @param publication this\\n @return channel uri string\"]\n pub fn aeron_publication_channel(\n publication: *mut aeron_publication_t,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the publication\'s stream id\\n\\n @param publication this\\n @return stream id\"]\n pub fn aeron_publication_stream_id(publication: *mut aeron_publication_t) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the publication\'s session id\\n @param publication this\\n @return session id\"]\n pub fn aeron_publication_session_id(publication: *mut aeron_publication_t) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get all of the local socket addresses for this publication. Typically only one representing the control address.\\n\\n @param subscription to query\\n @param address_vec to hold the received addresses\\n @param address_vec_len available length of the vector to hold the addresses\\n @return number of addresses found or -1 if there is an error.\\n @see aeron_subscription_local_sockaddrs\"]\n pub fn aeron_publication_local_sockaddrs(\n publication: *mut aeron_publication_t,\n address_vec: *mut aeron_iovec_t,\n address_vec_len: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Non-blocking publish of a buffer containing a message.\\n\\n @param publication to publish on.\\n @param buffer to publish.\\n @param length of the buffer.\\n @param reserved_value_supplier to use for setting the reserved value field or NULL.\\n @param clientd to pass to the reserved_value_supplier.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_exclusive_publication_offer(\n publication: *mut aeron_exclusive_publication_t,\n buffer: *const u8,\n length: usize,\n reserved_value_supplier: aeron_reserved_value_supplier_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Non-blocking publish by gathering buffer vectors into a message.\\n\\n @param publication to publish on.\\n @param iov array for the vectors\\n @param iovcnt of the number of vectors\\n @param reserved_value_supplier to use for setting the reserved value field or NULL.\\n @param clientd to pass to the reserved_value_supplier.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_exclusive_publication_offerv(\n publication: *mut aeron_exclusive_publication_t,\n iov: *mut aeron_iovec_t,\n iovcnt: usize,\n reserved_value_supplier: aeron_reserved_value_supplier_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Try to claim a range in the publication log into which a message can be written with zero copy semantics.\\n Once the message has been written then aeron_buffer_claim_commit should be called thus making it available.\\n A claim length cannot be greater than max payload length.\\n <p>\\n <b>Note:</b> This method can only be used for message lengths less than MTU length minus header.\\n\\n @code\\n aeron_buffer_claim_t buffer_claim;\\n\\n if (aeron_exclusive_publication_try_claim(publication, length, &buffer_claim) > 0L)\\n {\\n // work with buffer_claim->data directly.\\n aeron_buffer_claim_commit(&buffer_claim);\\n }\\n @endcode\\n\\n @param publication to publish to.\\n @param length of the message.\\n @param buffer_claim to be populated if the claim succeeds.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_exclusive_publication_try_claim(\n publication: *mut aeron_exclusive_publication_t,\n length: usize,\n buffer_claim: *mut aeron_buffer_claim_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Append a padding record log of a given length to make up the log to a position.\\n\\n @param length of the range to claim, in bytes.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_exclusive_publication_append_padding(\n publication: *mut aeron_exclusive_publication_t,\n length: usize,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Offer a block of pre-formatted message fragments directly into the current term.\\n\\n @param buffer containing the pre-formatted block of message fragments.\\n @param offset offset in the buffer at which the first fragment begins.\\n @param length in bytes of the encoded block.\\n @return the new stream position otherwise a negative error value.\"]\n pub fn aeron_exclusive_publication_offer_block(\n publication: *mut aeron_exclusive_publication_t,\n buffer: *const u8,\n length: usize,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the status of the media channel for this publication.\\n <p>\\n The status will be ERRORED (-1) if a socket exception occurs on setup and ACTIVE (1) if all is well.\\n\\n @param publication to check status of.\\n @return 1 for ACTIVE, -1 for ERRORED\"]\n pub fn aeron_exclusive_publication_channel_status(\n publication: *mut aeron_exclusive_publication_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Fill in a structure with the constants in use by a publication.\\n\\n @param publication to get the constants for.\\n @param constants structure to fill in with the constants\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_exclusive_publication_constants(\n publication: *mut aeron_exclusive_publication_t,\n constants: *mut aeron_publication_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the current position to which the publication has advanced for this stream.\\n\\n @param publication to query.\\n @return the current position to which the publication has advanced for this stream or a negative error value.\"]\n pub fn aeron_exclusive_publication_position(\n publication: *mut aeron_exclusive_publication_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the position limit beyond which this publication will be back pressured.\\n\\n This should only be used as a guide to determine when back pressure is likely to be applied.\\n\\n @param publication to query.\\n @return the position limit beyond which this publication will be back pressured or a negative error value.\"]\n pub fn aeron_exclusive_publication_position_limit(\n publication: *mut aeron_exclusive_publication_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously close the publication.\\n\\n @param publication to close\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_exclusive_publication_close(\n publication: *mut aeron_exclusive_publication_t,\n on_close_complete: aeron_notification_t,\n on_close_complete_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Has the exclusive publication closed?\\n\\n @param publication to check\\n @return true if this publication is closed.\"]\n pub fn aeron_exclusive_publication_is_closed(\n publication: *mut aeron_exclusive_publication_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Has the exclusive publication seen an active Subscriber recently?\\n\\n @param publication to check.\\n @return true if this publication has recently seen an active subscriber otherwise false.\"]\n pub fn aeron_exclusive_publication_is_connected(\n publication: *mut aeron_exclusive_publication_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Get all of the local socket addresses for this exclusive publication. Typically only one representing the control\\n address.\\n\\n @see aeron_subscription_local_sockaddrs\\n @param subscription to query\\n @param address_vec to hold the received addresses\\n @param address_vec_len available length of the vector to hold the addresses\\n @return number of addresses found or -1 if there is an error.\"]\n pub fn aeron_exclusive_publication_local_sockaddrs(\n publication: *mut aeron_exclusive_publication_t,\n address_vec: *mut aeron_iovec_t,\n address_vec_len: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Callback for handling fragments of data being read from a log.\\n\\n The frame will either contain a whole message or a fragment of a message to be reassembled. Messages are fragmented\\n if greater than the frame for MTU in length.\\n\\n @param clientd passed to the poll function.\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\"]\npub type aeron_fragment_handler_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n ),\n>;\n#[repr(u32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_controlled_fragment_handler_action_en {\n #[doc = \" Abort the current polling operation and do not advance the position for this fragment.\"]\n AERON_ACTION_ABORT = 1,\n #[doc = \" Break from the current polling operation and commit the position as of the end of the current fragment\\n being handled.\"]\n AERON_ACTION_BREAK = 2,\n #[doc = \" Continue processing but commit the position as of the end of the current fragment so that\\n flow control is applied to this point.\"]\n AERON_ACTION_COMMIT = 3,\n #[doc = \" Continue processing until fragment limit or no fragments with position commit at end of poll as in\\n aeron_fragment_handler_t.\"]\n AERON_ACTION_CONTINUE = 4,\n}\npub use self::aeron_controlled_fragment_handler_action_en as aeron_controlled_fragment_handler_action_t;\n#[doc = \" Callback for handling fragments of data being read from a log.\\n\\n Handler for reading data that is coming from a log buffer. The frame will either contain a whole message\\n or a fragment of a message to be reassembled. Messages are fragmented if greater than the frame for MTU in length.\\n\\n @param clientd passed to the controlled poll function.\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\\n @return The action to be taken with regard to the stream position after the callback.\"]\npub type aeron_controlled_fragment_handler_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n ) -> aeron_controlled_fragment_handler_action_t,\n>;\n#[doc = \" Callback for handling a block of messages being read from a log.\\n\\n @param clientd passed to the block poll function.\\n @param buffer containing the block of message fragments.\\n @param offset at which the block begins, including any frame headers.\\n @param length of the block in bytes, including any frame headers that is aligned.\\n @param session_id of the stream containing this block of message fragments.\\n @param term_id of the stream containing this block of message fragments.\"]\npub type aeron_block_handler_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n session_id: i32,\n term_id: i32,\n ),\n>;\nunsafe extern \"C\" {\n #[doc = \" Get all of the field values from the header. This will do a memcpy into the supplied header_values_t pointer.\\n\\n @param header to read values from.\\n @param values to copy values to, must not be null.\\n @return 0 on success, -1 on failure.\"]\n pub fn aeron_header_values(\n header: *mut aeron_header_t,\n values: *mut aeron_header_values_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the current position to which the Image has advanced on reading this message.\\n\\n @param header the current header message\\n @return the current position to which the Image has advanced on reading this message.\"]\n pub fn aeron_header_position(header: *mut aeron_header_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the number of times to left shift the term count to multiply by term length.\\n\\n @return number of times to left shift the term count to multiply by term length.\"]\n pub fn aeron_header_position_bits_to_shift(header: *mut aeron_header_t) -> usize;\n}\nunsafe extern \"C\" {\n #[doc = \" Calculates the offset of the frame immediately after this one.\\n\\n @return the offset of the next frame.\"]\n pub fn aeron_header_next_term_offset(header: *mut aeron_header_t) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get a pointer to the context associated with this message. Only valid during poll handling. Is normally a\\n pointer to an Image instance.\\n\\n @return a pointer to the context associated with this message.\"]\n pub fn aeron_header_context(header: *mut aeron_header_t) -> *mut ::std::os::raw::c_void;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_subscription_constants_stct {\n #[doc = \" Media address for delivery to the channel.\\n\\n This returns a pointer only valid for the lifetime of the subscription.\"]\n pub channel: *const ::std::os::raw::c_char,\n #[doc = \" Callback used to indicate when an Image becomes available under this Subscription.\"]\n pub on_available_image: aeron_on_available_image_t,\n #[doc = \" Callback used to indicate when an Image goes unavailable under this Subscription.\"]\n pub on_unavailable_image: aeron_on_unavailable_image_t,\n #[doc = \" Return the registration id used to register this Subscription with the media driver.\"]\n pub registration_id: i64,\n #[doc = \" Stream identity for scoping within the channel media address.\"]\n pub stream_id: i32,\n #[doc = \" Counter id for the channel status indicator\"]\n pub channel_status_indicator_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_subscription_constants_stct\"]\n [::std::mem::size_of::<aeron_subscription_constants_stct>() - 40usize];\n [\"Alignment of aeron_subscription_constants_stct\"]\n [::std::mem::align_of::<aeron_subscription_constants_stct>() - 8usize];\n [\"Offset of field: aeron_subscription_constants_stct::channel\"]\n [::std::mem::offset_of!(aeron_subscription_constants_stct, channel) - 0usize];\n [\"Offset of field: aeron_subscription_constants_stct::on_available_image\"]\n [::std::mem::offset_of!(aeron_subscription_constants_stct, on_available_image) - 8usize];\n [\"Offset of field: aeron_subscription_constants_stct::on_unavailable_image\"]\n [::std::mem::offset_of!(aeron_subscription_constants_stct, on_unavailable_image) - 16usize];\n [\"Offset of field: aeron_subscription_constants_stct::registration_id\"]\n [::std::mem::offset_of!(aeron_subscription_constants_stct, registration_id) - 24usize];\n [\"Offset of field: aeron_subscription_constants_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_subscription_constants_stct, stream_id) - 32usize];\n [\"Offset of field: aeron_subscription_constants_stct::channel_status_indicator_id\"][::std::mem::offset_of!(\n aeron_subscription_constants_stct,\n channel_status_indicator_id\n )\n - 36usize];\n};\nimpl Default for aeron_subscription_constants_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_subscription_constants_t = aeron_subscription_constants_stct;\nunsafe extern \"C\" {\n #[doc = \" Poll the images under the subscription for available message fragments.\\n <p>\\n Each fragment read will be a whole message if it is under MTU length. If larger than MTU then it will come\\n as a series of fragments ordered within a session.\\n <p>\\n To assemble messages that span multiple fragments then use aeron_fragment_assembler_t.\\n\\n @param subscription to poll.\\n @param handler for handling each message fragment as it is read.\\n @param fragment_limit number of message fragments to limit when polling across multiple images.\\n @return the number of fragments received or -1 for error.\"]\n pub fn aeron_subscription_poll(\n subscription: *mut aeron_subscription_t,\n handler: aeron_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll in a controlled manner the images under the subscription for available message fragments.\\n Control is applied to fragments in the stream. If more fragments can be read on another stream\\n they will even if BREAK or ABORT is returned from the fragment handler.\\n <p>\\n Each fragment read will be a whole message if it is under MTU length. If larger than MTU then it will come\\n as a series of fragments ordered within a session.\\n <p>\\n To assemble messages that span multiple fragments then use aeron_controlled_fragment_assembler_t.\\n\\n @param subscription to poll.\\n @param handler for handling each message fragment as it is read.\\n @param fragment_limit number of message fragments to limit when polling across multiple images.\\n @return the number of fragments received or -1 for error.\"]\n pub fn aeron_subscription_controlled_poll(\n subscription: *mut aeron_subscription_t,\n handler: aeron_controlled_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the images under the subscription for available message fragments in blocks.\\n <p>\\n This method is useful for operations like bulk archiving and messaging indexing.\\n\\n @param subscription to poll.\\n @param handler to receive a block of fragments from each image.\\n @param block_length_limit for each image polled.\\n @return the number of bytes consumed or -1 for error.\"]\n pub fn aeron_subscription_block_poll(\n subscription: *mut aeron_subscription_t,\n handler: aeron_block_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n block_length_limit: usize,\n ) -> ::std::os::raw::c_long;\n}\nunsafe extern \"C\" {\n #[doc = \" Is this subscription connected by having at least one open publication image.\\n\\n @param subscription to check.\\n @return true if this subscription connected by having at least one open publication image.\"]\n pub fn aeron_subscription_is_connected(subscription: *mut aeron_subscription_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Fill in a structure with the constants in use by a subscription.\\n\\n @param subscription to get the constants for.\\n @param constants structure to fill in with the constants\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_subscription_constants(\n subscription: *mut aeron_subscription_t,\n constants: *mut aeron_subscription_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Count of images associated to this subscription.\\n\\n @param subscription to count images for.\\n @return count of count associated to this subscription or -1 for error.\"]\n pub fn aeron_subscription_image_count(\n subscription: *mut aeron_subscription_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return the image associated with the given session_id under the given subscription.\\n\\n Note: the returned image is considered retained by the application and thus must be released via\\n aeron_image_release when finished or if the image becomes unavailable.\\n\\n @param subscription to search.\\n @param session_id associated with the image.\\n @return image associated with the given session_id or NULL if no image exists.\"]\n pub fn aeron_subscription_image_by_session_id(\n subscription: *mut aeron_subscription_t,\n session_id: i32,\n ) -> *mut aeron_image_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Return the image at the given index.\\n\\n Note: the returned image is considered retained by the application and thus must be released via\\n aeron_image_release when finished or if the image becomes unavailable.\\n\\n @param subscription to search.\\n @param index for the image.\\n @return image at the given index or NULL if no image exists.\"]\n pub fn aeron_subscription_image_at_index(\n subscription: *mut aeron_subscription_t,\n index: usize,\n ) -> *mut aeron_image_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Iterate over the images for this subscription calling the given function.\\n\\n @param subscription to iterate over.\\n @param handler to be called for each image.\\n @param clientd to be passed to the handler.\"]\n pub fn aeron_subscription_for_each_image(\n subscription: *mut aeron_subscription_t,\n handler: ::std::option::Option<\n unsafe extern \"C\" fn(image: *mut aeron_image_t, clientd: *mut ::std::os::raw::c_void),\n >,\n clientd: *mut ::std::os::raw::c_void,\n );\n}\nunsafe extern \"C\" {\n #[doc = \" Retain the given image for access in the application.\\n\\n Note: A retain call must have a corresponding release call.\\n Note: Subscriptions are not threadsafe and should not be shared between subscribers.\\n\\n @param subscription that image is part of.\\n @param image to retain\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_subscription_image_retain(\n subscription: *mut aeron_subscription_t,\n image: *mut aeron_image_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Release the given image and relinquish desire to use the image directly.\\n\\n Note: Subscriptions are not threadsafe and should not be shared between subscribers.\\n\\n @param subscription that image is part of.\\n @param image to release\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_subscription_image_release(\n subscription: *mut aeron_subscription_t,\n image: *mut aeron_image_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Is the subscription closed.\\n\\n @param subscription to be checked.\\n @return true if it has been closed otherwise false.\"]\n pub fn aeron_subscription_is_closed(subscription: *mut aeron_subscription_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the status of the media channel for this subscription.\\n <p>\\n The status will be ERRORED (-1) if a socket exception occurs on setup and ACTIVE (1) if all is well.\\n\\n @param subscription to check status of.\\n @return 1 for ACTIVE, -1 for ERRORED\"]\n pub fn aeron_subscription_channel_status(subscription: *mut aeron_subscription_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a destination manually to a multi-destination-subscription.\\n\\n @param async object to use for polling completion.\\n @param subscription to add destination to.\\n @param uri for the destination to add.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_subscription_async_add_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n subscription: *mut aeron_subscription_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Remove a destination manually from a multi-destination-subscription.\\n\\n @param async object to use for polling completion.\\n @param subscription to remove destination from.\\n @param uri for the destination to remove.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_subscription_async_remove_destination(\n async_: *mut *mut aeron_async_destination_t,\n client: *mut aeron_t,\n subscription: *mut aeron_subscription_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the completion of add/remove of a destination to/from a subscription.\\n\\n @param async to check for completion.\\n @return 0 for not complete (try again), 1 for completed successfully, or -1 for an error.\"]\n pub fn aeron_subscription_async_destination_poll(\n async_: *mut aeron_async_destination_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously close the subscription. Will callback on the on_complete notification when the subscription is\\n closed. The callback is optional, use NULL for the on_complete callback if not required.\\n\\n @param subscription to close\\n @param on_close_complete optional callback to execute once the subscription has been closed and freed. This may\\n happen on a separate thread, so the caller should ensure that clientd has the appropriate lifetime.\\n @param on_close_complete_clientd parameter to pass to the on_complete callback.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_subscription_close(\n subscription: *mut aeron_subscription_t,\n on_close_complete: aeron_notification_t,\n on_close_complete_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get all of the local socket addresses for this subscription. Multiple addresses can occur if this is a\\n multi-destination subscription. Addresses will a string representation in numeric form. IPv6 addresses will be\\n surrounded by \'[\' and \']\' so that the \':\' that separate the parts are distinguishable from the port delimiter.\\n E.g. [fe80::7552:c06e:6bf4:4160]:12345. As of writing the maximum length for a formatted address is 54 bytes\\n including the NULL terminator. AERON_CLIENT_MAX_LOCAL_ADDRESS_STR_LEN is defined to provide enough space to fit the\\n returned string. Returned strings will be NULL terminated. If the buffer to hold the address can not hold enough\\n of the message it will be truncated and the last character will be null.\\n\\n If the address_vec_len is less the total number of addresses available then the first addresses found up to that\\n length will be placed into the address_vec. However the function will return the total number of addresses available\\n so if if that is larger than the input array then the client code may wish to re-query with a larger array to get\\n them all.\\n\\n @param subscription to query\\n @param address_vec to hold the received addresses\\n @param address_vec_len available length of the vector to hold the addresses\\n @return number of addresses found or -1 if there is an error.\"]\n pub fn aeron_subscription_local_sockaddrs(\n subscription: *mut aeron_subscription_t,\n address_vec: *mut aeron_iovec_t,\n address_vec_len: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieves the first local socket address for this subscription. If this is not MDS then it will be the one\\n representing endpoint for this subscription.\\n\\n @see aeron_subscription_local_sockaddrs\\n @param subscription to query\\n @param address for the received address\\n @param address_len available length for the copied address.\\n @return -1 on error, 0 if address not found, 1 if address is found.\"]\n pub fn aeron_subscription_resolved_endpoint(\n subscription: *mut aeron_subscription_t,\n address: *const ::std::os::raw::c_char,\n address_len: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieves the channel URI for this subscription with any wildcard ports filled in. If the channel is not UDP or\\n does not have a wildcard port (<code>0</code>), then it will return the original URI.\\n\\n @param subscription to query\\n @param uri buffer to hold the resolved uri\\n @param uri_len length of the buffer\\n @return -1 on failure or the number of bytes written to the buffer (excluding the NULL terminator). Writing is done\\n on a per key basis, so if the buffer was truncated before writing completed, it will only include the byte count up\\n to the key that overflowed. However, the invariant that if the number returned >= uri_len, then output will have been\\n truncated.\"]\n pub fn aeron_subscription_try_resolve_channel_endpoint_port(\n subscription: *mut aeron_subscription_t,\n uri: *mut ::std::os::raw::c_char,\n uri_len: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Configuration for an image that does not change during it\'s lifetime.\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_image_constants_stct {\n #[doc = \" The subscription to which this image belongs.\"]\n pub subscription: *mut aeron_subscription_t,\n #[doc = \" The source identity of the sending publisher as an abstract concept appropriate for the media.\"]\n pub source_identity: *const ::std::os::raw::c_char,\n #[doc = \" The correlationId for identification of the image with the media driver.\"]\n pub correlation_id: i64,\n #[doc = \" Get the position the subscriber joined this stream at.\"]\n pub join_position: i64,\n #[doc = \" Number of bits to right shift a position to get a term count for how far the stream has progressed.\"]\n pub position_bits_to_shift: usize,\n #[doc = \" Get the length in bytes for each term partition in the log buffer.\"]\n pub term_buffer_length: usize,\n #[doc = \" The length in bytes of the MTU (Maximum Transmission Unit) the Sender used for the datagram.\"]\n pub mtu_length: usize,\n #[doc = \" The sessionId for the steam of messages. Sessions are unique within a subscription and unique across\\n all publications from a source identity.\"]\n pub session_id: i32,\n #[doc = \" The initial term at which the stream started for this session.\"]\n pub initial_term_id: i32,\n #[doc = \" Counter id that refers to the subscriber position for this image.\"]\n pub subscriber_position_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_image_constants_stct\"]\n [::std::mem::size_of::<aeron_image_constants_stct>() - 72usize];\n [\"Alignment of aeron_image_constants_stct\"]\n [::std::mem::align_of::<aeron_image_constants_stct>() - 8usize];\n [\"Offset of field: aeron_image_constants_stct::subscription\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, subscription) - 0usize];\n [\"Offset of field: aeron_image_constants_stct::source_identity\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, source_identity) - 8usize];\n [\"Offset of field: aeron_image_constants_stct::correlation_id\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, correlation_id) - 16usize];\n [\"Offset of field: aeron_image_constants_stct::join_position\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, join_position) - 24usize];\n [\"Offset of field: aeron_image_constants_stct::position_bits_to_shift\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, position_bits_to_shift) - 32usize];\n [\"Offset of field: aeron_image_constants_stct::term_buffer_length\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, term_buffer_length) - 40usize];\n [\"Offset of field: aeron_image_constants_stct::mtu_length\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, mtu_length) - 48usize];\n [\"Offset of field: aeron_image_constants_stct::session_id\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, session_id) - 56usize];\n [\"Offset of field: aeron_image_constants_stct::initial_term_id\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, initial_term_id) - 60usize];\n [\"Offset of field: aeron_image_constants_stct::subscriber_position_id\"]\n [::std::mem::offset_of!(aeron_image_constants_stct, subscriber_position_id) - 64usize];\n};\nimpl Default for aeron_image_constants_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[doc = \" Configuration for an image that does not change during it\'s lifetime.\"]\npub type aeron_image_constants_t = aeron_image_constants_stct;\nunsafe extern \"C\" {\n #[doc = \" Fill in a structure with the constants in use by a image.\\n\\n @param image to get the constants for.\\n @param constants structure to fill in with the constants\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_image_constants(\n image: *mut aeron_image_t,\n constants: *mut aeron_image_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" The position this image has been consumed to by the subscriber.\\n\\n @param image to query position of.\\n @return the position this image has been consumed to by the subscriber.\"]\n pub fn aeron_image_position(image: *mut aeron_image_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Set the subscriber position for this image to indicate where it has been consumed to.\\n\\n @param image to set the position of.\\n @param new_position for the consumption point.\"]\n pub fn aeron_image_set_position(\n image: *mut aeron_image_t,\n position: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Is the current consumed position at the end of the stream?\\n\\n @param image to check.\\n @return true if at the end of the stream or false if not.\"]\n pub fn aeron_image_is_end_of_stream(image: *mut aeron_image_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" The position the stream reached when EOS was received from the publisher. The position will be\\n INT64_MAX until the stream ends and EOS is set.\\n\\n @param image to check.\\n @return position the stream reached when EOS was received from the publisher.\"]\n pub fn aeron_image_end_of_stream_position(image: *mut aeron_image_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Count of observed active transports within the image liveness timeout.\\n\\n If the image is closed, then this is 0. This may also be 0 if no actual datagrams have arrived. IPC\\n Images also will be 0.\\n\\n @param image to check.\\n @return count of active transports - 0 if Image is closed, no datagrams yet, or IPC. Or -1 for error.\"]\n pub fn aeron_image_active_transport_count(image: *mut aeron_image_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for new messages in a stream. If new messages are found beyond the last consumed position then they\\n will be delivered to the handler up to a limited number of fragments as specified.\\n <p>\\n Use a fragment assembler to assemble messages which span multiple fragments.\\n\\n @param image to poll.\\n @param handler to which message fragments are delivered.\\n @param clientd to pass to the handler.\\n @param fragment_limit for the number of fragments to be consumed during one polling operation.\\n @return the number of fragments that have been consumed or -1 for error.\"]\n pub fn aeron_image_poll(\n image: *mut aeron_image_t,\n handler: aeron_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for new messages in a stream. If new messages are found beyond the last consumed position then they\\n will be delivered to the handler up to a limited number of fragments as specified.\\n <p>\\n Use a controlled fragment assembler to assemble messages which span multiple fragments.\\n\\n @param image to poll.\\n @param handler to which message fragments are delivered.\\n @param clientd to pass to the handler.\\n @param fragment_limit for the number of fragments to be consumed during one polling operation.\\n @return the number of fragments that have been consumed or -1 for error.\"]\n pub fn aeron_image_controlled_poll(\n image: *mut aeron_image_t,\n handler: aeron_controlled_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for new messages in a stream. If new messages are found beyond the last consumed position then they\\n will be delivered to the handler up to a limited number of fragments as specified or the maximum position specified.\\n <p>\\n Use a fragment assembler to assemble messages which span multiple fragments.\\n\\n @param image to poll.\\n @param handler to which message fragments are delivered.\\n @param clientd to pass to the handler.\\n @param limit_position to consume messages up to.\\n @param fragment_limit for the number of fragments to be consumed during one polling operation.\\n @return the number of fragments that have been consumed or -1 for error.\"]\n pub fn aeron_image_bounded_poll(\n image: *mut aeron_image_t,\n handler: aeron_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n limit_position: i64,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for new messages in a stream. If new messages are found beyond the last consumed position then they\\n will be delivered to the handler up to a limited number of fragments as specified or the maximum position specified.\\n <p>\\n Use a controlled fragment assembler to assemble messages which span multiple fragments.\\n\\n @param image to poll.\\n @param handler to which message fragments are delivered.\\n @param clientd to pass to the handler.\\n @param limit_position to consume messages up to.\\n @param fragment_limit for the number of fragments to be consumed during one polling operation.\\n @return the number of fragments that have been consumed or -1 for error.\"]\n pub fn aeron_image_bounded_controlled_poll(\n image: *mut aeron_image_t,\n handler: aeron_controlled_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n limit_position: i64,\n fragment_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Peek for new messages in a stream by scanning forward from an initial position. If new messages are found then\\n they will be delivered to the handler up to a limited position.\\n <p>\\n Use a controlled fragment assembler to assemble messages which span multiple fragments. Scans must also\\n start at the beginning of a message so that the assembler is reset.\\n\\n @param image to peek.\\n @param initial_position from which to peek forward.\\n @param handler to which message fragments are delivered.\\n @param clientd to pass to the handler.\\n @param limit_position up to which can be scanned.\\n @return the resulting position after the scan terminates which is a complete message or -1 for error.\"]\n pub fn aeron_image_controlled_peek(\n image: *mut aeron_image_t,\n initial_position: i64,\n handler: aeron_controlled_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n limit_position: i64,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for new messages in a stream. If new messages are found beyond the last consumed position then they\\n will be delivered to the handler up to a limited number of bytes.\\n <p>\\n A scan will terminate if a padding frame is encountered. If first frame in a scan is padding then a block\\n for the padding is notified. If the padding comes after the first frame in a scan then the scan terminates\\n at the offset the padding frame begins. Padding frames are delivered singularly in a block.\\n <p>\\n Padding frames may be for a greater range than the limit offset but only the header needs to be valid so\\n relevant length of the frame is data header length.\\n\\n @param image to poll.\\n @param handler to which block is delivered.\\n @param clientd to pass to the handler.\\n @param block_length_limit up to which a block may be in length.\\n @return the number of bytes that have been consumed or -1 for error.\"]\n pub fn aeron_image_block_poll(\n image: *mut aeron_image_t,\n handler: aeron_block_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n block_length_limit: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_image_is_closed(image: *mut aeron_image_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Create an image fragment assembler for use with a single image.\\n\\n @param assembler to be set when created successfully.\\n @param delegate to call on completed.\\n @param delegate_clientd to pass to delegate handler.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_image_fragment_assembler_create(\n assembler: *mut *mut aeron_image_fragment_assembler_t,\n delegate: aeron_fragment_handler_t,\n delegate_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete an image fragment assembler.\\n\\n @param assembler to delete.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_image_fragment_assembler_delete(\n assembler: *mut aeron_image_fragment_assembler_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Handler function to be passed for handling fragment assembly.\\n\\n @param clientd passed in the poll call (must be a aeron_image_fragment_assembler_t)\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\"]\n pub fn aeron_image_fragment_assembler_handler(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n );\n}\nunsafe extern \"C\" {\n #[doc = \" Create an image controlled fragment assembler for use with a single image.\\n\\n @param assembler to be set when created successfully.\\n @param delegate to call on completed\\n @param delegate_clientd to pass to delegate handler.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_image_controlled_fragment_assembler_create(\n assembler: *mut *mut aeron_image_controlled_fragment_assembler_t,\n delegate: aeron_controlled_fragment_handler_t,\n delegate_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete an image controlled fragment assembler.\\n\\n @param assembler to delete.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_image_controlled_fragment_assembler_delete(\n assembler: *mut aeron_image_controlled_fragment_assembler_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Handler function to be passed for handling fragment assembly.\\n\\n @param clientd passed in the poll call (must be a aeron_image_controlled_fragment_assembler_t)\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\\n @return The action to be taken with regard to the stream position after the callback.\"]\n pub fn aeron_image_controlled_fragment_assembler_handler(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n ) -> aeron_controlled_fragment_handler_action_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Create a fragment assembler for use with a subscription.\\n\\n @param assembler to be set when created successfully.\\n @param delegate to call on completed\\n @param delegate_clientd to pass to delegate handler.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_fragment_assembler_create(\n assembler: *mut *mut aeron_fragment_assembler_t,\n delegate: aeron_fragment_handler_t,\n delegate_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete a fragment assembler.\\n\\n @param assembler to delete.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_fragment_assembler_delete(\n assembler: *mut aeron_fragment_assembler_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Handler function to be passed for handling fragment assembly.\\n\\n @param clientd passed in the poll call (must be a aeron_fragment_assembler_t)\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\"]\n pub fn aeron_fragment_assembler_handler(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n );\n}\nunsafe extern \"C\" {\n #[doc = \" Create a controlled fragment assembler for use with a subscription.\\n\\n @param assembler to be set when created successfully.\\n @param delegate to call on completed\\n @param delegate_clientd to pass to delegate handler.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_controlled_fragment_assembler_create(\n assembler: *mut *mut aeron_controlled_fragment_assembler_t,\n delegate: aeron_controlled_fragment_handler_t,\n delegate_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete a controlled fragment assembler.\\n\\n @param assembler to delete.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_controlled_fragment_assembler_delete(\n assembler: *mut aeron_controlled_fragment_assembler_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Handler function to be passed for handling fragment assembly.\\n\\n @param clientd passed in the poll call (must be a aeron_controlled_fragment_assembler_t)\\n @param buffer containing the data.\\n @param length of the data in bytes.\\n @param header representing the meta data for the data.\\n @return The action to be taken with regard to the stream position after the callback.\"]\n pub fn aeron_controlled_fragment_assembler_handler(\n clientd: *mut ::std::os::raw::c_void,\n buffer: *const u8,\n length: usize,\n header: *mut aeron_header_t,\n ) -> aeron_controlled_fragment_handler_action_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Return a pointer to the counter value.\\n\\n @param counter to pointer to.\\n @return pointer to the counter value.\"]\n pub fn aeron_counter_addr(counter: *mut aeron_counter_t) -> *mut i64;\n}\n#[doc = \" Configuration for a counter that does not change during it\'s lifetime.\"]\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_counter_constants_stct {\n #[doc = \" Return the registration id used to register this counter with the media driver.\"]\n pub registration_id: i64,\n #[doc = \" Identity for the counter within the counters reader and counters manager.\"]\n pub counter_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_counter_constants_stct\"]\n [::std::mem::size_of::<aeron_counter_constants_stct>() - 16usize];\n [\"Alignment of aeron_counter_constants_stct\"]\n [::std::mem::align_of::<aeron_counter_constants_stct>() - 8usize];\n [\"Offset of field: aeron_counter_constants_stct::registration_id\"]\n [::std::mem::offset_of!(aeron_counter_constants_stct, registration_id) - 0usize];\n [\"Offset of field: aeron_counter_constants_stct::counter_id\"]\n [::std::mem::offset_of!(aeron_counter_constants_stct, counter_id) - 8usize];\n};\n#[doc = \" Configuration for a counter that does not change during it\'s lifetime.\"]\npub type aeron_counter_constants_t = aeron_counter_constants_stct;\nunsafe extern \"C\" {\n #[doc = \" Fill in a structure with the constants in use by a counter.\\n\\n @param counter to get the constants for.\\n @param constants structure to fill in with the constants.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_counter_constants(\n counter: *mut aeron_counter_t,\n constants: *mut aeron_counter_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Asynchronously close the counter.\\n\\n @param counter to close.\\n @return 0 for success or -1 for error.\"]\n pub fn aeron_counter_close(\n counter: *mut aeron_counter_t,\n on_close_complete: aeron_notification_t,\n on_close_complete_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Check if the counter is closed\\n @param counter to check\\n @return true if closed, false otherwise.\"]\n pub fn aeron_counter_is_closed(counter: *mut aeron_counter_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Return full version and build string.\\n\\n @return full version and build string.\"]\n pub fn aeron_version_full() -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Return version text.\\n\\n @return version text.\"]\n pub fn aeron_version_text() -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Return major version number.\\n\\n @return major version number.\"]\n pub fn aeron_version_major() -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return minor version number.\\n\\n @return minor version number.\"]\n pub fn aeron_version_minor() -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return patch version number.\\n\\n @return patch version number.\"]\n pub fn aeron_version_patch() -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return the git sha for the current build.\\n\\n @return git version\"]\n pub fn aeron_version_gitsha() -> *const ::std::os::raw::c_char;\n}\n#[doc = \" Clock function used by aeron.\"]\npub type aeron_clock_func_t = ::std::option::Option<unsafe extern \"C\" fn() -> i64>;\nunsafe extern \"C\" {\n #[doc = \" Return time in nanoseconds for machine. Is not wall clock time.\\n\\n @return nanoseconds since epoch for machine.\"]\n pub fn aeron_nano_clock() -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Return time in milliseconds since epoch. Is wall clock time.\\n\\n @return milliseconds since epoch.\"]\n pub fn aeron_epoch_clock() -> i64;\n}\n#[doc = \" Function to return logging information.\"]\npub type aeron_log_func_t =\n ::std::option::Option<unsafe extern \"C\" fn(arg1: *const ::std::os::raw::c_char)>;\nunsafe extern \"C\" {\n #[doc = \" Determine if an aeron driver is using a given aeron directory.\\n\\n @param dirname for aeron directory\\n @param timeout_ms to use to determine activity for aeron directory\\n @param log_func to call during activity check to log diagnostic information.\\n @return true for active driver or false for no active driver.\"]\n pub fn aeron_is_driver_active(\n dirname: *const ::std::os::raw::c_char,\n timeout_ms: i64,\n log_func: aeron_log_func_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Load properties from a string containing name=value pairs and set appropriate environment variables for the\\n process so that subsequent calls to aeron_driver_context_init will use those values.\\n\\n @param buffer containing properties and values.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_properties_buffer_load(\n buffer: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Load properties file and set appropriate environment variables for the process so that subsequent\\n calls to aeron_driver_context_init will use those values.\\n\\n @param filename to load.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_properties_file_load(\n filename: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Load properties from HTTP URL and set environment variables for the process so that subsequent\\n calls to aeron_driver_context_init will use those values.\\n\\n @param url to attempt to retrieve and load.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_properties_http_load(url: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Load properties based on URL or filename. If string contains file or http URL, it will attempt\\n to load properties from a file or http as indicated. If not a URL, then it will try to load the string\\n as a filename.\\n\\n @param url_or_filename to load properties from.\\n @return 0 for success and -1 for error.\"]\n pub fn aeron_properties_load(\n url_or_filename: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return current aeron error code (errno) for calling thread.\\n\\n @return aeron error code for calling thread.\"]\n pub fn aeron_errcode() -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Return the current aeron error message for calling thread.\\n\\n @return aeron error message for calling thread.\"]\n pub fn aeron_errmsg() -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the default path used by the Aeron media driver.\\n\\n @param path buffer to store the path.\\n @param path_length space available in the buffer\\n @return -1 if there is an issue or the number of bytes written to path excluding the terminator <code>\\\\0</code>. If this\\n is equal to or greater than the path_length then the path has been truncated.\"]\n pub fn aeron_default_path(\n path: *mut ::std::os::raw::c_char,\n path_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the registration id for addition of the counter. Note that using this after a call to poll the succeeds or\\n errors is undefined behaviour. As the async_add_counter_t may have been freed.\\n\\n @param add_counter used to check for completion.\\n @return registration id for the counter.\"]\n pub fn aeron_async_add_counter_get_registration_id(\n add_counter: *mut aeron_async_add_counter_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the registration id for addition of the publication. Note that using this after a call to poll the succeeds or\\n errors is undefined behaviour. As the async_add_publication_t may have been freed.\\n\\n @param add_publication used to check for completion.\\n @return registration id for the publication.\"]\n pub fn aeron_async_add_publication_get_registration_id(\n add_publication: *mut aeron_async_add_publication_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the registration id for addition of the exclusive_publication. Note that using this after a call to poll the\\n succeeds or errors is undefined behaviour. As the async_add_exclusive_publication_t may have been freed.\\n\\n @param add_exclusive_publication used to check for completion.\\n @return registration id for the exclusive_publication.\"]\n pub fn aeron_async_add_exclusive_exclusive_publication_get_registration_id(\n add_exclusive_publication: *mut aeron_async_add_exclusive_publication_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the registration id for addition of the subscription. Note that using this after a call to poll the succeeds or\\n errors is undefined behaviour. As the async_add_subscription_t may have been freed.\\n\\n @param add_subscription used to check for completion.\\n @return registration id for the subscription.\"]\n pub fn aeron_async_add_subscription_get_registration_id(\n add_subscription: *mut aeron_async_add_subscription_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the registration_id for the destination command supplied. Note that this is the correlation_id used for\\n the specified destination command, not the registration_id for the original parent resource (publication,\\n subscription).\\n\\n @param async_destination tracking the current destination command.\\n @return correlation_id sent to driver.\"]\n pub fn aeron_async_destination_get_registration_id(\n async_destination: *mut aeron_async_destination_t,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Request the media driver terminates operation and closes all resources.\\n\\n @param directory in which the media driver is running.\\n @param token_buffer containing the authentication token confirming the client is allowed to terminate the driver.\\n @param token_length of the token in the buffer.\\n @return\"]\n pub fn aeron_context_request_driver_termination(\n directory: *const ::std::os::raw::c_char,\n token_buffer: *const u8,\n token_length: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_cnc_stct {\n _unused: [u8; 0],\n}\npub type aeron_cnc_t = aeron_cnc_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_cnc_constants_stct {\n pub cnc_version: i32,\n pub to_driver_buffer_length: i32,\n pub to_clients_buffer_length: i32,\n pub counter_metadata_buffer_length: i32,\n pub counter_values_buffer_length: i32,\n pub error_log_buffer_length: i32,\n pub client_liveness_timeout: i64,\n pub start_timestamp: i64,\n pub pid: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_cnc_constants_stct\"]\n [::std::mem::size_of::<aeron_cnc_constants_stct>() - 48usize];\n [\"Alignment of aeron_cnc_constants_stct\"]\n [::std::mem::align_of::<aeron_cnc_constants_stct>() - 4usize];\n [\"Offset of field: aeron_cnc_constants_stct::cnc_version\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, cnc_version) - 0usize];\n [\"Offset of field: aeron_cnc_constants_stct::to_driver_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, to_driver_buffer_length) - 4usize];\n [\"Offset of field: aeron_cnc_constants_stct::to_clients_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, to_clients_buffer_length) - 8usize];\n [\"Offset of field: aeron_cnc_constants_stct::counter_metadata_buffer_length\"][::std::mem::offset_of!(\n aeron_cnc_constants_stct,\n counter_metadata_buffer_length\n ) - 12usize];\n [\"Offset of field: aeron_cnc_constants_stct::counter_values_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, counter_values_buffer_length) - 16usize];\n [\"Offset of field: aeron_cnc_constants_stct::error_log_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, error_log_buffer_length) - 20usize];\n [\"Offset of field: aeron_cnc_constants_stct::client_liveness_timeout\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, client_liveness_timeout) - 24usize];\n [\"Offset of field: aeron_cnc_constants_stct::start_timestamp\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, start_timestamp) - 32usize];\n [\"Offset of field: aeron_cnc_constants_stct::pid\"]\n [::std::mem::offset_of!(aeron_cnc_constants_stct, pid) - 40usize];\n};\npub type aeron_cnc_constants_t = aeron_cnc_constants_stct;\nunsafe extern \"C\" {\n #[doc = \" Initialise an aeron_cnc, which gives user level access to the command and control file used to communicate\\n with the media driver. Will wait until the media driver has loaded and the cnc file is created, up to timeout_ms.\\n Use a value of 0 for a non-blocking initialisation.\\n\\n @param aeron_cnc to hold the loaded aeron_cnc\\n @param base_path media driver\'s base path\\n @param timeout_ms Number of milliseconds to wait before timing out.\\n @return 0 on success, -1 on failure.\"]\n pub fn aeron_cnc_init(\n aeron_cnc: *mut *mut aeron_cnc_t,\n base_path: *const ::std::os::raw::c_char,\n timeout_ms: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Fetch the sets of constant values associated with this command and control file.\\n\\n @param aeron_cnc to query\\n @param constants user supplied structure to hold return values.\\n @return 0 on success, -1 on failure.\"]\n pub fn aeron_cnc_constants(\n aeron_cnc: *mut aeron_cnc_t,\n constants: *mut aeron_cnc_constants_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the current file name of the cnc file.\\n\\n @param aeron_cnc to query\\n @return name of the cnc file\"]\n pub fn aeron_cnc_filename(aeron_cnc: *mut aeron_cnc_t) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets the timestamp of the last heartbeat sent to the media driver from any client.\\n\\n @param aeron_cnc to query\\n @return last heartbeat timestamp in ms.\"]\n pub fn aeron_cnc_to_driver_heartbeat(aeron_cnc: *mut aeron_cnc_t) -> i64;\n}\npub type aeron_error_log_reader_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n observation_count: i32,\n first_observation_timestamp: i64,\n last_observation_timestamp: i64,\n error: *const ::std::os::raw::c_char,\n error_length: usize,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\nunsafe extern \"C\" {\n #[doc = \" Reads the current error log for this driver.\\n\\n @param aeron_cnc to query\\n @param callback called for every distinct error observation\\n @param clientd client data to be passed to the callback\\n @param since_timestamp only return errors after this timestamp (0 returns all)\\n @return the number of distinct errors seen\"]\n pub fn aeron_cnc_error_log_read(\n aeron_cnc: *mut aeron_cnc_t,\n callback: aeron_error_log_reader_func_t,\n clientd: *mut ::std::os::raw::c_void,\n since_timestamp: i64,\n ) -> usize;\n}\nunsafe extern \"C\" {\n #[doc = \" Gets a counters reader for this command and control file. This does not need to be closed manually, resources\\n are tied to the instance of aeron_cnc.\\n\\n @param aeron_cnc to query\\n @return pointer to a counters reader.\"]\n pub fn aeron_cnc_counters_reader(aeron_cnc: *mut aeron_cnc_t) -> *mut aeron_counters_reader_t;\n}\npub type aeron_loss_reporter_read_entry_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n observation_count: i64,\n total_bytes_lost: i64,\n first_observation_timestamp: i64,\n last_observation_timestamp: i64,\n session_id: i32,\n stream_id: i32,\n channel: *const ::std::os::raw::c_char,\n channel_length: i32,\n source: *const ::std::os::raw::c_char,\n source_length: i32,\n ),\n>;\nunsafe extern \"C\" {\n #[doc = \" Read all of the data loss observations from the report in the same media driver instances as the cnc file.\\n\\n @param aeron_cnc to query\\n @param entry_func callback for each observation found\\n @param clientd client data to be passed to the callback.\\n @return -1 on failure, number of observations on success (could be 0).\"]\n pub fn aeron_cnc_loss_reporter_read(\n aeron_cnc: *mut aeron_cnc_t,\n entry_func: aeron_loss_reporter_read_entry_func_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Closes the instance of the aeron cnc and frees its resources.\\n\\n @param aeron_cnc to close\"]\n pub fn aeron_cnc_close(aeron_cnc: *mut aeron_cnc_t);\n}\npub type aeron_idle_strategy_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(state: *mut ::std::os::raw::c_void, work_count: ::std::os::raw::c_int),\n>;\npub type aeron_idle_strategy_init_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n state: *mut *mut ::std::os::raw::c_void,\n env_var: *const ::std::os::raw::c_char,\n init_args: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int,\n>;\nunsafe extern \"C\" {\n pub fn aeron_semantic_version_compose(major: u8, minor: u8, patch: u8) -> i32;\n}\nunsafe extern \"C\" {\n pub fn aeron_semantic_version_major(version: i32) -> u8;\n}\nunsafe extern \"C\" {\n pub fn aeron_semantic_version_minor(version: i32) -> u8;\n}\nunsafe extern \"C\" {\n pub fn aeron_semantic_version_patch(version: i32) -> u8;\n}\npub type aeron_fptr_t = ::std::option::Option<unsafe extern \"C\" fn()>;\npub type aeron_archive_t = aeron_archive_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_archive_context_stct {\n _unused: [u8; 0],\n}\npub type aeron_archive_context_t = aeron_archive_context_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_archive_async_connect_stct {\n _unused: [u8; 0],\n}\npub type aeron_archive_async_connect_t = aeron_archive_async_connect_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_encoded_credentials_stct {\n pub data: *const ::std::os::raw::c_char,\n pub length: u32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_encoded_credentials_stct\"]\n [::std::mem::size_of::<aeron_archive_encoded_credentials_stct>() - 16usize];\n [\"Alignment of aeron_archive_encoded_credentials_stct\"]\n [::std::mem::align_of::<aeron_archive_encoded_credentials_stct>() - 8usize];\n [\"Offset of field: aeron_archive_encoded_credentials_stct::data\"]\n [::std::mem::offset_of!(aeron_archive_encoded_credentials_stct, data) - 0usize];\n [\"Offset of field: aeron_archive_encoded_credentials_stct::length\"]\n [::std::mem::offset_of!(aeron_archive_encoded_credentials_stct, length) - 8usize];\n};\nimpl Default for aeron_archive_encoded_credentials_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_archive_encoded_credentials_t = aeron_archive_encoded_credentials_stct;\n#[doc = \" Callback to return encoded credentials.\\n\\n @return encoded credentials to include with the connect request\"]\npub type aeron_archive_credentials_encoded_credentials_supplier_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n ) -> *mut aeron_archive_encoded_credentials_t,\n>;\n#[doc = \" Callback to return encoded credentials given a specific encoded challenge.\\n\\n @param encoded_challenge to use to generate the encoded credentials\\n @return encoded credentials to include with the challenge response\"]\npub type aeron_archive_credentials_challenge_supplier_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n encoded_challenge: *mut aeron_archive_encoded_credentials_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> *mut aeron_archive_encoded_credentials_t,\n>;\n#[doc = \" Callback to return encoded credentials so they may be reused or freed.\\n\\n @param credentials to reuse or free\"]\npub type aeron_archive_credentials_free_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n credentials: *mut aeron_archive_encoded_credentials_t,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\n#[doc = \" Callback to allow execution of a delegating invoker to be run.\"]\npub type aeron_archive_delegating_invoker_func_t =\n ::std::option::Option<unsafe extern \"C\" fn(clientd: *mut ::std::os::raw::c_void)>;\n#[doc = \" Struct containing the available replay parameters.\"]\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_replay_params_stct {\n #[doc = \" Set the counter id to be used for bounding the replay.\\n Setting this value will trigger the sending of a bounded replay request, instead of a normal replay.\\n By default, a bound will not be applied.\"]\n pub bounding_limit_counter_id: i32,\n #[doc = \" The maximum size of a file operation when reading from the archive to execute the replay.\"]\n pub file_io_max_length: i32,\n #[doc = \" The position at which to start the replay.\\n By default, the stream is replayed from the start.\"]\n pub position: i64,\n #[doc = \" The length of the recorded stream to replay.\\n By default, the whole stream will be replayed.\\n If set to INT64_MAX, it will follow a live recording.\"]\n pub length: i64,\n #[doc = \" The token used for replays when the initiating image is not the one used to create the archive connection/session.\"]\n pub replay_token: i64,\n #[doc = \" The subscription registration id used when doing a start replay using response channels and the response channel is already created.\"]\n pub subscription_registration_id: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_replay_params_stct\"]\n [::std::mem::size_of::<aeron_archive_replay_params_stct>() - 40usize];\n [\"Alignment of aeron_archive_replay_params_stct\"]\n [::std::mem::align_of::<aeron_archive_replay_params_stct>() - 8usize];\n [\"Offset of field: aeron_archive_replay_params_stct::bounding_limit_counter_id\"][::std::mem::offset_of!(\n aeron_archive_replay_params_stct,\n bounding_limit_counter_id\n ) - 0usize];\n [\"Offset of field: aeron_archive_replay_params_stct::file_io_max_length\"]\n [::std::mem::offset_of!(aeron_archive_replay_params_stct, file_io_max_length) - 4usize];\n [\"Offset of field: aeron_archive_replay_params_stct::position\"]\n [::std::mem::offset_of!(aeron_archive_replay_params_stct, position) - 8usize];\n [\"Offset of field: aeron_archive_replay_params_stct::length\"]\n [::std::mem::offset_of!(aeron_archive_replay_params_stct, length) - 16usize];\n [\"Offset of field: aeron_archive_replay_params_stct::replay_token\"]\n [::std::mem::offset_of!(aeron_archive_replay_params_stct, replay_token) - 24usize];\n [\"Offset of field: aeron_archive_replay_params_stct::subscription_registration_id\"][::std::mem::offset_of!(\n aeron_archive_replay_params_stct,\n subscription_registration_id\n )\n - 32usize];\n};\n#[doc = \" Struct containing the available replay parameters.\"]\npub type aeron_archive_replay_params_t = aeron_archive_replay_params_stct;\nunsafe extern \"C\" {\n #[doc = \" Initialize an aeron_archive_replay_params_t with the default values.\"]\n pub fn aeron_archive_replay_params_init(\n params: *mut aeron_archive_replay_params_t,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Struct containing the available replication parameters.\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_replication_params_stct {\n #[doc = \" The stop position for the replication.\\n The default of AERON_NULL_VALUE indicates a continuous replication.\"]\n pub stop_position: i64,\n #[doc = \" The recording id of the destination Archive to extend.\\n The default of AERON_NULL_VALUE triggers the creation of a new recording at the destination Archive.\"]\n pub dst_recording_id: i64,\n #[doc = \" Specify the destination for the live stream if a merge is required.\\n The default of an empty string means no merge will occur.\"]\n pub live_destination: *const ::std::os::raw::c_char,\n #[doc = \" Specify the channel to use to replicate the recording.\\n The default of an empty string will trigger the use of the context\'s default replication channel.\"]\n pub replication_channel: *const ::std::os::raw::c_char,\n #[doc = \" Specify the control address of the source archive when using response channels during replication.\"]\n pub src_response_channel: *const ::std::os::raw::c_char,\n #[doc = \" Specify a tag to apply to the channel used by the Archive\'s subscription for replication.\"]\n pub channel_tag_id: i64,\n #[doc = \" Specify a subscription tag to apply to the channel used by the Archive\'s subscription for replication.\"]\n pub subscription_tag_id: i64,\n #[doc = \" Specify the max length for file IO operations used in the replay.\"]\n pub file_io_max_length: i32,\n #[doc = \" Specify session id to be used for the replicated file instead of the session id from the source archive.\\n This is useful in cases where we are replicating the same recording in multiple stages.\"]\n pub replication_session_id: i32,\n #[doc = \" Specify the encoded credentials that will be passed to the source archive for authentication.\\n Currently, only simple authentication (i.e. not challenge/response) is supported for replication.\"]\n pub encoded_credentials: *mut aeron_archive_encoded_credentials_t,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_replication_params_stct\"]\n [::std::mem::size_of::<aeron_archive_replication_params_stct>() - 72usize];\n [\"Alignment of aeron_archive_replication_params_stct\"]\n [::std::mem::align_of::<aeron_archive_replication_params_stct>() - 8usize];\n [\"Offset of field: aeron_archive_replication_params_stct::stop_position\"]\n [::std::mem::offset_of!(aeron_archive_replication_params_stct, stop_position) - 0usize];\n [\"Offset of field: aeron_archive_replication_params_stct::dst_recording_id\"]\n [::std::mem::offset_of!(aeron_archive_replication_params_stct, dst_recording_id) - 8usize];\n [\"Offset of field: aeron_archive_replication_params_stct::live_destination\"]\n [::std::mem::offset_of!(aeron_archive_replication_params_stct, live_destination) - 16usize];\n [\"Offset of field: aeron_archive_replication_params_stct::replication_channel\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n replication_channel\n ) - 24usize];\n [\"Offset of field: aeron_archive_replication_params_stct::src_response_channel\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n src_response_channel\n ) - 32usize];\n [\"Offset of field: aeron_archive_replication_params_stct::channel_tag_id\"]\n [::std::mem::offset_of!(aeron_archive_replication_params_stct, channel_tag_id) - 40usize];\n [\"Offset of field: aeron_archive_replication_params_stct::subscription_tag_id\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n subscription_tag_id\n ) - 48usize];\n [\"Offset of field: aeron_archive_replication_params_stct::file_io_max_length\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n file_io_max_length\n ) - 56usize];\n [\"Offset of field: aeron_archive_replication_params_stct::replication_session_id\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n replication_session_id\n ) - 60usize];\n [\"Offset of field: aeron_archive_replication_params_stct::encoded_credentials\"][::std::mem::offset_of!(\n aeron_archive_replication_params_stct,\n encoded_credentials\n ) - 64usize];\n};\nimpl Default for aeron_archive_replication_params_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[doc = \" Struct containing the available replication parameters.\"]\npub type aeron_archive_replication_params_t = aeron_archive_replication_params_stct;\nunsafe extern \"C\" {\n #[doc = \" Initialize an aeron_archive_replication_params_t with the default values\"]\n pub fn aeron_archive_replication_params_init(\n params: *mut aeron_archive_replication_params_t,\n ) -> ::std::os::raw::c_int;\n}\n#[doc = \" Struct containing the details of a recording\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_recording_descriptor_stct {\n #[doc = \" control session id of the request\"]\n pub control_session_id: i64,\n #[doc = \" correlation id of the request\"]\n pub correlation_id: i64,\n #[doc = \" id of the recording\"]\n pub recording_id: i64,\n #[doc = \" timestamp of recording start\"]\n pub start_timestamp: i64,\n #[doc = \" timestamp of recording stop\"]\n pub stop_timestamp: i64,\n #[doc = \" the start position of the recording against the recorded publication\"]\n pub start_position: i64,\n #[doc = \" the highest position reached for this recording\"]\n pub stop_position: i64,\n #[doc = \" the initial term id of the recorded publication\"]\n pub initial_term_id: i32,\n #[doc = \" the segment file length - a multiple of the term_buffer_length\"]\n pub segment_file_length: i32,\n #[doc = \" term buffer length of the publication\"]\n pub term_buffer_length: i32,\n #[doc = \" mtu length of the recorded publication\"]\n pub mtu_length: i32,\n #[doc = \" session id of the recorded publication\"]\n pub session_id: i32,\n #[doc = \" stream id of the recorded publication\"]\n pub stream_id: i32,\n #[doc = \" channel used for recording subscription at the Aeron Archive\"]\n pub stripped_channel: *mut ::std::os::raw::c_char,\n #[doc = \" length of the stripped_channel string\"]\n pub stripped_channel_length: usize,\n #[doc = \" channel provided to start the recording request\"]\n pub original_channel: *mut ::std::os::raw::c_char,\n #[doc = \" length of the original_channel string\"]\n pub original_channel_length: usize,\n #[doc = \" source identity of the recorded stream\"]\n pub source_identity: *mut ::std::os::raw::c_char,\n #[doc = \" length of the source_identity string\"]\n pub source_identity_length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_recording_descriptor_stct\"]\n [::std::mem::size_of::<aeron_archive_recording_descriptor_stct>() - 128usize];\n [\"Alignment of aeron_archive_recording_descriptor_stct\"]\n [::std::mem::align_of::<aeron_archive_recording_descriptor_stct>() - 8usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::control_session_id\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n control_session_id\n ) - 0usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::correlation_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, correlation_id) - 8usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::recording_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, recording_id) - 16usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::start_timestamp\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n start_timestamp\n ) - 24usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::stop_timestamp\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, stop_timestamp) - 32usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::start_position\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, start_position) - 40usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::stop_position\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, stop_position) - 48usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::initial_term_id\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n initial_term_id\n ) - 56usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::segment_file_length\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n segment_file_length\n ) - 60usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::term_buffer_length\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n term_buffer_length\n ) - 64usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::mtu_length\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, mtu_length) - 68usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::session_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, session_id) - 72usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_stct, stream_id) - 76usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::stripped_channel\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n stripped_channel\n ) - 80usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::stripped_channel_length\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n stripped_channel_length\n )\n - 88usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::original_channel\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n original_channel\n ) - 96usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::original_channel_length\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n original_channel_length\n )\n - 104usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::source_identity\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n source_identity\n ) - 112usize];\n [\"Offset of field: aeron_archive_recording_descriptor_stct::source_identity_length\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_stct,\n source_identity_length\n )\n - 120usize];\n};\nimpl Default for aeron_archive_recording_descriptor_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[doc = \" Struct containing the details of a recording\"]\npub type aeron_archive_recording_descriptor_t = aeron_archive_recording_descriptor_stct;\n#[doc = \" Callback to return recording descriptors.\"]\npub type aeron_archive_recording_descriptor_consumer_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n recording_descriptor: *mut aeron_archive_recording_descriptor_t,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\n#[doc = \" Struct containing the details of a recording subscription\"]\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_recording_subscription_descriptor_stct {\n #[doc = \" control session id of the request\"]\n pub control_session_id: i64,\n #[doc = \" correlation id of the request\"]\n pub correlation_id: i64,\n #[doc = \" the subscription id - can be used to stop the recording subscription\"]\n pub subscription_id: i64,\n #[doc = \" the stream id the subscription was registered with\"]\n pub stream_id: i32,\n #[doc = \" the channel the subscription was registered with\"]\n pub stripped_channel: *mut ::std::os::raw::c_char,\n #[doc = \" the length of the stripped_channel string\"]\n pub stripped_channel_length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_recording_subscription_descriptor_stct\"]\n [::std::mem::size_of::<aeron_archive_recording_subscription_descriptor_stct>() - 48usize];\n [\"Alignment of aeron_archive_recording_subscription_descriptor_stct\"]\n [::std::mem::align_of::<aeron_archive_recording_subscription_descriptor_stct>() - 8usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::control_session_id\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_stct,\n control_session_id\n )\n - 0usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::correlation_id\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_stct,\n correlation_id\n )\n - 8usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::subscription_id\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_stct,\n subscription_id\n )\n - 16usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::stream_id\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_stct,\n stream_id\n )\n - 24usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::stripped_channel\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_stct,\n stripped_channel\n )\n - 32usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_stct::stripped_channel_length\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_stct , stripped_channel_length) - 40usize] ;\n};\nimpl Default for aeron_archive_recording_subscription_descriptor_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[doc = \" Struct containing the details of a recording subscription\"]\npub type aeron_archive_recording_subscription_descriptor_t =\n aeron_archive_recording_subscription_descriptor_stct;\n#[doc = \" Callback to return recording subscription descriptors.\"]\npub type aeron_archive_recording_subscription_descriptor_consumer_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n recording_subscription_descriptor: *mut aeron_archive_recording_subscription_descriptor_t,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\n#[repr(i32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_archive_client_recording_signal_en {\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_START = 0,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_STOP = 1,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_EXTEND = 2,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_REPLICATE = 3,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_MERGE = 4,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_SYNC = 5,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_DELETE = 6,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_REPLICATE_END = 7,\n AERON_ARCHIVE_CLIENT_RECORDING_SIGNAL_NULL_VALUE = -2147483648,\n}\npub use self::aeron_archive_client_recording_signal_en as aeron_archive_client_recording_signal_t;\n#[doc = \" Struct containing the details of a recording signal.\"]\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_recording_signal_stct {\n #[doc = \" Control session id of the originating session.\"]\n pub control_session_id: i64,\n #[doc = \" Recording ID of the recording which transitioned.\"]\n pub recording_id: i64,\n #[doc = \" Subscription ID of the subscription which captured the recording.\"]\n pub subscription_id: i64,\n #[doc = \" The position of the recording at the time of transition.\"]\n pub position: i64,\n #[doc = \" Raw code representing the operation the recording has undertaken.\"]\n pub recording_signal_code: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_recording_signal_stct\"]\n [::std::mem::size_of::<aeron_archive_recording_signal_stct>() - 40usize];\n [\"Alignment of aeron_archive_recording_signal_stct\"]\n [::std::mem::align_of::<aeron_archive_recording_signal_stct>() - 8usize];\n [\"Offset of field: aeron_archive_recording_signal_stct::control_session_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_signal_stct, control_session_id) - 0usize];\n [\"Offset of field: aeron_archive_recording_signal_stct::recording_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_signal_stct, recording_id) - 8usize];\n [\"Offset of field: aeron_archive_recording_signal_stct::subscription_id\"]\n [::std::mem::offset_of!(aeron_archive_recording_signal_stct, subscription_id) - 16usize];\n [\"Offset of field: aeron_archive_recording_signal_stct::position\"]\n [::std::mem::offset_of!(aeron_archive_recording_signal_stct, position) - 24usize];\n [\"Offset of field: aeron_archive_recording_signal_stct::recording_signal_code\"][::std::mem::offset_of!(\n aeron_archive_recording_signal_stct,\n recording_signal_code\n ) - 32usize];\n};\n#[doc = \" Struct containing the details of a recording signal.\"]\npub type aeron_archive_recording_signal_t = aeron_archive_recording_signal_stct;\n#[doc = \" Callback to return recording signals.\"]\npub type aeron_archive_recording_signal_consumer_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n recording_signal: *mut aeron_archive_recording_signal_t,\n clientd: *mut ::std::os::raw::c_void,\n ),\n>;\n#[repr(u32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_archive_source_location_en {\n AERON_ARCHIVE_SOURCE_LOCATION_LOCAL = 0,\n AERON_ARCHIVE_SOURCE_LOCATION_REMOTE = 1,\n}\npub use self::aeron_archive_source_location_en as aeron_archive_source_location_t;\nunsafe extern \"C\" {\n #[doc = \" Create an aeron_archive_context_t struct.\\n\\n @param ctx context to create and initialize\"]\n pub fn aeron_archive_context_init(\n ctx: *mut *mut aeron_archive_context_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Close and delete the aeron_archive_context_t struct.\\n\\n @param ctx context to delete\"]\n pub fn aeron_archive_context_close(ctx: *mut aeron_archive_context_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the client used for communicating with the local Media Driver.\\n <p>\\n This client will be closed with the aeron_archive_t is closed if aeron_archive_context_set_owns_aeron_client is true.\"]\n pub fn aeron_archive_context_set_aeron(\n ctx: *mut aeron_archive_context_t,\n aeron: *mut aeron_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_aeron(ctx: *mut aeron_archive_context_t) -> *mut aeron_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify whether or not this context owns the client and, therefore, takes responsibility for closing it.\"]\n pub fn aeron_archive_context_set_owns_aeron_client(\n ctx: *mut aeron_archive_context_t,\n owns_aeron_client: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_owns_aeron_client(ctx: *mut aeron_archive_context_t) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the top level Aeron directory used for communication between the Aeron client and the Media Driver.\"]\n pub fn aeron_archive_context_set_aeron_directory_name(\n ctx: *mut aeron_archive_context_t,\n aeron_directory_name: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_aeron_directory_name(\n ctx: *mut aeron_archive_context_t,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the channel used for sending requests to the Aeron Archive.\"]\n pub fn aeron_archive_context_set_control_request_channel(\n ctx: *mut aeron_archive_context_t,\n control_request_channel: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_request_channel(\n ctx: *mut aeron_archive_context_t,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the stream used for sending requests to the Aeron Archive.\"]\n pub fn aeron_archive_context_set_control_request_stream_id(\n ctx: *mut aeron_archive_context_t,\n control_request_stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_request_stream_id(\n ctx: *mut aeron_archive_context_t,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the channel used for receiving responses from the Aeron Archive.\"]\n pub fn aeron_archive_context_set_control_response_channel(\n ctx: *mut aeron_archive_context_t,\n control_response_channel: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_response_channel(\n ctx: *mut aeron_archive_context_t,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the stream used for receiving responses from the Aeron Archive.\"]\n pub fn aeron_archive_context_set_control_response_stream_id(\n ctx: *mut aeron_archive_context_t,\n control_response_stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_response_stream_id(\n ctx: *mut aeron_archive_context_t,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the channel used for receiving recording events from the Aeron Archive.\"]\n pub fn aeron_archive_context_set_recording_events_channel(\n ctx: *mut aeron_archive_context_t,\n recording_events_channel: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_recording_events_channel(\n ctx: *mut aeron_archive_context_t,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the stream id used for recording events channel.\"]\n pub fn aeron_archive_context_set_recording_events_stream_id(\n ctx: *mut aeron_archive_context_t,\n recording_events_stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_recording_events_stream_id(\n ctx: *mut aeron_archive_context_t,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the message timeout, in nanoseconds, to wait for sending or receiving a message.\"]\n pub fn aeron_archive_context_set_message_timeout_ns(\n ctx: *mut aeron_archive_context_t,\n message_timeout_ns: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_message_timeout_ns(ctx: *mut aeron_archive_context_t) -> u64;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the default term buffer length for the control request/response channels.\"]\n pub fn aeron_archive_context_set_control_term_buffer_length(\n ctx: *mut aeron_archive_context_t,\n control_term_buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_term_buffer_length(\n ctx: *mut aeron_archive_context_t,\n ) -> usize;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the default MTU length for the control request/response channels.\"]\n pub fn aeron_archive_context_set_control_mtu_length(\n ctx: *mut aeron_archive_context_t,\n control_mtu_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_mtu_length(ctx: *mut aeron_archive_context_t)\n -> usize;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the default MTU length for the control request/response channels.\"]\n pub fn aeron_archive_context_set_control_term_buffer_sparse(\n ctx: *mut aeron_archive_context_t,\n control_term_buffer_sparse: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_context_get_control_term_buffer_sparse(\n ctx: *mut aeron_archive_context_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the idle strategy function and associated state used by the client between polling calls.\"]\n pub fn aeron_archive_context_set_idle_strategy(\n ctx: *mut aeron_archive_context_t,\n idle_strategy_func: aeron_idle_strategy_func_t,\n idle_strategy_state: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the various credentials callbacks to use when connecting to the Aeron Archive.\"]\n pub fn aeron_archive_context_set_credentials_supplier(\n ctx: *mut aeron_archive_context_t,\n encoded_credentials: aeron_archive_credentials_encoded_credentials_supplier_func_t,\n on_challenge: aeron_archive_credentials_challenge_supplier_func_t,\n on_free: aeron_archive_credentials_free_func_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the callback to which recording signals are dispatched while polling for control responses.\"]\n pub fn aeron_archive_context_set_recording_signal_consumer(\n ctx: *mut aeron_archive_context_t,\n on_recording_signal: aeron_archive_recording_signal_consumer_func_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the callback to which errors are dispatched while executing archive client commands.\"]\n pub fn aeron_archive_context_set_error_handler(\n ctx: *mut aeron_archive_context_t,\n error_handler: aeron_error_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Specify the callback to be invoked in addition to any invoker used by the Aeron instance.\\n <p>\\n Useful when running in a low thread count environment.\"]\n pub fn aeron_archive_context_set_delegating_invoker(\n ctx: *mut aeron_archive_context_t,\n delegating_invoker_func: aeron_archive_delegating_invoker_func_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Begin an attempt at creating a connection which can be completed by calling aeron_archive_async_connect_poll.\\n\\n @param async aeron_archive_async_connect_t to create and initialize\\n @param ctx aeron_archive_context_t for the archive connection\"]\n pub fn aeron_archive_async_connect(\n async_: *mut *mut aeron_archive_async_connect_t,\n ctx: *mut aeron_archive_context_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for a complete connection.\\n\\n @param aeron_archive aeron_archive_t that will be created/initialized upon successful connection\\n @param async aeron_archive_async_connect_t to poll\\n @return -1 for failure, 0 for \'try again\', and 1 for success\\n <p>\\n Note that after a return of either -1 or 1, the provided aeron_archive_async_connect_t will have been deleted.\\n <p>\\n Also note that after a return of 1, the aeron_archive pointer will be set to a ready to use aeron_archive_t.\"]\n pub fn aeron_archive_async_connect_poll(\n aeron_archive: *mut *mut aeron_archive_t,\n async_: *mut aeron_archive_async_connect_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Connect to an Aeron Archive.\\n\\n @param aeron_archive aeron_archive_t that will be created/initialized upon successful connection\\n @param ctx aeron_archive_context_t for the archive connection\"]\n pub fn aeron_archive_connect(\n aeron_archive: *mut *mut aeron_archive_t,\n ctx: *mut aeron_archive_context_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Close the connection to the Aeron Archive and free up associated resources.\"]\n pub fn aeron_archive_close(aeron_archive: *mut aeron_archive_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieve the underlying aeron_archive_context_t used to configure the provided aeron_archive_t.\"]\n pub fn aeron_archive_get_archive_context(\n aeron_archive: *mut aeron_archive_t,\n ) -> *mut aeron_archive_context_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieve the underlying aeron_archive_context_t used to configure the provided aeron_archive_t.\\n <p>\\n Additionally, calling this function transfers ownership of the returned aeron_archive_context_t to the caller.\\n i.e. it is now the the caller\'s responsibility to close the context.\\n This is useful when wrapping the C library in other, higher level languages.\"]\n pub fn aeron_archive_get_and_own_archive_context(\n aeron_archive: *mut aeron_archive_t,\n ) -> *mut aeron_archive_context_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieve the archive id of the connected Aeron Archive.\"]\n pub fn aeron_archive_get_archive_id(aeron_archive: *mut aeron_archive_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieve the underlying aeron_subscription_t used for reading responses from the connected Aeron Archive.\"]\n pub fn aeron_archive_get_control_response_subscription(\n aeron_archive: *mut aeron_archive_t,\n ) -> *mut aeron_subscription_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Retrieve the underlying aeron_subscription_t used for reading responses from the connected Aeron Archive.\\n <p>\\n Additionally, calling this function transfers ownership of the returned aeron_subscription_t to the caller.\\n i.e. it is now the caller\'s responsibility to close the subscription.\\n This is useful when wrapping the C library in other, high level languages.\"]\n pub fn aeron_archive_get_and_own_control_response_subscription(\n aeron_archive: *mut aeron_archive_t,\n ) -> *mut aeron_subscription_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_control_session_id(aeron_archive: *mut aeron_archive_t) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll for recording signals, dispatching them to the configured aeron_archive_recording_signal_consumer_func_t in the context\\n\\n @param count_p out param that indicates the number of recording signals dispatched.\\n @return 0 for success, -1 for failure.\"]\n pub fn aeron_archive_poll_for_recording_signals(\n count_p: *mut i32,\n aeron_archive: *mut aeron_archive_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the response stream once for an error.\\n If another message is present then it will be skipped over, so only call when not expecting another response.\\n\\n @return 0 if an error sent from the Aeron Archive is found, in which case, the provided buffer contains the error message.\\n If there was no error, the buffer will be an empty string.\\n <p>\\n -1 if an error occurs while attempting to read from the subscription.\"]\n pub fn aeron_archive_poll_for_error_response(\n aeron_archive: *mut aeron_archive_t,\n buffer: *mut ::std::os::raw::c_char,\n buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the response stream once for an error.\\n\\n @return 0 if no error is found OR if an error is found but an error handler is specified in the context.\\n <p>\\n -1 if an error is found and no error handler is specified. The error message can be retrieved by calling aeron_errmsg()\"]\n pub fn aeron_archive_check_for_error_response(\n aeron_archive: *mut aeron_archive_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Add a publication and set it up to be recorded.\\n\\n @param publication_p out param set to the aeron_publication_t upon success\\n @param aeron_archive the archive client\\n @param channel the channel for the publication\\n @param stream_id the stream id for the publication\"]\n pub fn aeron_archive_add_recorded_publication(\n publication_p: *mut *mut aeron_publication_t,\n aeron_archive: *mut aeron_archive_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Add an exclusive publication and set it up to be recorded.\\n\\n @param publication_p out param set to the aeron_exclusive_publication_t upon success\\n @param aeron_archive the archive client\\n @param channel the channel for the exclusive publication\\n @param stream_id the stream id for the exclusive publication\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_add_recorded_exclusive_publication(\n exclusive_publication_p: *mut *mut aeron_exclusive_publication_t,\n aeron_archive: *mut aeron_archive_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Start recording a channel/stream pairing.\\n <p>\\n Channels that include session id parameters are considered different than channels without session ids.\\n If a publication matches both a session id specific channel recording and a non session id specific recording,\\n it will be recorded twice.\\n\\n @param subscription_id_p out param set to the subscription id of the recording\\n @param aeron_archive the archive client\\n @param recording_channel the channel of the publication to be recorded\\n @param recording_stream_id the stream id of the publication to be recorded\\n @param source_location the source location of the publication to be recorded\\n @param auto_stop should the recording be automatically stopped when complete\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_start_recording(\n subscription_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_channel: *const ::std::os::raw::c_char,\n recording_stream_id: i32,\n source_location: aeron_archive_source_location_t,\n auto_stop: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Fetch the position recorded for the specified recording.\\n\\n @param recording_position_p out param set to the recording position of the specified recording\\n @param aeron_archive the archive client\\n @param recording_id the active recording id\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_get_recording_position(\n recording_position_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Fetch the start position for the specified recording.\\n\\n @param start_position_p out param set to the start position of the specified recording\\n @param aeron_archive the archive client\\n @param recording_id the active recording id\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_get_start_position(\n start_position_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Fetch the stop position for the specified recording.\\n\\n @param stop_position_p out param set to the stop position of the specified recording\\n @param aeron_archive the archive client\\n @param recording_id the active recording id\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_get_stop_position(\n stop_position_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Fetch the stop or active position for the specified recording.\\n\\n @param max_recorded_position_p out param set to the stop or active position of the specified recording\\n @param aeron_archive the archive client\\n @param recording_id the active recording id\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_get_max_recorded_position(\n max_recorded_position_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop recording for the specified subscription id.\\n This is the subscription id returned from aeron_archive_start_recording or aeron_archive_extend_recording.\\n\\n @param aeron_archive the archive client\\n @param subscription_id the subscription id for the recording in the Aeron Archive\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_recording_subscription(\n aeron_archive: *mut aeron_archive_t,\n subscription_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Try to stop a recording for the specified subscription id.\\n This is the subscription id returned from aeron_archive_start_recording or aeron_archive_extend_recording.\\n\\n @param stopped_p out param indicating true if stopped, or false if the subscription is not currently active\\n @param aeron_archive the archive client\\n @param subscription_id the subscription id for the recording in the Aeron Archive\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_try_stop_recording_subscription(\n stopped_p: *mut bool,\n aeron_archive: *mut aeron_archive_t,\n subscription_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop recording for the specified channel and stream.\\n <p>\\n Channels that include session id parameters are considered different than channels without session ids.\\n Stopping a recording on a channel without a session id parameter will not stop the recording of any\\n session id specific recordings that use the same channel and stream id.\\n\\n @param aeron_archive the archive client\\n @param channel the channel of the recording to be stopped\\n @param stream_id the stream id of the recording to be stopped\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_recording_channel_and_stream(\n aeron_archive: *mut aeron_archive_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Try to stop recording for the specified channel and stream.\\n <p>\\n Channels that include session id parameters are considered different than channels without session ids.\\n Stopping a recording on a channel without a session id parameter will not stop the recording of any\\n session id specific recordings that use the same channel and stream id.\\n\\n @param stopped_p out param indicating true if stopped, or false if the channel/stream pair is not currently active\\n @param aeron_archive the archive client\\n @param channel the channel of the recording to be stopped\\n @param stream_id the stream id of the recording to be stopped\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_try_stop_recording_channel_and_stream(\n stopped_p: *mut bool,\n aeron_archive: *mut aeron_archive_t,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop recording for the specified recording id.\\n\\n @param stopped_p out param indicating true if stopped, or false if the recording is not currently active\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording to be stopped\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_try_stop_recording_by_identity(\n stopped_p: *mut bool,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop recording a session id specific recording that pertains to the given publication.\\n\\n @param aeron_archive the archive client\\n @param publication the publication to stop recording\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_recording_publication(\n aeron_archive: *mut aeron_archive_t,\n publication: *mut aeron_publication_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop recording a session id specific recording that pertains to the given exclusive publication.\\n\\n @param aeron_archive the archive client\\n @param exclusive_publication the exclusive publication to stop recording\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_recording_exclusive_publication(\n aeron_archive: *mut aeron_archive_t,\n exclusive_publication: *mut aeron_exclusive_publication_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Find the last recording that matches the given criteria.\\n\\n @param recording_id_p out param for the recording id that matches\\n @param aeron_archive the archive client\\n @param min_recording_id the lowest recording id to search back to\\n @param channel_fragment for a \'contains\' match on the original channel stored with the Aeron Archive\\n @param stream_id the stream id of the recording\\n @param session_id the session id of the recording\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_find_last_matching_recording(\n recording_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n min_recording_id: i64,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n session_id: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" List a recording descriptor for a single recording id.\\n\\n @param count_p out param indicating the number of descriptors found\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording\\n @param recording_descriptor_consumer to be called for each descriptor\\n @param recording_descriptor_consumer_clientd to be passed for each descriptor\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_list_recording(\n count_p: *mut i32,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n recording_descriptor_consumer: aeron_archive_recording_descriptor_consumer_func_t,\n recording_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" List all recording descriptors starting at a particular recording id, with a limit of total descriptors delivered.\\n\\n @param count_p out param indicating the number of descriptors found\\n @param aeron_archive the archive client\\n @param from_recording_id the id at which to begin the listing\\n @param record_count the limit of total descriptors to deliver\\n @param recording_descriptor_consumer to be called for each descriptor\\n @param recording_descriptor_consumer_clientd to be passed for each descriptor\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_list_recordings(\n count_p: *mut i32,\n aeron_archive: *mut aeron_archive_t,\n from_recording_id: i64,\n record_count: i32,\n recording_descriptor_consumer: aeron_archive_recording_descriptor_consumer_func_t,\n recording_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" List all recording descriptors for a given channel fragment and stream id, starting at a particular recording id, with a limit of total descriptors delivered.\\n\\n @param count_p out param indicating the number of descriptors found\\n @param aeron_archive the archive client\\n @param from_recording_id the id at which to begin the listing\\n @param record_count the limit of total descriptors to deliver\\n @param channel_fragment for a \'contains\' match on the original channel stored with the Aeron Archive\\n @param stream_id the stream id of the recording\\n @param recording_descriptor_consumer to be called for each descriptor\\n @param recording_descriptor_consumer_clientd to be passed for each descriptor\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_list_recordings_for_uri(\n count_p: *mut i32,\n aeron_archive: *mut aeron_archive_t,\n from_recording_id: i64,\n record_count: i32,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n recording_descriptor_consumer: aeron_archive_recording_descriptor_consumer_func_t,\n recording_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Start a replay\\n <p>\\n The lower 32-bits of the replay session id contain the session id of the image of the received replay\\n and can be obtained by casting the replay session id to an int32_t.\\n All 64-bits are required to uniquely identify the replay when calling aeron_archive_stop_replay.\\n\\n @param replay_session_id_p out param set to the replay session id\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording\\n @param replay_channel the channel to which the replay should be sent\\n @param replay_stream_id the stream id to which the replay should be sent\\n @param params the aeron_archive_replay_params_t that control the behaviour of the replay\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_start_replay(\n replay_session_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n replay_channel: *const ::std::os::raw::c_char,\n replay_stream_id: i32,\n params: *mut aeron_archive_replay_params_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Start a replay.\\n\\n @param subscription_p out param set to the subscription created for consuming the replay\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording\\n @param replay_channel the channel to which the replay should be sent\\n @param replay_stream_id the stream id to which the replay should be sent\\n @param params the aeron_archive_replay_params_t that control the behaviour of the replay\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_replay(\n subscription_p: *mut *mut aeron_subscription_t,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n replay_channel: *const ::std::os::raw::c_char,\n replay_stream_id: i32,\n params: *mut aeron_archive_replay_params_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Truncate a stopped recording to the specified position.\\n The position must be less than the stopped position.\\n The position must be on a fragment boundary.\\n Truncating a recording to the start position effectively deletes the recording.\\n\\n @param count_p out param set to the number of segments deleted\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording\\n @param position the position to which the recording will be truncated\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_truncate_recording(\n count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n position: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop a replay session.\\n\\n @param aeron_archive the archive client\\n @param replay_session_id the replay session id indicating the replay to stop\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_replay(\n aeron_archive: *mut aeron_archive_t,\n replay_session_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop all replays matching a recording id.\\n If recording_id is AERON_NULL_VALUE then match all replays.\\n\\n @param aeron_archive the archive client\\n @param recording_id the id of the recording for which all replays will be stopped\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_all_replays(\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" List active recording subscriptions in the Aeron Archive.\\n These are the result of calling aeron_archive_start_recording or aeron_archive_extend_recording.\\n The subscription id in the returned descriptor can be used when calling aeron_archive_stop_recording_subscription.\\n\\n @param count_p out param set to the count of matched subscriptions\\n @param aeron_archive the archive client\\n @param pseudo_index the index into the active list at which to begin listing\\n @param subscription_count the limit of total descriptors to deliver\\n @param channel_fragment for a \'contains\' match on the original channel stored with the Aeron Archive\\n @param stream_id the stream id of the recording\\n @param apply_stream_id whether or not the stream id should be matched\\n @param recording_subscription_descriptor_consumer to be called for each descriptor\\n @param recording_subscription_descriptor_consumer_clientd to be passed for each descriptor\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_list_recording_subscriptions(\n count_p: *mut i32,\n aeron_archive: *mut aeron_archive_t,\n pseudo_index: i32,\n subscription_count: i32,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n apply_stream_id: bool,\n recording_subscription_descriptor_consumer : aeron_archive_recording_subscription_descriptor_consumer_func_t,\n recording_subscription_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Purge a stopped recording.\\n i.e. Mark the recording as INVALID at the Archive and delete the corresponding segment files.\\n The space in the Catalog will be reclaimed upon compaction.\\n\\n @param deleted_segments_count_p out param set to the number of deleted segments\\n @param aeron_archive the archive client\\n @param recording_id the id of the stopped recording to be purged\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_purge_recording(\n deleted_segments_count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Extend an existing, non-active recording for a channel and stream pairing.\\n <p>\\n The channel must be configured with the initial position from which it will be extended.\\n This can be done with aeron_uri_string_builder_set_initial_position.\\n The details required to initialize can be found by calling aeron_archive_list_recording.\\n\\n @param subscription_id_p out param set to the subscription id of the recording\\n @param aeron_archive the archive client\\n @param recording_id the id of the existing recording\\n @param recording_channel the channel of the publication to be recorded\\n @param recording_stream_id the stream id of the publication to be recorded\\n @param source_location the source location of the publication to be recorded\\n @param auto_stop should the recording be automatically stopped when complete\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_extend_recording(\n subscription_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n recording_channel: *const ::std::os::raw::c_char,\n recording_stream_id: i32,\n source_location: aeron_archive_source_location_t,\n auto_stop: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Replicate a recording from a source Archive to a destination.\\n This can be considered a backup for a primary Archive.\\n The source recording will be replayed via the provided replay channel and use the original stream id.\\n The behavior of the replication will be governed by the values specified in the aeron_archive_replication_params_t.\\n <p>\\n For a source recording that is still active, the replay can merge with the live stream and then follow it directly and no longer require the replay from the source.\\n This would require a multicast live destination.\\n <p>\\n Errors will be reported asynchronously and can be checked for with aeron_archive_check_for_error_response and aeron_archive_poll_for_error_response.\\n\\n @param replication_id_p out param set to the replication id that can be used to stop the replication\\n @param aeron_archive the archive client\\n @param src_recording_id the recording id that must exist at the source Archive\\n @param src_control_channel remote control channel for the source archive on which to instruct the replay\\n @param src_control_stream_id remote control stream id for the source archive on which to instruct the replay\\n @param params optional parameters to configure the behavior of the replication\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_replicate(\n replication_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n src_recording_id: i64,\n src_control_channel: *const ::std::os::raw::c_char,\n src_control_stream_id: i32,\n params: *mut aeron_archive_replication_params_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Stop a replication by the replication id.\\n\\n @param aeron_archive the archive client\\n @param replication_id the replication id retrieved when calling aeron_archive_replicate\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_stop_replication(\n aeron_archive: *mut aeron_archive_t,\n replication_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Try to stop a replication by the replication id.\\n\\n @param stopped_p out param indicating true if stopped, or false if the recording is not currently active\\n @param aeron_archive the archive client\\n @param replication_id the replication id retrieved when calling aeron_archive_replicate\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_try_stop_replication(\n stopped_p: *mut bool,\n aeron_archive: *mut aeron_archive_t,\n replication_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Detach segments from the beginning of a recording up to the provided new start position.\\n <p>\\n The new start position must be the first byte position of a segment after the existing start position.\\n <p>\\n It is not possible to detach segments which are active for recording or being replayed.\\n\\n @param aeron_archive the archive client\\n @param recording_id the id of an existing recording\\n @param new_start_position the new starting position for the recording after the segments are detached\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_detach_segments(\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n new_start_position: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Delete segments which have been previously detached from a recording.\\n\\n @param count_p out param set to the number of segments deleted\\n @param aeron_archive the archive client\\n @param recording_id the id of an existing recording\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_delete_detached_segments(\n count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Purge (Detach and delete) segments from the beginning of a recording up to the provided new start position.\\n <p>\\n The new start position must be the first byte position of a segment after the existing start position.\\n <p>\\n It is not possible to detach segments which are active for recording or being replayed.\\n\\n @param count_p out param set to the number of segments deleted\\n @param aeron_archive the archive client\\n @param recording_id the id of an existing recording\\n @param new_start_position the new starting position for the recording after the segments are detached\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_purge_segments(\n count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n new_start_position: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Attach segments to the beginning of a recording to restore history that was previously detached.\\n <p>\\n Segment files must match the existing recording and join exactly to the start position of the recording they are being attached to.\\n\\n @param count_p out param set to the number of segments attached\\n @param aeron_archive the archive client\\n @param recording_id the id of an existing recording\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_attach_segments(\n count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Migrate segments from a source recording and attach them to the beginning of a destination recording.\\n <p>\\n The source recording must match the destination recording for segment length, term length, mtu length,\\n stream id, plus the stop position and term id of the source must join with the start position of the destination\\n and be on a segment boundary.\\n <p>\\n The source recording will be effectively truncated back to its start position after the migration.\\n\\n @param count_p out param set to the number of segments deleted\\n @param aeron_archive the archive client\\n @param src_recording_id the id of an existing recording from which segments will be migrated\\n @param dst_recording_id the id of an existing recording to which segments will be migrated\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_migrate_segments(\n count_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n src_recording_id: i64,\n dst_recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Position of the recorded stream at the base of a segment file.\\n <p>\\n If a recording starts within a term then the base position can be before the recording started.\\n\\n @param start_position start position of the stream\\n @param position position in the stream to calculate the segment base position from.\\n @param term_buffer_length term buffer length of the stream\\n @param segment_file_length segment file length, which is a multiple of term buffer length\\n @return the position of the recorded stream at the beginning of a segment file\"]\n pub fn aeron_archive_segment_file_base_position(\n start_position: i64,\n position: i64,\n term_buffer_length: i32,\n segment_file_length: i32,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Find the active counter id for a stream based on the recording id.\\n\\n @param counters_reader an aeron_counters_reader_t to search within\\n @param recording_id the recording id of an active recording\\n @return the counter id if found, otherwise AERON_NULL_COUNTER_ID\"]\n pub fn aeron_archive_recording_pos_find_counter_id_by_recording_id(\n counters_reader: *mut aeron_counters_reader_t,\n recording_id: i64,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Find the active counter id for a stream based on the session id.\\n\\n @param counters_reader an aeron_counters_reader_t to search within\\n @param session_id the session id of an active recording\\n @return the counter id if found, otherwise AERON_NULL_COUNTER_ID\"]\n pub fn aeron_archive_recording_pos_find_counter_id_by_session_id(\n counters_reader: *mut aeron_counters_reader_t,\n session_id: i32,\n ) -> i32;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the recording id for a given counter id.\\n\\n @param counters_reader an aeron_counters_reader_t to search within\\n @param counter_id the counter id of an active recording\\n @return the recording id if found, otherwise AERON_NULL_COUNTER_ID\"]\n pub fn aeron_archive_recording_pos_get_recording_id(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n ) -> i64;\n}\nunsafe extern \"C\" {\n #[doc = \" Get the source identity for the recording.\\n <p>\\n See source_identity in aeron_image_constants_t.\\n\\n @param counters_reader an aeron_counters_reader_t to search within\\n @param counter_id the counter id of an active recording\\n @param dst a destination buffer into which the source identity will be written\\n @param len_p a pointer to a size_t that initially indicates the length of the dst buffer. After the function return successfully, len_p will be set to the length of the source identity string in dst\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_recording_pos_get_source_identity(\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n dst: *const ::std::os::raw::c_char,\n len_p: *mut usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Is the recording counter still active?\\n\\n @param is_active out param set to true if the counter is still active\\n @param counters_reader an aeron_counters_reader_t to search within\\n @param counter_id the counter id to search for\\n @param recording_id the recording id to match against\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_recording_pos_is_active(\n is_active: *mut bool,\n counters_reader: *mut aeron_counters_reader_t,\n counter_id: i32,\n recording_id: i64,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone)]\npub struct aeron_archive_replay_merge_stct {\n _unused: [u8; 0],\n}\npub type aeron_archive_replay_merge_t = aeron_archive_replay_merge_stct;\nunsafe extern \"C\" {\n #[doc = \" Create an aeron_archive_replay_merge_t to manage the merging of a replayed stream into a live stream.\\n\\n @param replay_merge the aeron_archive_replay_merge_t to create and initialize\\n @param subscription the subscription to use for the replay and live stream. Must be a multi-destination subscription\\n @param aeron_archive the archive client\\n @param replay_channel the channel to use for the replay\\n @param replay_destination the replay channel to use for the destination added by the subscription\\n @param live_destination the live stream channel to use for the destination added by the subscription\\n @param recording_id the recording id of the archive to replay\\n @param start_position the start position of the replay\\n @param epoch_clock the clock to use for progress checks\\n @param merge_progress_timeout_ms the timeout to use for progress checks\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_replay_merge_init(\n replay_merge: *mut *mut aeron_archive_replay_merge_t,\n subscription: *mut aeron_subscription_t,\n aeron_archive: *mut aeron_archive_t,\n replay_channel: *const ::std::os::raw::c_char,\n replay_destination: *const ::std::os::raw::c_char,\n live_destination: *const ::std::os::raw::c_char,\n recording_id: i64,\n start_position: i64,\n epoch_clock: ::std::os::raw::c_longlong,\n merge_progress_timeout_ms: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Close and delete the aeron_archive_replay_merge_t struct.\\n\\n @param replay_merge the aeron_archive_replay_merge_t to close and delete\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_replay_merge_close(\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Process the operation of the merge. Do not call the processing of fragments on the subscription.\\n\\n @param work_count_p an indicator of work done\\n @param replay_merge the replay_merge to process\\n @return 0 for success, -1 for failure\"]\n pub fn aeron_archive_replay_merge_do_work(\n work_count_p: *mut ::std::os::raw::c_int,\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" Poll the image used for the merging replay and live stream.\\n The aeron_archive_replay_merge_do_work will be called before the poll so that processing of the merge can be done.\\n\\n @param replay_merge the replay_merge to process/poll\\n @param handler the handler to call for incoming fragments\\n @param clientd the clientd to provide to the handler\\n @param fragment_limit the max number of fragments to process before returning\\n @return >= 0 indicates the number of fragments processed, -1 for failure\"]\n pub fn aeron_archive_replay_merge_poll(\n replay_merge: *mut aeron_archive_replay_merge_t,\n handler: aeron_fragment_handler_t,\n clientd: *mut ::std::os::raw::c_void,\n fragment_limit: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n #[doc = \" The image used for the replay and live stream.\\n\\n @param replay_merge the replay_merge that owns the image.\\n @return the aeron_image_t\"]\n pub fn aeron_archive_replay_merge_image(\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> *mut aeron_image_t;\n}\nunsafe extern \"C\" {\n #[doc = \" Is the live stream merged and the replay stopped?\\n\\n @param replay_merge the replay_merge to check\\n @return true if merged, false otherwise\"]\n pub fn aeron_archive_replay_merge_is_merged(\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Has the replay_merge failed due to an error?\\n\\n @param replay_merge the replay_merge to check\\n @return true if an error occurred\"]\n pub fn aeron_archive_replay_merge_has_failed(\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n #[doc = \" Is the live destination added to the subscription?\\n\\n @param replay_merge the replay_merge to check\\n @return true if the live destination is added to the subscription\"]\n pub fn aeron_archive_replay_merge_is_live_added(\n replay_merge: *mut aeron_archive_replay_merge_t,\n ) -> bool;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_proxy_stct {\n pub ctx: *mut aeron_archive_context_t,\n pub exclusive_publication: *mut aeron_exclusive_publication_t,\n pub control_session_id: i64,\n pub retry_attempts: ::std::os::raw::c_int,\n pub buffer: [u8; 8192usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_proxy_stct\"]\n [::std::mem::size_of::<aeron_archive_proxy_stct>() - 8224usize];\n [\"Alignment of aeron_archive_proxy_stct\"]\n [::std::mem::align_of::<aeron_archive_proxy_stct>() - 8usize];\n [\"Offset of field: aeron_archive_proxy_stct::ctx\"]\n [::std::mem::offset_of!(aeron_archive_proxy_stct, ctx) - 0usize];\n [\"Offset of field: aeron_archive_proxy_stct::exclusive_publication\"]\n [::std::mem::offset_of!(aeron_archive_proxy_stct, exclusive_publication) - 8usize];\n [\"Offset of field: aeron_archive_proxy_stct::control_session_id\"]\n [::std::mem::offset_of!(aeron_archive_proxy_stct, control_session_id) - 16usize];\n [\"Offset of field: aeron_archive_proxy_stct::retry_attempts\"]\n [::std::mem::offset_of!(aeron_archive_proxy_stct, retry_attempts) - 24usize];\n [\"Offset of field: aeron_archive_proxy_stct::buffer\"]\n [::std::mem::offset_of!(aeron_archive_proxy_stct, buffer) - 28usize];\n};\nimpl Default for aeron_archive_proxy_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_archive_proxy_t = aeron_archive_proxy_stct;\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_create(\n archive_proxy: *mut *mut aeron_archive_proxy_t,\n ctx: *mut aeron_archive_context_t,\n exclusive_publication: *mut aeron_exclusive_publication_t,\n retry_attempts: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_init(\n archive_proxy: *mut aeron_archive_proxy_t,\n ctx: *mut aeron_archive_context_t,\n exclusive_publication: *mut aeron_exclusive_publication_t,\n retry_attempts: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_set_control_esssion_id(\n archive_proxy: *mut aeron_archive_proxy_t,\n control_session_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_close(\n archive_proxy: *mut aeron_archive_proxy_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_delete(\n archive_proxy: *mut aeron_archive_proxy_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_try_connect(\n archive_proxy: *mut aeron_archive_proxy_t,\n control_response_channel: *const ::std::os::raw::c_char,\n control_response_stream_id: i32,\n encoded_credentials: *mut aeron_archive_encoded_credentials_t,\n correlation_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_archive_id(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_challenge_response(\n archive_proxy: *mut aeron_archive_proxy_t,\n encoded_credentials: *mut aeron_archive_encoded_credentials_t,\n correlation_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_close_session(archive_proxy: *mut aeron_archive_proxy_t) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_start_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n recording_channel: *const ::std::os::raw::c_char,\n recording_stream_id: i32,\n local_source: bool,\n auto_stop: bool,\n correlation_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_get_recording_position(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_get_start_position(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_get_stop_position(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_get_max_recorded_position(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n channel: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_recording_subscription(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n subscription_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_recording_by_identity(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_find_last_matching_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n min_recording_id: i64,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n session_id: i32,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_list_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_list_recordings(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n from_recording_id: i64,\n record_count: i32,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_list_recordings_for_uri(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n from_recording_id: i64,\n record_count: i32,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_replay(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n replay_channel: *const ::std::os::raw::c_char,\n replay_stream_id: i32,\n params: *mut aeron_archive_replay_params_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_truncate_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n position: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_replay(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n replay_session_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_all_replays(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_list_recording_subscriptions(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n pseudo_index: i32,\n subscription_count: i32,\n channel_fragment: *const ::std::os::raw::c_char,\n stream_id: i32,\n apply_stream_id: bool,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_purge_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_extend_recording(\n archive_proxy: *mut aeron_archive_proxy_t,\n recording_id: i64,\n recording_channel: *const ::std::os::raw::c_char,\n recording_stream_id: i32,\n local_source: bool,\n auto_stop: bool,\n correlation_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_replicate(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n src_recording_id: i64,\n src_control_stream_id: i32,\n src_control_channel: *const ::std::os::raw::c_char,\n params: *mut aeron_archive_replication_params_t,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_stop_replication(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n replication_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_request_replay_token(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_detach_segments(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n new_start_position: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_delete_detached_segments(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_purge_segments(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n new_start_position: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_attach_segments(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n recording_id: i64,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy_migrate_segments(\n archive_proxy: *mut aeron_archive_proxy_t,\n correlation_id: i64,\n src_recording_id: i64,\n dst_recording_id: i64,\n ) -> bool;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_control_response_poller_stct {\n pub subscription: *mut aeron_subscription_t,\n pub fragment_limit: ::std::os::raw::c_int,\n pub fragment_assembler: *mut aeron_controlled_fragment_assembler_t,\n pub error_on_fragment: bool,\n pub control_session_id: i64,\n pub correlation_id: i64,\n pub relevant_id: i64,\n pub recording_id: i64,\n pub subscription_id: i64,\n pub position: i64,\n pub recording_signal_code: i32,\n pub version: i32,\n pub error_message: *mut ::std::os::raw::c_char,\n pub error_message_malloced_len: u32,\n pub encoded_challenge_buffer: *mut ::std::os::raw::c_char,\n pub encoded_challenge_buffer_malloced_len: u32,\n pub encoded_challenge: aeron_archive_encoded_credentials_t,\n pub code_value: ::std::os::raw::c_int,\n pub is_poll_complete: bool,\n pub is_code_ok: bool,\n pub is_code_error: bool,\n pub is_control_response: bool,\n pub was_challenged: bool,\n pub is_recording_signal: bool,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_control_response_poller_stct\"]\n [::std::mem::size_of::<aeron_archive_control_response_poller_stct>() - 152usize];\n [\"Alignment of aeron_archive_control_response_poller_stct\"]\n [::std::mem::align_of::<aeron_archive_control_response_poller_stct>() - 8usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::subscription\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, subscription) - 0usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::fragment_limit\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n fragment_limit\n ) - 8usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::fragment_assembler\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n fragment_assembler\n )\n - 16usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::error_on_fragment\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n error_on_fragment\n ) - 24usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::control_session_id\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n control_session_id\n )\n - 32usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::correlation_id\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n correlation_id\n ) - 40usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::relevant_id\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, relevant_id) - 48usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::recording_id\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n recording_id\n ) - 56usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::subscription_id\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n subscription_id\n ) - 64usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::position\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, position) - 72usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::recording_signal_code\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n recording_signal_code\n )\n - 80usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::version\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, version) - 84usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::error_message\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n error_message\n ) - 88usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::error_message_malloced_len\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n error_message_malloced_len\n )\n - 96usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::encoded_challenge_buffer\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n encoded_challenge_buffer\n )\n - 104usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::encoded_challenge_buffer_malloced_len\"] [:: std :: mem :: offset_of ! (aeron_archive_control_response_poller_stct , encoded_challenge_buffer_malloced_len) - 112usize] ;\n [\"Offset of field: aeron_archive_control_response_poller_stct::encoded_challenge\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n encoded_challenge\n )\n - 120usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::code_value\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, code_value) - 136usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::is_poll_complete\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n is_poll_complete\n ) - 140usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::is_code_ok\"]\n [::std::mem::offset_of!(aeron_archive_control_response_poller_stct, is_code_ok) - 141usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::is_code_error\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n is_code_error\n ) - 142usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::is_control_response\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n is_control_response\n )\n - 143usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::was_challenged\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n was_challenged\n ) - 144usize];\n [\"Offset of field: aeron_archive_control_response_poller_stct::is_recording_signal\"][::std::mem::offset_of!(\n aeron_archive_control_response_poller_stct,\n is_recording_signal\n )\n - 145usize];\n};\nimpl Default for aeron_archive_control_response_poller_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_archive_control_response_poller_t = aeron_archive_control_response_poller_stct;\nunsafe extern \"C\" {\n pub fn aeron_archive_control_response_poller_create(\n poller: *mut *mut aeron_archive_control_response_poller_t,\n subscription: *mut aeron_subscription_t,\n fragment_limit: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_control_response_poller_close(\n poller: *mut aeron_archive_control_response_poller_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_control_response_poller_poll(\n poller: *mut aeron_archive_control_response_poller_t,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_recording_descriptor_poller_stct {\n pub ctx: *mut aeron_archive_context_t,\n pub subscription: *mut aeron_subscription_t,\n pub control_session_id: i64,\n pub fragment_limit: ::std::os::raw::c_int,\n pub fragment_assembler: *mut aeron_controlled_fragment_assembler_t,\n pub error_on_fragment: bool,\n pub correlation_id: i64,\n pub remaining_record_count: i32,\n pub recording_descriptor_consumer: aeron_archive_recording_descriptor_consumer_func_t,\n pub recording_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n pub is_dispatch_complete: bool,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_recording_descriptor_poller_stct\"]\n [::std::mem::size_of::<aeron_archive_recording_descriptor_poller_stct>() - 88usize];\n [\"Alignment of aeron_archive_recording_descriptor_poller_stct\"]\n [::std::mem::align_of::<aeron_archive_recording_descriptor_poller_stct>() - 8usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::ctx\"]\n [::std::mem::offset_of!(aeron_archive_recording_descriptor_poller_stct, ctx) - 0usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::subscription\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n subscription\n ) - 8usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::control_session_id\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n control_session_id\n )\n - 16usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::fragment_limit\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n fragment_limit\n )\n - 24usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::fragment_assembler\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n fragment_assembler\n )\n - 32usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::error_on_fragment\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n error_on_fragment\n )\n - 40usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::correlation_id\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n correlation_id\n )\n - 48usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::remaining_record_count\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n remaining_record_count\n )\n - 56usize];\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::recording_descriptor_consumer\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_descriptor_poller_stct , recording_descriptor_consumer) - 64usize] ;\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::recording_descriptor_consumer_clientd\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_descriptor_poller_stct , recording_descriptor_consumer_clientd) - 72usize] ;\n [\"Offset of field: aeron_archive_recording_descriptor_poller_stct::is_dispatch_complete\"][::std::mem::offset_of!(\n aeron_archive_recording_descriptor_poller_stct,\n is_dispatch_complete\n )\n - 80usize];\n};\nimpl Default for aeron_archive_recording_descriptor_poller_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_archive_recording_descriptor_poller_t =\n aeron_archive_recording_descriptor_poller_stct;\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_descriptor_poller_create(\n poller: *mut *mut aeron_archive_recording_descriptor_poller_t,\n ctx: *mut aeron_archive_context_t,\n subscription: *mut aeron_subscription_t,\n control_session_id: i64,\n fragment_limit: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_descriptor_poller_close(\n poller: *mut aeron_archive_recording_descriptor_poller_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_descriptor_poller_reset(\n poller: *mut aeron_archive_recording_descriptor_poller_t,\n correlation_id: i64,\n record_count: i32,\n recording_descriptor_consumer: aeron_archive_recording_descriptor_consumer_func_t,\n recording_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_descriptor_poller_poll(\n poller: *mut aeron_archive_recording_descriptor_poller_t,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_recording_subscription_descriptor_poller_stct {\n pub ctx: *mut aeron_archive_context_t,\n pub subscription: *mut aeron_subscription_t,\n pub control_session_id: i64,\n pub fragment_limit: ::std::os::raw::c_int,\n pub fragment_assembler: *mut aeron_controlled_fragment_assembler_t,\n pub error_on_fragment: bool,\n pub correlation_id: i64,\n pub remaining_subscription_count: i32,\n pub recording_subscription_descriptor_consumer:\n aeron_archive_recording_subscription_descriptor_consumer_func_t,\n pub recording_subscription_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n pub is_dispatch_complete: bool,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_recording_subscription_descriptor_poller_stct\"][::std::mem::size_of::<\n aeron_archive_recording_subscription_descriptor_poller_stct,\n >() - 88usize];\n [\"Alignment of aeron_archive_recording_subscription_descriptor_poller_stct\"]\n [::std::mem::align_of::<aeron_archive_recording_subscription_descriptor_poller_stct>()\n - 8usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::ctx\"][::std::mem::offset_of!(\n aeron_archive_recording_subscription_descriptor_poller_stct,\n ctx\n )\n - 0usize];\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::subscription\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , subscription) - 8usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::control_session_id\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , control_session_id) - 16usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::fragment_limit\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , fragment_limit) - 24usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::fragment_assembler\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , fragment_assembler) - 32usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::error_on_fragment\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , error_on_fragment) - 40usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::correlation_id\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , correlation_id) - 48usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::remaining_subscription_count\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , remaining_subscription_count) - 56usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::recording_subscription_descriptor_consumer\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , recording_subscription_descriptor_consumer) - 64usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::recording_subscription_descriptor_consumer_clientd\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , recording_subscription_descriptor_consumer_clientd) - 72usize] ;\n [\"Offset of field: aeron_archive_recording_subscription_descriptor_poller_stct::is_dispatch_complete\"] [:: std :: mem :: offset_of ! (aeron_archive_recording_subscription_descriptor_poller_stct , is_dispatch_complete) - 80usize] ;\n};\nimpl Default for aeron_archive_recording_subscription_descriptor_poller_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_archive_recording_subscription_descriptor_poller_t =\n aeron_archive_recording_subscription_descriptor_poller_stct;\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_subscription_descriptor_poller_create(\n poller: *mut *mut aeron_archive_recording_subscription_descriptor_poller_t,\n ctx: *mut aeron_archive_context_t,\n subscription: *mut aeron_subscription_t,\n control_session_id: i64,\n fragment_limit: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_subscription_descriptor_poller_close(\n poller: *mut aeron_archive_recording_subscription_descriptor_poller_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_subscription_descriptor_poller_reset(\n poller: *mut aeron_archive_recording_subscription_descriptor_poller_t,\n correlation_id: i64,\n subscription_count: i32,\n recording_subscription_descriptor_consumer : aeron_archive_recording_subscription_descriptor_consumer_func_t,\n recording_subscription_descriptor_consumer_clientd: *mut ::std::os::raw::c_void,\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_recording_subscription_descriptor_poller_poll(\n poller: *mut aeron_archive_recording_subscription_descriptor_poller_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_thread_set_name(role_name: *const ::std::os::raw::c_char);\n}\nunsafe extern \"C\" {\n pub fn aeron_nano_sleep(nanoseconds: u64);\n}\nunsafe extern \"C\" {\n pub fn aeron_micro_sleep(microseconds: ::std::os::raw::c_uint);\n}\nunsafe extern \"C\" {\n pub fn aeron_thread_set_affinity(\n role_name: *const ::std::os::raw::c_char,\n cpu_affinity_no: u8,\n ) -> ::std::os::raw::c_int;\n}\npub type pthread_cond_t = __darwin_pthread_cond_t;\npub type pthread_mutex_t = __darwin_pthread_mutex_t;\npub type pthread_t = __darwin_pthread_t;\npub type aeron_mutex_t = pthread_mutex_t;\npub type aeron_thread_t = pthread_t;\npub type aeron_thread_attr_t = pthread_attr_t;\npub type aeron_cond_t = pthread_cond_t;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_archive_stct {\n pub owns_ctx: bool,\n pub ctx: *mut aeron_archive_context_t,\n pub lock: aeron_mutex_t,\n pub archive_proxy: *mut aeron_archive_proxy_t,\n pub owns_control_response_subscription: bool,\n pub subscription: *mut aeron_subscription_t,\n pub control_response_poller: *mut aeron_archive_control_response_poller_t,\n pub recording_descriptor_poller: *mut aeron_archive_recording_descriptor_poller_t,\n pub recording_subscription_descriptor_poller:\n *mut aeron_archive_recording_subscription_descriptor_poller_t,\n pub control_session_id: i64,\n pub archive_id: i64,\n pub is_in_callback: bool,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_archive_stct\"][::std::mem::size_of::<aeron_archive_stct>() - 152usize];\n [\"Alignment of aeron_archive_stct\"][::std::mem::align_of::<aeron_archive_stct>() - 8usize];\n [\"Offset of field: aeron_archive_stct::owns_ctx\"]\n [::std::mem::offset_of!(aeron_archive_stct, owns_ctx) - 0usize];\n [\"Offset of field: aeron_archive_stct::ctx\"]\n [::std::mem::offset_of!(aeron_archive_stct, ctx) - 8usize];\n [\"Offset of field: aeron_archive_stct::lock\"]\n [::std::mem::offset_of!(aeron_archive_stct, lock) - 16usize];\n [\"Offset of field: aeron_archive_stct::archive_proxy\"]\n [::std::mem::offset_of!(aeron_archive_stct, archive_proxy) - 80usize];\n [\"Offset of field: aeron_archive_stct::owns_control_response_subscription\"]\n [::std::mem::offset_of!(aeron_archive_stct, owns_control_response_subscription) - 88usize];\n [\"Offset of field: aeron_archive_stct::subscription\"]\n [::std::mem::offset_of!(aeron_archive_stct, subscription) - 96usize];\n [\"Offset of field: aeron_archive_stct::control_response_poller\"]\n [::std::mem::offset_of!(aeron_archive_stct, control_response_poller) - 104usize];\n [\"Offset of field: aeron_archive_stct::recording_descriptor_poller\"]\n [::std::mem::offset_of!(aeron_archive_stct, recording_descriptor_poller) - 112usize];\n [\"Offset of field: aeron_archive_stct::recording_subscription_descriptor_poller\"][::std::mem::offset_of!(\n aeron_archive_stct,\n recording_subscription_descriptor_poller\n ) - 120usize];\n [\"Offset of field: aeron_archive_stct::control_session_id\"]\n [::std::mem::offset_of!(aeron_archive_stct, control_session_id) - 128usize];\n [\"Offset of field: aeron_archive_stct::archive_id\"]\n [::std::mem::offset_of!(aeron_archive_stct, archive_id) - 136usize];\n [\"Offset of field: aeron_archive_stct::is_in_callback\"]\n [::std::mem::offset_of!(aeron_archive_stct, is_in_callback) - 144usize];\n};\nimpl Default for aeron_archive_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_create(\n aeron_archive: *mut *mut aeron_archive_t,\n ctx: *mut aeron_archive_context_t,\n archive_proxy: *mut aeron_archive_proxy_t,\n subscription: *mut aeron_subscription_t,\n control_response_poller: *mut aeron_archive_control_response_poller_t,\n recording_descriptor_poller: *mut aeron_archive_recording_descriptor_poller_t,\n recording_subscription_descriptor_poller : * mut aeron_archive_recording_subscription_descriptor_poller_t,\n control_session_id: i64,\n archive_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_idle(aeron_archive: *mut aeron_archive_t);\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_control_response_poller(\n aeron_archive: *mut aeron_archive_t,\n ) -> *mut aeron_archive_control_response_poller_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_proxy(aeron_archive: *mut aeron_archive_t) -> *mut aeron_archive_proxy_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_next_correlation_id(aeron_archive: *mut aeron_archive_t) -> i64;\n}\nunsafe extern \"C\" {\n pub fn aeron_archive_poll_for_response(\n relevant_id_p: *mut i64,\n aeron_archive: *mut aeron_archive_t,\n operation_name: *const ::std::os::raw::c_char,\n correlation_id: i64,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_uri_param_stct {\n pub key: *const ::std::os::raw::c_char,\n pub value: *const ::std::os::raw::c_char,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_uri_param_stct\"][::std::mem::size_of::<aeron_uri_param_stct>() - 16usize];\n [\"Alignment of aeron_uri_param_stct\"][::std::mem::align_of::<aeron_uri_param_stct>() - 8usize];\n [\"Offset of field: aeron_uri_param_stct::key\"]\n [::std::mem::offset_of!(aeron_uri_param_stct, key) - 0usize];\n [\"Offset of field: aeron_uri_param_stct::value\"]\n [::std::mem::offset_of!(aeron_uri_param_stct, value) - 8usize];\n};\nimpl Default for aeron_uri_param_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_uri_param_t = aeron_uri_param_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_uri_params_stct {\n pub length: usize,\n pub array: *mut aeron_uri_param_t,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_uri_params_stct\"][::std::mem::size_of::<aeron_uri_params_stct>() - 16usize];\n [\"Alignment of aeron_uri_params_stct\"]\n [::std::mem::align_of::<aeron_uri_params_stct>() - 8usize];\n [\"Offset of field: aeron_uri_params_stct::length\"]\n [::std::mem::offset_of!(aeron_uri_params_stct, length) - 0usize];\n [\"Offset of field: aeron_uri_params_stct::array\"]\n [::std::mem::offset_of!(aeron_uri_params_stct, array) - 8usize];\n};\nimpl Default for aeron_uri_params_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_uri_params_t = aeron_uri_params_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_udp_channel_params_stct {\n pub endpoint: *const ::std::os::raw::c_char,\n pub bind_interface: *const ::std::os::raw::c_char,\n pub control: *const ::std::os::raw::c_char,\n pub control_mode: *const ::std::os::raw::c_char,\n pub channel_tag: *const ::std::os::raw::c_char,\n pub entity_tag: *const ::std::os::raw::c_char,\n pub ttl: *const ::std::os::raw::c_char,\n pub additional_params: aeron_uri_params_t,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_udp_channel_params_stct\"]\n [::std::mem::size_of::<aeron_udp_channel_params_stct>() - 72usize];\n [\"Alignment of aeron_udp_channel_params_stct\"]\n [::std::mem::align_of::<aeron_udp_channel_params_stct>() - 8usize];\n [\"Offset of field: aeron_udp_channel_params_stct::endpoint\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, endpoint) - 0usize];\n [\"Offset of field: aeron_udp_channel_params_stct::bind_interface\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, bind_interface) - 8usize];\n [\"Offset of field: aeron_udp_channel_params_stct::control\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, control) - 16usize];\n [\"Offset of field: aeron_udp_channel_params_stct::control_mode\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, control_mode) - 24usize];\n [\"Offset of field: aeron_udp_channel_params_stct::channel_tag\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, channel_tag) - 32usize];\n [\"Offset of field: aeron_udp_channel_params_stct::entity_tag\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, entity_tag) - 40usize];\n [\"Offset of field: aeron_udp_channel_params_stct::ttl\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, ttl) - 48usize];\n [\"Offset of field: aeron_udp_channel_params_stct::additional_params\"]\n [::std::mem::offset_of!(aeron_udp_channel_params_stct, additional_params) - 56usize];\n};\nimpl Default for aeron_udp_channel_params_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_udp_channel_params_t = aeron_udp_channel_params_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_ipc_channel_params_stct {\n pub channel_tag: *const ::std::os::raw::c_char,\n pub entity_tag: *const ::std::os::raw::c_char,\n pub additional_params: aeron_uri_params_t,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_ipc_channel_params_stct\"]\n [::std::mem::size_of::<aeron_ipc_channel_params_stct>() - 32usize];\n [\"Alignment of aeron_ipc_channel_params_stct\"]\n [::std::mem::align_of::<aeron_ipc_channel_params_stct>() - 8usize];\n [\"Offset of field: aeron_ipc_channel_params_stct::channel_tag\"]\n [::std::mem::offset_of!(aeron_ipc_channel_params_stct, channel_tag) - 0usize];\n [\"Offset of field: aeron_ipc_channel_params_stct::entity_tag\"]\n [::std::mem::offset_of!(aeron_ipc_channel_params_stct, entity_tag) - 8usize];\n [\"Offset of field: aeron_ipc_channel_params_stct::additional_params\"]\n [::std::mem::offset_of!(aeron_ipc_channel_params_stct, additional_params) - 16usize];\n};\nimpl Default for aeron_ipc_channel_params_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_ipc_channel_params_t = aeron_ipc_channel_params_stct;\n#[repr(u32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_uri_type_enum {\n AERON_URI_UDP = 0,\n AERON_URI_IPC = 1,\n AERON_URI_UNKNOWN = 2,\n}\npub use self::aeron_uri_type_enum as aeron_uri_type_t;\n#[repr(C)]\n#[derive(Copy, Clone)]\npub struct aeron_uri_stct {\n pub mutable_uri: [::std::os::raw::c_char; 4096usize],\n pub type_: aeron_uri_type_t,\n pub params: aeron_uri_stct__bindgen_ty_1,\n}\n#[repr(C)]\n#[derive(Copy, Clone)]\npub union aeron_uri_stct__bindgen_ty_1 {\n pub udp: aeron_udp_channel_params_t,\n pub ipc: aeron_ipc_channel_params_t,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_uri_stct__bindgen_ty_1\"]\n [::std::mem::size_of::<aeron_uri_stct__bindgen_ty_1>() - 72usize];\n [\"Alignment of aeron_uri_stct__bindgen_ty_1\"]\n [::std::mem::align_of::<aeron_uri_stct__bindgen_ty_1>() - 8usize];\n [\"Offset of field: aeron_uri_stct__bindgen_ty_1::udp\"]\n [::std::mem::offset_of!(aeron_uri_stct__bindgen_ty_1, udp) - 0usize];\n [\"Offset of field: aeron_uri_stct__bindgen_ty_1::ipc\"]\n [::std::mem::offset_of!(aeron_uri_stct__bindgen_ty_1, ipc) - 0usize];\n};\nimpl Default for aeron_uri_stct__bindgen_ty_1 {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_uri_stct\"][::std::mem::size_of::<aeron_uri_stct>() - 4176usize];\n [\"Alignment of aeron_uri_stct\"][::std::mem::align_of::<aeron_uri_stct>() - 8usize];\n [\"Offset of field: aeron_uri_stct::mutable_uri\"]\n [::std::mem::offset_of!(aeron_uri_stct, mutable_uri) - 0usize];\n [\"Offset of field: aeron_uri_stct::type_\"]\n [::std::mem::offset_of!(aeron_uri_stct, type_) - 4096usize];\n [\"Offset of field: aeron_uri_stct::params\"]\n [::std::mem::offset_of!(aeron_uri_stct, params) - 4104usize];\n};\nimpl Default for aeron_uri_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_uri_t = aeron_uri_stct;\n#[repr(u32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_uri_ats_status_en {\n AERON_URI_ATS_STATUS_DEFAULT = 0,\n AERON_URI_ATS_STATUS_ENABLED = 1,\n AERON_URI_ATS_STATUS_DISABLED = 2,\n}\npub use self::aeron_uri_ats_status_en as aeron_uri_ats_status_t;\npub type aeron_uri_parse_callback_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n key: *const ::std::os::raw::c_char,\n value: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int,\n>;\nunsafe extern \"C\" {\n pub fn aeron_uri_parse_params(\n uri: *mut ::std::os::raw::c_char,\n param_func: aeron_uri_parse_callback_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_parse(\n uri_length: usize,\n uri: *const ::std::os::raw::c_char,\n params: *mut aeron_uri_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_close(params: *mut aeron_uri_t);\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_multicast_ttl(uri: *mut aeron_uri_t) -> u8;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_find_param_value(\n uri_params: *const aeron_uri_params_t,\n key: *const ::std::os::raw::c_char,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_int32(\n uri_params: *mut aeron_uri_params_t,\n key: *const ::std::os::raw::c_char,\n retval: *mut i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_int64(\n uri_params: *mut aeron_uri_params_t,\n key: *const ::std::os::raw::c_char,\n default_val: i64,\n retval: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_bool(\n uri_params: *mut aeron_uri_params_t,\n key: *const ::std::os::raw::c_char,\n retval: *mut bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_ats(\n uri_params: *mut aeron_uri_params_t,\n uri_ats_status: *mut aeron_uri_ats_status_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_timeout(\n uri_params: *mut aeron_uri_params_t,\n param_name: *const ::std::os::raw::c_char,\n timeout_ns: *mut u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_sprint(\n uri: *mut aeron_uri_t,\n buffer: *mut ::std::os::raw::c_char,\n buffer_len: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_socket_buf_lengths(\n uri_params: *mut aeron_uri_params_t,\n socket_sndbuf_length: *mut usize,\n socket_rcvbuf_length: *mut usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_get_receiver_window_length(\n uri_params: *mut aeron_uri_params_t,\n receiver_window_length: *mut usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_parse_tag(tag_str: *const ::std::os::raw::c_char) -> i64;\n}\nunsafe extern \"C\" {\n pub fn aeron_randomised_int32() -> i32;\n}\nunsafe extern \"C\" {\n pub fn aeron_format_date(str_: *mut ::std::os::raw::c_char, count: usize, timestamp: i64);\n}\nunsafe extern \"C\" {\n pub fn aeron_format_number_to_locale(\n value: ::std::os::raw::c_longlong,\n buffer: *mut ::std::os::raw::c_char,\n buffer_len: usize,\n ) -> *mut ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n pub fn aeron_format_to_hex(\n str_: *mut ::std::os::raw::c_char,\n str_length: usize,\n data: *const u8,\n data_len: usize,\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_tokenise(\n input: *mut ::std::os::raw::c_char,\n delimiter: ::std::os::raw::c_char,\n max_tokens: ::std::os::raw::c_int,\n tokens: *mut *mut ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_per_thread_error_stct {\n pub errcode: ::std::os::raw::c_int,\n pub offset: usize,\n pub errmsg: [::std::os::raw::c_char; 8192usize],\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_per_thread_error_stct\"]\n [::std::mem::size_of::<aeron_per_thread_error_stct>() - 8208usize];\n [\"Alignment of aeron_per_thread_error_stct\"]\n [::std::mem::align_of::<aeron_per_thread_error_stct>() - 8usize];\n [\"Offset of field: aeron_per_thread_error_stct::errcode\"]\n [::std::mem::offset_of!(aeron_per_thread_error_stct, errcode) - 0usize];\n [\"Offset of field: aeron_per_thread_error_stct::offset\"]\n [::std::mem::offset_of!(aeron_per_thread_error_stct, offset) - 8usize];\n [\"Offset of field: aeron_per_thread_error_stct::errmsg\"]\n [::std::mem::offset_of!(aeron_per_thread_error_stct, errmsg) - 16usize];\n};\nimpl Default for aeron_per_thread_error_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_per_thread_error_t = aeron_per_thread_error_stct;\nunsafe extern \"C\" {\n pub fn aeron_set_errno(errcode: ::std::os::raw::c_int);\n}\nunsafe extern \"C\" {\n pub fn aeron_error_code_str(errcode: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n pub fn aeron_err_set(\n errcode: ::std::os::raw::c_int,\n function: *const ::std::os::raw::c_char,\n filename: *const ::std::os::raw::c_char,\n line_number: ::std::os::raw::c_int,\n format: *const ::std::os::raw::c_char,\n ...\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_err_append(\n function: *const ::std::os::raw::c_char,\n filename: *const ::std::os::raw::c_char,\n line_number: ::std::os::raw::c_int,\n format: *const ::std::os::raw::c_char,\n ...\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_err_clear();\n}\nunsafe extern \"C\" {\n pub fn aeron_alloc_no_err(\n ptr: *mut *mut ::std::os::raw::c_void,\n size: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_alloc(ptr: *mut *mut ::std::os::raw::c_void, size: usize)\n -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_alloc_aligned(\n ptr: *mut *mut ::std::os::raw::c_void,\n offset: *mut usize,\n size: usize,\n alignment: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_reallocf(\n ptr: *mut *mut ::std::os::raw::c_void,\n size: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_free(ptr: *mut ::std::os::raw::c_void);\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_str_to_ptr_hash_map_key_stct {\n pub str_: *const ::std::os::raw::c_char,\n pub hash_code: u64,\n pub str_length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_str_to_ptr_hash_map_key_stct\"]\n [::std::mem::size_of::<aeron_str_to_ptr_hash_map_key_stct>() - 24usize];\n [\"Alignment of aeron_str_to_ptr_hash_map_key_stct\"]\n [::std::mem::align_of::<aeron_str_to_ptr_hash_map_key_stct>() - 8usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_key_stct::str_\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_key_stct, str_) - 0usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_key_stct::hash_code\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_key_stct, hash_code) - 8usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_key_stct::str_length\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_key_stct, str_length) - 16usize];\n};\nimpl Default for aeron_str_to_ptr_hash_map_key_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_str_to_ptr_hash_map_key_t = aeron_str_to_ptr_hash_map_key_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, PartialEq)]\npub struct aeron_str_to_ptr_hash_map_stct {\n pub keys: *mut aeron_str_to_ptr_hash_map_key_t,\n pub values: *mut *mut ::std::os::raw::c_void,\n pub load_factor: f32,\n pub capacity: usize,\n pub size: usize,\n pub resize_threshold: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_str_to_ptr_hash_map_stct\"]\n [::std::mem::size_of::<aeron_str_to_ptr_hash_map_stct>() - 48usize];\n [\"Alignment of aeron_str_to_ptr_hash_map_stct\"]\n [::std::mem::align_of::<aeron_str_to_ptr_hash_map_stct>() - 8usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::keys\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, keys) - 0usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::values\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, values) - 8usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::load_factor\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, load_factor) - 16usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::capacity\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, capacity) - 24usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::size\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, size) - 32usize];\n [\"Offset of field: aeron_str_to_ptr_hash_map_stct::resize_threshold\"]\n [::std::mem::offset_of!(aeron_str_to_ptr_hash_map_stct, resize_threshold) - 40usize];\n};\nimpl Default for aeron_str_to_ptr_hash_map_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_str_to_ptr_hash_map_t = aeron_str_to_ptr_hash_map_stct;\npub type aeron_str_to_ptr_hash_map_for_each_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n clientd: *mut ::std::os::raw::c_void,\n key: *const ::std::os::raw::c_char,\n key_len: usize,\n value: *mut ::std::os::raw::c_void,\n ),\n>;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, PartialEq)]\npub struct aeron_uri_string_builder_stct {\n pub params: aeron_str_to_ptr_hash_map_t,\n pub closed: bool,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_uri_string_builder_stct\"]\n [::std::mem::size_of::<aeron_uri_string_builder_stct>() - 56usize];\n [\"Alignment of aeron_uri_string_builder_stct\"]\n [::std::mem::align_of::<aeron_uri_string_builder_stct>() - 8usize];\n [\"Offset of field: aeron_uri_string_builder_stct::params\"]\n [::std::mem::offset_of!(aeron_uri_string_builder_stct, params) - 0usize];\n [\"Offset of field: aeron_uri_string_builder_stct::closed\"]\n [::std::mem::offset_of!(aeron_uri_string_builder_stct, closed) - 48usize];\n};\nimpl Default for aeron_uri_string_builder_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_uri_string_builder_t = aeron_uri_string_builder_stct;\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_init_new(\n builder: *mut aeron_uri_string_builder_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_init_on_string(\n builder: *mut aeron_uri_string_builder_t,\n uri: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_close(\n builder: *mut aeron_uri_string_builder_t,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_put(\n builder: *mut aeron_uri_string_builder_t,\n key: *const ::std::os::raw::c_char,\n value: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_put_int32(\n builder: *mut aeron_uri_string_builder_t,\n key: *const ::std::os::raw::c_char,\n value: i32,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_put_int64(\n builder: *mut aeron_uri_string_builder_t,\n key: *const ::std::os::raw::c_char,\n value: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_get(\n builder: *mut aeron_uri_string_builder_t,\n key: *const ::std::os::raw::c_char,\n ) -> *const ::std::os::raw::c_char;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_sprint(\n builder: *mut aeron_uri_string_builder_t,\n buffer: *mut ::std::os::raw::c_char,\n buffer_len: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_uri_string_builder_set_initial_position(\n builder: *mut aeron_uri_string_builder_t,\n position: i64,\n initial_term_id: i32,\n term_length: i32,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_frame_header_stct {\n pub frame_length: i32,\n pub version: i8,\n pub flags: u8,\n pub type_: i16,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_frame_header_stct\"][::std::mem::size_of::<aeron_frame_header_stct>() - 8usize];\n [\"Alignment of aeron_frame_header_stct\"]\n [::std::mem::align_of::<aeron_frame_header_stct>() - 4usize];\n [\"Offset of field: aeron_frame_header_stct::frame_length\"]\n [::std::mem::offset_of!(aeron_frame_header_stct, frame_length) - 0usize];\n [\"Offset of field: aeron_frame_header_stct::version\"]\n [::std::mem::offset_of!(aeron_frame_header_stct, version) - 4usize];\n [\"Offset of field: aeron_frame_header_stct::flags\"]\n [::std::mem::offset_of!(aeron_frame_header_stct, flags) - 5usize];\n [\"Offset of field: aeron_frame_header_stct::type_\"]\n [::std::mem::offset_of!(aeron_frame_header_stct, type_) - 6usize];\n};\npub type aeron_frame_header_t = aeron_frame_header_stct;\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_setup_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub term_offset: i32,\n pub session_id: i32,\n pub stream_id: i32,\n pub initial_term_id: i32,\n pub active_term_id: i32,\n pub term_length: i32,\n pub mtu: i32,\n pub ttl: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_setup_header_stct\"][::std::mem::size_of::<aeron_setup_header_stct>() - 40usize];\n [\"Alignment of aeron_setup_header_stct\"]\n [::std::mem::align_of::<aeron_setup_header_stct>() - 4usize];\n [\"Offset of field: aeron_setup_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_setup_header_stct::term_offset\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, term_offset) - 8usize];\n [\"Offset of field: aeron_setup_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, session_id) - 12usize];\n [\"Offset of field: aeron_setup_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, stream_id) - 16usize];\n [\"Offset of field: aeron_setup_header_stct::initial_term_id\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, initial_term_id) - 20usize];\n [\"Offset of field: aeron_setup_header_stct::active_term_id\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, active_term_id) - 24usize];\n [\"Offset of field: aeron_setup_header_stct::term_length\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, term_length) - 28usize];\n [\"Offset of field: aeron_setup_header_stct::mtu\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, mtu) - 32usize];\n [\"Offset of field: aeron_setup_header_stct::ttl\"]\n [::std::mem::offset_of!(aeron_setup_header_stct, ttl) - 36usize];\n};\npub type aeron_setup_header_t = aeron_setup_header_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_data_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub term_offset: i32,\n pub session_id: i32,\n pub stream_id: i32,\n pub term_id: i32,\n pub reserved_value: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_data_header_stct\"][::std::mem::size_of::<aeron_data_header_stct>() - 32usize];\n [\"Alignment of aeron_data_header_stct\"]\n [::std::mem::align_of::<aeron_data_header_stct>() - 4usize];\n [\"Offset of field: aeron_data_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_data_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_data_header_stct::term_offset\"]\n [::std::mem::offset_of!(aeron_data_header_stct, term_offset) - 8usize];\n [\"Offset of field: aeron_data_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_data_header_stct, session_id) - 12usize];\n [\"Offset of field: aeron_data_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_data_header_stct, stream_id) - 16usize];\n [\"Offset of field: aeron_data_header_stct::term_id\"]\n [::std::mem::offset_of!(aeron_data_header_stct, term_id) - 20usize];\n [\"Offset of field: aeron_data_header_stct::reserved_value\"]\n [::std::mem::offset_of!(aeron_data_header_stct, reserved_value) - 24usize];\n};\npub type aeron_data_header_t = aeron_data_header_stct;\n#[repr(C)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_nak_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub session_id: i32,\n pub stream_id: i32,\n pub term_id: i32,\n pub term_offset: i32,\n pub length: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_nak_header_stct\"][::std::mem::size_of::<aeron_nak_header_stct>() - 28usize];\n [\"Alignment of aeron_nak_header_stct\"]\n [::std::mem::align_of::<aeron_nak_header_stct>() - 4usize];\n [\"Offset of field: aeron_nak_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_nak_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, session_id) - 8usize];\n [\"Offset of field: aeron_nak_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, stream_id) - 12usize];\n [\"Offset of field: aeron_nak_header_stct::term_id\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, term_id) - 16usize];\n [\"Offset of field: aeron_nak_header_stct::term_offset\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, term_offset) - 20usize];\n [\"Offset of field: aeron_nak_header_stct::length\"]\n [::std::mem::offset_of!(aeron_nak_header_stct, length) - 24usize];\n};\npub type aeron_nak_header_t = aeron_nak_header_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_status_message_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub session_id: i32,\n pub stream_id: i32,\n pub consumption_term_id: i32,\n pub consumption_term_offset: i32,\n pub receiver_window: i32,\n pub receiver_id: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_status_message_header_stct\"]\n [::std::mem::size_of::<aeron_status_message_header_stct>() - 36usize];\n [\"Alignment of aeron_status_message_header_stct\"]\n [::std::mem::align_of::<aeron_status_message_header_stct>() - 4usize];\n [\"Offset of field: aeron_status_message_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_status_message_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, session_id) - 8usize];\n [\"Offset of field: aeron_status_message_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, stream_id) - 12usize];\n [\"Offset of field: aeron_status_message_header_stct::consumption_term_id\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, consumption_term_id) - 16usize];\n [\"Offset of field: aeron_status_message_header_stct::consumption_term_offset\"][::std::mem::offset_of!(\n aeron_status_message_header_stct,\n consumption_term_offset\n ) - 20usize];\n [\"Offset of field: aeron_status_message_header_stct::receiver_window\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, receiver_window) - 24usize];\n [\"Offset of field: aeron_status_message_header_stct::receiver_id\"]\n [::std::mem::offset_of!(aeron_status_message_header_stct, receiver_id) - 28usize];\n};\npub type aeron_status_message_header_t = aeron_status_message_header_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_error_stct {\n pub frame_header: aeron_frame_header_t,\n pub session_id: i32,\n pub stream_id: i32,\n pub receiver_id: i64,\n pub group_tag: i64,\n pub error_code: i32,\n pub error_length: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_error_stct\"][::std::mem::size_of::<aeron_error_stct>() - 40usize];\n [\"Alignment of aeron_error_stct\"][::std::mem::align_of::<aeron_error_stct>() - 4usize];\n [\"Offset of field: aeron_error_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_error_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_error_stct::session_id\"]\n [::std::mem::offset_of!(aeron_error_stct, session_id) - 8usize];\n [\"Offset of field: aeron_error_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_error_stct, stream_id) - 12usize];\n [\"Offset of field: aeron_error_stct::receiver_id\"]\n [::std::mem::offset_of!(aeron_error_stct, receiver_id) - 16usize];\n [\"Offset of field: aeron_error_stct::group_tag\"]\n [::std::mem::offset_of!(aeron_error_stct, group_tag) - 24usize];\n [\"Offset of field: aeron_error_stct::error_code\"]\n [::std::mem::offset_of!(aeron_error_stct, error_code) - 32usize];\n [\"Offset of field: aeron_error_stct::error_length\"]\n [::std::mem::offset_of!(aeron_error_stct, error_length) - 36usize];\n};\npub type aeron_error_t = aeron_error_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_status_message_optional_header_stct {\n pub group_tag: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_status_message_optional_header_stct\"]\n [::std::mem::size_of::<aeron_status_message_optional_header_stct>() - 8usize];\n [\"Alignment of aeron_status_message_optional_header_stct\"]\n [::std::mem::align_of::<aeron_status_message_optional_header_stct>() - 4usize];\n [\"Offset of field: aeron_status_message_optional_header_stct::group_tag\"]\n [::std::mem::offset_of!(aeron_status_message_optional_header_stct, group_tag) - 0usize];\n};\npub type aeron_status_message_optional_header_t = aeron_status_message_optional_header_stct;\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_rttm_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub session_id: i32,\n pub stream_id: i32,\n pub echo_timestamp: i64,\n pub reception_delta: i64,\n pub receiver_id: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_rttm_header_stct\"][::std::mem::size_of::<aeron_rttm_header_stct>() - 40usize];\n [\"Alignment of aeron_rttm_header_stct\"]\n [::std::mem::align_of::<aeron_rttm_header_stct>() - 4usize];\n [\"Offset of field: aeron_rttm_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_rttm_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, session_id) - 8usize];\n [\"Offset of field: aeron_rttm_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, stream_id) - 12usize];\n [\"Offset of field: aeron_rttm_header_stct::echo_timestamp\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, echo_timestamp) - 16usize];\n [\"Offset of field: aeron_rttm_header_stct::reception_delta\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, reception_delta) - 24usize];\n [\"Offset of field: aeron_rttm_header_stct::receiver_id\"]\n [::std::mem::offset_of!(aeron_rttm_header_stct, receiver_id) - 32usize];\n};\npub type aeron_rttm_header_t = aeron_rttm_header_stct;\n#[repr(C, packed)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_resolution_header_stct {\n pub res_type: i8,\n pub res_flags: u8,\n pub udp_port: u16,\n pub age_in_ms: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_resolution_header_stct\"]\n [::std::mem::size_of::<aeron_resolution_header_stct>() - 8usize];\n [\"Alignment of aeron_resolution_header_stct\"]\n [::std::mem::align_of::<aeron_resolution_header_stct>() - 1usize];\n [\"Offset of field: aeron_resolution_header_stct::res_type\"]\n [::std::mem::offset_of!(aeron_resolution_header_stct, res_type) - 0usize];\n [\"Offset of field: aeron_resolution_header_stct::res_flags\"]\n [::std::mem::offset_of!(aeron_resolution_header_stct, res_flags) - 1usize];\n [\"Offset of field: aeron_resolution_header_stct::udp_port\"]\n [::std::mem::offset_of!(aeron_resolution_header_stct, udp_port) - 2usize];\n [\"Offset of field: aeron_resolution_header_stct::age_in_ms\"]\n [::std::mem::offset_of!(aeron_resolution_header_stct, age_in_ms) - 4usize];\n};\npub type aeron_resolution_header_t = aeron_resolution_header_stct;\n#[repr(C, packed)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_resolution_header_ipv4_stct {\n pub resolution_header: aeron_resolution_header_t,\n pub addr: [u8; 4usize],\n pub name_length: i16,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_resolution_header_ipv4_stct\"]\n [::std::mem::size_of::<aeron_resolution_header_ipv4_stct>() - 14usize];\n [\"Alignment of aeron_resolution_header_ipv4_stct\"]\n [::std::mem::align_of::<aeron_resolution_header_ipv4_stct>() - 1usize];\n [\"Offset of field: aeron_resolution_header_ipv4_stct::resolution_header\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv4_stct, resolution_header) - 0usize];\n [\"Offset of field: aeron_resolution_header_ipv4_stct::addr\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv4_stct, addr) - 8usize];\n [\"Offset of field: aeron_resolution_header_ipv4_stct::name_length\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv4_stct, name_length) - 12usize];\n};\npub type aeron_resolution_header_ipv4_t = aeron_resolution_header_ipv4_stct;\n#[repr(C, packed)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_resolution_header_ipv6_stct {\n pub resolution_header: aeron_resolution_header_t,\n pub addr: [u8; 16usize],\n pub name_length: i16,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_resolution_header_ipv6_stct\"]\n [::std::mem::size_of::<aeron_resolution_header_ipv6_stct>() - 26usize];\n [\"Alignment of aeron_resolution_header_ipv6_stct\"]\n [::std::mem::align_of::<aeron_resolution_header_ipv6_stct>() - 1usize];\n [\"Offset of field: aeron_resolution_header_ipv6_stct::resolution_header\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv6_stct, resolution_header) - 0usize];\n [\"Offset of field: aeron_resolution_header_ipv6_stct::addr\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv6_stct, addr) - 8usize];\n [\"Offset of field: aeron_resolution_header_ipv6_stct::name_length\"]\n [::std::mem::offset_of!(aeron_resolution_header_ipv6_stct, name_length) - 24usize];\n};\npub type aeron_resolution_header_ipv6_t = aeron_resolution_header_ipv6_stct;\n#[repr(C, packed)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_option_header_stct {\n pub option_length: u16,\n pub type_: u16,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_option_header_stct\"]\n [::std::mem::size_of::<aeron_option_header_stct>() - 4usize];\n [\"Alignment of aeron_option_header_stct\"]\n [::std::mem::align_of::<aeron_option_header_stct>() - 1usize];\n [\"Offset of field: aeron_option_header_stct::option_length\"]\n [::std::mem::offset_of!(aeron_option_header_stct, option_length) - 0usize];\n [\"Offset of field: aeron_option_header_stct::type_\"]\n [::std::mem::offset_of!(aeron_option_header_stct, type_) - 2usize];\n};\npub type aeron_option_header_t = aeron_option_header_stct;\n#[repr(C, packed)]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_response_setup_header_stct {\n pub frame_header: aeron_frame_header_t,\n pub session_id: i32,\n pub stream_id: i32,\n pub response_session_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_response_setup_header_stct\"]\n [::std::mem::size_of::<aeron_response_setup_header_stct>() - 20usize];\n [\"Alignment of aeron_response_setup_header_stct\"]\n [::std::mem::align_of::<aeron_response_setup_header_stct>() - 1usize];\n [\"Offset of field: aeron_response_setup_header_stct::frame_header\"]\n [::std::mem::offset_of!(aeron_response_setup_header_stct, frame_header) - 0usize];\n [\"Offset of field: aeron_response_setup_header_stct::session_id\"]\n [::std::mem::offset_of!(aeron_response_setup_header_stct, session_id) - 8usize];\n [\"Offset of field: aeron_response_setup_header_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_response_setup_header_stct, stream_id) - 12usize];\n [\"Offset of field: aeron_response_setup_header_stct::response_session_id\"]\n [::std::mem::offset_of!(aeron_response_setup_header_stct, response_session_id) - 16usize];\n};\npub type aeron_response_setup_header_t = aeron_response_setup_header_stct;\nunsafe extern \"C\" {\n pub fn aeron_udp_protocol_group_tag(\n sm: *mut aeron_status_message_header_t,\n group_tag: *mut i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_res_header_entry_length_ipv4(header: *mut aeron_resolution_header_ipv4_t)\n -> usize;\n}\nunsafe extern \"C\" {\n pub fn aeron_res_header_entry_length_ipv6(header: *mut aeron_resolution_header_ipv6_t)\n -> usize;\n}\nunsafe extern \"C\" {\n pub fn aeron_res_header_entry_length(\n res: *mut ::std::os::raw::c_void,\n remaining: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C, packed(4))]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_logbuffer_metadata_stct {\n pub term_tail_counters: [i64; 3usize],\n pub active_term_count: i32,\n pub pad1: [u8; 100usize],\n pub end_of_stream_position: i64,\n pub is_connected: i32,\n pub active_transport_count: i32,\n pub pad2: [u8; 112usize],\n pub correlation_id: i64,\n pub initial_term_id: i32,\n pub default_frame_header_length: i32,\n pub mtu_length: i32,\n pub term_length: i32,\n pub page_size: i32,\n pub publication_window_length: i32,\n pub receiver_window_length: i32,\n pub socket_sndbuf_length: i32,\n pub os_default_socket_sndbuf_length: i32,\n pub os_max_socket_sndbuf_length: i32,\n pub socket_rcvbuf_length: i32,\n pub os_default_socket_rcvbuf_length: i32,\n pub os_max_socket_rcvbuf_length: i32,\n pub max_resend: i32,\n pub default_header: [u8; 128usize],\n pub entity_tag: i64,\n pub response_correlation_id: i64,\n pub linger_timeout_ns: i64,\n pub untethered_window_limit_timeout_ns: i64,\n pub untethered_resting_timeout_ns: i64,\n pub group: u8,\n pub is_response: u8,\n pub rejoin: u8,\n pub reliable: u8,\n pub sparse: u8,\n pub signal_eos: u8,\n pub spies_simulate_connection: u8,\n pub tether: u8,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_logbuffer_metadata_stct\"]\n [::std::mem::size_of::<aeron_logbuffer_metadata_stct>() - 496usize];\n [\"Alignment of aeron_logbuffer_metadata_stct\"]\n [::std::mem::align_of::<aeron_logbuffer_metadata_stct>() - 4usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::term_tail_counters\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, term_tail_counters) - 0usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::active_term_count\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, active_term_count) - 24usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::pad1\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, pad1) - 28usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::end_of_stream_position\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, end_of_stream_position) - 128usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::is_connected\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, is_connected) - 136usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::active_transport_count\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, active_transport_count) - 140usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::pad2\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, pad2) - 144usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::correlation_id\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, correlation_id) - 256usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::initial_term_id\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, initial_term_id) - 264usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::default_frame_header_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n default_frame_header_length\n ) - 268usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::mtu_length\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, mtu_length) - 272usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::term_length\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, term_length) - 276usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::page_size\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, page_size) - 280usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::publication_window_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n publication_window_length\n ) - 284usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::receiver_window_length\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, receiver_window_length) - 288usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::socket_sndbuf_length\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, socket_sndbuf_length) - 292usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::os_default_socket_sndbuf_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n os_default_socket_sndbuf_length\n )\n - 296usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::os_max_socket_sndbuf_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n os_max_socket_sndbuf_length\n ) - 300usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::socket_rcvbuf_length\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, socket_rcvbuf_length) - 304usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::os_default_socket_rcvbuf_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n os_default_socket_rcvbuf_length\n )\n - 308usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::os_max_socket_rcvbuf_length\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n os_max_socket_rcvbuf_length\n ) - 312usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::max_resend\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, max_resend) - 316usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::default_header\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, default_header) - 320usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::entity_tag\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, entity_tag) - 448usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::response_correlation_id\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, response_correlation_id) - 456usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::linger_timeout_ns\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, linger_timeout_ns) - 464usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::untethered_window_limit_timeout_ns\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n untethered_window_limit_timeout_ns\n )\n - 472usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::untethered_resting_timeout_ns\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n untethered_resting_timeout_ns\n ) - 480usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::group\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, group) - 488usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::is_response\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, is_response) - 489usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::rejoin\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, rejoin) - 490usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::reliable\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, reliable) - 491usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::sparse\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, sparse) - 492usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::signal_eos\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, signal_eos) - 493usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::spies_simulate_connection\"][::std::mem::offset_of!(\n aeron_logbuffer_metadata_stct,\n spies_simulate_connection\n ) - 494usize];\n [\"Offset of field: aeron_logbuffer_metadata_stct::tether\"]\n [::std::mem::offset_of!(aeron_logbuffer_metadata_stct, tether) - 495usize];\n};\nimpl Default for aeron_logbuffer_metadata_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_logbuffer_metadata_t = aeron_logbuffer_metadata_stct;\nunsafe extern \"C\" {\n pub fn aeron_logbuffer_check_term_length(term_length: u64) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_logbuffer_check_page_size(page_size: u64) -> ::std::os::raw::c_int;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_mapped_file_stct {\n pub addr: *mut ::std::os::raw::c_void,\n pub length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_mapped_file_stct\"][::std::mem::size_of::<aeron_mapped_file_stct>() - 16usize];\n [\"Alignment of aeron_mapped_file_stct\"]\n [::std::mem::align_of::<aeron_mapped_file_stct>() - 8usize];\n [\"Offset of field: aeron_mapped_file_stct::addr\"]\n [::std::mem::offset_of!(aeron_mapped_file_stct, addr) - 0usize];\n [\"Offset of field: aeron_mapped_file_stct::length\"]\n [::std::mem::offset_of!(aeron_mapped_file_stct, length) - 8usize];\n};\nimpl Default for aeron_mapped_file_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_mapped_file_t = aeron_mapped_file_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_mapped_buffer_stct {\n pub addr: *mut u8,\n pub length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_mapped_buffer_stct\"]\n [::std::mem::size_of::<aeron_mapped_buffer_stct>() - 16usize];\n [\"Alignment of aeron_mapped_buffer_stct\"]\n [::std::mem::align_of::<aeron_mapped_buffer_stct>() - 8usize];\n [\"Offset of field: aeron_mapped_buffer_stct::addr\"]\n [::std::mem::offset_of!(aeron_mapped_buffer_stct, addr) - 0usize];\n [\"Offset of field: aeron_mapped_buffer_stct::length\"]\n [::std::mem::offset_of!(aeron_mapped_buffer_stct, length) - 8usize];\n};\nimpl Default for aeron_mapped_buffer_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_mapped_buffer_t = aeron_mapped_buffer_stct;\nunsafe extern \"C\" {\n pub fn aeron_is_directory(path: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_delete_directory(\n directory: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_mkdir_recursive(\n pathname: *const ::std::os::raw::c_char,\n permission: ::std::os::raw::c_int,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_map_new_file(\n mapped_file: *mut aeron_mapped_file_t,\n path: *const ::std::os::raw::c_char,\n fill_with_zeroes: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_map_existing_file(\n mapped_file: *mut aeron_mapped_file_t,\n path: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_unmap(mapped_file: *mut aeron_mapped_file_t) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_msync(addr: *mut ::std::os::raw::c_void, length: usize) -> ::std::os::raw::c_int;\n}\npub type aeron_usable_fs_space_func_t =\n ::std::option::Option<unsafe extern \"C\" fn(path: *const ::std::os::raw::c_char) -> u64>;\nunsafe extern \"C\" {\n pub fn aeron_file_length(path: *const ::std::os::raw::c_char) -> i64;\n}\nunsafe extern \"C\" {\n pub fn aeron_usable_fs_space(path: *const ::std::os::raw::c_char) -> u64;\n}\nunsafe extern \"C\" {\n pub fn aeron_usable_fs_space_disabled(path: *const ::std::os::raw::c_char) -> u64;\n}\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_mapped_raw_log_stct {\n pub term_buffers: [aeron_mapped_buffer_t; 3usize],\n pub log_meta_data: aeron_mapped_buffer_t,\n pub mapped_file: aeron_mapped_file_t,\n pub term_length: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_mapped_raw_log_stct\"]\n [::std::mem::size_of::<aeron_mapped_raw_log_stct>() - 88usize];\n [\"Alignment of aeron_mapped_raw_log_stct\"]\n [::std::mem::align_of::<aeron_mapped_raw_log_stct>() - 8usize];\n [\"Offset of field: aeron_mapped_raw_log_stct::term_buffers\"]\n [::std::mem::offset_of!(aeron_mapped_raw_log_stct, term_buffers) - 0usize];\n [\"Offset of field: aeron_mapped_raw_log_stct::log_meta_data\"]\n [::std::mem::offset_of!(aeron_mapped_raw_log_stct, log_meta_data) - 48usize];\n [\"Offset of field: aeron_mapped_raw_log_stct::mapped_file\"]\n [::std::mem::offset_of!(aeron_mapped_raw_log_stct, mapped_file) - 64usize];\n [\"Offset of field: aeron_mapped_raw_log_stct::term_length\"]\n [::std::mem::offset_of!(aeron_mapped_raw_log_stct, term_length) - 80usize];\n};\nimpl Default for aeron_mapped_raw_log_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_mapped_raw_log_t = aeron_mapped_raw_log_stct;\nunsafe extern \"C\" {\n pub fn aeron_ipc_publication_location(\n dst: *mut ::std::os::raw::c_char,\n length: usize,\n aeron_dir: *const ::std::os::raw::c_char,\n correlation_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_network_publication_location(\n dst: *mut ::std::os::raw::c_char,\n length: usize,\n aeron_dir: *const ::std::os::raw::c_char,\n correlation_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_publication_image_location(\n dst: *mut ::std::os::raw::c_char,\n length: usize,\n aeron_dir: *const ::std::os::raw::c_char,\n correlation_id: i64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_temp_filename(filename: *mut ::std::os::raw::c_char, length: usize) -> usize;\n}\npub type aeron_raw_log_map_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n arg1: *mut aeron_mapped_raw_log_t,\n arg2: *const ::std::os::raw::c_char,\n arg3: bool,\n arg4: u64,\n arg5: u64,\n ) -> ::std::os::raw::c_int,\n>;\npub type aeron_raw_log_close_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n arg1: *mut aeron_mapped_raw_log_t,\n filename: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int,\n>;\npub type aeron_raw_log_free_func_t = ::std::option::Option<\n unsafe extern \"C\" fn(\n arg1: *mut aeron_mapped_raw_log_t,\n filename: *const ::std::os::raw::c_char,\n ) -> bool,\n>;\nunsafe extern \"C\" {\n pub fn aeron_raw_log_map(\n mapped_raw_log: *mut aeron_mapped_raw_log_t,\n path: *const ::std::os::raw::c_char,\n use_sparse_files: bool,\n term_length: u64,\n page_size: u64,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_raw_log_map_existing(\n mapped_raw_log: *mut aeron_mapped_raw_log_t,\n path: *const ::std::os::raw::c_char,\n pre_touch: bool,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_raw_log_close(\n mapped_raw_log: *mut aeron_mapped_raw_log_t,\n filename: *const ::std::os::raw::c_char,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_raw_log_free(\n mapped_raw_log: *mut aeron_mapped_raw_log_t,\n filename: *const ::std::os::raw::c_char,\n ) -> bool;\n}\nunsafe extern \"C\" {\n pub fn aeron_file_resolve(\n parent: *const ::std::os::raw::c_char,\n child: *const ::std::os::raw::c_char,\n buffer: *mut ::std::os::raw::c_char,\n buffer_len: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_cnc_metadata_stct {\n pub cnc_version: i32,\n pub to_driver_buffer_length: i32,\n pub to_clients_buffer_length: i32,\n pub counter_metadata_buffer_length: i32,\n pub counter_values_buffer_length: i32,\n pub error_log_buffer_length: i32,\n pub client_liveness_timeout: i64,\n pub start_timestamp: i64,\n pub pid: i64,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_cnc_metadata_stct\"][::std::mem::size_of::<aeron_cnc_metadata_stct>() - 48usize];\n [\"Alignment of aeron_cnc_metadata_stct\"]\n [::std::mem::align_of::<aeron_cnc_metadata_stct>() - 4usize];\n [\"Offset of field: aeron_cnc_metadata_stct::cnc_version\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, cnc_version) - 0usize];\n [\"Offset of field: aeron_cnc_metadata_stct::to_driver_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, to_driver_buffer_length) - 4usize];\n [\"Offset of field: aeron_cnc_metadata_stct::to_clients_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, to_clients_buffer_length) - 8usize];\n [\"Offset of field: aeron_cnc_metadata_stct::counter_metadata_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, counter_metadata_buffer_length) - 12usize];\n [\"Offset of field: aeron_cnc_metadata_stct::counter_values_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, counter_values_buffer_length) - 16usize];\n [\"Offset of field: aeron_cnc_metadata_stct::error_log_buffer_length\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, error_log_buffer_length) - 20usize];\n [\"Offset of field: aeron_cnc_metadata_stct::client_liveness_timeout\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, client_liveness_timeout) - 24usize];\n [\"Offset of field: aeron_cnc_metadata_stct::start_timestamp\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, start_timestamp) - 32usize];\n [\"Offset of field: aeron_cnc_metadata_stct::pid\"]\n [::std::mem::offset_of!(aeron_cnc_metadata_stct, pid) - 40usize];\n};\npub type aeron_cnc_metadata_t = aeron_cnc_metadata_stct;\n#[repr(i32)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub enum aeron_cnc_load_result_stct {\n AERON_CNC_LOAD_FAILED = -1,\n AERON_CNC_LOAD_SUCCESS = 0,\n AERON_CNC_LOAD_AWAIT_FILE = 1,\n AERON_CNC_LOAD_AWAIT_MMAP = 2,\n AERON_CNC_LOAD_AWAIT_VERSION = 3,\n AERON_CNC_LOAD_AWAIT_CNC_DATA = 4,\n}\npub use self::aeron_cnc_load_result_stct as aeron_cnc_load_result_t;\nunsafe extern \"C\" {\n pub fn aeron_cnc_version_volatile(metadata: *mut aeron_cnc_metadata_t) -> i32;\n}\nunsafe extern \"C\" {\n pub fn aeron_cnc_map_file_and_load_metadata(\n dir: *const ::std::os::raw::c_char,\n mapped_file: *mut aeron_mapped_file_t,\n metadata: *mut *mut aeron_cnc_metadata_t,\n ) -> aeron_cnc_load_result_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_cnc_resolve_filename(\n directory: *const ::std::os::raw::c_char,\n filename_buffer: *mut ::std::os::raw::c_char,\n filename_buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\n#[repr(C, packed(4))]\n#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_loss_reporter_entry_stct {\n pub observation_count: i64,\n pub total_bytes_lost: i64,\n pub first_observation_timestamp: i64,\n pub last_observation_timestamp: i64,\n pub session_id: i32,\n pub stream_id: i32,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_loss_reporter_entry_stct\"]\n [::std::mem::size_of::<aeron_loss_reporter_entry_stct>() - 40usize];\n [\"Alignment of aeron_loss_reporter_entry_stct\"]\n [::std::mem::align_of::<aeron_loss_reporter_entry_stct>() - 4usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::observation_count\"]\n [::std::mem::offset_of!(aeron_loss_reporter_entry_stct, observation_count) - 0usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::total_bytes_lost\"]\n [::std::mem::offset_of!(aeron_loss_reporter_entry_stct, total_bytes_lost) - 8usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::first_observation_timestamp\"][::std::mem::offset_of!(\n aeron_loss_reporter_entry_stct,\n first_observation_timestamp\n ) - 16usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::last_observation_timestamp\"][::std::mem::offset_of!(\n aeron_loss_reporter_entry_stct,\n last_observation_timestamp\n ) - 24usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::session_id\"]\n [::std::mem::offset_of!(aeron_loss_reporter_entry_stct, session_id) - 32usize];\n [\"Offset of field: aeron_loss_reporter_entry_stct::stream_id\"]\n [::std::mem::offset_of!(aeron_loss_reporter_entry_stct, stream_id) - 36usize];\n};\npub type aeron_loss_reporter_entry_t = aeron_loss_reporter_entry_stct;\n#[repr(C)]\n#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]\npub struct aeron_loss_reporter_stct {\n pub buffer: *mut u8,\n pub next_record_offset: usize,\n pub capacity: usize,\n}\n#[allow(clippy::unnecessary_operation, clippy::identity_op)]\nconst _: () = {\n [\"Size of aeron_loss_reporter_stct\"]\n [::std::mem::size_of::<aeron_loss_reporter_stct>() - 24usize];\n [\"Alignment of aeron_loss_reporter_stct\"]\n [::std::mem::align_of::<aeron_loss_reporter_stct>() - 8usize];\n [\"Offset of field: aeron_loss_reporter_stct::buffer\"]\n [::std::mem::offset_of!(aeron_loss_reporter_stct, buffer) - 0usize];\n [\"Offset of field: aeron_loss_reporter_stct::next_record_offset\"]\n [::std::mem::offset_of!(aeron_loss_reporter_stct, next_record_offset) - 8usize];\n [\"Offset of field: aeron_loss_reporter_stct::capacity\"]\n [::std::mem::offset_of!(aeron_loss_reporter_stct, capacity) - 16usize];\n};\nimpl Default for aeron_loss_reporter_stct {\n fn default() -> Self {\n let mut s = ::std::mem::MaybeUninit::<Self>::uninit();\n unsafe {\n ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);\n s.assume_init()\n }\n }\n}\npub type aeron_loss_reporter_t = aeron_loss_reporter_stct;\npub type aeron_loss_reporter_entry_offset_t = i64;\nunsafe extern \"C\" {\n pub fn aeron_loss_reporter_init(\n reporter: *mut aeron_loss_reporter_t,\n buffer: *mut u8,\n length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_loss_reporter_create_entry(\n reporter: *mut aeron_loss_reporter_t,\n initial_bytes_lost: i64,\n timestamp_ms: i64,\n session_id: i32,\n stream_id: i32,\n channel: *const ::std::os::raw::c_char,\n channel_length: usize,\n source: *const ::std::os::raw::c_char,\n source_length: usize,\n ) -> aeron_loss_reporter_entry_offset_t;\n}\nunsafe extern \"C\" {\n pub fn aeron_loss_reporter_record_observation(\n reporter: *mut aeron_loss_reporter_t,\n offset: aeron_loss_reporter_entry_offset_t,\n bytes_lost: i64,\n timestamp_ms: i64,\n );\n}\nunsafe extern \"C\" {\n pub fn aeron_loss_reporter_resolve_filename(\n directory: *const ::std::os::raw::c_char,\n filename_buffer: *mut ::std::os::raw::c_char,\n filename_buffer_length: usize,\n ) -> ::std::os::raw::c_int;\n}\nunsafe extern \"C\" {\n pub fn aeron_loss_reporter_read(\n buffer: *const u8,\n capacity: usize,\n entry_func: aeron_loss_reporter_read_entry_func_t,\n clientd: *mut ::std::os::raw::c_void,\n ) -> usize;\n}\n";