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();
        }
示例#2
0
        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;

		}