package org.testcontainers.images.builder.traits;
import lombok.Getter;
import org.testcontainers.images.builder.Transferable;
import org.testcontainers.images.builder.dockerfile.DockerfileBuilder;
import java.util.function.Consumer;
/**
* BuildContextBuilder's trait for Dockerfile-based resources.
*
*/
public interface DockerfileTrait<SELF extends DockerfileTrait<SELF> & BuildContextBuilderTrait<SELF> & StringsTrait<SELF>> {
default SELF withDockerfileFromBuilder(Consumer<DockerfileBuilder> builderConsumer) {
DockerfileBuilder builder = new DockerfileBuilder();
builderConsumer.accept(builder);
// return Transferable because we want to build Dockerfile's content lazily
return ((SELF) this).withFileFromTransferable("Dockerfile", new Transferable() {
@Getter(lazy = true)
private final byte[] bytes = builder.build().getBytes();
@Override
public long getSize() {
return getBytes().length;
}
@Override
public String getDescription() {
return "Dockerfile: " + builder;
}
});
}
}