Skip to content

Commit b66008f

Browse files
committed
Merge pull request #705 from funnelfire/wrapped-contract
Wrapped the contract after user-adjustable settings
2 parents e27bfdf + 25b71a7 commit b66008f

23 files changed

+68
-36
lines changed

Diff for: src/Nest/ExposedInternals/NestSerializer.cs

+7-5
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,16 @@ internal JsonSerializerSettings CreateSettings(JsonConverter piggyBackJsonConver
8989
var piggyBackState = new JsonConverterPiggyBackState { ActualJsonConverter = piggyBackJsonConverter };
9090
var settings = new JsonSerializerSettings()
9191
{
92-
ContractResolver = new ElasticContractResolver(this._settings) { PiggyBackState = piggyBackState },
92+
ContractResolver = new ElasticContractResolver(this._settings),
9393
DefaultValueHandling = DefaultValueHandling.Include,
9494
NullValueHandling = NullValueHandling.Ignore
9595
};
9696

9797
if (_settings.ModifyJsonSerializerSettings != null)
9898
_settings.ModifyJsonSerializerSettings(settings);
9999

100+
settings.ContractResolver = new SettingsContractResolver(settings.ContractResolver, this._settings) { PiggyBackState = piggyBackState };
101+
100102
return settings;
101103
}
102104

@@ -111,11 +113,11 @@ public string SerializeBulkDescriptor(BulkDescriptor bulkDescriptor)
111113
{
112114
var command = operation._Operation;
113115
var index = operation._Index
114-
?? inferrer.IndexName(bulkDescriptor._Index)
115-
?? inferrer.IndexName(operation._ClrType);
116+
?? inferrer.IndexName(bulkDescriptor._Index)
117+
?? inferrer.IndexName(operation._ClrType);
116118
var typeName = operation._Type
117-
?? inferrer.TypeName(bulkDescriptor._Type)
118-
?? inferrer.TypeName(operation._ClrType);
119+
?? inferrer.TypeName(bulkDescriptor._Type)
120+
?? inferrer.TypeName(operation._ClrType);
119121

120122
var id = operation.GetIdForObject(inferrer);
121123
operation._Index = index;

Diff for: src/Nest/Nest.csproj

+2-1
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,7 @@
822822
<Compile Include="Enums\NamingConvention.cs" />
823823
<Compile Include="Properties\AssemblyInfo.cs" />
824824
<Compile Include="Resolvers\PropertyNameResolver.cs" />
825+
<Compile Include="Resolvers\SettingsContractResolver.cs" />
825826
<Compile Include="Resolvers\TypeNameMarker.cs" />
826827
<Compile Include="Resolvers\TypeNameMarkerExtensions.cs" />
827828
<Compile Include="Resolvers\TypeNameResolver.cs" />
@@ -874,4 +875,4 @@
874875
<Target Name="AfterBuild">
875876
</Target>
876877
-->
877-
</Project>
878+
</Project>

Diff for: src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public ConcreteTypeConverter(Func<dynamic, Hit<dynamic>, Type> concreteTypeSelec
7878

7979
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
8080
{
81-
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
81+
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
8282
if (elasticContractResolver != null && elasticContractResolver.PiggyBackState != null
8383
&& elasticContractResolver.PiggyBackState.ActualJsonConverter != null)
8484
{
@@ -161,7 +161,7 @@ internal static Type GetConcreteTypeUsingSelector<T>(
161161
JObject jObject, out object selection)
162162
where T: class
163163
{
164-
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
164+
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
165165
var baseType = realConcreteConverter._baseType;
166166
var selector = realConcreteConverter._concreteTypeSelector;
167167

Diff for: src/Nest/Resolvers/Converters/DictionaryKeysAreNotPropertyNamesJsonConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
3030

3131
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
3232
{
33-
var contract = serializer.ContractResolver as ElasticContractResolver;
33+
var contract = serializer.ContractResolver as SettingsContractResolver;
3434

3535
IDictionary dictionary = (IDictionary) value;
3636
writer.WriteStartObject();

Diff for: src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
8484
if (fieldName == null)
8585
return;
8686

87-
var contract = serializer.ContractResolver as ElasticContractResolver;
87+
var contract = serializer.ContractResolver as SettingsContractResolver;
8888
if (contract == null)
8989
return;
9090

Diff for: src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
7272
if (fieldName == null)
7373
return;
7474

75-
var contract = serializer.ContractResolver as ElasticContractResolver;
75+
var contract = serializer.ContractResolver as SettingsContractResolver;
7676
if (contract == null)
7777
return;
7878

Diff for: src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as IGeoBoundingBoxFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/Filters/GeoDistanceFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as IGeoDistanceFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/Filters/GeoDistanceRangeFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as IGeoDistanceRangeFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/Filters/PrefixFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as IPrefixFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as ITermFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/Filters/TermsFilterConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
var f = value as ITermsBaseFilter;
2323
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
2424

25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract == null)
2727
return;
2828

Diff for: src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2323
return;
2424
}
2525

26-
var contract = serializer.ContractResolver as ElasticContractResolver;
26+
var contract = serializer.ContractResolver as SettingsContractResolver;
2727
if (contract != null && contract.ConnectionSettings != null)
2828
{
2929
var indexName = contract.Infer.IndexName(marker);

Diff for: src/Nest/Resolvers/Converters/IndexSettingsConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ private static void WriteWarmers(JsonWriter writer, JsonSerializer serializer, I
7272
private static void WriteMappings(JsonWriter writer, JsonSerializer serializer, IndexSettings indexSettings)
7373
{
7474
if (indexSettings.Mappings.Count <= 0) return;
75-
var contract = serializer.ContractResolver as ElasticContractResolver;
75+
var contract = serializer.ContractResolver as SettingsContractResolver;
7676
if (contract == null || contract.ConnectionSettings == null) return;
7777

7878
writer.WritePropertyName("mappings");

Diff for: src/Nest/Resolvers/Converters/MultiGetHitConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private static void CreateMultiHit<T>(MultiHitTuple tuple, JsonSerializer serial
4141
var reader = tuple.Hit.CreateReader();
4242
serializer.Populate(reader, hit);
4343

44-
var contract = serializer.ContractResolver as ElasticContractResolver;
44+
var contract = serializer.ContractResolver as SettingsContractResolver;
4545
var settings = contract.ConnectionSettings;
4646
var f = new FieldSelection<T>(settings);
4747
var source = tuple.Hit["fields"];
@@ -59,7 +59,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
5959
{
6060
if (this._descriptor == null)
6161
{
62-
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
62+
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
6363
if (elasticContractResolver == null)
6464
return new MultiGetResponse { IsValid = false };
6565
var piggyBackState = elasticContractResolver.PiggyBackState;

Diff for: src/Nest/Resolvers/Converters/MultiSearchConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
6767
{
6868
if (this._settings == null)
6969
{
70-
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
70+
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
7171
if (elasticContractResolver == null)
7272
return new MultiSearchResponse { IsValid = false };
7373
var piggyBackState = elasticContractResolver.PiggyBackState;

Diff for: src/Nest/Resolvers/Converters/Queries/FuzzyQueryJsonConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
9898
if (fieldName == null)
9999
return;
100100

101-
var contract = serializer.ContractResolver as ElasticContractResolver;
101+
var contract = serializer.ContractResolver as SettingsContractResolver;
102102
if (contract == null)
103103
return;
104104

Diff for: src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
8585
if (fieldName == null)
8686
return;
8787

88-
var contract = serializer.ContractResolver as ElasticContractResolver;
88+
var contract = serializer.ContractResolver as SettingsContractResolver;
8989
if (contract == null)
9090
return;
9191

Diff for: src/Nest/Resolvers/Converters/Queries/SpanTermQueryConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
6262
var sq = value as ISpanTermQuery;
6363
if (sq == null) return;
6464

65-
var contract = serializer.ContractResolver as ElasticContractResolver;
65+
var contract = serializer.ContractResolver as SettingsContractResolver;
6666
if (contract == null)
6767
return;
6868

Diff for: src/Nest/Resolvers/Converters/Queries/TermsQueryJsonConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2424

2525
string field = null;
2626

27-
var contract = serializer.ContractResolver as ElasticContractResolver;
27+
var contract = serializer.ContractResolver as SettingsContractResolver;
2828
if (contract != null && contract.ConnectionSettings != null)
2929
field = contract.Infer.PropertyPath(t.Field);
3030

Diff for: src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2222
writer.WriteNull();
2323
return;
2424
}
25-
var contract = serializer.ContractResolver as ElasticContractResolver;
25+
var contract = serializer.ContractResolver as SettingsContractResolver;
2626
if (contract != null && contract.ConnectionSettings != null)
2727
{
2828
var typeName = contract.Infer.TypeName(marker);

Diff for: src/Nest/Resolvers/ElasticContractResolver.cs

-9
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,10 @@ public class ElasticContractResolver : DefaultContractResolver
2424
/// </summary>
2525
public IConnectionSettingsValues ConnectionSettings { get; private set; }
2626

27-
public ElasticInferrer Infer { get; private set; }
28-
29-
/// <summary>
30-
/// Signals to custom converter that it can get serialization state from one of the converters
31-
/// Ugly but massive performance gain
32-
/// </summary>
33-
internal JsonConverterPiggyBackState PiggyBackState { get; set; }
34-
3527
public ElasticContractResolver(IConnectionSettingsValues connectionSettings)
3628
: base(true)
3729
{
3830
this.ConnectionSettings = connectionSettings;
39-
this.Infer = new ElasticInferrer(this.ConnectionSettings);
4031
}
4132

4233
protected override JsonContract CreateContract(Type objectType)

Diff for: src/Nest/Resolvers/SettingsContractResolver.cs

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using Newtonsoft.Json.Serialization;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest.Resolvers
8+
{
9+
class SettingsContractResolver : IContractResolver
10+
{
11+
/// <summary>
12+
/// ConnectionSettings can be requested by JsonConverter's.
13+
/// </summary>
14+
public IConnectionSettingsValues ConnectionSettings { get; private set; }
15+
16+
public ElasticInferrer Infer { get; private set; }
17+
18+
private IContractResolver _wrapped;
19+
20+
/// <summary>
21+
/// Signals to custom converter that it can get serialization state from one of the converters
22+
/// Ugly but massive performance gain
23+
/// </summary>
24+
internal JsonConverterPiggyBackState PiggyBackState { get; set; }
25+
26+
public SettingsContractResolver(IContractResolver wrapped, IConnectionSettingsValues connectionSettings)
27+
{
28+
this.ConnectionSettings = connectionSettings;
29+
this.Infer = new ElasticInferrer(this.ConnectionSettings);
30+
this._wrapped = wrapped;
31+
}
32+
33+
public JsonContract ResolveContract(Type type)
34+
{
35+
return this._wrapped.ResolveContract(type);
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)