Skip to content

Commit df823d7

Browse files
author
adam.gloyne
committed
use abstract class
1 parent cdf9f8b commit df823d7

File tree

10 files changed

+72
-98
lines changed

10 files changed

+72
-98
lines changed

src/LEGO.AsyncAPI.Bindings/Sns/Principal.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
// Copyright (c) The LEGO Group. All rights reserved.
2-
31
namespace LEGO.AsyncAPI.Bindings.Sns;
42

53
using System;
@@ -9,20 +7,11 @@ namespace LEGO.AsyncAPI.Bindings.Sns;
97
using System.Text.Json.Nodes;
108
using LEGO.AsyncAPI.Models.Interfaces;
119
using LEGO.AsyncAPI.Readers.ParseNodes;
10+
using LEGO.AsyncAPI.Writers;
1211

13-
public class Principal : IAsyncApiElement
12+
public abstract class Principal : IAsyncApiElement
1413
{
15-
public Principal(KeyValuePair<string, StringOrStringList> value)
16-
{
17-
this.Value = new PrincipalObject(value);
18-
}
19-
20-
public Principal()
21-
{
22-
this.Value = new PrincipalStar();
23-
}
24-
25-
public IPrincipalValue Value { get; private set; }
14+
public abstract void Serialize(IAsyncApiWriter writer);
2615

2716
public static Principal Parse(ParseNode node)
2817
{
@@ -36,7 +25,7 @@ public static Principal Parse(ParseNode node)
3625
$"Principal value without a property name can only be a string value of '*'.");
3726
}
3827

39-
return new Principal();
28+
return new PrincipalStar();
4029

4130
case MapNode mapNode:
4231
{
@@ -51,7 +40,7 @@ public static Principal Parse(ParseNode node)
5140
propertyNode.Name,
5241
StringOrStringList.Parse(propertyNode.Value));
5342

54-
return new Principal(principalValue);
43+
return new PrincipalObject(principalValue);
5544
}
5645

5746
default:
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
// Copyright (c) The LEGO Group. All rights reserved.
2-
31
namespace LEGO.AsyncAPI.Bindings.Sns;
42

53
using System;
64
using System.Collections.Generic;
75
using LEGO.AsyncAPI.Writers;
86

9-
public interface IPrincipalValue
10-
{
11-
void Serialize(IAsyncApiWriter writer);
12-
}
13-
14-
public struct PrincipalObject : IPrincipalValue
7+
public class PrincipalObject : Principal
158
{
169
private KeyValuePair<string, StringOrStringList> PrincipalValue;
1710

@@ -20,7 +13,7 @@ public PrincipalObject(KeyValuePair<string, StringOrStringList> principalValue)
2013
this.PrincipalValue = principalValue;
2114
}
2215

23-
public void Serialize(IAsyncApiWriter writer)
16+
public override void Serialize(IAsyncApiWriter writer)
2417
{
2518
if (writer is null)
2619
{
@@ -31,24 +24,4 @@ public void Serialize(IAsyncApiWriter writer)
3124
writer.WriteRequiredObject(this.PrincipalValue.Key, this.PrincipalValue.Value, (w, t) => t.Value.Write(w));
3225
writer.WriteEndObject();
3326
}
34-
}
35-
36-
public struct PrincipalStar : IPrincipalValue
37-
{
38-
private string PrincipalValue;
39-
40-
public PrincipalStar()
41-
{
42-
this.PrincipalValue = "*";
43-
}
44-
45-
public void Serialize(IAsyncApiWriter writer)
46-
{
47-
if (writer is null)
48-
{
49-
throw new ArgumentNullException(nameof(writer));
50-
}
51-
52-
writer.WriteValue(this.PrincipalValue);
53-
}
5427
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace LEGO.AsyncAPI.Bindings.Sns;
2+
3+
using System;
4+
using LEGO.AsyncAPI.Writers;
5+
6+
public class PrincipalStar : Principal
7+
{
8+
private string PrincipalValue;
9+
10+
public PrincipalStar()
11+
{
12+
this.PrincipalValue = "*";
13+
}
14+
15+
public override void Serialize(IAsyncApiWriter writer)
16+
{
17+
if (writer is null)
18+
{
19+
throw new ArgumentNullException(nameof(writer));
20+
}
21+
22+
writer.WriteValue(this.PrincipalValue);
23+
}
24+
}

src/LEGO.AsyncAPI.Bindings/Sns/Statement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void Serialize(IAsyncApiWriter writer)
4646

4747
writer.WriteStartObject();
4848
writer.WriteRequiredProperty("effect", this.Effect.GetDisplayName());
49-
writer.WriteRequiredObject("principal", this.Principal, (w, t) => t.Value.Serialize(w));
49+
writer.WriteRequiredObject("principal", this.Principal, (w, t) => t.Serialize(w));
5050
writer.WriteRequiredObject("action", this.Action, (w, t) => t.Value.Write(w));
5151
writer.WriteOptionalObject("resource", this.Resource, (w, t) => t?.Value.Write(w));
5252
writer.WriteOptionalObject("condition", this.Condition, (w, t) => t?.Write(w));

src/LEGO.AsyncAPI.Bindings/Sqs/Principal.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,11 @@ namespace LEGO.AsyncAPI.Bindings.Sqs;
99
using System.Text.Json.Nodes;
1010
using LEGO.AsyncAPI.Models.Interfaces;
1111
using LEGO.AsyncAPI.Readers.ParseNodes;
12+
using LEGO.AsyncAPI.Writers;
1213

13-
public class Principal : IAsyncApiElement
14+
public abstract class Principal : IAsyncApiElement
1415
{
15-
public Principal(KeyValuePair<string, StringOrStringList> value)
16-
{
17-
this.Value = new PrincipalObject(value);
18-
}
19-
20-
public Principal()
21-
{
22-
this.Value = new PrincipalStar();
23-
}
24-
25-
public IPrincipalValue Value { get; private set; }
16+
public abstract void Serialize(IAsyncApiWriter writer);
2617

2718
public static Principal Parse(ParseNode node)
2819
{
@@ -36,7 +27,7 @@ public static Principal Parse(ParseNode node)
3627
$"Principal value without a property name can only be a string value of '*'.");
3728
}
3829

39-
return new Principal();
30+
return new PrincipalStar();
4031

4132
case MapNode mapNode:
4233
{
@@ -51,7 +42,7 @@ public static Principal Parse(ParseNode node)
5142
propertyNode.Name,
5243
StringOrStringList.Parse(propertyNode.Value));
5344

54-
return new Principal(principalValue);
45+
return new PrincipalObject(principalValue);
5546
}
5647

5748
default:
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
// Copyright (c) The LEGO Group. All rights reserved.
2-
31
namespace LEGO.AsyncAPI.Bindings.Sqs;
42

53
using System;
64
using System.Collections.Generic;
75
using LEGO.AsyncAPI.Writers;
86

9-
public interface IPrincipalValue
10-
{
11-
void Serialize(IAsyncApiWriter writer);
12-
}
13-
14-
public struct PrincipalObject : IPrincipalValue
7+
public class PrincipalObject : Principal
158
{
169
private KeyValuePair<string, StringOrStringList> PrincipalValue;
1710

@@ -20,7 +13,7 @@ public PrincipalObject(KeyValuePair<string, StringOrStringList> principalValue)
2013
this.PrincipalValue = principalValue;
2114
}
2215

23-
public void Serialize(IAsyncApiWriter writer)
16+
public override void Serialize(IAsyncApiWriter writer)
2417
{
2518
if (writer is null)
2619
{
@@ -31,24 +24,4 @@ public void Serialize(IAsyncApiWriter writer)
3124
writer.WriteRequiredObject(this.PrincipalValue.Key, this.PrincipalValue.Value, (w, t) => t.Value.Write(w));
3225
writer.WriteEndObject();
3326
}
34-
}
35-
36-
struct PrincipalStar : IPrincipalValue
37-
{
38-
private string PrincipalValue;
39-
40-
public PrincipalStar()
41-
{
42-
this.PrincipalValue = "*";
43-
}
44-
45-
public void Serialize(IAsyncApiWriter writer)
46-
{
47-
if (writer is null)
48-
{
49-
throw new ArgumentNullException(nameof(writer));
50-
}
51-
52-
writer.WriteValue(this.PrincipalValue);
53-
}
5427
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace LEGO.AsyncAPI.Bindings.Sqs;
2+
3+
using System;
4+
using LEGO.AsyncAPI.Writers;
5+
6+
public class PrincipalStar : Principal
7+
{
8+
private string PrincipalValue;
9+
10+
public PrincipalStar()
11+
{
12+
this.PrincipalValue = "*";
13+
}
14+
15+
public override void Serialize(IAsyncApiWriter writer)
16+
{
17+
if (writer is null)
18+
{
19+
throw new ArgumentNullException(nameof(writer));
20+
}
21+
22+
writer.WriteValue(this.PrincipalValue);
23+
}
24+
}

src/LEGO.AsyncAPI.Bindings/Sqs/Statement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void Serialize(IAsyncApiWriter writer)
4747

4848
writer.WriteStartObject();
4949
writer.WriteRequiredProperty("effect", this.Effect.GetDisplayName());
50-
writer.WriteRequiredObject("principal", this.Principal, (w, t) => t.Value.Serialize(w));
50+
writer.WriteRequiredObject("principal", this.Principal, (w, t) => t.Serialize(w));
5151
writer.WriteRequiredObject("action", this.Action, (w, t) => t.Value.Write(w));
5252
writer.WriteOptionalObject("resource", this.Resource, (w, t) => t?.Value.Write(w));
5353
writer.WriteOptionalObject("condition", this.Condition, (w, t) => t?.Write(w));

test/LEGO.AsyncAPI.Tests/Bindings/Sns/SnsBindings_Should.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void SnsChannelBinding_WithFilledObject_SerializesAndDeserializes()
8686
new Statement()
8787
{
8888
Effect = Effect.Deny,
89-
Principal = new Principal(),
89+
Principal = new PrincipalStar(),
9090
Action = new StringOrStringList(new AsyncApiAny(new List<string>()
9191
{
9292
"sns:Publish",
@@ -105,7 +105,7 @@ public void SnsChannelBinding_WithFilledObject_SerializesAndDeserializes()
105105
new Statement()
106106
{
107107
Effect = Effect.Allow,
108-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
108+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
109109
"AWS", new StringOrStringList(new AsyncApiAny(new List<string>
110110
{ "arn:aws:iam::123456789012:user/alex.wichmann", "arn:aws:iam::123456789012:user/dec.kolakowski" })))),
111111
Action = new StringOrStringList(new AsyncApiAny("sns:Create")),

test/LEGO.AsyncAPI.Tests/Bindings/Sqs/SqsBindings_should.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void SqsChannelBinding_WithFilledObject_SerializesAndDeserializes()
136136
new Statement()
137137
{
138138
Effect = Effect.Deny,
139-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
139+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
140140
"AWS", new StringOrStringList(new AsyncApiAny("arn:aws:iam::123456789012:user/alex.wichmann")))),
141141
Action = new StringOrStringList(new AsyncApiAny(new List<string>
142142
{
@@ -166,7 +166,7 @@ public void SqsChannelBinding_WithFilledObject_SerializesAndDeserializes()
166166
new Statement()
167167
{
168168
Effect = Effect.Allow,
169-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
169+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
170170
"AWS", new StringOrStringList(new AsyncApiAny(new List<string>
171171
{ "arn:aws:iam::123456789012:user/alex.wichmann", "arn:aws:iam::123456789012:user/dec.kolakowski" })))),
172172
Action = new StringOrStringList(new AsyncApiAny("sqs:CreateQueue")),
@@ -223,7 +223,7 @@ public void SqsChannelBinding_WithFilledObject_SerializesAndDeserializes()
223223
new Statement()
224224
{
225225
Effect = Effect.Allow,
226-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
226+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
227227
"Service", new StringOrStringList(new AsyncApiAny("s3.amazonaws.com")))),
228228
Action = new StringOrStringList(new AsyncApiAny(new List<string>
229229
{
@@ -377,7 +377,7 @@ public void SqsOperationBinding_WithFilledObject_SerializesAndDeserializes()
377377
new Statement()
378378
{
379379
Effect = Effect.Deny,
380-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
380+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
381381
"AWS", new StringOrStringList(new AsyncApiAny("arn:aws:iam::123456789012:user/alex.wichmann")))),
382382
Action = new StringOrStringList(new AsyncApiAny(new List<string>()
383383
{
@@ -398,7 +398,7 @@ public void SqsOperationBinding_WithFilledObject_SerializesAndDeserializes()
398398
new Statement()
399399
{
400400
Effect = Effect.Allow,
401-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
401+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
402402
"AWS", new StringOrStringList(new AsyncApiAny(new List<string>
403403
{ "arn:aws:iam::123456789012:user/alex.wichmann", "arn:aws:iam::123456789012:user/dec.kolakowski" })))),
404404
Action = new StringOrStringList(new AsyncApiAny("sqs:CreateQueue")),
@@ -446,7 +446,7 @@ public void SqsOperationBinding_WithFilledObject_SerializesAndDeserializes()
446446
new Statement()
447447
{
448448
Effect = Effect.Allow,
449-
Principal = new Principal(new KeyValuePair<string, StringOrStringList>(
449+
Principal = new PrincipalObject(new KeyValuePair<string, StringOrStringList>(
450450
"AWS", new StringOrStringList(new AsyncApiAny("arn:aws:iam::123456789012:user/alex.wichmann")))),
451451
Action = new StringOrStringList(new AsyncApiAny(new List<string>
452452
{

0 commit comments

Comments
 (0)