commonMain.com.mikepenz.aboutlibraries.Libs.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aboutlibraries-core Show documentation
Show all versions of aboutlibraries-core Show documentation
AboutLibraries automatically detects all dependencies of a project and collects their information including the license. Optionally visualising it via the provided ui components.
The newest version!
package com.mikepenz.aboutlibraries
import com.mikepenz.aboutlibraries.entity.Library
import com.mikepenz.aboutlibraries.entity.License
import com.mikepenz.aboutlibraries.util.parseData
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.ImmutableSet
import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toImmutableSet
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* The [Libs] class is the main access point to the generated data of the plugin.
* Provides accessors for the [Library] and [License] lists, containing all the dependency information for the module.
*/
@Serializable
data class Libs constructor(
@SerialName("libraries") val libraries: ImmutableList,
@SerialName("licenses") val licenses: ImmutableSet,
) {
/**
* Builder used to automatically parse and interpret the generated library data from the plugin.
*/
class Builder {
private var _stringData: String? = null
/**
* Provide the generated library data as [String]
*/
fun withJson(stringData: String): Builder {
_stringData = stringData
return this
}
/**
* Build the [Libs] instance with the applied configuration.
*/
fun build(): Libs {
val data = _stringData
val (libraries, licenses) = if (data != null) {
parseData(data)
} else {
throw IllegalStateException(
"""
Please provide the required library data via the available APIs.
Depending on the platform this can be done for example via `LibsBuilder().withJson()`.
For Android there exists an `LibsBuilder.withContext()`, automatically loading the `aboutlibraries.json` file from the `raw` resources folder.
When using compose or other parent modules, please check their corresponding APIs.
""".trimIndent()
)
}
return Libs(
libraries.sortedBy { it.name.lowercase() }.toImmutableList(),
licenses.toImmutableSet()
)
}
}
}