Skip to content

Commit 2528ee4

Browse files
committed
Fixes Sparkle compilation, rudimentar support for oneOf construct
1 parent 4786d16 commit 2528ee4

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

Dist/OpenApiSparkle.pas

+6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ TSparkleRestResponse = class(TInterfacedObject, IRestResponse)
2222
function StatusCode: Integer;
2323
function ContentAsString: string;
2424
function ContentAsBytes: TBytes;
25+
function GetHeader(const Name: string): string;
2526
end;
2627

2728
TSparkleRestRequestFactory = class(TInterfacedObject, IRestRequestFactory)
@@ -84,6 +85,11 @@ destructor TSparkleRestResponse.Destroy;
8485
inherited;
8586
end;
8687

88+
function TSparkleRestResponse.GetHeader(const Name: string): string;
89+
begin
90+
Result := FResponse.Headers.Get(Name);
91+
end;
92+
8793
function TSparkleRestResponse.StatusCode: Integer;
8894
begin
8995
Result := FResponse.StatusCode;

Source/OpenApiGen.CustomAnalyzer.pas

+15
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ function TOpenApiCustomAnalyzer.MetaTypeFromReference(RefSchema: TReferenceSchem
244244

245245
function TOpenApiCustomAnalyzer.MetaTypeFromSchema(Schema: TJsonSchema; const DefaultTypeName: string;
246246
ListType: TListType): IMetaType;
247+
var
248+
Schemas: TList<TJsonSchema>;
247249
begin
248250
if Schema = nil then
249251
raise EOpenApiAnalyzerException.Create('Schema not defined');
@@ -271,6 +273,19 @@ function TOpenApiCustomAnalyzer.MetaTypeFromSchema(Schema: TJsonSchema; const De
271273
else
272274
if Schema is TArraySchema then
273275
Result := MetaTypeFromArray(TArraySchema(Schema), DefaultTypeName + 'Item', ListType)
276+
else
277+
if Schema is TOneOfSchema then
278+
begin
279+
Schemas := TOneOfSchema(Schema).Schemas;
280+
if Schemas.Count = 0 then
281+
raise EOpenApiAnalyzerException.Create('OneOf schema does not have sub schemas')
282+
else
283+
begin
284+
if Schemas.Count > 1 then
285+
Logger.Warning(Format('OneOf for type %s has multiple schemas, picking the first schema in list', [DefaultTypeName]));
286+
Result := MetaTypeFromSchema(Schemas[0], DefaultTypeName, ListType);
287+
end;
288+
end
274289
else
275290
raise EOpenApiAnalyzerException.CreateFmt('Unsupported schema type: %s', [Schema.ClassName]);
276291

Source/OpenApiGen.V2.Analyzer.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ procedure TOpenApiAnalyzer.DoSolveServiceOperation(var ServiceName, ServiceDescr
199199
end;
200200
else
201201
// TServiceSolvingMode.SingleClientFromOperationId
202-
ServiceName := '';
202+
ServiceName := Options.ClientName;
203203
OperationName := Operation.OperationId;
204204
end;
205205
end;

0 commit comments

Comments
 (0)