Skip to content

Commit 66e947d

Browse files
authored
Fix discrepancies in Watcher API models which fail (de)serialization (#5761)
* Update models to support correct deserialisation * Update tests * Fix tests and exceptions
1 parent 3147597 commit 66e947d

File tree

9 files changed

+769
-131
lines changed

9 files changed

+769
-131
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Licensed to Elasticsearch B.V under one or more agreements.
2+
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3+
// See the LICENSE file in the project root for more information
4+
5+
using System;
6+
using System.Collections;
7+
using System.Collections.Generic;
8+
using System.Linq;
9+
using Elasticsearch.Net.Utf8Json;
10+
11+
namespace Nest
12+
{
13+
[InterfaceDataContract]
14+
[JsonFormatter(typeof(ScheduleFormatter<ICronExpressions, CronExpressions, CronExpression>))]
15+
public interface ICronExpressions : ISchedule, IEnumerable<CronExpression> { void Add(CronExpression expression); }
16+
17+
public class CronExpressions : ScheduleBase, ICronExpressions
18+
{
19+
private List<CronExpression> _expressions;
20+
21+
public CronExpressions(IEnumerable<CronExpression> expressions) => _expressions = expressions?.ToList();
22+
23+
public CronExpressions(params CronExpression[] expressions) => _expressions = expressions?.ToList();
24+
25+
public CronExpressions() { }
26+
27+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
28+
29+
public IEnumerator<CronExpression> GetEnumerator() => _expressions?.GetEnumerator()
30+
?? Enumerable.Empty<CronExpression>().GetEnumerator();
31+
32+
public void Add(CronExpression expression)
33+
{
34+
if (_expressions == null)
35+
_expressions = new List<CronExpression>();
36+
_expressions.Add(expression);
37+
}
38+
39+
internal override void WrapInContainer(IScheduleContainer container) => container.CronExpressions = this;
40+
41+
public static implicit operator CronExpressions(CronExpression[] cronExpressions) => new(cronExpressions);
42+
}
43+
44+
public class CronExpressionsDescriptor : DescriptorPromiseBase<CronExpressionsDescriptor, ICronExpressions>
45+
{
46+
public CronExpressionsDescriptor() : base(new CronExpressions()) { }
47+
48+
public CronExpressionsDescriptor Add(CronExpression cronExpression) => Assign(cronExpression, (a, v) => a.Add(v));
49+
}
50+
}

src/Nest/XPack/Watcher/Schedule/DailySchedule.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ namespace Nest
1313
[ReadAs(typeof(TimeOfDay))]
1414
public interface ITimeOfDay
1515
{
16-
[DataMember(Name ="hour")]
16+
[DataMember(Name = "hour")]
1717
IEnumerable<int> Hour { get; set; }
1818

19-
[DataMember(Name ="minute")]
19+
[DataMember(Name = "minute")]
2020
IEnumerable<int> Minute { get; set; }
2121
}
2222

@@ -44,28 +44,41 @@ public class TimeOfDayDescriptor : DescriptorBase<TimeOfDayDescriptor, ITimeOfDa
4444
[ReadAs(typeof(DailySchedule))]
4545
public interface IDailySchedule : ISchedule
4646
{
47-
[DataMember(Name ="at")]
48-
Union<IEnumerable<string>, ITimeOfDay> At { get; set; }
47+
[DataMember(Name = "at")]
48+
Union<IEnumerable<string>, IEnumerable<ITimeOfDay>> At { get; set; }
4949
}
5050

5151
public class DailySchedule : ScheduleBase, IDailySchedule
5252
{
53-
public Union<IEnumerable<string>, ITimeOfDay> At { get; set; }
53+
public DailySchedule() { }
54+
55+
public DailySchedule(string at) => At = new[] { at };
56+
57+
public DailySchedule(ITimeOfDay at) => At = new[] { at };
58+
59+
public Union<IEnumerable<string>, IEnumerable<ITimeOfDay>> At { get; set; }
5460

5561
internal override void WrapInContainer(IScheduleContainer container) => container.Daily = this;
5662
}
5763

5864
public class DailyScheduleDescriptor : DescriptorBase<DailyScheduleDescriptor, IDailySchedule>, IDailySchedule
5965
{
60-
Union<IEnumerable<string>, ITimeOfDay> IDailySchedule.At { get; set; }
66+
Union<IEnumerable<string>, IEnumerable<ITimeOfDay>> IDailySchedule.At { get; set; }
6167

6268
public DailyScheduleDescriptor At(Func<TimeOfDayDescriptor, ITimeOfDay> selector) =>
63-
Assign(selector, (a, v) => a.At = new Union<IEnumerable<string>, ITimeOfDay>(v?.InvokeOrDefault(new TimeOfDayDescriptor())));
69+
Assign(selector,
70+
(a, v) => a.At = new Union<IEnumerable<string>, IEnumerable<ITimeOfDay>>(new[] { v?.InvokeOrDefault(new TimeOfDayDescriptor()) }));
71+
72+
public DailyScheduleDescriptor At(IEnumerable<ITimeOfDay> times) =>
73+
Assign(new Union<IEnumerable<string>, IEnumerable<ITimeOfDay>>(times), (a, v) => a.At = v);
74+
75+
public DailyScheduleDescriptor At(params ITimeOfDay[] times) =>
76+
Assign(new Union<IEnumerable<string>, IEnumerable<ITimeOfDay>>(times), (a, v) => a.At = v);
6477

6578
public DailyScheduleDescriptor At(IEnumerable<string> times) =>
66-
Assign(new Union<IEnumerable<string>, ITimeOfDay>(times), (a, v) => a.At = v);
79+
Assign(new Union<IEnumerable<string>, IEnumerable<ITimeOfDay>>(times), (a, v) => a.At = v);
6780

6881
public DailyScheduleDescriptor At(params string[] times) =>
69-
Assign(new Union<IEnumerable<string>, ITimeOfDay>(times), (a, v) => a.At = v);
82+
Assign(new Union<IEnumerable<string>, IEnumerable<ITimeOfDay>>(times), (a, v) => a.At = v);
7083
}
7184
}

src/Nest/XPack/Watcher/Schedule/Month.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,45 @@
55
using System.Runtime.Serialization;
66
using Elasticsearch.Net;
77

8-
98
namespace Nest
109
{
1110
[StringEnum]
1211
public enum Month
1312
{
14-
[EnumMember(Value = "january")]
13+
[EnumMember(Value = "JAN")]
1514
January,
1615

17-
[EnumMember(Value = "february")]
16+
[EnumMember(Value = "FEB")]
1817
February,
1918

20-
[EnumMember(Value = "march")]
19+
[EnumMember(Value = "MAR")]
2120
March,
2221

23-
[EnumMember(Value = "april")]
22+
[EnumMember(Value = "APR")]
2423
April,
2524

26-
[EnumMember(Value = "may")]
25+
[EnumMember(Value = "MAY")]
2726
May,
2827

29-
[EnumMember(Value = "june")]
28+
[EnumMember(Value = "JUN")]
3029
June,
3130

32-
[EnumMember(Value = "july")]
31+
[EnumMember(Value = "JUL")]
3332
July,
3433

35-
[EnumMember(Value = "august")]
34+
[EnumMember(Value = "AUG")]
3635
August,
3736

38-
[EnumMember(Value = "september")]
37+
[EnumMember(Value = "SEP")]
3938
September,
4039

41-
[EnumMember(Value = "october")]
40+
[EnumMember(Value = "OCT")]
4241
October,
4342

44-
[EnumMember(Value = "november")]
43+
[EnumMember(Value = "NOV")]
4544
November,
4645

47-
[EnumMember(Value = "december")]
46+
[EnumMember(Value = "DEC")]
4847
December
4948
}
5049
}

0 commit comments

Comments
 (0)