forked from reactiveui/ReactiveUI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIBuilderExtensions.cs
More file actions
144 lines (135 loc) · 5.54 KB
/
IBuilderExtensions.cs
File metadata and controls
144 lines (135 loc) · 5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for full license information.
using System.Collections.Generic;
namespace ReactiveUI.Testing
{
#pragma warning disable SA1402, SA1649, CA1040
/// <summary>
/// An interface for building.
/// </summary>
public interface IBuilder
{
}
/// <summary>
/// Default methods for the <see cref="IBuilder"/> abstraction.
/// </summary>
public static class IBuilderExtensions
{
/// <summary>
/// Adds the specified field to the builder.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="field">The field.</param>
/// <param name="value">The value.</param>
/// <returns>The builder.</returns>
public static TBuilder With<TBuilder, TField>(this TBuilder builder, ref TField field, TField value)
where TBuilder : IBuilder
{
field = value;
return builder;
}
/// <summary>
/// Adds the specified list of fields to the builder.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="field">The field.</param>
/// <param name="values">The values.</param>
/// <returns>The builder.</returns>
public static TBuilder With<TBuilder, TField>(
this TBuilder builder,
ref List<TField> field,
IEnumerable<TField> values)
where TBuilder : IBuilder
{
if (values == null)
{
field = null;
}
else
{
field.AddRange(values);
}
return builder;
}
/// <summary>
/// Adds the specified field to the builder.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="field">The field.</param>
/// <param name="value">The value.</param>
/// <returns>The builder.</returns>
public static TBuilder With<TBuilder, TField>(this TBuilder builder, ref List<TField> field, TField value)
where TBuilder : IBuilder
{
field.Add(value);
return builder;
}
/// <summary>
/// Adds the specified key value pair to the provided dictionary.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TKey">The type of the key.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="dictionary">The dictionary.</param>
/// <param name="keyValuePair">The key value pair.</param>
/// <returns>The builder.</returns>
public static TBuilder With<TBuilder, TKey, TField>(
this TBuilder builder,
ref Dictionary<TKey, TField> dictionary,
KeyValuePair<TKey, TField> keyValuePair)
where TBuilder : IBuilder
{
dictionary.Add(keyValuePair.Key, keyValuePair.Value);
return builder;
}
/// <summary>
/// Adds the specified key and value to the provided dictionary.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TKey">The type of the key.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="dictionary">The dictionary.</param>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
/// <returns>The builder.</returns>
public static TBuilder With<TBuilder, TKey, TField>(
this TBuilder builder,
ref Dictionary<TKey, TField> dictionary,
TKey key,
TField value)
where TBuilder : IBuilder
{
dictionary.Add(key, value);
return builder;
}
/// <summary>
/// Adds the specified dictionary to the provided dictionary.
/// </summary>
/// <typeparam name="TBuilder">The type of the builder.</typeparam>
/// <typeparam name="TKey">The type of the key.</typeparam>
/// <typeparam name="TField">The type of the field.</typeparam>
/// <param name="builder">This builder.</param>
/// <param name="dictionary">The dictionary.</param>
/// <param name="keyValuePair">The key value pair.</param>
/// <returns> The builder.</returns>
public static TBuilder With<TBuilder, TKey, TField>(
this TBuilder builder,
ref Dictionary<TKey, TField> dictionary,
IDictionary<TKey, TField> keyValuePair)
{
dictionary = (Dictionary<TKey, TField>)keyValuePair;
return builder;
}
}
#pragma warning restore SA1402, SA1649, CA1040
}