-
Notifications
You must be signed in to change notification settings - Fork 0
/
TemplatesFactory.cs
169 lines (133 loc) · 6.32 KB
/
TemplatesFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
using System;
using System.Collections.Generic;
using client_generator.Models.Endpoints;
using client_generator.Models.Parameters;
using client_generator.Models.Schemas;
using client_generator.Templates.Clients;
using client_generator.Templates.Endpoints;
using client_generator.Templates.Parameters;
using client_generator.Templates.Requests;
using client_generator.Templates.Responses;
using client_generator.Templates.Schemes;
namespace client_generator.Templates
{
public class TemplatesFactory : ITemplateFactory
{
private readonly IClientTemplateFactory _clientTemplateFactory;
private readonly IEndpointTemplateFactory _endpointTemplateFactory;
private readonly IParameterTemplateFactory _parameterTemplateFactory;
private readonly IRequestTemplateFactory _requestTemplateFactory;
private readonly IResponseTemplateFactory _responseTemplateFactory;
private readonly IClassSchemaTemplateFactory _schemaTemplateFactory;
public TemplatesFactory(
IClientTemplateFactory clientTemplateFactory,
IEndpointTemplateFactory endpointTemplateFactory,
IParameterTemplateFactory parameterTemplateFactory,
IRequestTemplateFactory requestTemplateFactory,
IResponseTemplateFactory responseTemplateFactory,
IClassSchemaTemplateFactory schemaTemplateFactory
)
{
_clientTemplateFactory = clientTemplateFactory;
_endpointTemplateFactory = endpointTemplateFactory;
_parameterTemplateFactory = parameterTemplateFactory;
_requestTemplateFactory = requestTemplateFactory;
_responseTemplateFactory = responseTemplateFactory;
_schemaTemplateFactory = schemaTemplateFactory;
}
public ITemplate CreateClassSchemaTemplate(string name, Dictionary<string, ISchema> properties,
IEnumerable<string> requiredProperties)
{
return _schemaTemplateFactory.CreateClassSchemaTemplate(name, properties, requiredProperties);
}
public (ITemplate signature, ITemplate parser) CreateParameterTemplate(string name, string type,
bool isRequired,
bool allowEmptyValue,
SchemaType schemaType,
ParameterType parameterType)
{
return _parameterTemplateFactory.CreateParameterTemplate(name, type, isRequired, allowEmptyValue,
schemaType, parameterType);
}
public ITemplate CreateResponseParserTemplate(int status, string type)
{
return _responseTemplateFactory.CreateResponseParserTemplate(status, type);
}
public ITemplate CreateEndpointTemplate(string url, string functionName, IEnumerable<string> signature,
IEnumerable<string> returnsTypes,
IEnumerable<string> parametersParsingCode, EndpointType type, bool haveBody,
Dictionary<int, string> responses)
{
return _endpointTemplateFactory.CreateEndpointTemplate(url, functionName, signature, returnsTypes,
parametersParsingCode, type, haveBody,
responses);
}
public ITemplate CreateClientTemplate(string baseUrl, IEnumerable<string> functions,
IEnumerable<string> imports)
{
return _clientTemplateFactory.CreateClientTemplate(baseUrl, functions, imports);
}
public (ITemplate signature, ITemplate parser) CreateRequestTemplate(string schemaName, bool isRequired)
{
return _requestTemplateFactory.CreateRequestTemplate(schemaName, isRequired);
}
public class TemplateFactoryBuilder
{
private IClientTemplateFactory _clientTemplateFactory;
private IEndpointTemplateFactory _endpointTemplateFactory;
private IParameterTemplateFactory _parameterTemplateFactory;
private IRequestTemplateFactory _requestTemplateFactory;
private IResponseTemplateFactory _responseTemplateFactory;
private IClassSchemaTemplateFactory _schemaTemplateFactory;
public TemplateFactoryBuilder SetClientTemplateFactory(IClientTemplateFactory clientTemplateFactory)
{
_clientTemplateFactory = clientTemplateFactory;
return this;
}
public TemplateFactoryBuilder SetEndpointTemplateFactory(IEndpointTemplateFactory endpointTemplateFactory)
{
_endpointTemplateFactory = endpointTemplateFactory;
return this;
}
public TemplateFactoryBuilder SetParameterTemplateFactory(
IParameterTemplateFactory parameterTemplateFactory)
{
_parameterTemplateFactory = parameterTemplateFactory;
return this;
}
public TemplateFactoryBuilder SetRequestTemplateFactory(IRequestTemplateFactory requestTemplateFactory)
{
_requestTemplateFactory = requestTemplateFactory;
return this;
}
public TemplateFactoryBuilder SetResponseTemplateFactory(IResponseTemplateFactory responseTemplateFactory)
{
_responseTemplateFactory = responseTemplateFactory;
return this;
}
public TemplateFactoryBuilder SetClassSchemaTemplateFactory(
IClassSchemaTemplateFactory schemaTemplateFactory)
{
_schemaTemplateFactory = schemaTemplateFactory;
return this;
}
public ITemplateFactory Build()
{
if (_clientTemplateFactory == null || _endpointTemplateFactory == null ||
_parameterTemplateFactory == null || _requestTemplateFactory == null ||
_responseTemplateFactory == null || _schemaTemplateFactory == null)
{
throw new InvalidOperationException("All factories should be set.");
}
return new TemplatesFactory(
_clientTemplateFactory,
_endpointTemplateFactory,
_parameterTemplateFactory,
_requestTemplateFactory,
_responseTemplateFactory,
_schemaTemplateFactory
);
}
}
}
}