package tc.oc.api.model;
import java.util.function.Consumer;
import com.google.inject.TypeLiteral;
import tc.oc.api.docs.virtual.Model;
import tc.oc.api.docs.virtual.PartialModel;
import tc.oc.commons.core.inject.ProtectedBinders;
public interface ModelBinders extends ProtectedBinders, ModelTypeLiterals {
default <M extends Model> ModelBinder<M, M> bindModel(Class<M> M) {
return ModelBinder.of(this, M);
}
default <M extends Model> ModelBinder<M, M> bindModel(TypeLiteral<M> M) {
return ModelBinder.of(this, M);
}
default <M extends Model, P extends PartialModel> ModelBinder<M, P> bindModel(Class<M> M, Class<P> P) {
return ModelBinder.of(this, M, P);
}
default <M extends Model, P extends PartialModel> ModelBinder<M, P> bindModel(TypeLiteral<M> M, TypeLiteral<P> P) {
return ModelBinder.of(this, M, P);
}
default <M extends Model> void bindModel(Class<M> M, Consumer<ModelBinder<M, M>> block) {
block.accept(ModelBinder.of(this, M));
}
default <M extends Model> void bindModel(TypeLiteral<M> M, Consumer<ModelBinder<M, M>> block) {
block.accept(ModelBinder.of(this, M));
}
default <M extends Model, P extends PartialModel> void bindModel(Class<M> M, Class<P> P, Consumer<ModelBinder<M, P>> block) {
block.accept(ModelBinder.of(this, M, P));
}
default <M extends Model, P extends PartialModel> void bindModel(TypeLiteral<M> M, TypeLiteral<P> P, Consumer<ModelBinder<M, P>> block) {
block.accept(ModelBinder.of(this, M, P));
}
}