Skip to content

Commit 1622c65

Browse files
committed
Do not perform assignment unless specified
1 parent 0d3f827 commit 1622c65

File tree

4 files changed

+76
-88
lines changed

4 files changed

+76
-88
lines changed

src/Dynatello/Builders/GetItemRequestBuilder.cs

+20-9
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,37 @@ namespace Dynatello.Builders;
77
public readonly record struct GetItemRequestBuilder
88
{
99
private readonly IDynamoDBKeyMarshaller _itemPrimaryKeyMarshaller;
10+
11+
/// <inheritdoc cref="GetItemRequest.TableName"/>
1012
public string TableName { get; init; }
11-
public bool ConsistentRead { get; init; }
12-
public ReturnConsumedCapacity ReturnConsumedCapacity { get; init; }
13+
14+
/// <inheritdoc cref="GetItemRequest.ConsistentRead"/>
15+
public bool? ConsistentRead { get; init; } = null;
16+
17+
/// <inheritdoc cref="GetItemRequest.ReturnConsumedCapacity"/>
18+
public ReturnConsumedCapacity? ReturnConsumedCapacity { get; init; } = null;
1319

1420
internal GetItemRequestBuilder(string tableName, IDynamoDBKeyMarshaller itemPrimaryKeyMarshaller)
1521
{
1622
_itemPrimaryKeyMarshaller = itemPrimaryKeyMarshaller;
1723
TableName = tableName;
18-
ConsistentRead = false;
19-
ReturnConsumedCapacity = ReturnConsumedCapacity.NONE;
2024
}
2125

22-
internal GetItemRequest Build()
26+
internal GetItemRequest Build(Func<IDynamoDBKeyMarshaller, Dictionary<string, AttributeValue>> keySelector)
2327
{
24-
return new GetItemRequest
28+
var request = new GetItemRequest
2529
{
26-
ConsistentRead = ConsistentRead,
2730
ReturnConsumedCapacity = ReturnConsumedCapacity,
28-
TableName = TableName
29-
//Key = _keySelector(_keySelector);
31+
TableName = TableName,
32+
Key = keySelector(_itemPrimaryKeyMarshaller)
3033
};
34+
35+
if (ConsistentRead is { } consistentRead)
36+
request.ConsistentRead = consistentRead;
37+
38+
if (ReturnConsumedCapacity is not null)
39+
request.ReturnConsumedCapacity = ReturnConsumedCapacity;
40+
41+
return request;
3142
}
3243
}

src/Dynatello/Builders/PutRequestBuilder.cs

+13-31
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ public readonly record struct PutRequestBuilder<T>
1111
{
1212
private readonly Func<T, IAttributeExpression>? _attributeExpressionSelector;
1313
private readonly Func<T, Dictionary<string, AttributeValue>> _marshall;
14-
private readonly ReturnConsumedCapacity _returnConsumedCapacity = ReturnConsumedCapacity.NONE;
15-
private readonly ReturnItemCollectionMetrics _returnItemCollectionMetrics = ReturnItemCollectionMetrics.NONE;
16-
17-
private readonly ReturnValue _returnValues = ReturnValue.NONE;
18-
19-
private readonly ReturnValuesOnConditionCheckFailure _returnValuesOnConditionCheckFailure =
20-
ReturnValuesOnConditionCheckFailure.NONE;
2114

2215
private readonly string _tableName;
2316

@@ -41,32 +34,16 @@ public string TableName
4134
}
4235

4336
/// <inheritdoc cref="PutItemRequest.ReturnValues" />
44-
public ReturnValue ReturnValues
45-
{
46-
get => _returnValues;
47-
init => _returnValues = value ?? throw new ArgumentNullException(nameof(value));
48-
}
37+
public ReturnValue? ReturnValues { get; init; } = null;
4938

5039
/// <inheritdoc cref="PutItemRequest.ReturnConsumedCapacity" />
51-
public ReturnConsumedCapacity ReturnConsumedCapacity
52-
{
53-
get => _returnConsumedCapacity;
54-
init => _returnConsumedCapacity = value ?? throw new ArgumentNullException(nameof(value));
55-
}
40+
public ReturnConsumedCapacity? ReturnConsumedCapacity { get; init; } = null;
5641

5742
/// <inheritdoc cref="PutItemRequest.ReturnItemCollectionMetrics" />
58-
public ReturnItemCollectionMetrics ReturnItemCollectionMetrics
59-
{
60-
get => _returnItemCollectionMetrics;
61-
init => _returnItemCollectionMetrics = value ?? throw new ArgumentNullException(nameof(value));
62-
}
43+
public ReturnItemCollectionMetrics? ReturnItemCollectionMetrics { get; init; } = null;
6344

6445
/// <inheritdoc cref="PutItemRequest.ReturnValuesOnConditionCheckFailure" />
65-
public ReturnValuesOnConditionCheckFailure ReturnValuesOnConditionCheckFailure
66-
{
67-
get => _returnValuesOnConditionCheckFailure;
68-
init => _returnValuesOnConditionCheckFailure = value ?? throw new ArgumentNullException(nameof(value));
69-
}
46+
public ReturnValuesOnConditionCheckFailure? ReturnValuesOnConditionCheckFailure { get; init; } = null;
7047

7148

7249
public PutItemRequest Build(T element)
@@ -75,17 +52,22 @@ public PutItemRequest Build(T element)
7552
{
7653
TableName = TableName,
7754
Item = _marshall(element),
78-
ReturnValues = ReturnValues,
79-
ReturnConsumedCapacity = ReturnConsumedCapacity,
80-
ReturnItemCollectionMetrics = ReturnItemCollectionMetrics,
81-
ReturnValuesOnConditionCheckFailure = ReturnValuesOnConditionCheckFailure,
8255
Expected = null,
8356
ConditionalOperator = null,
8457
ConditionExpression = null,
8558
ExpressionAttributeNames = null,
8659
ExpressionAttributeValues = null
8760
};
8861

62+
if (ReturnValues is not null)
63+
request.ReturnValues = ReturnValues;
64+
if (ReturnConsumedCapacity is not null)
65+
request.ReturnConsumedCapacity = ReturnConsumedCapacity;
66+
if (ReturnItemCollectionMetrics is not null)
67+
request.ReturnItemCollectionMetrics = ReturnItemCollectionMetrics;
68+
if (ReturnValuesOnConditionCheckFailure is not null)
69+
request.ReturnValuesOnConditionCheckFailure = ReturnValuesOnConditionCheckFailure;
70+
8971
if (_attributeExpressionSelector is null) return request;
9072
var attributeExpression = _attributeExpressionSelector(element);
9173

src/Dynatello/Builders/QueryRequestBuilder.cs

+23-17
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,27 @@ public readonly record struct QueryRequestBuilder<T>
1212
public string TableName { get; init; }
1313

1414
/// <inheritdoc cref="QueryRequest.IndexName"/>
15-
public string? IndexName { get; init; }
15+
public string? IndexName { get; init; } = null;
1616

1717
/// <inheritdoc cref="QueryRequest.Limit"/>
18-
public int? Limit { get; init; }
18+
public int? Limit { get; init; } = null;
1919

2020
/// <inheritdoc cref="QueryRequest.ConsistentRead"/>
21-
public bool ConsistentRead { get; init; }
22-
21+
public bool? ConsistentRead { get; init; } = null;
22+
2323
/// <inheritdoc cref="QueryRequest.ScanIndexForward"/>
24-
public bool ScanIndexForward { get; init; }
24+
public bool? ScanIndexForward { get; init; } = null;
2525

2626
/// <inheritdoc cref="QueryRequest.Select"/>
27-
public Select Select { get; init; }
27+
public Select? Select { get; init; } = null;
2828

2929
/// <inheritdoc cref="QueryRequest.ReturnConsumedCapacity"/>
30-
public ReturnConsumedCapacity ReturnConsumedCapacity { get; init; }
30+
public ReturnConsumedCapacity? ReturnConsumedCapacity { get; init; } = null;
3131

3232
public QueryRequestBuilder(Func<T, IAttributeExpression> attributeExpressionSelector, string tableName)
3333
{
3434
_attributeExpressionSelector = attributeExpressionSelector;
3535
TableName = tableName;
36-
IndexName = null;
37-
Limit = null;
38-
ConsistentRead = false;
39-
Select = Select.ALL_ATTRIBUTES;
40-
ReturnConsumedCapacity = ReturnConsumedCapacity.NONE;
41-
ScanIndexForward = true;
4236
}
4337

4438
public QueryRequest Build(T arg)
@@ -56,16 +50,28 @@ public QueryRequest Build(T arg)
5650
ExpressionAttributeNames = attributeExpression.Names,
5751
TableName = TableName,
5852
IndexName = IndexName,
59-
ConsistentRead = ConsistentRead,
60-
Select = Select,
61-
ReturnConsumedCapacity = ReturnConsumedCapacity,
62-
ScanIndexForward = ScanIndexForward,
6353
ProjectionExpression = null
6454
};
6555

56+
57+
if (ReturnConsumedCapacity is not null)
58+
queryRequest.ReturnConsumedCapacity = ReturnConsumedCapacity;
59+
60+
if (ConsistentRead is {} consistentRead)
61+
queryRequest.ConsistentRead = consistentRead;
62+
63+
if (ScanIndexForward is {} scanIndexForward)
64+
queryRequest.ScanIndexForward = scanIndexForward;
65+
66+
if (Select is not null)
67+
queryRequest.Select = Select;
68+
6669
if (Limit is { } limit)
6770
queryRequest.Limit = limit;
6871

72+
if (IndexName is not null)
73+
queryRequest.IndexName = IndexName;
74+
6975
if (attributeExpression.Expressions.Count == 2)
7076
queryRequest.FilterExpression = attributeExpression.Expressions[1];
7177

src/Dynatello/Builders/UpdateRequestBuilder.cs

+20-31
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ public readonly record struct UpdateRequestBuilder<T>
1212
private readonly Func<T, IAttributeExpression> _attributeExpressionSelector;
1313
private readonly IDynamoDBKeyMarshaller _keyMarshaller;
1414
private readonly Func<IDynamoDBKeyMarshaller, T, Dictionary<string, AttributeValue>> _keySelector;
15-
private readonly ReturnConsumedCapacity _returnConsumedCapacity = ReturnConsumedCapacity.NONE;
16-
private readonly ReturnItemCollectionMetrics _returnItemCollectionMetrics = ReturnItemCollectionMetrics.NONE;
17-
private readonly ReturnValue _returnValues = ReturnValue.NONE;
18-
19-
private readonly ReturnValuesOnConditionCheckFailure _returnValuesOnConditionCheckFailure =
20-
ReturnValuesOnConditionCheckFailure.NONE;
2115

2216
private readonly string _tableName;
2317

@@ -57,32 +51,16 @@ public Func<IDynamoDBKeyMarshaller, T, Dictionary<string, AttributeValue>> KeySe
5751
}
5852

5953
/// <inheritdoc cref="UpdateItemRequest.ReturnConsumedCapacity" />
60-
public ReturnConsumedCapacity ReturnConsumedCapacity
61-
{
62-
get => _returnConsumedCapacity;
63-
init => _returnConsumedCapacity = value ?? throw new ArgumentNullException(nameof(value));
64-
}
54+
public ReturnConsumedCapacity? ReturnConsumedCapacity { get; init; } = null;
6555

6656
/// <inheritdoc cref="UpdateItemRequest.ReturnItemCollectionMetrics" />
67-
public ReturnItemCollectionMetrics ReturnItemCollectionMetrics
68-
{
69-
get => _returnItemCollectionMetrics;
70-
init => _returnItemCollectionMetrics = value ?? throw new ArgumentNullException(nameof(value));
71-
}
57+
public ReturnItemCollectionMetrics? ReturnItemCollectionMetrics { get; init; } = null;
7258

7359
/// <inheritdoc cref="UpdateItemRequest.ReturnValues" />
74-
public ReturnValue ReturnValues
75-
{
76-
get => _returnValues;
77-
init => _returnValues = value ?? throw new ArgumentNullException(nameof(value));
78-
}
60+
public ReturnValue? ReturnValues { get; init; } = null;
7961

8062
/// <inheritdoc cref="UpdateItemRequest.ReturnValuesOnConditionCheckFailure" />
81-
public ReturnValuesOnConditionCheckFailure ReturnValuesOnConditionCheckFailure
82-
{
83-
get => _returnValuesOnConditionCheckFailure;
84-
init => _returnValuesOnConditionCheckFailure = value ?? throw new ArgumentNullException(nameof(value));
85-
}
63+
public ReturnValuesOnConditionCheckFailure? ReturnValuesOnConditionCheckFailure { get; init; } = null;
8664

8765

8866
/// <summary>
@@ -91,21 +69,32 @@ public ReturnValuesOnConditionCheckFailure ReturnValuesOnConditionCheckFailure
9169
public UpdateItemRequest Build(T arg)
9270
{
9371
var expression = _attributeExpressionSelector(arg);
94-
return new UpdateItemRequest
72+
var update = new UpdateItemRequest
9573
{
9674
UpdateExpression = expression.Expressions[0],
9775
ConditionExpression = expression.Expressions.Count is 2 ? expression.Expressions[1] : null,
9876
TableName = TableName,
9977
Key = KeySelector(_keyMarshaller, arg),
100-
ReturnValues = ReturnValues,
10178
ExpressionAttributeNames = expression.Names,
10279
ExpressionAttributeValues = expression.Values,
103-
ReturnConsumedCapacity = ReturnConsumedCapacity,
104-
ReturnItemCollectionMetrics = ReturnItemCollectionMetrics,
105-
ReturnValuesOnConditionCheckFailure = ReturnValuesOnConditionCheckFailure,
10680
Expected = null,
10781
AttributeUpdates = null,
10882
ConditionalOperator = null
10983
};
84+
85+
if (ReturnValues is not null)
86+
update.ReturnValues = ReturnValues;
87+
88+
if (ReturnConsumedCapacity is not null)
89+
update.ReturnConsumedCapacity = ReturnConsumedCapacity;
90+
91+
if (ReturnItemCollectionMetrics is not null)
92+
update.ReturnItemCollectionMetrics = ReturnItemCollectionMetrics;
93+
94+
if (ReturnValuesOnConditionCheckFailure is not null)
95+
update.ReturnValuesOnConditionCheckFailure = ReturnValuesOnConditionCheckFailure;
96+
97+
98+
return update;
11099
}
111100
}

0 commit comments

Comments
 (0)