All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.activej.launchers.initializers.ConfigConverters Maven / Gradle / Ivy

/*
 * Copyright (C) 2020 ActiveJ LLC.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.activej.launchers.initializers;

import io.activej.common.annotation.StaticFactories;
import io.activej.config.Config;
import io.activej.config.converter.ConfigConverter;
import io.activej.csp.process.frame.FrameFormat;
import io.activej.csp.process.frame.FrameFormats;
import io.activej.csp.process.frame.impl.LZ4;
import io.activej.csp.process.frame.impl.LZ4Legacy;
import io.activej.dns.DnsCache;
import io.activej.reactor.Reactor;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

import static io.activej.config.converter.ConfigConverters.*;
import static io.activej.dns.DnsCache.*;

@StaticFactories(ConfigConverter.class)
public class ConfigConverters {

	public static ConfigConverter ofDnsCache(Reactor reactor) {
		return new ConfigConverter<>() {
			@Override
			public DnsCache get(Config config) {
				Duration errorCacheExpiration = config.get(ofDuration(), "errorCacheExpiration", DEFAULT_ERROR_CACHE_EXPIRATION);
				Duration timedOutExceptionTtl = config.get(ofDuration(), "timedOutExpiration", DEFAULT_TIMED_OUT_EXPIRATION);
				Duration hardExpirationDelta = config.get(ofDuration(), "hardExpirationDelta", DEFAULT_HARD_EXPIRATION_DELTA);
				Duration maxTtl = config.get(ofDuration(), "maxTtl", DEFAULT_MAX_TTL);
				return DnsCache.builder(reactor)
					.withErrorCacheExpiration(errorCacheExpiration)
					.withTimedOutExpiration(timedOutExceptionTtl)
					.withHardExpirationDelta(hardExpirationDelta)
					.withMaxTtl(maxTtl)
					.build();
			}

			@Override
			@Contract("_, !null -> !null")
			public @Nullable DnsCache get(Config config, @Nullable DnsCache defaultValue) {
				if (config.isEmpty()) {
					return defaultValue;
				} else {
					return get(config);
				}
			}
		};
	}

	public static ConfigConverter ofFrameFormat() {
		return new ConfigConverter<>() {
			@Override
			public FrameFormat get(Config config) {
				return doGet(config, config.getValue());
			}

			private FrameFormat doGet(Config config, String formatName) {
				return switch (formatName) {
					case "identity" -> FrameFormats.identity();
					case "size-prefixed" -> FrameFormats.sizePrefixed();
					case "lz4" -> {
						LZ4.Builder formatBuilder = LZ4.builder();
						if (config.hasChild("compressionLevel")) {
							formatBuilder.withCompressionLevel(config.get(ofInteger(), "compressionLevel"));
						}
						yield formatBuilder.build();
					}
					case "legacy-lz4" -> {
						LZ4Legacy.Builder legacyFormatBuilder = LZ4Legacy.builder();
						if (config.hasChild("compressionLevel")) {
							legacyFormatBuilder.withCompressionLevel(config.get(ofInteger(), "compressionLevel"));
						}
						if (config.hasChild("ignoreMissingEndOfStream")) {
							legacyFormatBuilder.withIgnoreMissingEndOfStream(config.get(ofBoolean(), "ignoreMissingEndOfStream"));
						}
						yield legacyFormatBuilder.build();
					}
					case "compound" -> {
						Config compoundFormatsConfig = config.getChild("compoundFormats");
						List formatNames = ofList(ofString()).get(compoundFormatsConfig);
						List formats = new ArrayList<>(formatNames.size());
						for (String name : formatNames) {
							if (compoundFormatsConfig.hasChild(name)) {
								formats.add(doGet(compoundFormatsConfig.getChild(name), name));
							} else {
								formats.add(doGet(compoundFormatsConfig, name));
							}
						}
						yield FrameFormats.compound(formats.get(0), formats.subList(1, formats.size()).toArray(new FrameFormat[0]));
					}
					default ->
						throw new IllegalArgumentException("No frame format named " + config.getValue() + " exists");
				};
			}

			@Override
			public FrameFormat get(Config config, FrameFormat defaultValue) {
				if (config.isEmpty()) {
					return defaultValue;
				}
				return get(config);
			}
		};
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy