Here is a list of valid foreign type specifiers:
Foreign types are mapped to C types in the following manner:
bool | int |
[unsigned-]char | [unsigned] char |
[unsigned-]short | [unsigned] short |
[unsigned-]int | [unsigned] int |
[unsigned-]integer | [unsigned] int |
[unsigned-]long | [unsigned] long |
float | float |
double | double |
[nonnull-]pointer | void * |
[nonnull-]c-pointer | void * |
[nonnull-]byte-vector | unsigned char * |
[nonnull-]u8vector | unsigned char * |
[nonnull-]s8vector | char * |
[nonnull-]u16vector | unsigned short * |
[nonnull-]s16vector | short * |
[nonnull-]u32vector | uint32_t * |
[nonnull-]s32vector | int32_t * |
[nonnull-]f32vector | float * |
[nonnull-]f64vector | double * |
[nonnull-]c-string | char * |
void | void |
([nonnull-]pointer TYPE) | TYPE * |
(enum NAME) | enum NAME |
(struct NAME) | struct NAME |
(ref TYPE) | TYPE & |
(template T1 T2 ...) | T1<T2, ...> |
(union NAME) | union NAME |
(function RTYPE (ATYPE ...) [CALLCONV]) | [CALLCONV] RTYPE (*)(ATYPE, ...) |