> For the complete documentation index, see [llms.txt](https://sserra.gitbook.io/bulldog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sserra.gitbook.io/bulldog/how-it-works.md).

# How it works

Bulldog uses annotation processing to generate classes at compile time from object specifications. Also it leverages Kotlin delegated properties feature to read and write to Android SharedPreferences.

The following example:

```kotlin
@Bulldog(name = "UserSettings")
object UserModel {
    const val id: Int = 20
    const val email: String = "johnDoe@gmail.com"
    const val likes: Long = 20L
    const val isPremium: Boolean = false
    const val minutesLeft: Float = 24.5F
}
```

�Generates a class like the following:

```kotlin

class UserSettings {
    private val prefs: SharedPreferences =
            bullDogCtx.getSharedPreferences(javaClass.simpleName, MODE_PRIVATE)

    var id: Int by bindPreference(prefs, 20, "id")

    var email: String by bindPreference(prefs, "johnDoe@gmail.com", "email")

    var likes: Long by bindPreference(prefs, 20, "likes")

    var isPremium: Boolean by bindPreference(prefs, false, "isPremium")

    var minutesLeft: Float by bindPreference(prefs, 24.5F, "minutesLeft")

    fun clearId() = prefs.edit().remove("id").apply()

    fun clearEmail() = prefs.edit().remove("email").apply()

    fun clearLikes() = prefs.edit().remove("likes").apply()

    fun clearIsPremium() = prefs.edit().remove("isPremium").apply()

    fun clearMinutesLeft() = prefs.edit().remove("minutesLeft").apply()

    fun clearAll() {
        prefs.edit().apply{remove("id")
        remove("email")
        remove("likes")
        remove("isPremium")
        remove("minutesLeft")
        }.apply()
    }

    override fun toString(): String = "UserSettings  id=$id, email=$email, likes=$likes, isPremium=$isPremium, minutesLeft=$minutesLeft,"
    }
```

�We get a clearXXX method for each entry and also a human readable toString() implementation.
