private static Func <string, string> GetNameMutator(NameHandling nameHandling)
        {
            switch (nameHandling)
            {
            case NameHandling.Ordinal:
                return(StringMutator.Original);

            case NameHandling.CamelCase:
                return(StringMutator.ToCamelCase);

            case NameHandling.SnakeCase:
                return(StringMutator.ToSnakeCase);
            }
            throw new ArgumentException($"Invalid name handling selected. Expected one of {string.Join(",", Enum.GetNames(typeof(NameHandling)))}");
        }
 public NodaTimeResolver(
     IDateTimeZoneProvider dateTimeZoneProvider,
     NameHandling nameHandling = NameHandling.Ordinal,
     bool isoIntervals         = false,
     bool isoDateIntervals     = false,
     bool normalizedIsoPeriods = false)
 {
     _resolverCache = new Dictionary <Type, IJsonFormatter>
     {
         { typeof(ZonedDateTime), NodaFormatters.CreateZonedDateTimeFormatter(dateTimeZoneProvider) },
         { typeof(ZonedDateTime?), NodaFormatters.CreateNullableZonedDateTimeFormatter(dateTimeZoneProvider) },
         { typeof(DateTimeZone), NodaFormatters.CreateDateTimeZoneFormatter(dateTimeZoneProvider) },
         { typeof(Interval), isoIntervals ? NodaFormatters.IsoIntervalFormatter : NodaFormatters.CreateIntervalFormatter(nameHandling) },
         { typeof(Interval?), NodaFormatters.NullableIntervalFormatter },
         { typeof(DateInterval), isoDateIntervals ? NodaFormatters.IsoDateIntervalFormatter : NodaFormatters.CreateDateIntervalFormatter(nameHandling) },
         { typeof(Period), normalizedIsoPeriods ? NodaFormatters.NormalizingIsoPeriodFormatter : NodaFormatters.RoundtripPeriodFormatter }
     };
 }
 /// <summary>
 /// Formatter for intervals. This must be used in a serializer which also has an instant converter.
 /// </summary>
 public static IJsonFormatter <Interval> CreateIntervalFormatter(NameHandling nameHandling) =>
 new NodaIntervalFormatter(GetNameMutator(nameHandling));