Skip to content

Commit

Permalink
Detect values from corner radius
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian Würthner committed Nov 7, 2024
1 parent bacab7f commit 0165a42
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.iodigital.figex.ext
import com.iodigital.figex.api.FigmaApi
import com.iodigital.figex.models.figma.FigmaNodesList
import com.iodigital.figex.models.figma.FigmaVariableValue
import com.iodigital.figex.models.figma.FigmaVariableValueCollection

internal suspend fun FigmaNodesList.resolveNestedReferences(
api: FigmaApi,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal data class FigmaNode(
val type: Type? = null,
val name: String,
val valuesByMode: Map<String, FigmaVariableValue>? = null,
val boundVariables: Map<String, List<FigmaVariableValue>>? = null,
val boundVariables: Map<String, FigmaVariableValueCollection>? = null,
val boundValuesByMode: Map<String, Map<String, FigmaVariableValue>>? = null,
val style: FigmaNodeStyle? = null,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.iodigital.figex.models.figma

import com.iodigital.figex.serializer.VariableValueCollectionSerializer
import kotlinx.serialization.Serializable

@Serializable(with = VariableValueCollectionSerializer::class)
internal sealed class FigmaVariableValueCollection : Collection<FigmaVariableValue> {

data class List(
val values: kotlin.collections.List<FigmaVariableValue>
) : FigmaVariableValueCollection(),
kotlin.collections.List<FigmaVariableValue> by values

class Map(
val values: kotlin.collections.Map<String, FigmaVariableValue>
) : FigmaVariableValueCollection(),
Collection<FigmaVariableValue> by values.values
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.iodigital.figex.serializer

import com.iodigital.figex.models.figma.FigmaVariableValue
import com.iodigital.figex.models.figma.FigmaVariableValueCollection
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonDecoder
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.decodeFromJsonElement

internal object VariableValueCollectionSerializer : KSerializer<FigmaVariableValueCollection> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("value", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): FigmaVariableValueCollection {
val tree = (decoder as JsonDecoder).decodeJsonElement()
return tree.getValue(decoder.json)
}

override fun serialize(encoder: Encoder, value: FigmaVariableValueCollection) =
throw UnsupportedOperationException("Not implemented")

private fun JsonElement.getValue(json: Json): FigmaVariableValueCollection = when (this) {
is JsonArray -> FigmaVariableValueCollection.List(
json.decodeFromJsonElement<List<FigmaVariableValue>>(this)
)

is JsonObject -> FigmaVariableValueCollection.Map(
json.decodeFromJsonElement<Map<String, FigmaVariableValue>>(this)
)

else -> throw IllegalStateException("Dead end: $this")
}
}

0 comments on commit 0165a42

Please sign in to comment.