diff --git a/app/app/build.gradle.kts b/app/app/build.gradle.kts index b8ed094..66015a4 100644 --- a/app/app/build.gradle.kts +++ b/app/app/build.gradle.kts @@ -1,8 +1,30 @@ +import com.google.protobuf.gradle.* + plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) alias(libs.plugins.compose.compiler) alias(libs.plugins.serialization) + alias(libs.plugins.protobuf) +} + +protobuf { + protoc { + artifact = "com.google.protobuf:protoc:3.24.1" + } + + generateProtoTasks { + all().forEach { task -> + task.builtins { + id("java") { + option("lite") + } + id("kotlin") { + option("lite") + } + } + } + } } android { @@ -76,6 +98,8 @@ dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.okhttp) implementation(libs.okhttp.logging.interceptor) + implementation(libs.protobuf.javalite) + implementation(libs.protobuf.kotlinlite) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) diff --git a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/Store.kt b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/Store.kt new file mode 100644 index 0000000..a0157e5 --- /dev/null +++ b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/Store.kt @@ -0,0 +1,30 @@ +package ing.bikeshedengineer.debtpirate + +import android.content.Context +import androidx.datastore.core.CorruptionException +import androidx.datastore.core.DataStore +import androidx.datastore.core.Serializer +import androidx.datastore.dataStore +import com.google.protobuf.InvalidProtocolBufferException +import java.io.InputStream +import java.io.OutputStream + +object StoreSerializer : Serializer { + override val defaultValue: Store + get() = Store.getDefaultInstance() + + override suspend fun readFrom(input: InputStream): Store { + try { + return Store.parseFrom(input) + } catch (exception: InvalidProtocolBufferException) { + throw CorruptionException("Cannot read proto file.", exception) + } + } + + override suspend fun writeTo(t: Store, output: OutputStream) = t.writeTo(output) +} + +val Context.dataStore: DataStore by dataStore( + fileName = "store.proto", + serializer = StoreSerializer +) \ No newline at end of file diff --git a/app/app/src/main/proto/store.proto b/app/app/src/main/proto/store.proto new file mode 100644 index 0000000..7a4eafb --- /dev/null +++ b/app/app/src/main/proto/store.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +option java_package = "ing.bikeshedengineer.debtpirate"; +option java_multiple_files = true; + +message Token { + string token = 1; + int64 expires_at = 2; +} + +message Store { + int32 user_id = 1; + Token auth_token = 2; + Token session_token = 3; +} \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 143b7d2..a5cb1bf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,4 +4,5 @@ plugins { alias(libs.plugins.jetbrains.kotlin.android) apply false alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.serialization) apply false + alias(libs.plugins.protobuf) apply false } diff --git a/app/gradle/libs.versions.toml b/app/gradle/libs.versions.toml index 1afa73c..47832a0 100644 --- a/app/gradle/libs.versions.toml +++ b/app/gradle/libs.versions.toml @@ -18,8 +18,10 @@ lifecycleViewmodelCompose = "2.8.6" material = "1.12.0" material3 = "1.3.0" navigation = "2.8.2" -retrofit = "2.9.0" +protobuf = "0.9.4" +protoLite = "3.21.11" okhttp = "4.10.0" +retrofit = "2.9.0" [libraries] androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } @@ -50,9 +52,12 @@ retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" } okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } +protobuf-javalite = { group = "com.google.protobuf", name = "protobuf-javalite", version.ref = "protoLite" } +protobuf-kotlinlite = { group = "com.google.protobuf", name = "protobuf-kotlin-lite", version.ref = "protoLite" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +protobuf = { id = "com.google.protobuf", version.ref = "protobuf" } \ No newline at end of file