Skip to content

Commit 188da98

Browse files
committed
Adds assembly utility functions
1 parent 6270be3 commit 188da98

11 files changed

+190
-116
lines changed

DynamoDBGenerator.sln

+14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{CF34
1616
EndProject
1717
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{11F1D954-39EC-4EDD-9460-04FCC216E97A}"
1818
EndProject
19+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dynatello.Tests", "tests\Dynatello.Tests\Dynatello.Tests.csproj", "{D9C9C74E-B52C-4510-9258-BA78532EAABB}"
20+
EndProject
21+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dynatello", "src\Dynatello\Dynatello.csproj", "{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734}"
22+
EndProject
1923
Global
2024
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2125
Debug|Any CPU = Debug|Any CPU
@@ -42,12 +46,22 @@ Global
4246
{A80AC940-3BD8-4377-BDB9-AE82FD4DF944}.Debug|Any CPU.Build.0 = Debug|Any CPU
4347
{A80AC940-3BD8-4377-BDB9-AE82FD4DF944}.Release|Any CPU.ActiveCfg = Release|Any CPU
4448
{A80AC940-3BD8-4377-BDB9-AE82FD4DF944}.Release|Any CPU.Build.0 = Release|Any CPU
49+
{D9C9C74E-B52C-4510-9258-BA78532EAABB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
50+
{D9C9C74E-B52C-4510-9258-BA78532EAABB}.Debug|Any CPU.Build.0 = Debug|Any CPU
51+
{D9C9C74E-B52C-4510-9258-BA78532EAABB}.Release|Any CPU.ActiveCfg = Release|Any CPU
52+
{D9C9C74E-B52C-4510-9258-BA78532EAABB}.Release|Any CPU.Build.0 = Release|Any CPU
53+
{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
54+
{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734}.Debug|Any CPU.Build.0 = Debug|Any CPU
55+
{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734}.Release|Any CPU.ActiveCfg = Release|Any CPU
56+
{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734}.Release|Any CPU.Build.0 = Release|Any CPU
4557
EndGlobalSection
4658
GlobalSection(NestedProjects) = preSolution
4759
{D8EABA41-D014-49BD-B109-54829DB835E7} = {E84C4630-5241-4FAA-8F86-964AB25A2C6F}
4860
{A80AC940-3BD8-4377-BDB9-AE82FD4DF944} = {E84C4630-5241-4FAA-8F86-964AB25A2C6F}
4961
{834A7F6C-3C82-427F-9BFB-9686672A5BDE} = {CF34190F-AC01-42FC-B28A-DD820442243A}
5062
{53F899A8-28AA-450F-9C62-FD478119B2B7} = {11F1D954-39EC-4EDD-9460-04FCC216E97A}
5163
{648B1DF4-9684-4422-95F5-74BB89862E4D} = {11F1D954-39EC-4EDD-9460-04FCC216E97A}
64+
{D9C9C74E-B52C-4510-9258-BA78532EAABB} = {E84C4630-5241-4FAA-8F86-964AB25A2C6F}
65+
{E4D47C8F-A0C8-4368-BBE0-DC6045B2D734} = {11F1D954-39EC-4EDD-9460-04FCC216E97A}
5266
EndGlobalSection
5367
EndGlobal

src/DynamoDBGenerator/Extensions/DynamoDBMarshallerExtensions.cs

+5-87
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
using Amazon.DynamoDBv2;
55
using Amazon.DynamoDBv2.Model;
66
using DynamoDBGenerator.Internal;
7+
78
namespace DynamoDBGenerator.Extensions;
89

910
/// <summary>
1011
/// Contains extension methods for <see cref="IDynamoDBMarshaller{TEntity,TArg,TEntityAttributeNameTracker,TArgumentAttributeValueTracker}"/>
1112
/// </summary>
1213
public static class DynamoDBMarshallerExtensions
1314
{
14-
1515
/// <summary>
1616
/// Creates an <see cref="IAttributeExpression"/> based on the expressions being built inside <paramref name="expressionBuilders"/>
1717
/// The expression can be accessed in the same order as you passed arguments to <paramref name="expressionBuilders"/>.
@@ -24,7 +24,6 @@ params Func<TReferences, TArgumentReferences, string>[] expressionBuilders
2424
where TReferences : IAttributeExpressionNameTracker
2525
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
2626
{
27-
2827
var nameTracker = item.AttributeExpressionNameTracker();
2928
var valueTracker = item.AttributeExpressionValueTracker();
3029
var expressions = Expressions(nameTracker, valueTracker, expressionBuilders).ToArray();
@@ -35,7 +34,8 @@ params Func<TReferences, TArgumentReferences, string>[] expressionBuilders
3534
Names: CreateDictionary(nameTracker.AccessedNames())
3635
);
3736

38-
static Dictionary<string, TValue> CreateDictionary<TValue>(IEnumerable<KeyValuePair<string, TValue>> keyValuePairs)
37+
static Dictionary<string, TValue> CreateDictionary<TValue>(
38+
IEnumerable<KeyValuePair<string, TValue>> keyValuePairs)
3939
{
4040
var dict = new Dictionary<string, TValue>();
4141
foreach (var keyValuePair in keyValuePairs)
@@ -44,93 +44,11 @@ static Dictionary<string, TValue> CreateDictionary<TValue>(IEnumerable<KeyValueP
4444
return dict;
4545
}
4646

47-
static IEnumerable<string> Expressions(TReferences references, TArgumentReferences argumentReferences, IEnumerable<Func<TReferences, TArgumentReferences, string>> expressionBuilders)
47+
static IEnumerable<string> Expressions(TReferences references, TArgumentReferences argumentReferences,
48+
IEnumerable<Func<TReferences, TArgumentReferences, string>> expressionBuilders)
4849
{
4950
foreach (var expressionBuilder in expressionBuilders)
5051
yield return expressionBuilder(references, argumentReferences);
5152
}
52-
53-
}
54-
55-
/// <summary>
56-
/// Converts the <see cref="IDynamoDBMarshaller{TEntity,TArg,TEntityAttributeNameTracker,TArgumentAttributeValueTracker}"/> into an <see cref="IDynamoDBClient{TEntity,TArgument,TReferences,TArgumentReferences}"/>.
57-
/// </summary>
58-
public static IDynamoDBClient<T, TArg, TReferences, TArgumentReferences> ToDynamoDBClient<T, TArg, TReferences, TArgumentReferences>(
59-
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
60-
string tableName,
61-
IAmazonDynamoDB dynamoDB
62-
)
63-
where TReferences : IAttributeExpressionNameTracker
64-
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
65-
{
66-
return new DynamoDBClient<T, TArg, TReferences, TArgumentReferences>(item, tableName, dynamoDB);
67-
}
68-
69-
/// <summary>
70-
/// Creates a <see cref="PutItemRequest"/>.
71-
/// </summary>
72-
public static PutItemRequest ToPutItemRequest<T, TArg, TReferences, TArgumentReferences>(
73-
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
74-
T entity,
75-
ReturnValue returnValue,
76-
string tableName
77-
)
78-
where TReferences : IAttributeExpressionNameTracker
79-
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
80-
where T : TArg
81-
{
82-
return item.ToPutItemRequestInternal(entity, entity, null, returnValue, tableName);
83-
}
84-
85-
/// <summary>
86-
/// Creates a <see cref="PutItemRequest"/> with condition expression.
87-
/// </summary>
88-
public static PutItemRequest ToPutItemRequest<T, TArg, TReferences, TArgumentReferences>(
89-
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
90-
T entity,
91-
Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder,
92-
ReturnValue returnValue,
93-
string tableName
94-
)
95-
where TReferences : IAttributeExpressionNameTracker
96-
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
97-
where T : TArg
98-
{
99-
return item.ToPutItemRequestInternal(entity, entity, conditionExpressionBuilder, returnValue, tableName);
100-
}
101-
102-
/// <summary>
103-
/// Creates a <see cref="UpdateItemRequest"/>.
104-
/// </summary>
105-
public static UpdateItemRequest ToUpdateItemRequest<T, TArg, TReferences, TArgumentReferences>(
106-
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
107-
TArg argument,
108-
Func<IDynamoDBKeyMarshaller, TArg, Dictionary<string, AttributeValue>> keySelector,
109-
Func<TReferences, TArgumentReferences, string> updateExpressionBuilder,
110-
ReturnValue returnValue,
111-
string tableName
112-
)
113-
where TReferences : IAttributeExpressionNameTracker
114-
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
115-
{
116-
return item.ToUpdateItemRequestInternal(argument, keySelector, updateExpressionBuilder, null, returnValue, tableName);
117-
}
118-
119-
/// <summary>
120-
/// Creates a <see cref="UpdateItemRequest"/> with a condition expression.
121-
/// </summary>
122-
public static UpdateItemRequest ToUpdateItemRequest<T, TArg, TReferences, TArgumentReferences>(
123-
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
124-
TArg argument,
125-
Func<IDynamoDBKeyMarshaller, TArg, Dictionary<string, AttributeValue>> keySelector,
126-
Func<TReferences, TArgumentReferences, string> updateExpressionBuilder,
127-
Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder,
128-
ReturnValue returnValue,
129-
string tableName
130-
)
131-
where TReferences : IAttributeExpressionNameTracker
132-
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
133-
{
134-
return item.ToUpdateItemRequestInternal(argument, keySelector, updateExpressionBuilder, conditionExpressionBuilder, returnValue, tableName);
13553
}
13654
}

src/DynamoDBGenerator/Internal/DynamoDBClient.cs src/Dynatello/DynamoDBClient.cs

+11-13
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Threading;
4-
using System.Threading.Tasks;
51
using Amazon.DynamoDBv2;
62
using Amazon.DynamoDBv2.Model;
7-
namespace DynamoDBGenerator.Internal;
3+
using DynamoDBGenerator;
4+
5+
namespace Dynatello;
86

97
internal class DynamoDBClient<T, TArg, TReferences, TArgumentReferences> : IDynamoDBClient<T, TArg, TReferences, TArgumentReferences>
108
where TReferences : IAttributeExpressionNameTracker
119
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
1210
{
13-
private readonly IAmazonDynamoDB _amazonDynamoDB;
11+
private readonly IAmazonDynamoDB _amazonDynamoDb;
1412
private readonly IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> _marshaller;
1513
private readonly string _tableName;
1614

17-
public DynamoDBClient(IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> marshaller, string tableName, IAmazonDynamoDB amazonDynamoDB)
15+
public DynamoDBClient(IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> marshaller, string tableName, IAmazonDynamoDB amazonDynamoDb)
1816
{
1917
_marshaller = marshaller;
2018
_tableName = tableName;
21-
_amazonDynamoDB = amazonDynamoDB;
19+
_amazonDynamoDb = amazonDynamoDb;
2220
}
2321

2422
public Task Save<T1>(T1 entity, Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder, CancellationToken cancellationToken = default) where T1 : T, TArg
2523
{
2624
var putRequest = _marshaller.ToPutItemRequestInternal(entity, entity, conditionExpressionBuilder, ReturnValue.NONE, _tableName);
27-
return _amazonDynamoDB.PutItemAsync(putRequest, cancellationToken);
25+
return _amazonDynamoDb.PutItemAsync(putRequest, cancellationToken);
2826
}
2927

3028
public Task Save<T1>(T1 entity, CancellationToken cancellationToken = default) where T1 : T, TArg
3129
{
3230
var putRequest = _marshaller.ToPutItemRequestInternal(entity, entity, null, ReturnValue.NONE, _tableName);
33-
return _amazonDynamoDB.PutItemAsync(putRequest, cancellationToken);
31+
return _amazonDynamoDb.PutItemAsync(putRequest, cancellationToken);
3432
}
3533

3634
public Task Update(
@@ -41,7 +39,7 @@ public Task Update(
4139
)
4240
{
4341
var updateItemRequest = _marshaller.ToUpdateItemRequestInternal(entity, keySelector, updateExpressionBuilder, null, ReturnValue.NONE, _tableName);
44-
return _amazonDynamoDB.UpdateItemAsync(updateItemRequest, cancellationToken);
42+
return _amazonDynamoDb.UpdateItemAsync(updateItemRequest, cancellationToken);
4543
}
4644

4745
public Task Update(
@@ -53,14 +51,14 @@ public Task Update(
5351
)
5452
{
5553
var updateItemRequest = _marshaller.ToUpdateItemRequestInternal(entity, keySelector, updateExpressionBuilder, conditionExpressionBuilder, ReturnValue.NONE, _tableName);
56-
return _amazonDynamoDB.UpdateItemAsync(updateItemRequest, cancellationToken);
54+
return _amazonDynamoDb.UpdateItemAsync(updateItemRequest, cancellationToken);
5755
}
5856

5957
public async Task<T> UpdateReturned(TArg entity, Func<IDynamoDBKeyMarshaller, TArg, Dictionary<string, AttributeValue>> keySelector, Func<TReferences, TArgumentReferences, string> updateExpressionBuilder,
6058
Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder, CancellationToken cancellationToken = default)
6159
{
6260
var updateItemRequest = _marshaller.ToUpdateItemRequestInternal(entity, keySelector, updateExpressionBuilder, conditionExpressionBuilder, ReturnValue.ALL_NEW, _tableName);
63-
var result = await _amazonDynamoDB.UpdateItemAsync(updateItemRequest, cancellationToken);
61+
var result = await _amazonDynamoDb.UpdateItemAsync(updateItemRequest, cancellationToken);
6462

6563
return _marshaller.Unmarshall(result.Attributes);
6664
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
using Amazon.DynamoDBv2;
2+
using Amazon.DynamoDBv2.Model;
3+
using DynamoDBGenerator;
4+
5+
namespace Dynatello;
6+
7+
/// <summary>
8+
/// Contains extension methods for <see cref="IDynamoDBMarshaller{TEntity,TArgument,TEntityAttributeNameTracker,TArgumentAttributeValueTracker}"/>
9+
/// </summary>
10+
public static class DynamoDbMarshallerExtensions
11+
{
12+
/// <summary>
13+
/// Converts the <see cref="IDynamoDBMarshaller{TEntity,TArg,TEntityAttributeNameTracker,TArgumentAttributeValueTracker}"/> into an <see cref="IDynamoDBClient{TEntity,TArgument,TReferences,TArgumentReferences}"/>.
14+
/// </summary>
15+
public static IDynamoDBClient<T, TArg, TReferences, TArgumentReferences> ToDynamoDBClient<T, TArg, TReferences,
16+
TArgumentReferences>(
17+
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
18+
string tableName,
19+
IAmazonDynamoDB dynamoDb
20+
)
21+
where TReferences : IAttributeExpressionNameTracker
22+
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
23+
{
24+
return new DynamoDBClient<T, TArg, TReferences, TArgumentReferences>(item, tableName, dynamoDb);
25+
}
26+
27+
/// <summary>
28+
/// Creates a <see cref="PutItemRequest"/>.
29+
/// </summary>
30+
public static PutItemRequest ToPutItemRequest<T, TArg, TReferences, TArgumentReferences>(
31+
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
32+
T entity,
33+
ReturnValue returnValue,
34+
string tableName
35+
)
36+
where TReferences : IAttributeExpressionNameTracker
37+
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
38+
where T : TArg
39+
{
40+
return item.ToPutItemRequestInternal(entity, entity, null, returnValue, tableName);
41+
}
42+
43+
/// <summary>
44+
/// Creates a <see cref="PutItemRequest"/> with condition expression.
45+
/// </summary>
46+
public static PutItemRequest ToPutItemRequest<T, TArg, TReferences, TArgumentReferences>(
47+
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
48+
T entity,
49+
Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder,
50+
ReturnValue returnValue,
51+
string tableName
52+
)
53+
where TReferences : IAttributeExpressionNameTracker
54+
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
55+
where T : TArg
56+
{
57+
return item.ToPutItemRequestInternal(entity, entity, conditionExpressionBuilder, returnValue, tableName);
58+
}
59+
60+
/// <summary>
61+
/// Creates a <see cref="UpdateItemRequest"/>.
62+
/// </summary>
63+
public static UpdateItemRequest ToUpdateItemRequest<T, TArg, TReferences, TArgumentReferences>(
64+
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
65+
TArg argument,
66+
Func<IDynamoDBKeyMarshaller, TArg, Dictionary<string, AttributeValue>> keySelector,
67+
Func<TReferences, TArgumentReferences, string> updateExpressionBuilder,
68+
ReturnValue returnValue,
69+
string tableName
70+
)
71+
where TReferences : IAttributeExpressionNameTracker
72+
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
73+
{
74+
return item.ToUpdateItemRequestInternal(argument, keySelector, updateExpressionBuilder, null, returnValue,
75+
tableName);
76+
}
77+
78+
/// <summary>
79+
/// Creates a <see cref="UpdateItemRequest"/> with a condition expression.
80+
/// </summary>
81+
public static UpdateItemRequest ToUpdateItemRequest<T, TArg, TReferences, TArgumentReferences>(
82+
this IDynamoDBMarshaller<T, TArg, TReferences, TArgumentReferences> item,
83+
TArg argument,
84+
Func<IDynamoDBKeyMarshaller, TArg, Dictionary<string, AttributeValue>> keySelector,
85+
Func<TReferences, TArgumentReferences, string> updateExpressionBuilder,
86+
Func<TReferences, TArgumentReferences, string> conditionExpressionBuilder,
87+
ReturnValue returnValue,
88+
string tableName
89+
)
90+
where TReferences : IAttributeExpressionNameTracker
91+
where TArgumentReferences : IAttributeExpressionValueTracker<TArg>
92+
{
93+
return item.ToUpdateItemRequestInternal(argument, keySelector, updateExpressionBuilder,
94+
conditionExpressionBuilder, returnValue, tableName);
95+
}
96+
}

src/Dynatello/Dynatello.csproj

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="DynamoDBGenerator" Version="0.7.1" />
11+
<PackageReference Include="DynamoDBGenerator.SourceGenerator" Version="0.7.1" />
12+
</ItemGroup>
13+
14+
</Project>

src/DynamoDBGenerator/IDynamoDBClient.cs src/Dynatello/IDynamoDBClient.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Threading;
4-
using System.Threading.Tasks;
51
using Amazon.DynamoDBv2.Model;
6-
namespace DynamoDBGenerator;
2+
using DynamoDBGenerator;
3+
4+
namespace Dynatello;
75

86
/// <summary>
97
/// Represents a client with asynchronous methods for sending requests to DynamoDB.

src/DynamoDBGenerator/Internal/RequestFactory.cs src/Dynatello/RequestFactory.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
41
using Amazon.DynamoDBv2;
52
using Amazon.DynamoDBv2.Model;
6-
namespace DynamoDBGenerator.Internal;
3+
using DynamoDBGenerator;
4+
5+
namespace Dynatello;
76

87
internal static class RequestFactory
98
{

0 commit comments

Comments
 (0)