![JAR search and dependency download from the Maven repository](/logo.png)
net.zerobuilder.compiler.generate.DtoModuleOutput Maven / Gradle / Ivy
package net.zerobuilder.compiler.generate;
import com.squareup.javapoet.TypeSpec;
import net.zerobuilder.compiler.generate.DtoGeneratorOutput.BuilderMethod;
import java.util.function.Function;
public final class DtoModuleOutput {
public interface ModuleOutputCases {
R simple(SimpleModuleOutput simple);
R contract(ContractModuleOutput contract);
}
public static abstract class AbstractModuleOutput {
final BuilderMethod method;
final TypeSpec impl;
protected AbstractModuleOutput(BuilderMethod method, TypeSpec impl) {
this.method = method;
this.impl = impl;
}
public abstract R accept(ModuleOutputCases cases);
}
public static final class SimpleModuleOutput extends AbstractModuleOutput {
public SimpleModuleOutput(BuilderMethod method, TypeSpec impl) {
super(method, impl);
}
@Override
public R accept(ModuleOutputCases cases) {
return cases.simple(this);
}
}
public static final class ContractModuleOutput extends AbstractModuleOutput {
final TypeSpec contract;
public ContractModuleOutput(BuilderMethod method, TypeSpec impl, TypeSpec contract) {
super(method, impl);
this.contract = contract;
}
@Override
public R accept(ModuleOutputCases cases) {
return cases.contract(this);
}
}
static Function asFunction(ModuleOutputCases cases) {
return moduleOutput -> moduleOutput.accept(cases);
}
static Function moduleOutputCases(
Function simple,
Function contract) {
return asFunction(new ModuleOutputCases() {
@Override
public R simple(SimpleModuleOutput simpleOutput) {
return simple.apply(simpleOutput);
}
@Override
public R contract(ContractModuleOutput contractOutput) {
return contract.apply(contractOutput);
}
});
}
private DtoModuleOutput() {
throw new UnsupportedOperationException("no instances");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy