Skip to content

Commit

Permalink
Simplifying conditionals for the ATag parser
Browse files Browse the repository at this point in the history
  • Loading branch information
vitorpamplona committed Mar 5, 2025
1 parent 9adc7a7 commit e2459e3
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.bytesUsedInMemory
import com.vitorpamplona.quartz.utils.ensure
import com.vitorpamplona.quartz.utils.pointerSizeInBytes
import com.vitorpamplona.quartz.utils.removeTrailingNullsAndEmptyOthers

Expand Down Expand Up @@ -66,15 +67,13 @@ data class RootSceneTag(
dTag: String,
) = Address.assemble(kind, pubKeyHex, dTag)

fun parse(
aTagId: String,
relay: String?,
) = Address.parse(aTagId)?.let { RootSceneTag(it.kind, it.pubKeyHex, it.dTag, relay) }

@JvmStatic
fun parse(tag: Array<String>): RootSceneTag? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
return parse(tag[1], tag.getOrNull(2))
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
val address = Address.parse(tag[1]) ?: return null
return RootSceneTag(address.kind, address.pubKeyHex, address.dTag, tag.getOrNull(2))
}

@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ package com.vitorpamplona.quartz.experimental.interactiveStories.tags
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
import com.vitorpamplona.quartz.nip46RemoteSigner.getOrNull
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure

class StoryOptionTag(
val option: String,
Expand All @@ -37,10 +38,10 @@ class StoryOptionTag(

@JvmStatic
fun parse(tag: Array<String>): StoryOptionTag? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null

ensure(tag.size > 3) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[2].isNotEmpty()) { return null }
val address = Address.parse(tag[2]) ?: return null

return StoryOptionTag(tag[1], address, tag.getOrNull(3))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.core.value
import com.vitorpamplona.quartz.nip01Core.hints.types.AddressHint
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.bytesUsedInMemory
import com.vitorpamplona.quartz.utils.ensure
import com.vitorpamplona.quartz.utils.pointerSizeInBytes
import com.vitorpamplona.quartz.utils.removeTrailingNullsAndEmptyOthers

Expand Down Expand Up @@ -110,31 +111,43 @@ data class ATag(

@JvmStatic
fun parse(tag: Array<String>): ATag? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
return parse(tag[1], tag.getOrNull(2))
}

@JvmStatic
fun parseValidAddress(tag: Array<String>): String? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
return Address.parse(tag[1])?.toValue()
}

@JvmStatic
fun parseAddress(tag: Array<String>): Address? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
return Address.parse(tag[1])
}

@JvmStatic
fun parseAddressId(tag: Array<String>): String? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
return tag[1]
}

@JvmStatic
fun parseAsHint(tag: Array<String>): AddressHint? {
if (tag.size < 3 || tag[0] != TAG_NAME || !tag[1].contains(':') || tag[2].isEmpty()) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
ensure(tag[1].contains(':')) { return null }
ensure(tag[2].isNotEmpty()) { return null }
return AddressHint(tag[1], tag[2])
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.bytesUsedInMemory
import com.vitorpamplona.quartz.utils.ensure
import com.vitorpamplona.quartz.utils.pointerSizeInBytes

@Immutable
Expand Down Expand Up @@ -61,7 +62,9 @@ data class QAddressableTag(

@JvmStatic
fun parse(tag: Array<String>): QAddressableTag? {
if (tag.size < TAG_SIZE || tag[0] != QTag.TAG_NAME) return null
ensure(tag.size > TAG_SIZE) { return null }
ensure(tag[0] == QTag.TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
val address = Address.parse(tag[1]) ?: return null
return QAddressableTag(address, tag.getOrNull(2))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.match
import com.vitorpamplona.quartz.nip01Core.core.valueIfMatches
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure

@Immutable
class RecommendationTag(
Expand All @@ -44,7 +45,9 @@ class RecommendationTag(

@JvmStatic
fun parse(tag: Array<String>): RecommendationTag? {
if (tag.size < TAG_SIZE || tag[0] != TAG_NAME) return null
ensure(tag.size > 2) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotEmpty()) { return null }
val address = Address.parse(tag[1]) ?: return null
return RecommendationTag(address, tag.getOrNull(2), tag.getOrNull(3))
}
Expand Down

0 comments on commit e2459e3

Please sign in to comment.