diff --git a/kotlin/build.gradle b/kotlin/build.gradle index 5b110bf72..3f6f7be91 100644 --- a/kotlin/build.gradle +++ b/kotlin/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation "io.ktor:ktor-client:$ktorVersion" implementation "io.ktor:ktor-client-okhttp:$ktorVersion" implementation "io.ktor:ktor-client-json:$ktorVersion" - implementation "io.ktor:ktor-client-jackson:$ktorVersion" + implementation "io.ktor:ktor-client-gson:$ktorVersion" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-RC' implementation 'com.google.code.gson:gson:2.8.5' diff --git a/kotlin/src/main/com/looker/rtl/AuthToken.kt b/kotlin/src/main/com/looker/rtl/AuthToken.kt index 9d0a80c67..3b2dc6abd 100644 --- a/kotlin/src/main/com/looker/rtl/AuthToken.kt +++ b/kotlin/src/main/com/looker/rtl/AuthToken.kt @@ -24,18 +24,28 @@ package com.looker.rtl -import com.fasterxml.jackson.annotation.JsonProperty +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import com.google.gson.TypeAdapter +import com.google.gson.annotations.SerializedName +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonToken +import com.google.gson.stream.JsonWriter import com.looker.sdk.AccessToken +import io.ktor.client.features.json.GsonSerializer +import io.ktor.client.features.json.defaultSerializer +import java.lang.reflect.Type import java.time.LocalDateTime data class AuthToken( - @JsonProperty("access_token") + @SerializedName("access_token") var accessToken: String = "", // TODO: Consider making this/these vals and using new objects instead of mutating - @JsonProperty("token_type") + @SerializedName("token_type") var tokenType: String = "", - @JsonProperty("expires_in") + @SerializedName("expires_in") var expiresIn: Long = 0L, - @JsonProperty("refresh_token") + @SerializedName("refresh_token") var refreshToken: String? = null ) { @@ -80,3 +90,55 @@ data class AuthToken( expiresIn = 0 } } + +/** + * Adapter for serialization/deserialization of [AuthToken]. + * This is required since Gson used no-args constructor to create objects. Gson's default + * deserializer first creates an [AuthToken] object with default values which results with incorrect + * value being assigned to [AuthToken.expiresAt] in its init block. + * + * This adapter mitigates this by calling the constructor with deserialized values. + */ +class AuthTokenAdapter: TypeAdapter() { + override fun read(jsonReader: JsonReader?): AuthToken { + val authToken = AuthToken() + jsonReader?.beginObject() + + while (jsonReader?.hasNext() == true) { + if (jsonReader.peek().equals(JsonToken.NAME)) { + when (jsonReader.nextName()) { + "access_token" -> authToken.accessToken = jsonReader.nextString() + "token_type" -> authToken.tokenType = jsonReader.nextString() + "expires_in" -> authToken.expiresIn = jsonReader.nextLong() + "refresh_token" -> { + if (jsonReader.peek().equals(JsonToken.NULL)) { + authToken.refreshToken = null + jsonReader.nextNull() + } else { + authToken.refreshToken = jsonReader.nextString() + } + } + else -> break + } + } + } + + jsonReader?.endObject() + + // return new AuthToken calling its constructor with deserialized values + return AuthToken(authToken.accessToken, authToken.tokenType, authToken.expiresIn, authToken.refreshToken) + } + + override fun write(jsonWriter: JsonWriter?, authToken: AuthToken?) { + jsonWriter?.beginObject() + jsonWriter?.name("access_token") + jsonWriter?.value(authToken?.accessToken) + jsonWriter?.name("token_type") + jsonWriter?.value(authToken?.tokenType) + jsonWriter?.name("expires_in") + jsonWriter?.value(authToken?.expiresIn) + jsonWriter?.name("refresh_token") + jsonWriter?.value(authToken?.refreshToken) + jsonWriter?.endObject() + } +} diff --git a/kotlin/src/main/com/looker/rtl/Transport.kt b/kotlin/src/main/com/looker/rtl/Transport.kt index 89783b317..d5f334b5b 100644 --- a/kotlin/src/main/com/looker/rtl/Transport.kt +++ b/kotlin/src/main/com/looker/rtl/Transport.kt @@ -24,11 +24,13 @@ package com.looker.rtl -import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.google.gson.JsonDeserializer import io.ktor.client.HttpClient import io.ktor.client.call.receive import io.ktor.client.engine.okhttp.OkHttp -import io.ktor.client.features.json.JacksonSerializer +import io.ktor.client.features.json.GsonSerializer +import io.ktor.client.features.json.defaultSerializer import io.ktor.client.features.json.JsonFeature import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.forms.FormDataContent @@ -179,7 +181,9 @@ fun customClient(options: TransportOptions): HttpClient { // This construction loosely adapted from https://ktor.io/clients/http-client/engines.html#artifact-7 return HttpClient(OkHttp) { install(JsonFeature) { - serializer = JacksonSerializer() + serializer = GsonSerializer { + registerTypeAdapter(AuthToken::class.java, AuthTokenAdapter()) + } } engine { config { @@ -336,12 +340,11 @@ class Transport(val options: TransportOptions) { } else -> { // Request body -// val gson = GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssX").create() - val gson = Gson() - val jsonBody = gson.toJson(body) + val json = defaultSerializer() + val jsonBody = json.write(body) builder.body = jsonBody - headers["Content-Length"] = jsonBody.length.toString() + headers["Content-Length"] = jsonBody.contentLength.toString() } } } diff --git a/kotlin/src/main/com/looker/sdk/4.0/models.kt b/kotlin/src/main/com/looker/sdk/4.0/models.kt index e77b84898..dfe79a8ea 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/models.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/models.kt @@ -33,7 +33,6 @@ package com.looker.sdk -import com.fasterxml.jackson.annotation.JsonProperty import com.looker.rtl.* import java.io.Serializable import java.util.* @@ -77,11 +76,7 @@ data class Alert ( var destinations: Array? = null, var field: AlertField? = null, var id: Long? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, - @get:JsonProperty("is_public") - @param:JsonProperty("is_public") var is_public: Boolean? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, @@ -883,8 +878,6 @@ data class CredentialsApi3 ( var id: Long? = null, var client_id: String? = null, var created_at: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var type: String? = null, var url: String? = null @@ -907,8 +900,6 @@ data class CredentialsEmail ( var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var password_reset_url: String? = null, @@ -934,8 +925,6 @@ data class CredentialsEmailSearch ( var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var password_reset_url: String? = null, @@ -961,8 +950,6 @@ data class CredentialsEmbed ( var external_group_id: String? = null, var external_user_id: String? = null, var id: Long? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, @@ -986,8 +973,6 @@ data class CredentialsGoogle ( var domain: String? = null, var email: String? = null, var google_user_id: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, @@ -1009,8 +994,6 @@ data class CredentialsLDAP ( var can: Map? = null, var created_at: String? = null, var email: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var ldap_dn: String? = null, var ldap_id: String? = null, @@ -1034,8 +1017,6 @@ data class CredentialsLookerOpenid ( var can: Map? = null, var created_at: String? = null, var email: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var logged_in_ip: String? = null, @@ -1058,8 +1039,6 @@ data class CredentialsOIDC ( var can: Map? = null, var created_at: String? = null, var email: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var oidc_user_id: String? = null, @@ -1081,8 +1060,6 @@ data class CredentialsSaml ( var can: Map? = null, var created_at: String? = null, var email: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var logged_in_at: String? = null, var saml_user_id: String? = null, @@ -1103,8 +1080,6 @@ data class CredentialsSaml ( data class CredentialsTotp ( var can: Map? = null, var created_at: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var type: String? = null, var verified: Boolean? = null, @@ -1805,8 +1780,6 @@ data class DialectInfoOptions ( * @property is_enabled Whether or not digest emails are enabled */ data class DigestEmails ( - @get:JsonProperty("is_enabled") - @param:JsonProperty("is_enabled") var is_enabled: Boolean? = null ) : Serializable @@ -1944,26 +1917,12 @@ data class Folder ( var creator_id: Long? = null, var child_count: Long? = null, var external_id: String? = null, - @get:JsonProperty("is_embed") - @param:JsonProperty("is_embed") var is_embed: Boolean? = null, - @get:JsonProperty("is_embed_shared_root") - @param:JsonProperty("is_embed_shared_root") var is_embed_shared_root: Boolean? = null, - @get:JsonProperty("is_embed_users_root") - @param:JsonProperty("is_embed_users_root") var is_embed_users_root: Boolean? = null, - @get:JsonProperty("is_personal") - @param:JsonProperty("is_personal") var is_personal: Boolean? = null, - @get:JsonProperty("is_personal_descendant") - @param:JsonProperty("is_personal_descendant") var is_personal_descendant: Boolean? = null, - @get:JsonProperty("is_shared_root") - @param:JsonProperty("is_shared_root") var is_shared_root: Boolean? = null, - @get:JsonProperty("is_users_root") - @param:JsonProperty("is_users_root") var is_users_root: Boolean? = null, var can: Map? = null, var dashboards: Array? = null, @@ -1997,26 +1956,12 @@ data class FolderBase ( var creator_id: Long? = null, var child_count: Long? = null, var external_id: String? = null, - @get:JsonProperty("is_embed") - @param:JsonProperty("is_embed") var is_embed: Boolean? = null, - @get:JsonProperty("is_embed_shared_root") - @param:JsonProperty("is_embed_shared_root") var is_embed_shared_root: Boolean? = null, - @get:JsonProperty("is_embed_users_root") - @param:JsonProperty("is_embed_users_root") var is_embed_users_root: Boolean? = null, - @get:JsonProperty("is_personal") - @param:JsonProperty("is_personal") var is_personal: Boolean? = null, - @get:JsonProperty("is_personal_descendant") - @param:JsonProperty("is_personal_descendant") var is_personal_descendant: Boolean? = null, - @get:JsonProperty("is_shared_root") - @param:JsonProperty("is_shared_root") var is_shared_root: Boolean? = null, - @get:JsonProperty("is_users_root") - @param:JsonProperty("is_users_root") var is_users_root: Boolean? = null, var can: Map? = null ) : Serializable @@ -2058,14 +2003,8 @@ data class GitBranch ( var owner_name: String? = null, var readonly: Boolean? = null, var personal: Boolean? = null, - @get:JsonProperty("is_local") - @param:JsonProperty("is_local") var is_local: Boolean? = null, - @get:JsonProperty("is_remote") - @param:JsonProperty("is_remote") var is_remote: Boolean? = null, - @get:JsonProperty("is_production") - @param:JsonProperty("is_production") var is_production: Boolean? = null, var ahead_count: Long? = null, var behind_count: Long? = null, @@ -2288,8 +2227,6 @@ data class HomepageSection ( var homepage_id: Long? = null, var homepage_items: Array? = null, var id: Long? = null, - @get:JsonProperty("is_header") - @param:JsonProperty("is_header") var is_header: Boolean? = null, var item_order: Array? = null, var title: String? = null, @@ -2308,8 +2245,6 @@ data class ImportedProject ( var name: String? = null, var url: String? = null, var ref: String? = null, - @get:JsonProperty("is_remote") - @param:JsonProperty("is_remote") var is_remote: Boolean? = null ) : Serializable @@ -2518,8 +2453,6 @@ data class LDAPConfig ( var merge_new_users_by_email: Boolean? = null, var modified_at: String? = null, var modified_by: String? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var test_ldap_password: String? = null, var test_ldap_user: String? = null, @@ -2559,8 +2492,6 @@ data class LDAPConfigTestIssue ( */ data class LDAPConfigTestResult ( var details: String? = null, - @get:JsonProperty("issues") - @param:JsonProperty("issues") var issues: Array? = null, var message: String? = null, var status: String? = null, @@ -2762,8 +2693,6 @@ data class Look ( var favorite_count: Long? = null, var google_spreadsheet_formula: String? = null, var image_embed_url: String? = null, - @get:JsonProperty("is_run_on_load") - @param:JsonProperty("is_run_on_load") var is_run_on_load: Boolean? = null, var last_accessed_at: Date? = null, var last_updater_id: Long? = null, @@ -2888,8 +2817,6 @@ data class LookmlModelExplore ( var always_filter: Array? = null, var conditionally_filter: Array? = null, var index_fields: Array? = null, - @get:JsonProperty("sets") - @param:JsonProperty("sets") var sets: Array? = null, var tags: Array? = null, var errors: Array? = null, @@ -3019,17 +2946,9 @@ data class LookmlModelExploreField ( var fiscal_month_offset: Long? = null, var has_allowed_values: Boolean? = null, var hidden: Boolean? = null, - @get:JsonProperty("is_filter") - @param:JsonProperty("is_filter") var is_filter: Boolean? = null, - @get:JsonProperty("is_fiscal") - @param:JsonProperty("is_fiscal") var is_fiscal: Boolean? = null, - @get:JsonProperty("is_numeric") - @param:JsonProperty("is_numeric") var is_numeric: Boolean? = null, - @get:JsonProperty("is_timeframe") - @param:JsonProperty("is_timeframe") var is_timeframe: Boolean? = null, var can_time_filter: Boolean? = null, var time_interval: LookmlModelExploreFieldTimeInterval? = null, @@ -3306,8 +3225,6 @@ data class LookWithDashboards ( var favorite_count: Long? = null, var google_spreadsheet_formula: String? = null, var image_embed_url: String? = null, - @get:JsonProperty("is_run_on_load") - @param:JsonProperty("is_run_on_load") var is_run_on_load: Boolean? = null, var last_accessed_at: Date? = null, var last_updater_id: Long? = null, @@ -3376,8 +3293,6 @@ data class LookWithQuery ( var favorite_count: Long? = null, var google_spreadsheet_formula: String? = null, var image_embed_url: String? = null, - @get:JsonProperty("is_run_on_load") - @param:JsonProperty("is_run_on_load") var is_run_on_load: Boolean? = null, var last_accessed_at: Date? = null, var last_updater_id: Long? = null, @@ -3619,16 +3534,12 @@ data class OIDCConfig ( var groups_attribute: String? = null, var groups_with_role_ids: Array? = null, var identifier: String? = null, - @get:JsonProperty("issuer") - @param:JsonProperty("issuer") var issuer: String? = null, var modified_at: Date? = null, var modified_by: Long? = null, var new_user_migration_types: String? = null, var scopes: Array? = null, var secret: String? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var test_slug: String? = null, var token_endpoint: String? = null, @@ -3796,8 +3707,6 @@ data class Project ( var validation_required: Boolean? = null, var git_release_mgmt_enabled: Boolean? = null, var allow_warnings: Boolean? = null, - @get:JsonProperty("is_example") - @param:JsonProperty("is_example") var is_example: Boolean? = null, var dependency_status: String? = null ) : Serializable @@ -4074,8 +3983,6 @@ data class RepositoryCredential ( var git_username: String? = null, var git_password: String? = null, var ssh_public_key: String? = null, - @get:JsonProperty("is_configured") - @param:JsonProperty("is_configured") var is_configured: Boolean? = null ) : Serializable @@ -4292,8 +4199,6 @@ data class SamlConfig ( var default_new_user_groups: Array? = null, var default_new_user_role_ids: Array? = null, var default_new_user_group_ids: Array? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var groups_attribute: String? = null, var groups: Array? = null, @@ -4489,8 +4394,6 @@ data class ScheduledPlanDestination ( */ data class Schema ( var name: String? = null, - @get:JsonProperty("is_default") - @param:JsonProperty("is_default") var is_default: Boolean? = null ) : Serializable @@ -4554,8 +4457,6 @@ data class SchemaTable ( */ data class SchemaTables ( var name: String? = null, - @get:JsonProperty("is_default") - @param:JsonProperty("is_default") var is_default: Boolean? = null, var tables: Array? = null ) : Serializable @@ -4807,8 +4708,6 @@ data class Theme ( var end_at: Date? = null, var id: Long? = null, var name: String? = null, - @get:JsonProperty("settings") - @param:JsonProperty("settings") var settings: ThemeSettings? = null ) : Serializable @@ -4937,8 +4836,6 @@ data class User ( var group_ids: Array? = null, var home_folder_id: String? = null, var id: Long? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var last_name: String? = null, var locale: String? = null, @@ -4978,11 +4875,7 @@ data class UserAttribute ( var label: String, var type: String, var default_value: String? = null, - @get:JsonProperty("is_system") - @param:JsonProperty("is_system") var is_system: Boolean? = null, - @get:JsonProperty("is_permanent") - @param:JsonProperty("is_permanent") var is_permanent: Boolean? = null, var value_is_hidden: Boolean? = null, var user_can_view: Boolean? = null, @@ -5176,8 +5069,6 @@ data class WhitelabelConfiguration ( var allow_looker_mentions: Boolean? = null, var allow_looker_links: Boolean? = null, var custom_welcome_email_advanced: Boolean? = null, - @get:JsonProperty("setup_mentions") - @param:JsonProperty("setup_mentions") var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, @@ -5222,11 +5113,7 @@ data class WriteAlert ( var dashboard_element_id: Long? = null, var destinations: Array? = null, var field: AlertField? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, - @get:JsonProperty("is_public") - @param:JsonProperty("is_public") var is_public: Boolean? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, @@ -5914,8 +5801,6 @@ data class WriteLDAPConfig ( var groups_user_attribute: String? = null, var groups_with_role_ids: Array? = null, var merge_new_users_by_email: Boolean? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var test_ldap_password: String? = null, var test_ldap_user: String? = null, @@ -5991,8 +5876,6 @@ data class WriteLookWithQuery ( var user_id: Long? = null, var deleted: Boolean? = null, var description: String? = null, - @get:JsonProperty("is_run_on_load") - @param:JsonProperty("is_run_on_load") var is_run_on_load: Boolean? = null, var public: Boolean? = null, var query_id: Long? = null, @@ -6093,14 +5976,10 @@ data class WriteOIDCConfig ( var groups_attribute: String? = null, var groups_with_role_ids: Array? = null, var identifier: String? = null, - @get:JsonProperty("issuer") - @param:JsonProperty("issuer") var issuer: String? = null, var new_user_migration_types: String? = null, var scopes: Array? = null, var secret: String? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var token_endpoint: String? = null, var user_attribute_map_email: String? = null, @@ -6319,8 +6198,6 @@ data class WriteSamlConfig ( var alternate_email_login_allowed: Boolean? = null, var default_new_user_role_ids: Array? = null, var default_new_user_group_ids: Array? = null, - @get:JsonProperty("set_roles_from_groups") - @param:JsonProperty("set_roles_from_groups") var set_roles_from_groups: Boolean? = null, var groups_attribute: String? = null, var groups_with_role_ids: Array? = null, @@ -6471,8 +6348,6 @@ data class WriteTheme ( var begin_at: Date? = null, var end_at: Date? = null, var name: String? = null, - @get:JsonProperty("settings") - @param:JsonProperty("settings") var settings: ThemeSettings? = null ) : Serializable @@ -6494,8 +6369,6 @@ data class WriteUser ( var credentials_email: WriteCredentialsEmail? = null, var first_name: String? = null, var home_folder_id: String? = null, - @get:JsonProperty("is_disabled") - @param:JsonProperty("is_disabled") var is_disabled: Boolean? = null, var last_name: String? = null, var locale: String? = null, @@ -6565,8 +6438,6 @@ data class WriteWhitelabelConfiguration ( var allow_looker_mentions: Boolean? = null, var allow_looker_links: Boolean? = null, var custom_welcome_email_advanced: Boolean? = null, - @get:JsonProperty("setup_mentions") - @param:JsonProperty("setup_mentions") var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, diff --git a/kotlin/src/test/TestSmoke.kt b/kotlin/src/test/TestSmoke.kt index 9d64d36d1..6d220b65b 100644 --- a/kotlin/src/test/TestSmoke.kt +++ b/kotlin/src/test/TestSmoke.kt @@ -1,10 +1,12 @@ import com.looker.rtl.DelimArray +import com.looker.rtl.SDKResponse import com.looker.sdk.* import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertNotEquals import kotlin.test.assertNotNull import kotlin.test.assertTrue +import java.io.Serializable class TestSmoke { private val sdk by lazy { TestConfig().sdk } @@ -186,4 +188,39 @@ class TestSmoke { assertEquals(other.id, actual.id) sdk.ok(sdk.set_default_color_collection(current.id!!)) } + + /** + * Smoke: ignore unknown json fields + * + * Call '/users' but deserialize it to [DummyUser] and test that unknown fields are ignored + * during deserialization. + */ + + private fun get_dummy_users(): SDKResponse { + return sdk.get>("/users") + } + + @Test + fun testIgnoreUnknownFields() { + prepUsers() + var received = false + try { + val users = sdk.ok>(get_dummy_users()) + assertNotNull(users[0].id) + received = true + } catch (e: java.lang.Error) { + assertTrue(false, "$e.message") + } + assertEquals(true, received) + } } + +/** + * Dummy user data class based on [User] but with a subset of its properties. + */ +data class DummyUser ( + var id: Long? = null, + var credentials_api3: Array? = null, + var display_name: String? = null, + var email: String? = null +) : Serializable diff --git a/packages/sdk-codegen/src/kotlin.gen.ts b/packages/sdk-codegen/src/kotlin.gen.ts index 5554f8a21..3ce7e64f7 100644 --- a/packages/sdk-codegen/src/kotlin.gen.ts +++ b/packages/sdk-codegen/src/kotlin.gen.ts @@ -117,7 +117,6 @@ class ${this.sdkClassName()}Stream(authSession: AuthSession) : APIMethods(authSe package com.looker.sdk${this.apiNamespace()} -import com.fasterxml.jackson.annotation.JsonProperty import com.looker.rtl.* import java.io.Serializable import java.util.* @@ -156,15 +155,7 @@ import java.util.* declareProperty(indent: string, property: IProperty) { const optional = !property.required ? '? = null' : '' const type = this.typeMap(property.type) - // Bypass jackson serialization bug https://stackoverflow.com/questions/32270422/jackson-renames-primitive-boolean-field-by-removing-is - const attr = - property.hasSpecialNeeds || - property.jsonName.startsWith('is') || - property.jsonName.startsWith('get') || - property.jsonName.startsWith('set') - ? `${indent}@get:JsonProperty("${property.jsonName}")\n${indent}@param:JsonProperty("${property.jsonName}")\n` - : '' - const result = `${attr}${indent}var ${property.name}: ${type.name}${optional}` + const result = `${indent}var ${property.name}: ${type.name}${optional}` return result }