package com.mybatisflex.kotlin.scope /* * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). *

* 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. */ import com.mybatisflex.core.MybatisFlexBootstrap import javax.sql.DataSource class BootstrapScope(private val instant: MybatisFlexBootstrap = MybatisFlexBootstrap.getInstance()) { fun dataSources(dataSourceScope: DataSourceScope.() -> Unit) = dataSourceScope(DataSourceScope(instant)) operator fun Class.unaryPlus(): MybatisFlexBootstrap = instant.addMapper(this) operator fun DataSource.unaryPlus(): MybatisFlexBootstrap = instant.setDataSource(this) infix fun String.of(dataSource: DataSource): MybatisFlexBootstrap = instant.setDataSource(this, dataSource) } class DataSourceScope(private val bootstrap: MybatisFlexBootstrap) { fun dataSource(dataSourceKey: String, dataSource: DataSource) = bootstrap.addDataSource(dataSourceKey, dataSource) // infix fun String.of(dataSource: DataSource) = // bootstrap.addDataSource(this, dataSource) } fun buildBootstrap( instant: MybatisFlexBootstrap = MybatisFlexBootstrap.getInstance(), scope: BootstrapScope.(MybatisFlexBootstrap) -> Unit ): MybatisFlexBootstrap { scope(BootstrapScope(instant), instant) return instant }