use std::ffi::CStr;
use std::sync::LazyLock;
macro_rules! key_constant {
($name:ident, $pw_symbol:ident, #[doc = $doc:expr]) => {
#[doc = $doc]
pub static $name: LazyLock<&'static str> = LazyLock::new(|| unsafe {
CStr::from_bytes_with_nul_unchecked($crate::sys::$pw_symbol)
.to_str()
.unwrap()
});
};
}
key_constant!(PROTOCOL, PW_KEY_PROTOCOL,
);
key_constant!(ACCESS, PW_KEY_ACCESS,
);
key_constant!(CLIENT_ACCESS, PW_KEY_CLIENT_ACCESS,
);
key_constant!(SEC_PID, PW_KEY_SEC_PID,
);
key_constant!(SEC_UID, PW_KEY_SEC_UID,
);
key_constant!(SEC_GID, PW_KEY_SEC_GID,
);
key_constant!(SEC_LABEL, PW_KEY_SEC_LABEL,
);
key_constant!(LIBRARY_NAME_SYSTEM, PW_KEY_LIBRARY_NAME_SYSTEM,
);
key_constant!(LIBRARY_NAME_LOOP, PW_KEY_LIBRARY_NAME_LOOP,
);
key_constant!(LIBRARY_NAME_DBUS, PW_KEY_LIBRARY_NAME_DBUS,
);
key_constant!(OBJECT_PATH, PW_KEY_OBJECT_PATH,
);
key_constant!(OBJECT_ID, PW_KEY_OBJECT_ID,
);
#[cfg(feature = "v0_3_41")]
key_constant!(OBJECT_SERIAL, PW_KEY_OBJECT_SERIAL,
);
key_constant!(OBJECT_LINGER, PW_KEY_OBJECT_LINGER,
);
#[cfg(feature = "v0_3_32")]
key_constant!(OBJECT_REGISTER, PW_KEY_OBJECT_REGISTER,
);
key_constant!(CONFIG_PREFIX, PW_KEY_CONFIG_PREFIX,
);
key_constant!(CONFIG_NAME, PW_KEY_CONFIG_NAME,
);
#[cfg(feature = "v0_3_57")]
key_constant!(CONFIG_OVERRIDE_PREFIX, PW_KEY_CONFIG_OVERRIDE_PREFIX,
);
#[cfg(feature = "v0_3_57")]
key_constant!(CONFIG_OVERRIDE_NAME, PW_KEY_CONFIG_OVERRIDE_NAME,
);
key_constant!(CONTEXT_PROFILE_MODULES, PW_KEY_CONTEXT_PROFILE_MODULES,
);
key_constant!(USER_NAME, PW_KEY_USER_NAME,
);
key_constant!(HOST_NAME, PW_KEY_HOST_NAME,
);
key_constant!(CORE_NAME, PW_KEY_CORE_NAME,
);
key_constant!(CORE_VERSION, PW_KEY_CORE_VERSION,
);
key_constant!(CORE_DAEMON, PW_KEY_CORE_DAEMON,
);
key_constant!(CORE_ID, PW_KEY_CORE_ID,
);
key_constant!(CORE_MONITORS, PW_KEY_CORE_MONITORS,
);
key_constant!(CPU_MAX_ALIGN, PW_KEY_CPU_MAX_ALIGN,
);
key_constant!(CPU_CORES, PW_KEY_CPU_CORES,
);
key_constant!(PRIORITY_SESSION, PW_KEY_PRIORITY_SESSION,
);
key_constant!(PRIORITY_DRIVER, PW_KEY_PRIORITY_DRIVER,
);
key_constant!(REMOTE_NAME, PW_KEY_REMOTE_NAME,
);
key_constant!(REMOTE_INTENTION, PW_KEY_REMOTE_INTENTION,
);
key_constant!(APP_NAME, PW_KEY_APP_NAME,
);
key_constant!(APP_ID, PW_KEY_APP_ID,
);
key_constant!(APP_VERSION, PW_KEY_APP_VERSION,
);
key_constant!(APP_ICON, PW_KEY_APP_ICON,
);
key_constant!(APP_ICON_NAME, PW_KEY_APP_ICON_NAME,
);
key_constant!(APP_LANGUAGE, PW_KEY_APP_LANGUAGE,
);
key_constant!(APP_PROCESS_ID, PW_KEY_APP_PROCESS_ID,
);
key_constant!(APP_PROCESS_BINARY, PW_KEY_APP_PROCESS_BINARY,
);
key_constant!(APP_PROCESS_USER, PW_KEY_APP_PROCESS_USER,
);
key_constant!(APP_PROCESS_HOST, PW_KEY_APP_PROCESS_HOST,
);
key_constant!(APP_PROCESS_MACHINE_ID, PW_KEY_APP_PROCESS_MACHINE_ID,
);
key_constant!(APP_PROCESS_SESSION_ID, PW_KEY_APP_PROCESS_SESSION_ID,
);
key_constant!(WINDOW_X11_DISPLAY, PW_KEY_WINDOW_X11_DISPLAY,
);
key_constant!(CLIENT_ID, PW_KEY_CLIENT_ID,
);
key_constant!(CLIENT_NAME, PW_KEY_CLIENT_NAME,
);
key_constant!(CLIENT_API, PW_KEY_CLIENT_API,
);
key_constant!(NODE_ID, PW_KEY_NODE_ID,
);
key_constant!(NODE_NAME, PW_KEY_NODE_NAME,
);
key_constant!(NODE_NICK, PW_KEY_NODE_NICK,
);
key_constant!(NODE_DESCRIPTION, PW_KEY_NODE_DESCRIPTION,
);
key_constant!(NODE_PLUGGED, PW_KEY_NODE_PLUGGED,
);
key_constant!(NODE_SESSION, PW_KEY_NODE_SESSION,
);
key_constant!(NODE_GROUP, PW_KEY_NODE_GROUP,
);
key_constant!(NODE_EXCLUSIVE, PW_KEY_NODE_EXCLUSIVE,
);
key_constant!(NODE_AUTOCONNECT, PW_KEY_NODE_AUTOCONNECT,
);
key_constant!(NODE_LATENCY, PW_KEY_NODE_LATENCY,
);
key_constant!(NODE_MAX_LATENCY, PW_KEY_NODE_MAX_LATENCY,
);
#[cfg(feature = "v0_3_33")]
key_constant!(NODE_LOCK_QUANTUM, PW_KEY_NODE_LOCK_QUANTUM,
);
#[cfg(feature = "v0_3_45")]
key_constant!(NODE_FORCE_QUANTUM, PW_KEY_NODE_FORCE_QUANTUM,
);
#[cfg(feature = "v0_3_33")]
key_constant!(NODE_RATE, PW_KEY_NODE_RATE,
);
#[cfg(feature = "v0_3_33")]
key_constant!(NODE_LOCK_RATE, PW_KEY_NODE_LOCK_RATE,
);
#[cfg(feature = "v0_3_45")]
key_constant!(NODE_FORCE_RATE, PW_KEY_NODE_FORCE_RATE,
);
key_constant!(NODE_DONT_RECONNECT, PW_KEY_NODE_DONT_RECONNECT,
);
key_constant!(NODE_ALWAYS_PROCESS, PW_KEY_NODE_ALWAYS_PROCESS,
);
#[cfg(feature = "v0_3_33")]
key_constant!(NODE_WANT_DRIVER, PW_KEY_NODE_WANT_DRIVER,
);
key_constant!(NODE_PAUSE_ON_IDLE, PW_KEY_NODE_PAUSE_ON_IDLE,
);
#[cfg(feature = "v0_3_44")]
key_constant!(NODE_SUSPEND_ON_IDLE, PW_KEY_NODE_SUSPEND_ON_IDLE,
);
key_constant!(NODE_CACHE_PARAMS, PW_KEY_NODE_CACHE_PARAMS,
);
#[cfg(feature = "v0_3_44")]
key_constant!(NODE_TRANSPORT_SYNC, PW_KEY_NODE_TRANSPORT_SYNC,
);
key_constant!(NODE_DRIVER, PW_KEY_NODE_DRIVER,
);
key_constant!(NODE_STREAM, PW_KEY_NODE_STREAM,
);
key_constant!(NODE_VIRTUAL, PW_KEY_NODE_VIRTUAL,
);
key_constant!(NODE_PASSIVE, PW_KEY_NODE_PASSIVE,
);
#[cfg(feature = "v0_3_32")]
key_constant!(NODE_LINK_GROUP, PW_KEY_NODE_LINK_GROUP,
);
#[cfg(feature = "v0_3_39")]
key_constant!(NODE_NETWORK, PW_KEY_NODE_NETWORK,
);
#[cfg(feature = "v0_3_41")]
key_constant!(NODE_TRIGGER, PW_KEY_NODE_TRIGGER,
);
#[cfg(feature = "v0_3_64")]
key_constant!(NODE_CHANNELNAMES, PW_KEY_NODE_CHANNELNAMES,
);
key_constant!(PORT_ID, PW_KEY_PORT_ID,
);
key_constant!(PORT_NAME, PW_KEY_PORT_NAME,
);
key_constant!(PORT_DIRECTION, PW_KEY_PORT_DIRECTION,
);
key_constant!(PORT_ALIAS, PW_KEY_PORT_ALIAS,
);
key_constant!(PORT_PHYSICAL, PW_KEY_PORT_PHYSICAL,
);
key_constant!(PORT_TERMINAL, PW_KEY_PORT_TERMINAL,
);
key_constant!(PORT_CONTROL, PW_KEY_PORT_CONTROL,
);
key_constant!(PORT_MONITOR, PW_KEY_PORT_MONITOR,
);
key_constant!(PORT_CACHE_PARAMS, PW_KEY_PORT_CACHE_PARAMS,
);
key_constant!(PORT_EXTRA, PW_KEY_PORT_EXTRA,
);
key_constant!(LINK_ID, PW_KEY_LINK_ID,
);
key_constant!(LINK_INPUT_NODE, PW_KEY_LINK_INPUT_NODE,
);
key_constant!(LINK_INPUT_PORT, PW_KEY_LINK_INPUT_PORT,
);
key_constant!(LINK_OUTPUT_NODE, PW_KEY_LINK_OUTPUT_NODE,
);
key_constant!(LINK_OUTPUT_PORT, PW_KEY_LINK_OUTPUT_PORT,
);
key_constant!(LINK_PASSIVE, PW_KEY_LINK_PASSIVE,
);
key_constant!(LINK_FEEDBACK, PW_KEY_LINK_FEEDBACK,
);
key_constant!(DEVICE_ID, PW_KEY_DEVICE_ID,
);
key_constant!(DEVICE_NAME, PW_KEY_DEVICE_NAME,
);
key_constant!(DEVICE_PLUGGED, PW_KEY_DEVICE_PLUGGED,
);
key_constant!(DEVICE_NICK, PW_KEY_DEVICE_NICK,
);
key_constant!(DEVICE_STRING, PW_KEY_DEVICE_STRING,
);
key_constant!(DEVICE_API, PW_KEY_DEVICE_API,
);
key_constant!(DEVICE_DESCRIPTION, PW_KEY_DEVICE_DESCRIPTION,
);
key_constant!(DEVICE_BUS_PATH, PW_KEY_DEVICE_BUS_PATH,
);
key_constant!(DEVICE_SERIAL, PW_KEY_DEVICE_SERIAL,
);
key_constant!(DEVICE_VENDOR_ID, PW_KEY_DEVICE_VENDOR_ID,
);
key_constant!(DEVICE_VENDOR_NAME, PW_KEY_DEVICE_VENDOR_NAME,
);
key_constant!(DEVICE_PRODUCT_ID, PW_KEY_DEVICE_PRODUCT_ID,
);
key_constant!(DEVICE_PRODUCT_NAME, PW_KEY_DEVICE_PRODUCT_NAME,
);
key_constant!(DEVICE_CLASS, PW_KEY_DEVICE_CLASS,
);
key_constant!(DEVICE_FORM_FACTOR, PW_KEY_DEVICE_FORM_FACTOR,
);
key_constant!(DEVICE_BUS, PW_KEY_DEVICE_BUS,
);
key_constant!(DEVICE_SUBSYSTEM, PW_KEY_DEVICE_SUBSYSTEM,
);
#[cfg(feature = "v0_3_53")]
key_constant!(DEVICE_SYSFS_PATH, PW_KEY_DEVICE_SYSFS_PATH,
);
key_constant!(DEVICE_ICON, PW_KEY_DEVICE_ICON,
);
key_constant!(DEVICE_ICON_NAME, PW_KEY_DEVICE_ICON_NAME,
);
key_constant!(DEVICE_INTENDED_ROLES, PW_KEY_DEVICE_INTENDED_ROLES,
);
key_constant!(DEVICE_CACHE_PARAMS, PW_KEY_DEVICE_CACHE_PARAMS,
);
key_constant!(MODULE_ID, PW_KEY_MODULE_ID,
);
key_constant!(MODULE_NAME, PW_KEY_MODULE_NAME,
);
key_constant!(MODULE_AUTHOR, PW_KEY_MODULE_AUTHOR,
);
key_constant!(MODULE_DESCRIPTION, PW_KEY_MODULE_DESCRIPTION,
);
key_constant!(MODULE_USAGE, PW_KEY_MODULE_USAGE,
);
key_constant!(MODULE_VERSION, PW_KEY_MODULE_VERSION,
);
key_constant!(FACTORY_ID, PW_KEY_FACTORY_ID,
);
key_constant!(FACTORY_NAME, PW_KEY_FACTORY_NAME,
);
key_constant!(FACTORY_USAGE, PW_KEY_FACTORY_USAGE,
);
key_constant!(FACTORY_TYPE_NAME, PW_KEY_FACTORY_TYPE_NAME,
);
key_constant!(FACTORY_TYPE_VERSION, PW_KEY_FACTORY_TYPE_VERSION,
);
key_constant!(STREAM_IS_LIVE, PW_KEY_STREAM_IS_LIVE,
);
key_constant!(STREAM_LATENCY_MIN, PW_KEY_STREAM_LATENCY_MIN,
);
key_constant!(STREAM_LATENCY_MAX, PW_KEY_STREAM_LATENCY_MAX,
);
key_constant!(STREAM_MONITOR, PW_KEY_STREAM_MONITOR,
);
key_constant!(STREAM_DONT_REMIX, PW_KEY_STREAM_DONT_REMIX,
);
key_constant!(STREAM_CAPTURE_SINK, PW_KEY_STREAM_CAPTURE_SINK,
);
key_constant!(MEDIA_TYPE, PW_KEY_MEDIA_TYPE,
);
key_constant!(MEDIA_CATEGORY, PW_KEY_MEDIA_CATEGORY,
);
key_constant!(MEDIA_ROLE, PW_KEY_MEDIA_ROLE,
);
key_constant!(MEDIA_CLASS, PW_KEY_MEDIA_CLASS,
);
key_constant!(MEDIA_NAME, PW_KEY_MEDIA_NAME,
);
key_constant!(MEDIA_TITLE, PW_KEY_MEDIA_TITLE,
);
key_constant!(MEDIA_ARTIST, PW_KEY_MEDIA_ARTIST,
);
key_constant!(MEDIA_COPYRIGHT, PW_KEY_MEDIA_COPYRIGHT,
);
key_constant!(MEDIA_SOFTWARE, PW_KEY_MEDIA_SOFTWARE,
);
key_constant!(MEDIA_LANGUAGE, PW_KEY_MEDIA_LANGUAGE,
);
key_constant!(MEDIA_FILENAME, PW_KEY_MEDIA_FILENAME,
);
key_constant!(MEDIA_ICON, PW_KEY_MEDIA_ICON,
);
key_constant!(MEDIA_ICON_NAME, PW_KEY_MEDIA_ICON_NAME,
);
key_constant!(MEDIA_COMMENT, PW_KEY_MEDIA_COMMENT,
);
key_constant!(MEDIA_DATE, PW_KEY_MEDIA_DATE,
);
key_constant!(MEDIA_FORMAT, PW_KEY_MEDIA_FORMAT,
);
key_constant!(FORMAT_DSP, PW_KEY_FORMAT_DSP,
);
key_constant!(AUDIO_CHANNEL, PW_KEY_AUDIO_CHANNEL,
);
#[cfg(feature = "v0_3_32")]
key_constant!(AUDIO_RATE, PW_KEY_AUDIO_RATE,
);
key_constant!(AUDIO_CHANNELS, PW_KEY_AUDIO_CHANNELS,
);
key_constant!(AUDIO_FORMAT, PW_KEY_AUDIO_FORMAT,
);
#[cfg(feature = "v0_3_43")]
key_constant!(AUDIO_ALLOWED_RATES, PW_KEY_AUDIO_ALLOWED_RATES,
);
key_constant!(VIDEO_RATE, PW_KEY_VIDEO_RATE,
);
key_constant!(VIDEO_FORMAT, PW_KEY_VIDEO_FORMAT,
);
key_constant!(VIDEO_SIZE, PW_KEY_VIDEO_SIZE,
);
#[cfg(feature = "v0_3_44")]
key_constant!(TARGET_OBJECT, PW_KEY_TARGET_OBJECT,
);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn keys() {
assert_eq!(*REMOTE_NAME, "remote.name");
}
}