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, ...) |