1 module autowrap.csharp.common;
2 
3 public struct LibraryName {
4     string value;
5 }
6 
7 public struct RootNamespace {
8     string value;
9 }
10 
11 package string getInterfaceTypeString(T)() {
12     import std.datetime : DateTime, SysTime;
13     import std.traits : fullyQualifiedName;
14 
15     if (is(T == DateTime) || is(T == SysTime)) {
16         return fullyQualifiedName!T;
17     }
18 
19     return fullyQualifiedName!T;
20 }
21 
22 package string getDLangInterfaceName(string moduleName, string aggName, string funcName) {
23     import std.algorithm : map;
24     import std.string : split;
25     import std.array : join;
26     string name = "autowrap_csharp_";
27     name ~= moduleName.split(".").map!camelToPascalCase.join("_");
28 
29     if (aggName != string.init) {
30         name ~= camelToPascalCase(aggName) ~ "_";
31     }
32     name ~= camelToPascalCase(funcName);
33     return name;
34 }
35 
36 package string getDLangInterfaceName(string fqn, string funcName) {
37     import std.algorithm : map;
38     import std.string : split;
39     import std.array : join;
40     string name = "autowrap_csharp_";
41 
42     name ~= fqn.split(".").map!camelToPascalCase.join("_");
43     name ~= camelToPascalCase(funcName);
44     return name;
45 }
46 
47 package string getDLangSliceInterfaceName(string fqn, string funcName) {
48     import std.algorithm : map;
49     import std.string : split;
50     import std.array : join;
51     string name = "autowrap_csharp_slice_";
52 
53     name ~= fqn.split(".").map!camelToPascalCase.join("_");
54     name ~= camelToPascalCase(funcName);
55     return name;
56 }
57 
58 public string camelToPascalCase(string camel) {
59     import std.uni : toUpper;
60     import std.conv : to;
61     return to!string(camel[0].toUpper) ~ camel[1..$];
62 }