module dpp2.translation.type; import dpp.from; string translate(from!"dpp2.type".Type type) @safe pure { import dpp2.type; import sumtype: match; import std.conv: text; return type.match!( (Void _) => "void", (NullPointerT _) => "void*", (Bool _) => "bool", (UnsignedChar _) => "ubyte", (SignedChar _) => "byte", (Char _) => "char", (Wchar _) => translateWchar(), (Char16 _) => "wchar", (Char32 _) => "dchar", (Short _) => "short", (UnsignedShort _) => "ushort", (Int _) => "int", (UnsignedInt _) => "uint", (Long _) => "c_long", (UnsignedLong _) => "c_ulong", (LongLong _) => "long", (UnsignedLongLong _) => "ulong", (Float _) => "float", (Double _) => "double", (LongDouble _) => "real", (Pointer ptr) => text(translate(*ptr.pointeeType), "*"), (ConstantArray arr) => text(translate(*arr.elementType), "[", arr.length, "]"), ); } private string translateWchar() @safe pure { version(Windows) return "wchar"; else return "dchar"; }