libstrophe 0.20.3

Rust ergonomic wrapper for libstrophe
Documentation
#[cfg(feature = "libstrophe-0_12_0")]
pub fn stanza_get_child_by_path(stanza: *mut sys::xmpp_stanza_t, path: &[&str]) -> *mut sys::xmpp_stanza_t {
	use core::ffi::c_char;
	use core::ptr;

	use crate::ffi_types::FFI;

	macro_rules! call_with_paths {
		( $($path: ident),+ ) => {
			{
				$(
					let $path = FFI($path).send();
				)+
				unsafe {
					sys::xmpp_stanza_get_child_by_path(stanza, $($path.as_ptr()),+, ptr::null::<*const c_char>())
				}
			}
		};
	}

	match *path {
		[] => unsafe { sys::xmpp_stanza_get_child_by_path(stanza, ptr::null::<*const c_char>()) },
		[path0] => {
			call_with_paths!(path0)
		}
		[path0, path1] => {
			call_with_paths!(path0, path1)
		}
		[path0, path1, path2] => {
			call_with_paths!(path0, path1, path2)
		}
		[path0, path1, path2, path3] => {
			call_with_paths!(path0, path1, path2, path3)
		}
		[path0, path1, path2, path3, path4] => {
			call_with_paths!(path0, path1, path2, path3, path4)
		}
		[path0, path1, path2, path3, path4, path5] => {
			call_with_paths!(path0, path1, path2, path3, path4, path5)
		}
		[path0, path1, path2, path3, path4, path5, path6] => {
			call_with_paths!(path0, path1, path2, path3, path4, path5, path6)
		}
		[path0, path1, path2, path3, path4, path5, path6, path7] => {
			call_with_paths!(path0, path1, path2, path3, path4, path5, path6, path7)
		}
		[path0, path1, path2, path3, path4, path5, path6, path7, path8] => {
			call_with_paths!(path0, path1, path2, path3, path4, path5, path6, path7, path8)
		}
		[path0, path1, path2, path3, path4, path5, path6, path7, path8, path9] => {
			call_with_paths!(path0, path1, path2, path3, path4, path5, path6, path7, path8, path9)
		}
		_ => panic!("Maximum supported amount of elements in path is 10"),
	}
}