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

net.zerobuilder.compiler.generate.DtoModuleOutput Maven / Gradle / Ivy

There is a newer version: 1.603
Show newest version
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