Improve API of interface WellknownRetriever to be able to distinguish between 404 and other errors.

This commit is contained in:
Benoit Marty 2025-10-22 14:13:36 +02:00
parent cbbbef39d8
commit 9ad9efe547
14 changed files with 196 additions and 96 deletions

View file

@ -8,6 +8,6 @@
package io.element.android.libraries.wellknown.api
interface SessionWellknownRetriever {
suspend fun getWellKnown(): WellKnown?
suspend fun getElementWellKnown(): ElementWellKnown?
suspend fun getWellKnown(): WellknownRetrieverResult<WellKnown>
suspend fun getElementWellKnown(): WellknownRetrieverResult<ElementWellKnown>
}

View file

@ -8,6 +8,6 @@
package io.element.android.libraries.wellknown.api
interface WellknownRetriever {
suspend fun getWellKnown(baseUrl: String): WellKnown?
suspend fun getElementWellKnown(baseUrl: String): ElementWellKnown?
suspend fun getWellKnown(baseUrl: String): WellknownRetrieverResult<WellKnown>
suspend fun getElementWellKnown(baseUrl: String): WellknownRetrieverResult<ElementWellKnown>
}

View file

@ -0,0 +1,31 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.wellknown.api
sealed interface WellknownRetrieverResult<out T> {
/**
* Well-known data has been successfully retrieved.
*/
data class Success<out T>(val data: T) : WellknownRetrieverResult<T>
/**
* Well-known data is not found (file does not exist server side, we got a 404).
*/
data object NotFound : WellknownRetrieverResult<Nothing>
/**
* Any other error.
*/
data class Error(val exception: Exception) : WellknownRetrieverResult<Nothing>
fun dataOrNull(): T? = when (this) {
is Success<T> -> data
is Error -> null
NotFound -> null
}
}