All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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.model.blocks.Block
import notion.api.v1.model.blocks.Blocks
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.error.Error
import notion.api.v1.model.pages.Page
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.QueryDatabaseRequest
import notion.api.v1.request.pages.CreatePageRequest
import notion.api.v1.request.pages.UpdatePagePropertiesRequest
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())
                .registerTypeAdapter(Block::class.java, BlockParser())

        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 toPage(body: String): Page = gson.fromJson(body, Page::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 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: 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: UpdatePagePropertiesRequest): String = gson.toJson(request)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy