Improve domain (WIP)
This commit is contained in:
@@ -1,44 +1,105 @@
|
||||
@file:OptIn(ExperimentalResourceApi::class)
|
||||
|
||||
package domain
|
||||
|
||||
import org.jetbrains.compose.resources.DrawableResource
|
||||
import org.jetbrains.compose.resources.ExperimentalResourceApi
|
||||
enum class Animals(symbol: String) : ItemClass {
|
||||
ZEBRA("🦓"),
|
||||
OCTOPUS("🐙"),
|
||||
GOAT("🐐"),
|
||||
SLOTH("🦥"),
|
||||
DOG("🐕"),
|
||||
SNAIL("🐌"),
|
||||
ANT("🐜");
|
||||
|
||||
fun category(block: CategoryContext.() -> Unit): ItemCategory {
|
||||
class CategoryImpl(val items: MutableList<ItemImpl>) :
|
||||
ItemCategory, List<Item> by items {
|
||||
inner class ItemImpl(
|
||||
override val image: DrawableResource
|
||||
) : Item {
|
||||
override val category: CategoryImpl = this@CategoryImpl
|
||||
|
||||
init {
|
||||
items.add(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val ctx = object : CategoryContext {
|
||||
val category = CategoryImpl(mutableListOf())
|
||||
|
||||
override fun item(image: DrawableResource) {
|
||||
category.ItemImpl(image)
|
||||
}
|
||||
}
|
||||
ctx.block()
|
||||
return ctx.category
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
}
|
||||
|
||||
interface CategoryContext {
|
||||
fun item(image: DrawableResource)
|
||||
enum class Nationality(symbol: String) : ItemClass {
|
||||
ENGLAND("🇬🇧"),
|
||||
UKRAINE("🇺🇦"),
|
||||
SPAIN("🇪🇸"),
|
||||
NORWAY("🇳🇴"),
|
||||
JAPAN("🇯🇵"),
|
||||
SWITZERLAND("🇨🇭"),
|
||||
CANADA("🇨🇦");
|
||||
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
}
|
||||
|
||||
interface Item {
|
||||
val category: ItemCategory
|
||||
enum class Drink(symbol: String) : ItemClass {
|
||||
MILK("🥛"),
|
||||
WINE("🍷"),
|
||||
COCKTAIL("🍸"),
|
||||
COFFEE("☕"),
|
||||
TEA("🍵"),
|
||||
BEER("🍺"),
|
||||
BEVERAGE("🧃");
|
||||
|
||||
@OptIn(ExperimentalResourceApi::class)
|
||||
val image: DrawableResource
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
}
|
||||
|
||||
interface ItemCategory : List<Item>
|
||||
enum class Profession(symbol: String) : ItemClass {
|
||||
ASTRONAUT("\u200D\uD83D\uDE80"),
|
||||
HEALTH_WORKER("\u200D⚕\uFE0F"),
|
||||
FARMER("\u200D\uD83C\uDF3E"),
|
||||
ROCK_STAR("\u200D\uD83C\uDFA4"),
|
||||
SCIENTIST("\u200D\uD83D\uDD2C"),
|
||||
SOFTWARE_DEV("\u200D\uD83D\uDCBB"),
|
||||
FIREFIGHTER("\u200D\uD83D\uDE92"),
|
||||
TEACHER("\u200D\uD83C\uDFEB");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
}
|
||||
|
||||
enum class Fruit(symbol: String) : ItemClass {
|
||||
GRAPES("🍇"),
|
||||
WATERMELON("🍉"),
|
||||
LEMON("🍋"),
|
||||
BANANA("🍌"),
|
||||
PINEAPPLE("🍍"),
|
||||
CHERRIES("🍒"),
|
||||
STRAWBERRY("🍓"),
|
||||
KIWI("🥝"),
|
||||
PEAR("🍐"),
|
||||
MANGO("🥭");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
}
|
||||
|
||||
enum class Dessert(symbol: String) : ItemClass {
|
||||
ICE_CREAM("🍨"),
|
||||
DOUGHNUT("🍩"),
|
||||
COOKIE("🍪"),
|
||||
CAKE("🍰"),
|
||||
CUPCAKE("🧁"),
|
||||
PIE("🥧"),
|
||||
CHOCOLATE("🍫"),
|
||||
LOLLIPOP("🍭"),
|
||||
CUSTARD("🍮");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
}
|
||||
|
||||
enum class Transportation(symbol: String) : ItemClass {
|
||||
BICYCLE("🚲"),
|
||||
MOTOR_SCOOTER("🛵"),
|
||||
SKATEBOARD("🛹"),
|
||||
TAXI("🚕"),
|
||||
LOCOMOTIVE("🚂"),
|
||||
TRAM_CAR("🚋"),
|
||||
BUS("🚌");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
}
|
||||
|
||||
private val GENDERS = arrayOf("\uD83E\uDDD1", "\uD83D\uDC68", "\uD83D\uDC69")
|
||||
private val SKIN_TONES =
|
||||
arrayOf("\uD83C\uDFFB", "\uD83C\uDFFC", "\uD83C\uDFFD", "\uD83C\uDFFE", "\uD83C\uDFFF")
|
||||
|
||||
private fun idic(symbol: String) = Array<String>(GENDERS.size * SKIN_TONES.size) { i ->
|
||||
val g = GENDERS[i % GENDERS.size]
|
||||
val t = SKIN_TONES[i / GENDERS.size]
|
||||
g + t + symbol
|
||||
}
|
||||
|
||||
sealed interface ItemClass {
|
||||
val symbols: Array<String>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user