package exh.util import io.realm.Realm import io.realm.RealmModel import io.realm.log.RealmLog import java.util.* inline fun realmTrans(block: (Realm) -> T): T { return defRealm { it.trans { block(it) } } } inline fun defRealm(block: (Realm) -> T): T { return Realm.getDefaultInstance().use { block(it) } } inline fun Realm.trans(block: () -> T): T { beginTransaction() try { val res = block() commitTransaction() return res } catch(t: Throwable) { if (isInTransaction) { cancelTransaction() } else { RealmLog.warn("Could not cancel transaction, not currently in a transaction.") } throw t } finally { //Just in case if (isInTransaction) { cancelTransaction() } } } inline fun Realm.useTrans(block: (Realm) -> T): T { return use { trans { block(this) } } } fun Realm.createUUIDObj(clazz: Class) = createObject(clazz, UUID.randomUUID().toString())!! inline fun Realm.createUUIDObj() = createUUIDObj(T::class.java)