@@ -26,10 +26,16 @@ public class IntervalsQuery : FieldNameQueryBase, IIntervalsQuery
26
26
/// <inheritdoc cref="IIntervalsMatch"/>
27
27
public IIntervalsMatch Match { get ; set ; }
28
28
29
+ /// <inheritdoc cref="IIntervalsPrefix"/>
30
+ public IIntervalsPrefix Prefix { get ; set ; }
31
+
32
+ /// <inheritdoc cref="IIntervalsWildcard"/>
33
+ public IIntervalsWildcard Wildcard { get ; set ; }
34
+
29
35
protected override bool Conditionless => IsConditionless ( this ) ;
30
36
31
37
internal static bool IsConditionless ( IIntervalsQuery q ) =>
32
- q . Field . IsConditionless ( ) || q . Match == null && q . AllOf == null && q . AnyOf == null ;
38
+ q . Field . IsConditionless ( ) || q . Match == null && q . AllOf == null && q . AnyOf == null && q . Prefix == null && q . Wildcard == null ;
33
39
34
40
internal override void InternalWrapInContainer ( IQueryContainer container ) => container . Intervals = this ;
35
41
}
@@ -45,11 +51,21 @@ public class IntervalsQueryDescriptor<T>
45
51
IIntervalsAllOf IIntervalsContainer . AllOf { get ; set ; }
46
52
IIntervalsAnyOf IIntervalsContainer . AnyOf { get ; set ; }
47
53
IIntervalsMatch IIntervalsContainer . Match { get ; set ; }
54
+ IIntervalsPrefix IIntervalsContainer . Prefix { get ; set ; }
55
+ IIntervalsWildcard IIntervalsContainer . Wildcard { get ; set ; }
48
56
49
57
/// <inheritdoc cref="IntervalsQuery.Match" />
50
58
public IntervalsQueryDescriptor < T > Match ( Func < IntervalsMatchDescriptor , IIntervalsMatch > selector ) =>
51
59
Assign ( selector , ( a , v ) => a . Match = v ? . Invoke ( new IntervalsMatchDescriptor ( ) ) ) ;
52
60
61
+ /// <inheritdoc cref="IntervalsQuery.Prefix" />
62
+ public IntervalsQueryDescriptor < T > Prefix ( Func < IntervalsPrefixDescriptor , IIntervalsPrefix > selector ) =>
63
+ Assign ( selector , ( a , v ) => a . Prefix = v ? . Invoke ( new IntervalsPrefixDescriptor ( ) ) ) ;
64
+
65
+ /// <inheritdoc cref="IntervalsQuery.Wildcard" />
66
+ public IntervalsQueryDescriptor < T > Wildcard ( Func < IntervalsWildcardDescriptor , IIntervalsWildcard > selector ) =>
67
+ Assign ( selector , ( a , v ) => a . Wildcard = v ? . Invoke ( new IntervalsWildcardDescriptor ( ) ) ) ;
68
+
53
69
/// <inheritdoc cref="IntervalsQuery.AnyOf" />
54
70
public IntervalsQueryDescriptor < T > AnyOf ( Func < IntervalsAnyOfDescriptor , IIntervalsAnyOf > selector ) =>
55
71
Assign ( selector , ( a , v ) => a . AnyOf = v ? . Invoke ( new IntervalsAnyOfDescriptor ( ) ) ) ;
@@ -75,6 +91,14 @@ public interface IIntervalsContainer
75
91
/// <inheritdoc cref="IIntervalsMatch" />
76
92
[ DataMember ( Name = "match" ) ]
77
93
IIntervalsMatch Match { get ; set ; }
94
+
95
+ /// <inheritdoc cref="IIntervalsPrefix" />
96
+ [ DataMember ( Name = "prefix" ) ]
97
+ IIntervalsPrefix Prefix { get ; set ; }
98
+
99
+ /// <inheritdoc cref="IIntervalsWildcard" />
100
+ [ DataMember ( Name = "wildcard" ) ]
101
+ IIntervalsWildcard Wildcard { get ; set ; }
78
102
}
79
103
80
104
/// <inheritdoc cref="IIntervalsContainer" />
@@ -88,13 +112,25 @@ public IntervalsContainer(IntervalsBase intervals)
88
112
intervals . WrapInContainer ( this ) ;
89
113
}
90
114
115
+ public IntervalsContainer ( IntervalsNoFilterBase intervals )
116
+ {
117
+ intervals . ThrowIfNull ( nameof ( intervals ) ) ;
118
+ intervals . WrapInContainer ( this ) ;
119
+ }
120
+
91
121
IIntervalsAllOf IIntervalsContainer . AllOf { get ; set ; }
92
122
IIntervalsAnyOf IIntervalsContainer . AnyOf { get ; set ; }
93
123
IIntervalsMatch IIntervalsContainer . Match { get ; set ; }
124
+ IIntervalsPrefix IIntervalsContainer . Prefix { get ; set ; }
125
+ IIntervalsWildcard IIntervalsContainer . Wildcard { get ; set ; }
94
126
95
127
public static implicit operator IntervalsContainer ( IntervalsBase intervals ) => intervals == null
96
128
? null
97
129
: new IntervalsContainer ( intervals ) ;
130
+
131
+ public static implicit operator IntervalsContainer ( IntervalsNoFilterBase intervals ) => intervals == null
132
+ ? null
133
+ : new IntervalsContainer ( intervals ) ;
98
134
}
99
135
100
136
/// <summary>
@@ -109,6 +145,14 @@ private IntervalsDescriptor Assign<TValue>(TValue value, Action<IIntervalsContai
109
145
public IntervalsDescriptor Match ( Func < IntervalsMatchDescriptor , IIntervalsMatch > selector ) =>
110
146
Assign ( selector , ( a , v ) => a . Match = v ? . Invoke ( new IntervalsMatchDescriptor ( ) ) ) ;
111
147
148
+ /// <inheritdoc cref="IntervalsPrefixDescriptor" />
149
+ public IntervalsDescriptor Prefix ( Func < IntervalsPrefixDescriptor , IIntervalsPrefix > selector ) =>
150
+ Assign ( selector , ( a , v ) => a . Prefix = v ? . Invoke ( new IntervalsPrefixDescriptor ( ) ) ) ;
151
+
152
+ /// <inheritdoc cref="IntervalsWildcardDescriptor" />
153
+ public IntervalsDescriptor Wildcard ( Func < IntervalsWildcardDescriptor , IIntervalsWildcard > selector ) =>
154
+ Assign ( selector , ( a , v ) => a . Wildcard = v ? . Invoke ( new IntervalsWildcardDescriptor ( ) ) ) ;
155
+
112
156
/// <inheritdoc cref="IntervalsAnyOfDescriptor" />
113
157
public IntervalsDescriptor AnyOf ( Func < IntervalsAnyOfDescriptor , IIntervalsAnyOf > selector ) =>
114
158
Assign ( selector , ( a , v ) => a . AnyOf = v ? . Invoke ( new IntervalsAnyOfDescriptor ( ) ) ) ;
@@ -118,8 +162,9 @@ public IntervalsDescriptor AllOf(Func<IntervalsAllOfDescriptor, IIntervalsAllOf>
118
162
Assign ( selector , ( a , v ) => a . AllOf = v ? . Invoke ( new IntervalsAllOfDescriptor ( ) ) ) ;
119
163
}
120
164
165
+ // TODO: Rename this to IIntervalsWithFilter and IIntervalsNoFilter to IIntervals in 8.0
121
166
/// <summary>
122
- /// An <see cref="IIntervalsQuery" /> rule
167
+ /// An <see cref="IIntervalsQuery" /> rule with an optional filter
123
168
/// </summary>
124
169
public interface IIntervals
125
170
{
@@ -130,6 +175,13 @@ public interface IIntervals
130
175
IIntervalsFilter Filter { get ; set ; }
131
176
}
132
177
178
+ /// <summary>
179
+ /// An <see cref="IIntervalsQuery" /> rule
180
+ /// </summary>
181
+ public interface IIntervalsNoFilter
182
+ {
183
+ }
184
+
133
185
/// <summary>
134
186
/// Base type for an <see cref="IIntervals" /> implementation
135
187
/// </summary>
@@ -141,6 +193,14 @@ public abstract class IntervalsBase : IIntervals
141
193
internal abstract void WrapInContainer ( IIntervalsContainer container ) ;
142
194
}
143
195
196
+ /// <summary>
197
+ /// Base type for an <see cref="IIntervalsNoFilter" /> implementation
198
+ /// </summary>
199
+ public abstract class IntervalsNoFilterBase : IIntervalsNoFilter
200
+ {
201
+ internal abstract void WrapInContainer ( IIntervalsContainer container ) ;
202
+ }
203
+
144
204
/// <summary>
145
205
/// Base type for descriptors that define <see cref="IIntervals" />
146
206
/// </summary>
@@ -166,6 +226,14 @@ public IntervalsListDescriptor() : base(new List<IntervalsContainer>()) { }
166
226
public IntervalsListDescriptor Match ( Func < IntervalsMatchDescriptor , IIntervalsMatch > selector ) =>
167
227
Assign ( selector , ( a , v ) => a . AddIfNotNull ( new IntervalsDescriptor ( ) . Match ( v ) ) ) ;
168
228
229
+ /// <inheritdoc cref="IIntervalsPrefix" />
230
+ public IntervalsListDescriptor Prefix ( Func < IntervalsPrefixDescriptor , IIntervalsPrefix > selector ) =>
231
+ Assign ( selector , ( a , v ) => a . AddIfNotNull ( new IntervalsDescriptor ( ) . Prefix ( v ) ) ) ;
232
+
233
+ /// <inheritdoc cref="IIntervalsWildcard" />
234
+ public IntervalsListDescriptor Wildcard ( Func < IntervalsWildcardDescriptor , IIntervalsWildcard > selector ) =>
235
+ Assign ( selector , ( a , v ) => a . AddIfNotNull ( new IntervalsDescriptor ( ) . Wildcard ( v ) ) ) ;
236
+
169
237
/// <inheritdoc cref="IIntervalsAnyOf" />
170
238
public IntervalsListDescriptor AnyOf ( Func < IntervalsAnyOfDescriptor , IIntervalsAnyOf > selector ) =>
171
239
Assign ( selector , ( a , v ) => a . AddIfNotNull ( new IntervalsDescriptor ( ) . AnyOf ( v ) ) ) ;
0 commit comments