Skip to content

Commit 6a3e327

Browse files
committed
Implemented support for generating interfaces for client.
1 parent 00bcc52 commit 6a3e327

15 files changed

Lines changed: 1020 additions & 73 deletions

nuget.config

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
<configuration>
33
<packageSources>
44
<clear />
5-
<add key="Nuget" value="https://api.nuget.org/v3/index.json" />
5+
<add key="Nuget" value="https://api.nuget.org/v3/index.json" />
66
</packageSources>
7+
<packageSourceMapping>
8+
<clear />
9+
</packageSourceMapping>
710
</configuration>

nuget.config.backup

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<packageSources>
4+
<clear />
5+
<add key="Nuget" value="https://api.nuget.org/v3/index.json" />
6+
</packageSources>
7+
</configuration>

src/Linq2GraphQL.Generator/ClientGenerator.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ public List<FileEntry> Generate(string schemaJson)
171171
}
172172

173173

174+
Console.WriteLine("Generate Client Interface...");
175+
var clientInterfaceText = new IClientTemplate(namespaceName, clientName, queryType, mutationType, subscriptionType, includeDeprecated)
176+
.TransformText();
177+
var interfaceFileName = "I" + clientName + ".cs";
178+
AddFile("Interfaces", interfaceFileName, clientInterfaceText);
179+
174180
Console.WriteLine("Generate Client...");
175181
var templateText = new ClientTemplate(namespaceName, clientName, queryType, mutationType, subscriptionType, includeDeprecated)
176182
.TransformText();
@@ -195,6 +201,12 @@ private void GenerateContextMethods(string namespaceName, string directory, Grap
195201
return;
196202
}
197203

204+
// Generate interface first in Interfaces directory
205+
var interfaceFileName = "I" + methodType.Name.ToPascalCase() + "Methods" + ".cs";
206+
var interfaceTemplateText = new IMethodsTemplate(methodType, namespaceName, schemaType).TransformText();
207+
AddFile("Interfaces", interfaceFileName, interfaceTemplateText);
208+
209+
// Generate concrete class that implements the interface in Client directory
198210
var fileName = methodType.Name.ToPascalCase() + "Methods" + ".cs";
199211
var templateText = new MethodsTemplate(methodType, namespaceName, schemaType).TransformText();
200212
AddFile(directory, fileName, templateText);

src/Linq2GraphQL.Generator/Linq2GraphQL.Generator.csproj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
<Generator>TextTemplatingFilePreprocessor</Generator>
3939
<LastGenOutput>ClientTemplate.cs</LastGenOutput>
4040
</None>
41+
<None Update="Templates\Client\IClientTemplate.tt">
42+
<Generator>TextTemplatingFilePreprocessor</Generator>
43+
<LastGenOutput>IClientTemplate.cs</LastGenOutput>
44+
</None>
4145
<None Update="Templates\Enum\EnumTemplate.tt">
4246
<Generator>TextTemplatingFilePreprocessor</Generator>
4347
<LastGenOutput>EnumTemplate.cs</LastGenOutput>
@@ -50,6 +54,10 @@
5054
<Generator>TextTemplatingFilePreprocessor</Generator>
5155
<LastGenOutput>MethodsTemplate.cs</LastGenOutput>
5256
</None>
57+
<None Update="Templates\Methods\IMethodsTemplate.tt">
58+
<Generator>TextTemplatingFilePreprocessor</Generator>
59+
<LastGenOutput>IMethodsTemplate.cs</LastGenOutput>
60+
</None>
5361
<None Update="Templates\Class\InputFactoryClassTemplate.tt">
5462
<LastGenOutput>InputFactoryClassTemplate.cs</LastGenOutput>
5563
<Generator>TextTemplatingFilePreprocessor</Generator>
@@ -84,6 +92,11 @@
8492
<AutoGen>True</AutoGen>
8593
<DependentUpon>ClientTemplate.tt</DependentUpon>
8694
</Compile>
95+
<Compile Update="Templates\Client\IClientTemplate.cs">
96+
<DesignTime>True</DesignTime>
97+
<AutoGen>True</AutoGen>
98+
<DependentUpon>IClientTemplate.tt</DependentUpon>
99+
</Compile>
87100
<Compile Update="Templates\Enum\EnumTemplate.cs">
88101
<DesignTime>True</DesignTime>
89102
<AutoGen>True</AutoGen>
@@ -99,6 +112,11 @@
99112
<AutoGen>True</AutoGen>
100113
<DependentUpon>MethodsTemplate.tt</DependentUpon>
101114
</Compile>
115+
<Compile Update="Templates\Methods\IMethodsTemplate.cs">
116+
<DesignTime>True</DesignTime>
117+
<AutoGen>True</AutoGen>
118+
<DependentUpon>IMethodsTemplate.tt</DependentUpon>
119+
</Compile>
102120
<Compile Update="Templates\Class\InputFactoryClassTemplate.cs">
103121
<AutoGen>True</AutoGen>
104122
<DesignTime>True</DesignTime>

src/Linq2GraphQL.Generator/Templates/Client/ClientExtensionsTemplate.cs

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ------------------------------------------------------------------------------
22
// <auto-generated>
33
// This code was generated by a tool.
4-
// Runtime Version: 16.0.0.0
4+
// Runtime Version: 17.0.0.0
55
//
66
// Changes to this file may cause incorrect behavior and will be lost if
77
// the code is regenerated.
@@ -15,8 +15,8 @@ namespace Linq2GraphQL.Generator.Templates.Client
1515
/// Class to produce the template output
1616
/// </summary>
1717

18-
#line 1 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
19-
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")]
18+
#line 1 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
19+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "17.0.0.0")]
2020
public partial class ClientExtensionsTemplate : ClientExtensionsTemplateBase
2121
{
2222
#line hidden
@@ -25,65 +25,82 @@ public partial class ClientExtensionsTemplate : ClientExtensionsTemplateBase
2525
/// </summary>
2626
public virtual string TransformText()
2727
{
28-
this.Write("using Linq2GraphQL.Client;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Options;\r\n\r\nnamespace ");
28+
this.Write("using Linq2GraphQL.Client;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusin" +
29+
"g Microsoft.Extensions.Options;\r\n\r\nnamespace ");
2930

30-
#line 7 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
31+
#line 7 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
3132
this.Write(this.ToStringHelper.ToStringWithCulture(namespaceName));
3233

3334
#line default
3435
#line hidden
3536
this.Write(";\r\n\r\npublic static class ");
3637

37-
#line 9 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
38+
#line 9 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
3839
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
3940

4041
#line default
4142
#line hidden
4243
this.Write("Extensions \r\n{\r\n private const string ClientName = \"");
4344

44-
#line 11 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
45+
#line 11 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
4546
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
4647

4748
#line default
4849
#line hidden
4950
this.Write("\";\r\n \r\n public static IGraphClientBuilder<");
5051

51-
#line 13 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
52+
#line 13 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
5253
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
5354

5455
#line default
5556
#line hidden
5657
this.Write("> Add");
5758

58-
#line 13 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
59+
#line 13 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
5960
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
6061

6162
#line default
6263
#line hidden
63-
this.Write("(this IServiceCollection services)\r\n {\r\n var graphClientOptions = new GraphClientOptions();\r\n return GraphClientBuilder(services, graphClientOptions);\r\n }\r\n \r\n public static IGraphClientBuilder<");
64+
this.Write("(this IServiceCollection services)\r\n {\r\n var graphClientOptions = new G" +
65+
"raphClientOptions();\r\n return GraphClientBuilder(services, graphClientOpt" +
66+
"ions);\r\n }\r\n \r\n public static IGraphClientBuilder<");
6467

65-
#line 19 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
68+
#line 19 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
6669
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
6770

6871
#line default
6972
#line hidden
7073
this.Write("> Add");
7174

72-
#line 19 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
75+
#line 19 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
7376
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
7477

7578
#line default
7679
#line hidden
77-
this.Write("(this IServiceCollection services, Action<GraphClientOptions> opts)\r\n {\r\n var graphClientOptions = new GraphClientOptions();\r\n opts(graphClientOptions);\r\n \r\n return GraphClientBuilder(services, graphClientOptions);\r\n }\r\n\r\n private static IGraphClientBuilder<");
80+
this.Write(@"(this IServiceCollection services, Action<GraphClientOptions> opts)
81+
{
82+
var graphClientOptions = new GraphClientOptions();
83+
opts(graphClientOptions);
84+
85+
return GraphClientBuilder(services, graphClientOptions);
86+
}
87+
88+
private static IGraphClientBuilder<");
7889

79-
#line 27 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
90+
#line 27 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
8091
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
8192

8293
#line default
8394
#line hidden
84-
this.Write("> GraphClientBuilder(IServiceCollection services,\r\n GraphClientOptions graphClientOptions)\r\n {\r\n var opts = Options.Create(graphClientOptions);\r\n services.AddKeyedSingleton(ClientName, opts); \r\n services.AddMemoryCache(); \r\n return new ClientBuilder<");
95+
this.Write(@"> GraphClientBuilder(IServiceCollection services,
96+
GraphClientOptions graphClientOptions)
97+
{
98+
var opts = Options.Create(graphClientOptions);
99+
services.AddKeyedSingleton(ClientName, opts);
100+
services.AddMemoryCache();
101+
return new ClientBuilder<");
85102

86-
#line 33 "C:\Code\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
103+
#line 33 "C:\Data\Linq2GraphQL.Client-1\src\Linq2GraphQL.Generator\Templates\Client\ClientExtensionsTemplate.tt"
87104
this.Write(this.ToStringHelper.ToStringWithCulture(clientName));
88105

89106
#line default
@@ -99,7 +116,7 @@ public virtual string TransformText()
99116
/// <summary>
100117
/// Base class for this transformation
101118
/// </summary>
102-
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")]
119+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "17.0.0.0")]
103120
public class ClientExtensionsTemplateBase
104121
{
105122
#region Fields
@@ -114,7 +131,7 @@ public class ClientExtensionsTemplateBase
114131
/// <summary>
115132
/// The string builder that generation-time code is using to assemble generated output
116133
/// </summary>
117-
protected System.Text.StringBuilder GenerationEnvironment
134+
public System.Text.StringBuilder GenerationEnvironment
118135
{
119136
get
120137
{

0 commit comments

Comments
 (0)