Skip to content

Commit 96ccdda

Browse files
committed
Temp
1 parent d2d7941 commit 96ccdda

File tree

7 files changed

+119
-208
lines changed

7 files changed

+119
-208
lines changed

src/Elastic.Clients.Elasticsearch/_Shared/Core/Infer/DocumentPath/DocumentPath.cs

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/Elastic.Clients.Elasticsearch/_Shared/Core/Infer/Timestamp/Timestamp.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultRequestResponseSerializer.cs

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,10 @@ internal sealed class DefaultRequestResponseSerializer : SystemTextJsonSerialize
2222
{
2323
private readonly IElasticsearchClientSettings _settings;
2424

25-
#if !NET8_0_OR_GREATER
26-
private readonly object _lock = new();
27-
#endif
28-
2925
public DefaultRequestResponseSerializer(IElasticsearchClientSettings settings) :
3026
base(new DefaultRequestResponseSerializerOptionsProvider(settings))
3127
{
3228
_settings = settings;
33-
34-
LinkSettings(settings);
3529
}
3630

3731
public override void Serialize<T>(T data, Stream writableStream,
@@ -95,36 +89,6 @@ public override T Deserialize<T>(Stream stream)
9589
}
9690

9791
protected override bool SupportsFastPath(Type type) => !typeof(IStreamSerializable).IsAssignableFrom(type);
98-
99-
/// <summary>
100-
/// Links the <see cref="JsonSerializerOptions"/> of this serializer to the given <see cref="IElasticsearchClientSettings"/>.
101-
/// </summary>
102-
private void LinkSettings(IElasticsearchClientSettings settings)
103-
{
104-
var options = GetJsonSerializerOptions(SerializationFormatting.None);
105-
var indentedOptions = GetJsonSerializerOptions(SerializationFormatting.Indented);
106-
107-
//options.MakeReadOnly();
108-
//indentedOptions.MakeReadOnly();
109-
110-
#if NET8_0_OR_GREATER
111-
ElasticsearchClient.SettingsTable.TryAdd(options, settings);
112-
ElasticsearchClient.SettingsTable.TryAdd(indentedOptions, settings);
113-
#else
114-
lock (_lock)
115-
{
116-
if (!ElasticsearchClient.SettingsTable.TryGetValue(options, out _))
117-
{
118-
ElasticsearchClient.SettingsTable.Add(options, settings);
119-
}
120-
121-
if (!ElasticsearchClient.SettingsTable.TryGetValue(indentedOptions, out _))
122-
{
123-
ElasticsearchClient.SettingsTable.Add(indentedOptions, settings);
124-
}
125-
}
126-
#endif
127-
}
12892
}
12993

13094
/// <summary>

src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultSourceSerializer.cs

Lines changed: 18 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6+
using System.Collections.Generic;
67
using System.Text.Json;
78
using System.Text.Json.Serialization;
89
using System.Text.Json.Serialization.Metadata;
@@ -17,49 +18,19 @@ namespace Elastic.Clients.Elasticsearch.Serialization;
1718
public class DefaultSourceSerializer :
1819
SystemTextJsonSerializer
1920
{
20-
#if !NET8_0_OR_GREATER
21-
private readonly object _lock = new();
22-
#endif
23-
2421
/// <summary>
2522
/// Constructs a new <see cref="DefaultSourceSerializer"/> instance that accepts an <see cref="Action{T}"/> that can
2623
/// be provided to customize the default <see cref="JsonSerializerOptions"/>.
2724
/// </summary>
28-
/// <param name="settings">An <see cref="IElasticsearchClientSettings"/> instance to which this serializers
25+
/// <param name="settings">An <see cref="IElasticsearchClientSettings"/> instance to which this serializer
2926
/// <see cref="JsonSerializerOptions"/> will be linked.
3027
/// </param>
3128
/// <param name="configureOptions">
3229
/// An optional <see cref="Action{T}"/> to customize the configuration of the default <see cref="JsonSerializerOptions"/>.
3330
/// </param>
3431
public DefaultSourceSerializer(IElasticsearchClientSettings settings, Action<JsonSerializerOptions>? configureOptions = null) :
35-
base(new DefaultSourceSerializerOptionsProvider(configureOptions)) =>
36-
LinkSettings(settings);
37-
38-
/// <summary>
39-
/// Links the <see cref="JsonSerializerOptions"/> of this serializer to the given <see cref="IElasticsearchClientSettings"/>.
40-
/// </summary>
41-
private void LinkSettings(IElasticsearchClientSettings settings)
32+
base(new DefaultSourceSerializerOptionsProvider(settings, configureOptions))
4233
{
43-
var options = GetJsonSerializerOptions(SerializationFormatting.None);
44-
var indentedOptions = GetJsonSerializerOptions(SerializationFormatting.Indented);
45-
46-
#if NET8_0_OR_GREATER
47-
ElasticsearchClient.SettingsTable.TryAdd(options, settings);
48-
ElasticsearchClient.SettingsTable.TryAdd(indentedOptions, settings);
49-
#else
50-
lock (_lock)
51-
{
52-
if (!ElasticsearchClient.SettingsTable.TryGetValue(options, out _))
53-
{
54-
ElasticsearchClient.SettingsTable.Add(options, settings);
55-
}
56-
57-
if (!ElasticsearchClient.SettingsTable.TryGetValue(indentedOptions, out _))
58-
{
59-
ElasticsearchClient.SettingsTable.Add(indentedOptions, settings);
60-
}
61-
}
62-
#endif
6334
}
6435
}
6536

@@ -69,27 +40,29 @@ private void LinkSettings(IElasticsearchClientSettings settings)
6940
public class DefaultSourceSerializerOptionsProvider :
7041
TransportSerializerOptionsProvider
7142
{
43+
public DefaultSourceSerializerOptionsProvider(IElasticsearchClientSettings settings, Action<JsonSerializerOptions>? configureOptions = null) :
44+
base(CreateDefaultBuiltInConverters(settings), null, options => MutateOptions(options, configureOptions))
45+
{
46+
}
47+
48+
public DefaultSourceSerializerOptionsProvider(IElasticsearchClientSettings settings, bool registerDefaultConverters, Action<JsonSerializerOptions>? configureOptions = null) :
49+
base(registerDefaultConverters ? CreateDefaultBuiltInConverters(settings) : [], null, options => MutateOptions(options, configureOptions))
50+
{
51+
}
52+
7253
/// <summary>
7354
/// Returns an array of the built-in <see cref="JsonConverter"/>s that are used registered with the source serializer by default.
7455
/// </summary>
75-
private static JsonConverter[] DefaultBuiltInConverters =>
56+
private static IReadOnlyCollection<JsonConverter> CreateDefaultBuiltInConverters(IElasticsearchClientSettings settings) =>
7657
[
58+
// For context aware JsonConverter/JsonConverterFactory implementations.
59+
new ContextProvider<IElasticsearchClientSettings>(settings),
60+
7761
new JsonStringEnumConverter(),
7862
new DoubleWithFractionalPortionConverter(),
79-
new SingleWithFractionalPortionConverter(),
80-
// TODO: Add RequestResponseSerializer
63+
new SingleWithFractionalPortionConverter()
8164
];
8265

83-
public DefaultSourceSerializerOptionsProvider(Action<JsonSerializerOptions>? configureOptions = null) :
84-
base(DefaultBuiltInConverters, null, options => MutateOptions(options, configureOptions))
85-
{
86-
}
87-
88-
public DefaultSourceSerializerOptionsProvider(bool registerDefaultConverters = true, Action<JsonSerializerOptions>? configureOptions = null) :
89-
base(registerDefaultConverters ? DefaultBuiltInConverters : [], null, options => MutateOptions(options, configureOptions))
90-
{
91-
}
92-
9366
private static void MutateOptions(JsonSerializerOptions options, Action<JsonSerializerOptions>? configureOptions)
9467
{
9568
options.TypeInfoResolver = new DefaultJsonTypeInfoResolver();
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
3+
using System.Text.Json;
4+
using System.Text.Json.Serialization;
5+
6+
using Elastic.Clients.Elasticsearch.Serialization;
7+
8+
namespace Elastic.Clients.Elasticsearch;
9+
10+
[JsonConverter(typeof(GeoBoundsConverter))]
11+
public sealed partial class GeoBounds
12+
{
13+
}
14+
15+
internal sealed class GeoBoundsConverter :
16+
JsonConverter<GeoBounds>
17+
{
18+
public override GeoBounds? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
19+
{
20+
throw new InvalidOperationException();
21+
}
22+
23+
public override void Write(Utf8JsonWriter writer, GeoBounds value, JsonSerializerOptions options)
24+
{
25+
if (value.TryGetCoordinates(out var coordinates))
26+
{
27+
writer.WriteValue(options, coordinates);
28+
return;
29+
}
30+
31+
if (value.TryGetTopLeftBottomRight(out var topLeftBottomRight))
32+
{
33+
writer.WriteValue(options, topLeftBottomRight);
34+
return;
35+
}
36+
37+
if (value.TryGetTopRightBottomLeft(out var topRightBottomLeft))
38+
{
39+
writer.WriteValue(options, topRightBottomLeft);
40+
return;
41+
}
42+
43+
if (value.TryGetWkt(out var wkt))
44+
{
45+
writer.WriteValue(options, wkt);
46+
return;
47+
}
48+
49+
throw new JsonException($"Unrecognized '{typeof(GeoBounds)}' variant.");
50+
}
51+
}

src/Elastic.Clients.Elasticsearch/_Shared/Types/GeoLocation.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,56 @@
22
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
6+
using System.Text.Json;
7+
using System.Text.Json.Serialization;
8+
9+
using Elastic.Clients.Elasticsearch.Serialization;
10+
511
namespace Elastic.Clients.Elasticsearch;
612

13+
[JsonConverter(typeof(GeoLocationConverter))]
714
public partial class GeoLocation
815
{
916
public static bool IsValidLatitude(double latitude) => latitude >= -90 && latitude <= 90;
17+
1018
public static bool IsValidLongitude(double longitude) => longitude >= -180 && longitude <= 180;
1119
}
20+
21+
internal sealed class GeoLocationConverter :
22+
JsonConverter<GeoLocation>
23+
{
24+
public override GeoLocation? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
25+
{
26+
throw new InvalidOperationException();
27+
}
28+
29+
public override void Write(Utf8JsonWriter writer, GeoLocation value, JsonSerializerOptions options)
30+
{
31+
if (value.TryGetCoordinates(out var coordinates))
32+
{
33+
writer.WriteCollectionValue(options, coordinates, null);
34+
return;
35+
}
36+
37+
if (value.TryGetGeoHash(out var geoHash))
38+
{
39+
writer.WriteValue(options, geoHash);
40+
return;
41+
}
42+
43+
if (value.TryGetLatitudeLongitude(out var latitudeLongitude))
44+
{
45+
writer.WriteValue(options, latitudeLongitude);
46+
return;
47+
}
48+
49+
if (value.TryGetText(out var text))
50+
{
51+
writer.WriteValue(options, text);
52+
return;
53+
}
54+
55+
throw new JsonException($"Unrecognized '{typeof(GeoLocation)}' variant.");
56+
}
57+
}

0 commit comments

Comments
 (0)