createMappingResolver static method

ZoneLocalMappingResolver createMappingResolver(
  1. AmbiguousTimeResolver ambiguousTimeResolver,
  2. SkippedTimeResolver skippedTimeResolver
)

Combines an ambiguousTimeResolver and a SkippedTimeResolver to create a ZoneLocalMappingResolver.

The ZoneLocalMappingResolver created by this method operates in the obvious way: unambiguous mappings are returned directly, ambiguous mappings are delegated to the given AmbiguousTimeResolver, and 'skipped' mappings are delegated to the given SkippedTimeResolver.

ambiguousTimeResolver: Resolver to use for ambiguous mappings. skippedTimeResolver: Resolver to use for 'skipped' mappings. Returns: The logical combination of the two resolvers.

Implementation

static ZoneLocalMappingResolver createMappingResolver(AmbiguousTimeResolver ambiguousTimeResolver, SkippedTimeResolver skippedTimeResolver) {
  // typedef ZoneLocalMappingResolver = ZonedDateTime Function(ZoneLocalMapping mapping);
  Preconditions.checkNotNull(ambiguousTimeResolver, 'ambiguousTimeResolver');
  Preconditions.checkNotNull(skippedTimeResolver, 'skippedTimeResolver');

  ZonedDateTime mappingResolve(ZoneLocalMapping mapping) {
    Preconditions.checkNotNull(mapping, 'mapping');
    switch (mapping.count) {
      case 0:
        return skippedTimeResolver(mapping.localDateTime, mapping.zone, mapping.earlyInterval, mapping.lateInterval);
      case 1:
        return mapping.first();
      case 2:
        return ambiguousTimeResolver(mapping.first(), mapping.last());
      default:
        throw StateError('Mapping has count outside range 0-2; should not happen.');
    }
  }

  return mappingResolve;
}