notion.api.v1.json.GsonSerializer.kt Maven / Gradle / Ivy
package notion.api.v1.json
import com.google.gson.FieldNamingPolicy
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import notion.api.Metadata.isLibraryMaintainerMode
import notion.api.v1.json.gson.*
import notion.api.v1.model.blocks.Block
import notion.api.v1.model.blocks.BlockElementUpdate
import notion.api.v1.model.blocks.BlockType
import notion.api.v1.model.blocks.Blocks
import notion.api.v1.model.common.Cover
import notion.api.v1.model.common.Icon
import notion.api.v1.model.databases.Database
import notion.api.v1.model.databases.Databases
import notion.api.v1.model.databases.QueryResults
import notion.api.v1.model.databases.query.filter.CompoundFilterElement
import notion.api.v1.model.error.Error
import notion.api.v1.model.error.OAuthError
import notion.api.v1.model.oauth.OAuthTokenResult
import notion.api.v1.model.pages.Page
import notion.api.v1.model.pages.PagePropertyItem
import notion.api.v1.model.search.SearchResult
import notion.api.v1.model.search.SearchResults
import notion.api.v1.model.users.User
import notion.api.v1.model.users.Users
import notion.api.v1.request.blocks.AppendBlockChildrenRequest
import notion.api.v1.request.databases.CreateDatabaseRequest
import notion.api.v1.request.databases.QueryDatabaseRequest
import notion.api.v1.request.databases.UpdateDatabaseRequest
import notion.api.v1.request.oauth.ExchangeAuthCodeRequest
import notion.api.v1.request.pages.CreatePageRequest
import notion.api.v1.request.pages.UpdatePageRequest
import notion.api.v1.request.search.SearchRequest
class GsonSerializer : NotionJsonSerializer {
private val gson: Gson
constructor(unknownPropertyDetection: Boolean = isLibraryMaintainerMode()) {
val builder =
GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(
SearchResult::class.java, SearchResultParser(unknownPropertyDetection))
.registerTypeAdapter(Block::class.java, BlockParser(unknownPropertyDetection))
.registerTypeAdapter(Icon::class.java, IconParser(unknownPropertyDetection))
.registerTypeAdapter(Cover::class.java, CoverParser(unknownPropertyDetection))
.registerTypeAdapter(
CompoundFilterElement::class.java,
CompoundFilterElementParser(unknownPropertyDetection))
gson =
if (unknownPropertyDetection) {
builder.registerTypeAdapterFactory(GsonUnknownFieldDetection()).create()
} else {
builder.create()
}
}
override fun toBlock(body: String): Block = gson.fromJson(body, Block::class.java)
override fun toBlocks(body: String): Blocks = gson.fromJson(body, Blocks::class.java)
override fun toDatabase(body: String): Database = gson.fromJson(body, Database::class.java)
override fun toDatabases(body: String): Databases = gson.fromJson(body, Databases::class.java)
override fun toError(body: String): Error = gson.fromJson(body, Error::class.java)
override fun toOAuthError(body: String): OAuthError = gson.fromJson(body, OAuthError::class.java)
override fun toPage(body: String): Page = gson.fromJson(body, Page::class.java)
override fun toPagePropertyItem(body: String): PagePropertyItem =
gson.fromJson(body, PagePropertyItem::class.java)
override fun toQueryResults(body: String): QueryResults =
gson.fromJson(body, QueryResults::class.java)
override fun toSearchResults(body: String): SearchResults =
gson.fromJson(body, SearchResults::class.java)
override fun toOAuthTokenResult(body: String): OAuthTokenResult =
gson.fromJson(body, OAuthTokenResult::class.java)
override fun toUser(body: String): User = gson.fromJson(body, User::class.java)
override fun toUsers(body: String): Users = gson.fromJson(body, Users::class.java)
override fun toJsonString(request: CreateDatabaseRequest): String = gson.toJson(request)
override fun toJsonString(request: UpdateDatabaseRequest): String = gson.toJson(request)
override fun toJsonString(blockProperties: Map): String =
gson.toJson(blockProperties)
override fun toJsonString(request: AppendBlockChildrenRequest): String = gson.toJson(request)
override fun toJsonString(request: CreatePageRequest): String = gson.toJson(request)
override fun toJsonString(request: SearchRequest): String = gson.toJson(request)
override fun toJsonString(request: QueryDatabaseRequest): String = gson.toJson(request)
override fun toJsonString(request: UpdatePageRequest): String = gson.toJson(request)
override fun toJsonString(request: ExchangeAuthCodeRequest): String = gson.toJson(request)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy