Skip to content

Commit c785ee8

Browse files
committed
AvroReferences work.
1 parent 30ab5d9 commit c785ee8

File tree

17 files changed

+210
-53
lines changed

17 files changed

+210
-53
lines changed

src/LEGO.AsyncAPI.Readers/AsyncApiJsonDocumentReader.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,18 @@ private IAsyncApiSerializable ResolveStreamReferences(Stream stream, IAsyncApiRe
295295
switch (reference.Reference.Type)
296296
{
297297
case ReferenceType.Schema:
298-
result = this.ReadFragment<AsyncApiJsonSchema>(json, AsyncApiVersion.AsyncApi2_0, out fragmentDiagnostic);
298+
if (reference is AsyncApiJsonSchemaReference)
299+
{
300+
result = this.ReadFragment<AsyncApiJsonSchema>(json, AsyncApiVersion.AsyncApi2_0, out fragmentDiagnostic);
301+
}
302+
303+
if (reference is AsyncApiAvroSchemaReference)
304+
{
305+
result = this.ReadFragment<AsyncApiAvroSchema>(json, AsyncApiVersion.AsyncApi2_0, out fragmentDiagnostic);
306+
}
307+
299308
break;
309+
300310
case ReferenceType.Server:
301311
result = this.ReadFragment<AsyncApiServer>(json, AsyncApiVersion.AsyncApi2_0, out fragmentDiagnostic);
302312
break;

src/LEGO.AsyncAPI.Readers/V2/AsyncApiAvroSchemaDeserializer.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,7 @@ public static AsyncApiAvroSchema LoadSchema(ParseNode node)
236236

237237
if (pointer != null)
238238
{
239-
return new AvroRecord
240-
{
241-
UnresolvedReference = true,
242-
Reference = node.Context.VersionService.ConvertToAsyncApiReference(pointer, ReferenceType.Schema),
243-
};
239+
return new AsyncApiAvroSchemaReference(pointer);
244240
}
245241

246242
var isLogicalType = mapNode["logicalType"] != null;

src/LEGO.AsyncAPI/Models/Avro/AsyncApiAvroSchema.cs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace LEGO.AsyncAPI.Models
77
using LEGO.AsyncAPI.Models.Interfaces;
88
using LEGO.AsyncAPI.Writers;
99

10-
public abstract class AsyncApiAvroSchema : IAsyncApiSerializable, IAsyncApiReferenceable, IAsyncApiMessagePayload
10+
public abstract class AsyncApiAvroSchema : IAsyncApiSerializable, IAsyncApiMessagePayload
1111
{
1212
public abstract string Type { get; }
1313

@@ -16,31 +16,29 @@ public abstract class AsyncApiAvroSchema : IAsyncApiSerializable, IAsyncApiRefer
1616
/// </summary>
1717
public abstract IDictionary<string, AsyncApiAny> Metadata { get; set; }
1818

19-
public bool UnresolvedReference { get; set; }
20-
21-
public AsyncApiReference Reference { get; set; }
22-
2319
public static implicit operator AsyncApiAvroSchema(AvroPrimitiveType type)
2420
{
2521
return new AvroPrimitive(type);
2622
}
2723

28-
public virtual void SerializeV2(IAsyncApiWriter writer)
29-
{
30-
if (writer is null)
31-
{
32-
throw new ArgumentNullException(nameof(writer));
33-
}
24+
public abstract void SerializeV2(IAsyncApiWriter writer);
3425

35-
if (this.Reference != null && !writer.GetSettings().ShouldInlineReference(this.Reference))
36-
{
37-
this.Reference.SerializeV2(writer);
38-
return;
39-
}
40-
41-
this.SerializeV2Core(writer);
26+
public virtual bool TryGetAs<T>(out T result)
27+
where T : AsyncApiAvroSchema
28+
{
29+
result = this as T;
30+
return result != null;
31+
}
32+
public virtual bool Is<T>()
33+
where T : AsyncApiAvroSchema
34+
{
35+
return this is T;
4236
}
4337

44-
public abstract void SerializeV2Core(IAsyncApiWriter writer);
38+
public virtual T As<T>()
39+
where T : AsyncApiAvroSchema
40+
{
41+
return this as T;
42+
}
4543
}
4644
}

src/LEGO.AsyncAPI/Models/Avro/AvroArray.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class AvroArray : AsyncApiAvroSchema
2020
/// </summary>
2121
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
2222

23-
public override void SerializeV2Core(IAsyncApiWriter writer)
23+
public override void SerializeV2(IAsyncApiWriter writer)
2424
{
2525
writer.WriteStartObject();
2626
writer.WriteOptionalProperty("type", this.Type);

src/LEGO.AsyncAPI/Models/Avro/AvroEnum.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class AvroEnum : AsyncApiAvroSchema
4545
/// </summary>
4646
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
4747

48-
public override void SerializeV2Core(IAsyncApiWriter writer)
48+
public override void SerializeV2(IAsyncApiWriter writer)
4949
{
5050
writer.WriteStartObject();
5151
writer.WriteOptionalProperty("type", this.Type);

src/LEGO.AsyncAPI/Models/Avro/AvroFixed.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class AvroFixed : AsyncApiAvroSchema
3636
/// </summary>
3737
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
3838

39-
public override void SerializeV2Core(IAsyncApiWriter writer)
39+
public override void SerializeV2(IAsyncApiWriter writer)
4040
{
4141
writer.WriteStartObject();
4242
writer.WriteOptionalProperty("type", this.Type);

src/LEGO.AsyncAPI/Models/Avro/AvroMap.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class AvroMap : AsyncApiAvroSchema
1717
/// </summary>
1818
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
1919

20-
public override void SerializeV2Core(IAsyncApiWriter writer)
20+
public override void SerializeV2(IAsyncApiWriter writer)
2121
{
2222
writer.WriteStartObject();
2323
writer.WriteOptionalProperty("type", this.Type);

src/LEGO.AsyncAPI/Models/Avro/AvroPrimitive.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public AvroPrimitive(AvroPrimitiveType type)
2020
this.Type = type.GetDisplayName();
2121
}
2222

23-
public override void SerializeV2Core(IAsyncApiWriter writer)
23+
public override void SerializeV2(IAsyncApiWriter writer)
2424
{
2525
writer.WriteValue(this.Type);
2626
if (this.Metadata.Any())

src/LEGO.AsyncAPI/Models/Avro/AvroRecord.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class AvroRecord : AsyncApiAvroSchema
4040
/// </summary>
4141
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
4242

43-
public override void SerializeV2Core(IAsyncApiWriter writer)
43+
public override void SerializeV2(IAsyncApiWriter writer)
4444
{
4545
writer.WriteStartObject();
4646
writer.WriteOptionalProperty("type", this.Type);

src/LEGO.AsyncAPI/Models/Avro/AvroUnion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class AvroUnion : AsyncApiAvroSchema
2020
/// </summary>
2121
public override IDictionary<string, AsyncApiAny> Metadata { get; set; } = new Dictionary<string, AsyncApiAny>();
2222

23-
public override void SerializeV2Core(IAsyncApiWriter writer)
23+
public override void SerializeV2(IAsyncApiWriter writer)
2424
{
2525
writer.WriteStartArray();
2626
foreach (var type in this.Types)

0 commit comments

Comments
 (0)