Skip to content

Commit 8875bdd

Browse files
committed
Convert OS and Arch during deserialization
Trying to move things away from WorkspaceAgentModel to refactor it.
1 parent 082c3c9 commit 8875bdd

File tree

6 files changed

+86
-13
lines changed

6 files changed

+86
-13
lines changed

src/main/kotlin/com/coder/gateway/sdk/BaseCoderRestClient.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package com.coder.gateway.sdk
33
import com.coder.gateway.icons.CoderIcons
44
import com.coder.gateway.icons.toRetinaAwareIcon
55
import com.coder.gateway.models.WorkspaceAgentModel
6+
import com.coder.gateway.sdk.convertors.ArchConverter
67
import com.coder.gateway.sdk.convertors.InstantConverter
8+
import com.coder.gateway.sdk.convertors.OSConverter
79
import com.coder.gateway.sdk.ex.AuthenticationResponseException
810
import com.coder.gateway.sdk.ex.TemplateResponseException
911
import com.coder.gateway.sdk.ex.WorkspaceResponseException
@@ -19,7 +21,9 @@ import com.coder.gateway.sdk.v2.models.WorkspaceTransition
1921
import com.coder.gateway.sdk.v2.models.toAgentModels
2022
import com.coder.gateway.services.CoderSettingsState
2123
import com.coder.gateway.settings.CoderSettings
24+
import com.coder.gateway.util.Arch
2225
import com.coder.gateway.util.CoderHostnameVerifier
26+
import com.coder.gateway.util.OS
2327
import com.coder.gateway.util.coderSocketFactory
2428
import com.coder.gateway.util.coderTrustManagers
2529
import com.coder.gateway.util.getHeaders
@@ -59,7 +63,11 @@ open class BaseCoderRestClient(
5963
lateinit var buildVersion: String
6064

6165
init {
62-
val gson: Gson = GsonBuilder().registerTypeAdapter(Instant::class.java, InstantConverter()).setPrettyPrinting().create()
66+
val gson: Gson = GsonBuilder()
67+
.registerTypeAdapter(Instant::class.java, InstantConverter())
68+
.registerTypeAdapter(Arch::class.java, ArchConverter())
69+
.registerTypeAdapter(OS::class.java, OSConverter())
70+
.setPrettyPrinting().create()
6371

6472
val socketFactory = coderSocketFactory(settings.tls)
6573
val trustManagers = coderTrustManagers(settings.tls.caPath)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.coder.gateway.sdk.convertors
2+
3+
import com.coder.gateway.util.Arch
4+
import com.google.gson.JsonDeserializationContext
5+
import com.google.gson.JsonDeserializer
6+
import com.google.gson.JsonElement
7+
import com.google.gson.JsonParseException
8+
import com.google.gson.JsonPrimitive
9+
import com.google.gson.JsonSerializationContext
10+
import com.google.gson.JsonSerializer
11+
import java.lang.reflect.Type
12+
13+
/**
14+
* GSON serialiser/deserialiser for converting [Arch] objects.
15+
*/
16+
class ArchConverter : JsonSerializer<Arch?>, JsonDeserializer<Arch?> {
17+
override fun serialize(src: Arch?, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement {
18+
return JsonPrimitive(src?.toString() ?: "")
19+
}
20+
21+
@Throws(JsonParseException::class)
22+
override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Arch? {
23+
return Arch.from(json.asString)
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.coder.gateway.sdk.convertors
2+
3+
import com.coder.gateway.util.OS
4+
import com.google.gson.JsonDeserializationContext
5+
import com.google.gson.JsonDeserializer
6+
import com.google.gson.JsonElement
7+
import com.google.gson.JsonParseException
8+
import com.google.gson.JsonPrimitive
9+
import com.google.gson.JsonSerializationContext
10+
import com.google.gson.JsonSerializer
11+
import java.lang.reflect.Type
12+
13+
/**
14+
* GSON serialiser/deserialiser for converting [OS] objects.
15+
*/
16+
class OSConverter : JsonSerializer<OS?>, JsonDeserializer<OS?> {
17+
override fun serialize(src: OS?, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement {
18+
return JsonPrimitive(src?.toString() ?: "")
19+
}
20+
21+
@Throws(JsonParseException::class)
22+
override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): OS? {
23+
return OS.from(json.asString)
24+
}
25+
}

src/main/kotlin/com/coder/gateway/sdk/v2/models/Workspace.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package com.coder.gateway.sdk.v2.models
33
import com.coder.gateway.models.WorkspaceAgentModel
44
import com.coder.gateway.models.WorkspaceAndAgentStatus
55
import com.coder.gateway.models.WorkspaceVersionStatus
6-
import com.coder.gateway.util.Arch
7-
import com.coder.gateway.util.OS
86
import com.google.gson.annotations.SerializedName
97
import java.time.Instant
10-
import java.util.UUID
8+
import java.util.*
119

1210
/**
1311
* Represents a deployment of a template. It references a specific version and can be updated.
@@ -47,8 +45,8 @@ fun Workspace.toAgentModels(resources: List<WorkspaceResource> = this.latestBuil
4745
this.latestBuild.status,
4846
WorkspaceAndAgentStatus.from(this, agent),
4947
this.latestBuild.transition,
50-
OS.from(agent.operatingSystem),
51-
Arch.from(agent.architecture),
48+
agent.operatingSystem,
49+
agent.architecture,
5250
agent.expandedDirectory ?: agent.directory,
5351
)
5452

src/main/kotlin/com/coder/gateway/sdk/v2/models/WorkspaceAgent.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.coder.gateway.sdk.v2.models
22

3+
import com.coder.gateway.util.Arch
4+
import com.coder.gateway.util.OS
35
import com.google.gson.annotations.SerializedName
46
import java.time.Instant
5-
import java.util.UUID
7+
import java.util.*
68

79
data class WorkspaceAgent(
810
@SerializedName("id") val id: UUID,
@@ -15,9 +17,9 @@ data class WorkspaceAgent(
1517
@SerializedName("name") val name: String,
1618
@SerializedName("resource_id") val resourceID: UUID,
1719
@SerializedName("instance_id") val instanceID: String?,
18-
@SerializedName("architecture") val architecture: String,
20+
@SerializedName("architecture") val architecture: Arch?,
1921
@SerializedName("environment_variables") val envVariables: Map<String, String>,
20-
@SerializedName("operating_system") val operatingSystem: String,
22+
@SerializedName("operating_system") val operatingSystem: OS?,
2123
@SerializedName("startup_script") val startupScript: String?,
2224
@SerializedName("directory") val directory: String?,
2325
@SerializedName("expanded_directory") val expandedDirectory: String?,

src/test/kotlin/com/coder/gateway/sdk/DataGen.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,23 @@ package com.coder.gateway.sdk
33
import com.coder.gateway.models.WorkspaceAgentModel
44
import com.coder.gateway.models.WorkspaceAndAgentStatus
55
import com.coder.gateway.models.WorkspaceVersionStatus
6-
import com.coder.gateway.sdk.v2.models.*
7-
import com.google.gson.annotations.SerializedName
6+
import com.coder.gateway.sdk.v2.models.BuildReason
7+
import com.coder.gateway.sdk.v2.models.ProvisionerJob
8+
import com.coder.gateway.sdk.v2.models.ProvisionerJobStatus
9+
import com.coder.gateway.sdk.v2.models.ProvisionerType
10+
import com.coder.gateway.sdk.v2.models.Template
11+
import com.coder.gateway.sdk.v2.models.User
12+
import com.coder.gateway.sdk.v2.models.UserStatus
13+
import com.coder.gateway.sdk.v2.models.Workspace
14+
import com.coder.gateway.sdk.v2.models.WorkspaceAgent
15+
import com.coder.gateway.sdk.v2.models.WorkspaceAgentLifecycleState
16+
import com.coder.gateway.sdk.v2.models.WorkspaceAgentStatus
17+
import com.coder.gateway.sdk.v2.models.WorkspaceBuild
18+
import com.coder.gateway.sdk.v2.models.WorkspaceResource
19+
import com.coder.gateway.sdk.v2.models.WorkspaceStatus
20+
import com.coder.gateway.sdk.v2.models.WorkspaceTransition
21+
import com.coder.gateway.util.Arch
22+
import com.coder.gateway.util.OS
823
import java.time.Instant
924
import java.util.*
1025

@@ -58,9 +73,9 @@ class DataGen {
5873
agentName,
5974
resourceID = UUID.randomUUID(),
6075
instanceID = null,
61-
architecture = "arch",
76+
architecture = Arch.from("amd64"),
6277
envVariables = emptyMap(),
63-
operatingSystem = "os",
78+
operatingSystem = OS.from("linux"),
6479
startupScript = null,
6580
directory = null,
6681
expandedDirectory = null,

0 commit comments

Comments
 (0)