From 37b486ad219538068b760349b6f4b21bbe6da2d6 Mon Sep 17 00:00:00 2001 From: yutailang0119 Date: Wed, 26 Nov 2025 15:42:04 +0900 Subject: [PATCH 1/3] Add QueryParameter --- .../nav3recipes/deeplink/basic/util/DeepLinkPattern.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt index 9bcf5f5..155e57a 100644 --- a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt +++ b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt @@ -92,6 +92,14 @@ internal class DeepLinkPattern( val isParamArg: Boolean, val typeParser: TypeParser ) + + /** + * Metadata about a supported query parameter + */ + class QueryParameter( + val serialName: String?, + val typeParser: TypeParser, + ) } /** From 039dd24f7f8e6a3e1067a58554c84eecdc59fc5d Mon Sep 17 00:00:00 2001 From: yutailang0119 Date: Wed, 26 Nov 2025 15:53:28 +0900 Subject: [PATCH 2/3] Fix queryValuParsers to queryParameters to return QueryParameter --- .../nav3recipes/deeplink/basic/util/DeepLinkPattern.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt index 155e57a..7d8bbf2 100644 --- a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt +++ b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkPattern.kt @@ -72,15 +72,16 @@ internal class DeepLinkPattern( } /** - * Parse supported queries into a map of queryParameterNames to [TypeParser] + * Parse supported queries into a map of queryParameterNames to [QueryParameter] * * This will be used later on to parse a provided query value into the correct KType */ - val queryValueParsers: Map = buildMap { + val queryParameters: Map = buildMap { uriPattern.queryParameterNames.forEach { paramName -> - val elementIndex = serializer.descriptor.getElementIndex(paramName) + val paramValue = uriPattern.getQueryParameter(paramName)?.removePrefix("{")?.removeSuffix("}") + val elementIndex = serializer.descriptor.getElementIndex(paramValue ?: paramName) val elementDescriptor = serializer.descriptor.getElementDescriptor(elementIndex) - this[paramName] = getTypeParser(elementDescriptor.kind) + this[paramName] = QueryParameter(paramValue, getTypeParser(elementDescriptor.kind)) } } From db1035dc75a954a01b584bb48398a3dd2c9b2396 Mon Sep 17 00:00:00 2001 From: yutailang0119 Date: Wed, 26 Nov 2025 15:53:46 +0900 Subject: [PATCH 3/3] Fix match queries --- .../nav3recipes/deeplink/basic/util/DeepLinkMatcher.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkMatcher.kt b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkMatcher.kt index 1c6f3d8..989bc66 100644 --- a/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkMatcher.kt +++ b/app/src/main/java/com/example/nav3recipes/deeplink/basic/util/DeepLinkMatcher.kt @@ -48,14 +48,14 @@ internal class DeepLinkMatcher( // match queries (if any) request.queries.forEach { query -> val name = query.key - val queryStringParser = deepLinkPattern.queryValueParsers[name] - val queryParsedValue = try { - queryStringParser!!.invoke(query.value) + val queryParameter = deepLinkPattern.queryParameters[name]!! + val (argName, parsedValue) = try { + Pair(queryParameter.serialName ?: name, queryParameter.typeParser.invoke(query.value)) } catch (e: IllegalArgumentException) { Log.e(TAG_LOG_ERROR, "Failed to parse query name:[$name] value:[${query.value}].", e) return null } - args[name] = queryParsedValue + args[argName] = parsedValue } // provide the serializer of the matching key and map of arg names to parsed arg values return DeepLinkMatchResult(deepLinkPattern.serializer, args)