1use std::ffi::CStr;
15use std::sync::LazyLock;
16
17macro_rules! key_constant {
19 ($name:ident, $pw_symbol:ident, #[doc = $doc:expr]) => {
20 #[doc = $doc]
21 pub static $name: LazyLock<&'static str> = LazyLock::new(|| unsafe {
22 CStr::from_bytes_with_nul_unchecked($crate::sys::$pw_symbol)
23 .to_str()
24 .unwrap()
25 });
26 };
27}
28
29key_constant!(PROTOCOL, PW_KEY_PROTOCOL,
30 );
32key_constant!(ACCESS, PW_KEY_ACCESS,
33 );
35key_constant!(CLIENT_ACCESS, PW_KEY_CLIENT_ACCESS,
36 );
38key_constant!(SEC_PID, PW_KEY_SEC_PID,
39 );
41key_constant!(SEC_UID, PW_KEY_SEC_UID,
42 );
44key_constant!(SEC_GID, PW_KEY_SEC_GID,
45 );
47key_constant!(SEC_LABEL, PW_KEY_SEC_LABEL,
48 );
50key_constant!(LIBRARY_NAME_SYSTEM, PW_KEY_LIBRARY_NAME_SYSTEM,
51 );
53key_constant!(LIBRARY_NAME_LOOP, PW_KEY_LIBRARY_NAME_LOOP,
54 );
56key_constant!(LIBRARY_NAME_DBUS, PW_KEY_LIBRARY_NAME_DBUS,
57 );
59key_constant!(OBJECT_PATH, PW_KEY_OBJECT_PATH,
60 );
62key_constant!(OBJECT_ID, PW_KEY_OBJECT_ID,
63 );
65#[cfg(feature = "v0_3_41")]
66key_constant!(OBJECT_SERIAL, PW_KEY_OBJECT_SERIAL,
67 );
69key_constant!(OBJECT_LINGER, PW_KEY_OBJECT_LINGER,
70 );
72#[cfg(feature = "v0_3_32")]
73key_constant!(OBJECT_REGISTER, PW_KEY_OBJECT_REGISTER,
74 );
76key_constant!(CONFIG_PREFIX, PW_KEY_CONFIG_PREFIX,
77 );
79key_constant!(CONFIG_NAME, PW_KEY_CONFIG_NAME,
80 );
82#[cfg(feature = "v0_3_57")]
83key_constant!(CONFIG_OVERRIDE_PREFIX, PW_KEY_CONFIG_OVERRIDE_PREFIX,
84 );
86#[cfg(feature = "v0_3_57")]
87key_constant!(CONFIG_OVERRIDE_NAME, PW_KEY_CONFIG_OVERRIDE_NAME,
88 );
90key_constant!(CONTEXT_PROFILE_MODULES, PW_KEY_CONTEXT_PROFILE_MODULES,
91 );
93key_constant!(USER_NAME, PW_KEY_USER_NAME,
94 );
96key_constant!(HOST_NAME, PW_KEY_HOST_NAME,
97 );
99key_constant!(CORE_NAME, PW_KEY_CORE_NAME,
100 );
102key_constant!(CORE_VERSION, PW_KEY_CORE_VERSION,
103 );
105key_constant!(CORE_DAEMON, PW_KEY_CORE_DAEMON,
106 );
108key_constant!(CORE_ID, PW_KEY_CORE_ID,
109 );
111key_constant!(CORE_MONITORS, PW_KEY_CORE_MONITORS,
112 );
114key_constant!(CPU_MAX_ALIGN, PW_KEY_CPU_MAX_ALIGN,
115 );
117key_constant!(CPU_CORES, PW_KEY_CPU_CORES,
118 );
120key_constant!(PRIORITY_SESSION, PW_KEY_PRIORITY_SESSION,
121 );
123key_constant!(PRIORITY_DRIVER, PW_KEY_PRIORITY_DRIVER,
124 );
126key_constant!(REMOTE_NAME, PW_KEY_REMOTE_NAME,
127 );
129key_constant!(REMOTE_INTENTION, PW_KEY_REMOTE_INTENTION,
130 );
132key_constant!(APP_NAME, PW_KEY_APP_NAME,
133 );
135key_constant!(APP_ID, PW_KEY_APP_ID,
136 );
138key_constant!(APP_VERSION, PW_KEY_APP_VERSION,
139 );
141key_constant!(APP_ICON, PW_KEY_APP_ICON,
142 );
144key_constant!(APP_ICON_NAME, PW_KEY_APP_ICON_NAME,
145 );
147key_constant!(APP_LANGUAGE, PW_KEY_APP_LANGUAGE,
148 );
150key_constant!(APP_PROCESS_ID, PW_KEY_APP_PROCESS_ID,
151 );
153key_constant!(APP_PROCESS_BINARY, PW_KEY_APP_PROCESS_BINARY,
154 );
156key_constant!(APP_PROCESS_USER, PW_KEY_APP_PROCESS_USER,
157 );
159key_constant!(APP_PROCESS_HOST, PW_KEY_APP_PROCESS_HOST,
160 );
162key_constant!(APP_PROCESS_MACHINE_ID, PW_KEY_APP_PROCESS_MACHINE_ID,
163 );
165key_constant!(APP_PROCESS_SESSION_ID, PW_KEY_APP_PROCESS_SESSION_ID,
166 );
168key_constant!(WINDOW_X11_DISPLAY, PW_KEY_WINDOW_X11_DISPLAY,
169 );
171key_constant!(CLIENT_ID, PW_KEY_CLIENT_ID,
172 );
174key_constant!(CLIENT_NAME, PW_KEY_CLIENT_NAME,
175 );
177key_constant!(CLIENT_API, PW_KEY_CLIENT_API,
178 );
180key_constant!(NODE_ID, PW_KEY_NODE_ID,
181 );
183key_constant!(NODE_NAME, PW_KEY_NODE_NAME,
184 );
186key_constant!(NODE_NICK, PW_KEY_NODE_NICK,
187 );
189key_constant!(NODE_DESCRIPTION, PW_KEY_NODE_DESCRIPTION,
190 );
192key_constant!(NODE_PLUGGED, PW_KEY_NODE_PLUGGED,
193 );
195key_constant!(NODE_SESSION, PW_KEY_NODE_SESSION,
196 );
198key_constant!(NODE_GROUP, PW_KEY_NODE_GROUP,
199 );
201key_constant!(NODE_EXCLUSIVE, PW_KEY_NODE_EXCLUSIVE,
202 );
204key_constant!(NODE_AUTOCONNECT, PW_KEY_NODE_AUTOCONNECT,
205 );
207key_constant!(NODE_LATENCY, PW_KEY_NODE_LATENCY,
208 );
210key_constant!(NODE_MAX_LATENCY, PW_KEY_NODE_MAX_LATENCY,
211 );
213#[cfg(feature = "v0_3_33")]
214key_constant!(NODE_LOCK_QUANTUM, PW_KEY_NODE_LOCK_QUANTUM,
215 );
217#[cfg(feature = "v0_3_45")]
218key_constant!(NODE_FORCE_QUANTUM, PW_KEY_NODE_FORCE_QUANTUM,
219 );
221#[cfg(feature = "v0_3_33")]
222key_constant!(NODE_RATE, PW_KEY_NODE_RATE,
223 );
225#[cfg(feature = "v0_3_33")]
226key_constant!(NODE_LOCK_RATE, PW_KEY_NODE_LOCK_RATE,
227 );
229#[cfg(feature = "v0_3_45")]
230key_constant!(NODE_FORCE_RATE, PW_KEY_NODE_FORCE_RATE,
231 );
233key_constant!(NODE_DONT_RECONNECT, PW_KEY_NODE_DONT_RECONNECT,
234 );
236key_constant!(NODE_ALWAYS_PROCESS, PW_KEY_NODE_ALWAYS_PROCESS,
237 );
239#[cfg(feature = "v0_3_33")]
240key_constant!(NODE_WANT_DRIVER, PW_KEY_NODE_WANT_DRIVER,
241 );
243key_constant!(NODE_PAUSE_ON_IDLE, PW_KEY_NODE_PAUSE_ON_IDLE,
244 );
246#[cfg(feature = "v0_3_44")]
247key_constant!(NODE_SUSPEND_ON_IDLE, PW_KEY_NODE_SUSPEND_ON_IDLE,
248 );
250key_constant!(NODE_CACHE_PARAMS, PW_KEY_NODE_CACHE_PARAMS,
251 );
253#[cfg(feature = "v0_3_44")]
254key_constant!(NODE_TRANSPORT_SYNC, PW_KEY_NODE_TRANSPORT_SYNC,
255 );
257key_constant!(NODE_DRIVER, PW_KEY_NODE_DRIVER,
258 );
260key_constant!(NODE_STREAM, PW_KEY_NODE_STREAM,
261 );
263key_constant!(NODE_VIRTUAL, PW_KEY_NODE_VIRTUAL,
264 );
266key_constant!(NODE_PASSIVE, PW_KEY_NODE_PASSIVE,
267 );
269#[cfg(feature = "v0_3_32")]
270key_constant!(NODE_LINK_GROUP, PW_KEY_NODE_LINK_GROUP,
271 );
273#[cfg(feature = "v0_3_39")]
274key_constant!(NODE_NETWORK, PW_KEY_NODE_NETWORK,
275 );
277#[cfg(feature = "v0_3_41")]
278key_constant!(NODE_TRIGGER, PW_KEY_NODE_TRIGGER,
279 );
281#[cfg(feature = "v0_3_64")]
282key_constant!(NODE_CHANNELNAMES, PW_KEY_NODE_CHANNELNAMES,
283 );
285key_constant!(PORT_ID, PW_KEY_PORT_ID,
286 );
288key_constant!(PORT_NAME, PW_KEY_PORT_NAME,
289 );
291key_constant!(PORT_DIRECTION, PW_KEY_PORT_DIRECTION,
292 );
294key_constant!(PORT_ALIAS, PW_KEY_PORT_ALIAS,
295 );
297key_constant!(PORT_PHYSICAL, PW_KEY_PORT_PHYSICAL,
298 );
300key_constant!(PORT_TERMINAL, PW_KEY_PORT_TERMINAL,
301 );
303key_constant!(PORT_CONTROL, PW_KEY_PORT_CONTROL,
304 );
306key_constant!(PORT_MONITOR, PW_KEY_PORT_MONITOR,
307 );
309key_constant!(PORT_CACHE_PARAMS, PW_KEY_PORT_CACHE_PARAMS,
310 );
312key_constant!(PORT_EXTRA, PW_KEY_PORT_EXTRA,
313 );
315key_constant!(LINK_ID, PW_KEY_LINK_ID,
316 );
318key_constant!(LINK_INPUT_NODE, PW_KEY_LINK_INPUT_NODE,
319 );
321key_constant!(LINK_INPUT_PORT, PW_KEY_LINK_INPUT_PORT,
322 );
324key_constant!(LINK_OUTPUT_NODE, PW_KEY_LINK_OUTPUT_NODE,
325 );
327key_constant!(LINK_OUTPUT_PORT, PW_KEY_LINK_OUTPUT_PORT,
328 );
330key_constant!(LINK_PASSIVE, PW_KEY_LINK_PASSIVE,
331 );
333key_constant!(LINK_FEEDBACK, PW_KEY_LINK_FEEDBACK,
334 );
336key_constant!(DEVICE_ID, PW_KEY_DEVICE_ID,
337 );
339key_constant!(DEVICE_NAME, PW_KEY_DEVICE_NAME,
340 );
342key_constant!(DEVICE_PLUGGED, PW_KEY_DEVICE_PLUGGED,
343 );
345key_constant!(DEVICE_NICK, PW_KEY_DEVICE_NICK,
346 );
348key_constant!(DEVICE_STRING, PW_KEY_DEVICE_STRING,
349 );
351key_constant!(DEVICE_API, PW_KEY_DEVICE_API,
352 );
354key_constant!(DEVICE_DESCRIPTION, PW_KEY_DEVICE_DESCRIPTION,
355 );
357key_constant!(DEVICE_BUS_PATH, PW_KEY_DEVICE_BUS_PATH,
358 );
360key_constant!(DEVICE_SERIAL, PW_KEY_DEVICE_SERIAL,
361 );
363key_constant!(DEVICE_VENDOR_ID, PW_KEY_DEVICE_VENDOR_ID,
364 );
366key_constant!(DEVICE_VENDOR_NAME, PW_KEY_DEVICE_VENDOR_NAME,
367 );
369key_constant!(DEVICE_PRODUCT_ID, PW_KEY_DEVICE_PRODUCT_ID,
370 );
372key_constant!(DEVICE_PRODUCT_NAME, PW_KEY_DEVICE_PRODUCT_NAME,
373 );
375key_constant!(DEVICE_CLASS, PW_KEY_DEVICE_CLASS,
376 );
378key_constant!(DEVICE_FORM_FACTOR, PW_KEY_DEVICE_FORM_FACTOR,
379 );
381key_constant!(DEVICE_BUS, PW_KEY_DEVICE_BUS,
382 );
384key_constant!(DEVICE_SUBSYSTEM, PW_KEY_DEVICE_SUBSYSTEM,
385 );
387#[cfg(feature = "v0_3_53")]
388key_constant!(DEVICE_SYSFS_PATH, PW_KEY_DEVICE_SYSFS_PATH,
389 );
391key_constant!(DEVICE_ICON, PW_KEY_DEVICE_ICON,
392 );
394key_constant!(DEVICE_ICON_NAME, PW_KEY_DEVICE_ICON_NAME,
395 );
397key_constant!(DEVICE_INTENDED_ROLES, PW_KEY_DEVICE_INTENDED_ROLES,
398 );
400key_constant!(DEVICE_CACHE_PARAMS, PW_KEY_DEVICE_CACHE_PARAMS,
401 );
403key_constant!(MODULE_ID, PW_KEY_MODULE_ID,
404 );
406key_constant!(MODULE_NAME, PW_KEY_MODULE_NAME,
407 );
409key_constant!(MODULE_AUTHOR, PW_KEY_MODULE_AUTHOR,
410 );
412key_constant!(MODULE_DESCRIPTION, PW_KEY_MODULE_DESCRIPTION,
413 );
415key_constant!(MODULE_USAGE, PW_KEY_MODULE_USAGE,
416 );
418key_constant!(MODULE_VERSION, PW_KEY_MODULE_VERSION,
419 );
421key_constant!(FACTORY_ID, PW_KEY_FACTORY_ID,
422 );
424key_constant!(FACTORY_NAME, PW_KEY_FACTORY_NAME,
425 );
427key_constant!(FACTORY_USAGE, PW_KEY_FACTORY_USAGE,
428 );
430key_constant!(FACTORY_TYPE_NAME, PW_KEY_FACTORY_TYPE_NAME,
431 );
433key_constant!(FACTORY_TYPE_VERSION, PW_KEY_FACTORY_TYPE_VERSION,
434 );
436key_constant!(STREAM_IS_LIVE, PW_KEY_STREAM_IS_LIVE,
437 );
439key_constant!(STREAM_LATENCY_MIN, PW_KEY_STREAM_LATENCY_MIN,
440 );
442key_constant!(STREAM_LATENCY_MAX, PW_KEY_STREAM_LATENCY_MAX,
443 );
445key_constant!(STREAM_MONITOR, PW_KEY_STREAM_MONITOR,
446 );
448key_constant!(STREAM_DONT_REMIX, PW_KEY_STREAM_DONT_REMIX,
449 );
451key_constant!(STREAM_CAPTURE_SINK, PW_KEY_STREAM_CAPTURE_SINK,
452 );
454key_constant!(MEDIA_TYPE, PW_KEY_MEDIA_TYPE,
455 );
457key_constant!(MEDIA_CATEGORY, PW_KEY_MEDIA_CATEGORY,
458 );
460key_constant!(MEDIA_ROLE, PW_KEY_MEDIA_ROLE,
461 );
463key_constant!(MEDIA_CLASS, PW_KEY_MEDIA_CLASS,
464 );
466key_constant!(MEDIA_NAME, PW_KEY_MEDIA_NAME,
467 );
469key_constant!(MEDIA_TITLE, PW_KEY_MEDIA_TITLE,
470 );
472key_constant!(MEDIA_ARTIST, PW_KEY_MEDIA_ARTIST,
473 );
475key_constant!(MEDIA_COPYRIGHT, PW_KEY_MEDIA_COPYRIGHT,
476 );
478key_constant!(MEDIA_SOFTWARE, PW_KEY_MEDIA_SOFTWARE,
479 );
481key_constant!(MEDIA_LANGUAGE, PW_KEY_MEDIA_LANGUAGE,
482 );
484key_constant!(MEDIA_FILENAME, PW_KEY_MEDIA_FILENAME,
485 );
487key_constant!(MEDIA_ICON, PW_KEY_MEDIA_ICON,
488 );
490key_constant!(MEDIA_ICON_NAME, PW_KEY_MEDIA_ICON_NAME,
491 );
493key_constant!(MEDIA_COMMENT, PW_KEY_MEDIA_COMMENT,
494 );
496key_constant!(MEDIA_DATE, PW_KEY_MEDIA_DATE,
497 );
499key_constant!(MEDIA_FORMAT, PW_KEY_MEDIA_FORMAT,
500 );
502key_constant!(FORMAT_DSP, PW_KEY_FORMAT_DSP,
503 );
505key_constant!(AUDIO_CHANNEL, PW_KEY_AUDIO_CHANNEL,
506 );
508#[cfg(feature = "v0_3_32")]
509key_constant!(AUDIO_RATE, PW_KEY_AUDIO_RATE,
510 );
512key_constant!(AUDIO_CHANNELS, PW_KEY_AUDIO_CHANNELS,
513 );
515key_constant!(AUDIO_FORMAT, PW_KEY_AUDIO_FORMAT,
516 );
518#[cfg(feature = "v0_3_43")]
519key_constant!(AUDIO_ALLOWED_RATES, PW_KEY_AUDIO_ALLOWED_RATES,
520 );
522key_constant!(VIDEO_RATE, PW_KEY_VIDEO_RATE,
523 );
525key_constant!(VIDEO_FORMAT, PW_KEY_VIDEO_FORMAT,
526 );
528key_constant!(VIDEO_SIZE, PW_KEY_VIDEO_SIZE,
529 );
531#[cfg(feature = "v0_3_44")]
532key_constant!(TARGET_OBJECT, PW_KEY_TARGET_OBJECT,
533 );
535
536#[cfg(test)]
537mod tests {
538 use super::*;
539
540 #[test]
541 fn keys() {
542 assert_eq!(*REMOTE_NAME, "remote.name");
543 }
544}