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

org.jetbrains.kotlinx.dataframe.io.OpenApi.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.dataframe.io

import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod
import org.jetbrains.kotlinx.jupyter.api.Code
import java.io.File
import java.io.InputStream

/**
 * Allows for OpenApi type schemas to be converted to [DataSchema] interfaces.
 */
public class OpenApi : SupportedCodeGenerationFormat {

    public fun readCodeForGeneration(
        text: String,
        name: String,
        extensionProperties: Boolean = false,
        generateHelperCompanionObject: Boolean,
    ): Code =
        readOpenApiAsString(
            openApiAsString = text,
            name = name,
            extensionProperties = extensionProperties,
            generateHelperCompanionObject = generateHelperCompanionObject,
        )

    override fun readCodeForGeneration(
        stream: InputStream,
        name: String,
        generateHelperCompanionObject: Boolean,
    ): Code =
        readOpenApiAsString(
            openApiAsString = stream.bufferedReader().readText(),
            name = name,
            extensionProperties = false,
            generateHelperCompanionObject = generateHelperCompanionObject,
        )

    public fun readCodeForGeneration(
        stream: InputStream,
        name: String,
        extensionProperties: Boolean,
        generateHelperCompanionObject: Boolean,
    ): Code =
        readOpenApiAsString(
            openApiAsString = stream.bufferedReader().readText(),
            name = name,
            extensionProperties = extensionProperties,
            generateHelperCompanionObject = generateHelperCompanionObject,
        )

    override fun readCodeForGeneration(file: File, name: String, generateHelperCompanionObject: Boolean): Code =
        readOpenApiAsString(
            openApiAsString = file.readText(),
            name = name,
            extensionProperties = false,
            generateHelperCompanionObject = generateHelperCompanionObject,
        )

    public fun readCodeForGeneration(
        file: File,
        name: String,
        extensionProperties: Boolean,
        generateHelperCompanionObject: Boolean,
    ): Code =
        readOpenApiAsString(
            openApiAsString = file.readText(),
            name = name,
            extensionProperties = extensionProperties,
            generateHelperCompanionObject = generateHelperCompanionObject,
        )

    override fun acceptsExtension(ext: String): Boolean = ext in listOf("yaml", "yml", "json")

    // Needed for distinguishing between JSON and OpenAPI JSON
    override fun acceptsSample(sample: SupportedFormatSample): Boolean =
        try {
            when (sample) {
                is SupportedFormatSample.DataString -> isOpenApiStr(sample.sampleData)
                is SupportedFormatSample.DataFile -> isOpenApi(sample.sampleFile)
                is SupportedFormatSample.PathString -> isOpenApi(sample.samplePath)
                is SupportedFormatSample.DataUrl -> isOpenApi(sample.sampleUrl)
            }
        } catch (_: Exception) {
            false
        }

    override val testOrder: Int = 9_000

    override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = DefaultReadOpenApiMethod
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy