private void WriteDecay(ref JsonWriter writer, IDecayFunction decay, IJsonFormatterResolver formatterResolver) { writer.WritePropertyName(decay.DecayType); writer.WriteBeginObject(); writer.WritePropertyName(formatterResolver.GetConnectionSettings().Inferrer.Field(decay.Field)); writer.WriteBeginObject(); var written = false; switch (decay) { case IDecayFunction <double?, double?> numericDecay: WriteNumericDecay(ref writer, ref written, numericDecay); break; case IDecayFunction <DateMath, Time> dateDecay: WriteDateDecay(ref writer, ref written, dateDecay, formatterResolver); break; case IDecayFunction <GeoLocation, Distance> geoDecay: WriteGeoDecay(ref writer, ref written, geoDecay, formatterResolver); break; default: throw new Exception($"Can not write decay function json for {decay.GetType().Name}"); } if (decay.Decay.HasValue) { if (written) { writer.WriteValueSeparator(); } writer.WritePropertyName("decay"); writer.WriteDouble(decay.Decay.Value); } writer.WriteEndObject(); if (decay.MultiValueMode.HasValue) { writer.WriteValueSeparator(); writer.WritePropertyName("multi_value_mode"); formatterResolver.GetFormatter <MultiValueMode>() .Serialize(ref writer, decay.MultiValueMode.Value, formatterResolver); } writer.WriteEndObject(); }
private bool WriteDecay(JsonWriter writer, IDecayFunction decay, JsonSerializer serializer) { if (decay == null) { return(false); } writer.WritePropertyName(decay.DecayType); writer.WriteStartObject(); { writer.WritePropertyName(serializer.GetConnectionSettings().Inferrer.Field(decay.Field)); writer.WriteStartObject(); { var write = WriteNumericDecay(writer, decay as IDecayFunction <double?, double?>, serializer) || WriteDateDecay(writer, decay as IDecayFunction <DateMath, Time>, serializer) || WriteGeoDecay(writer, decay as IDecayFunction <GeoLocation, Distance>, serializer); if (!write) { throw new Exception($"Can not write decay function json for {decay.GetType().Name}"); } if (decay.Decay.HasValue) { writer.WritePropertyName("decay"); serializer.Serialize(writer, decay.Decay.Value); } } writer.WriteEndObject(); if (decay.MultiValueMode.HasValue) { writer.WritePropertyName("multi_value_mode"); serializer.Serialize(writer, decay.MultiValueMode.Value); } } writer.WriteEndObject(); return(true); }
private bool WriteDecay(JsonWriter writer, IDecayFunction decay, JsonSerializer serializer) { if (decay == null) return false; writer.WritePropertyName(decay.DecayType); writer.WriteStartObject(); { writer.WritePropertyName(serializer.GetConnectionSettings().Inferrer.Field(decay.Field)); writer.WriteStartObject(); { var write = WriteNumericDecay(writer, decay as IDecayFunction<double?, double?>, serializer) || WriteDateDecay(writer, decay as IDecayFunction<DateMath, Time>, serializer) || WriteGeoDecay(writer, decay as IDecayFunction<GeoLocation, Distance>, serializer); if (!write) throw new Exception($"Can not write decay function json for {decay.GetType().Name}"); if (decay.Decay.HasValue) { writer.WritePropertyName("decay"); serializer.Serialize(writer, decay.Decay.Value); } } writer.WriteEndObject(); if (decay.MultiValueMode.HasValue) { writer.WritePropertyName("multi_value_mode"); serializer.Serialize(writer, decay.MultiValueMode.Value); } } writer.WriteEndObject(); return true; }