use std::ffi::{c_char, c_double, c_int, c_long, c_longlong, c_uint, c_ulong, c_ulonglong};
use super::{mysql_var_check_func, mysql_var_update_func, TYPELIB};
pub const ENCRYPTION_KEY_VERSION_INVALID: c_uint = !0;
#[allow(dead_code)] pub const PLUGIN_VAR_MASK: u32 = super::PLUGIN_VAR_READONLY
| super::PLUGIN_VAR_NOSYSVAR
| super::PLUGIN_VAR_NOCMDOPT
| super::PLUGIN_VAR_NOCMDARG
| super::PLUGIN_VAR_OPCMDARG
| super::PLUGIN_VAR_RQCMDARG
| super::PLUGIN_VAR_DEPRECATED
| super::PLUGIN_VAR_MEMALLOC;
macro_rules! declare_sysvar_type {
(@common $name:ident: $(#[$doc:meta] $fname:ident: $fty:ty),* $(,)*) => {
#[repr(C)]
#[derive(Debug)]
pub struct $name {
pub flags: c_int,
pub name: *const c_char,
pub comment: *const c_char,
pub check: mysql_var_check_func,
pub update: mysql_var_update_func,
$(
#[$doc]
pub $fname: $fty
),*
}
};
(basic: $name:ident, $ty:ty) => {
declare_sysvar_type!{
@common $name:
#[doc = "Pointer to the value"]
value: *mut $ty,
#[doc = "Default value"]
def_val: $ty,
}
};
(const basic: $name:ident, $ty:ty) => {
declare_sysvar_type!{
@common $name:
#[doc = "Pointer to the value"]
value: *const $ty,
#[doc = "Default value"]
def_val: $ty,
}
};
(simple: $name:ident, $ty:ty) => {
declare_sysvar_type!{
@common $name:
#[doc = "Pointer to the value"]
value: *mut $ty,
#[doc = "Default value"]
def_val: $ty,
#[doc = "Min value"]
min_val: $ty,
#[doc = "Max value"]
max_val: $ty,
#[doc = "Block size"]
blk_sz: $ty,
}
};
(typelib: $name:ident, $ty:ty) => {
declare_sysvar_type!{
@common $name:
#[doc = "Pointer to the value"]
value: *mut $ty,
#[doc = "Default value"]
def_val: $ty,
#[doc = "Typelib"]
typelib: *const TYPELIB
}
};
}
declare_sysvar_type!(@common sysvar_common_t:);
declare_sysvar_type!(basic: sysvar_bool_t, bool);
declare_sysvar_type!(basic: sysvar_str_t, *mut c_char);
declare_sysvar_type!(typelib: sysvar_enum_t, c_ulong);
declare_sysvar_type!(typelib: sysvar_set_t, c_ulonglong);
declare_sysvar_type!(simple: sysvar_int_t, c_int);
declare_sysvar_type!(simple: sysvar_long_t, c_long);
declare_sysvar_type!(simple: sysvar_longlong_t, c_longlong);
declare_sysvar_type!(simple: sysvar_uint_t, c_uint);
declare_sysvar_type!(simple: sysvar_ulong_t, c_ulong);
declare_sysvar_type!(simple: sysvar_ulonglong_t, c_ulonglong);
declare_sysvar_type!(simple: sysvar_double_t, c_double);